每笔交易必须注明一定的气价(即指定startgas的价值),并支付单位气价的费用(即gasprice)。在交易执行开始时,将从发送方的账户中扣除startgas * gasprice的值的以太币;
交易过程中的所有操作,包括读写数据库、发送消息、每一步的计算,都会消耗一定的气体;
如果执行交易,消耗的燃气值小于指定的限值,则交易正常执行,剩余燃气值赋给变量gas _ rem交易完成后,发送方将收到返回的以太坊,价值为gas_rem * gasprice,对矿工的奖励为(start gas-rem) *以太坊,价值为gas price
如果交易执行过程中瓦斯耗尽,所有执行将原样恢复,但交易仍然有效,除了交易的唯一结果是向矿工支付价值为startgas * gasprice的以太币,其余保持不变;
当一个协定向另一个协定发送消息时,可以对由该消息引起的子执行设置gas限制。如果子执行耗尽了gas,子执行将被恢复,但是gas仍然被消耗。
必须满足上述几点,例如:
如果事务没有指定gas限制,那么恶意用户将发送具有数十亿个周期的事务。没有人能处理这样的交易,因为处理这样的交易可能需要很长时间,这样网络上的矿工无法提前被告知,就会导致拒绝服务的漏洞。
取代严格的气体计数、时间限制和其他机制的方案不起作用,因为它们太主观了。
startgas * gasprice的整数值应该在一开始就设置好,这样在交易执行中就不会因为gas不足而终止交易。请注意,仅仅检查帐户余额是不够的,因为帐户可以将余额发送到其他地方。
如果在气不足的情况下没有恢复操作(回滚),合同必须采取强有力的安全措施,防止合同发生变化。
如果子限制不存在,恶意账号会通过与其他账号达成协议,对其他账号进行拒绝服务攻击。如果在计算开始时插入了一个大循环,那么向受害者契约发送消息或任何补救受害者契约的尝试都将使整个事务死锁。
要求交易发送方支付燃气而不是合同,大大增加了开发商的可操作性。在以太坊的早期版本中,气体是通过合同支付的,这导致了一个相当严重的问题:每个合同都必须实现一个“守卫”代码,以确保每个传入的消息都有足够的以太坊供其消费。
天然气消耗量计算有以下特点:
对于任何交易,将收取21000汽油的基本费用。这些费用可以用来支付运行椭圆曲线算法。该算法旨在从签名中恢复发送者的地址,并存储事务所花费的硬盘和带宽空间。
事务可以包括无限量的“数据”。虚拟机中的一些操作码可以使契约允许事务访问这些数据。数据的固定消耗计算如下:每个零字节4ga,每个非零字节68gas。这个公式的产生是因为契约中的大部分交易数据都是由一些32字节的参数列组成的,其中大部分都有很多前导零字节。这种结构看似低效,但由于压缩算法的存在,实际上非常高效。我们希望这种结构可以取代其他更复杂的机制:这些机制严格按照预期的字节数封装参数,导致编译阶段的复杂度大大增加。这是复杂三明治模型的一个例外,但由于成本效益比,它也是一个合理的模型。
用于设置账户内存的操作码SSTORE的消耗为:1。当零值变为非零值时,20000gas被消耗;2.将零值改为零值,或将非零值改为非零值,消耗5000气;3.将非零值更改为零值,消耗5000gas,加上成功执行事务后返回的20000gas。最高退款金额为交易用气总量的50%。这种设置会鼓励人们清除记忆。我们注意到,由于缺乏这种激励机制,许多合同导致了存储空间的低效率使用,从而导致了存储的快速扩张。存储收费提供了许多好处,同时也不会失去一旦合同建立就可以永久持续的保证。退款机制是必要的,因为它可以防止拒绝服务攻击。攻击者发送包含少量gas的事务,循环清空大量存储直到gas用完,消耗了大量验证计算能力,但实际上并没有真正清空存储或者消耗大量gas。50%的上限是保证gas在获得某个交易后的旷工仍然可以决定执行该交易的计算时间上限。
契约提供的消息的数据是没有成本的。因为在消息调用过程中不需要实际复制任何数据,所以调用数据可以简单地看作是指向父契约内存的指针,在子进程执行时不会改变。
内存是一个可以无限扩展的数组。但内存每扩展32字节会消耗1gas的成本,不足32字节也算32字节。
某些操作码的计算时间极其依赖于参数,gas开销的计算是动态的。比如EXP的成本是指数级的;复制操作码(如call data copy、codecopy、extcodecopy)的成本为1 1(每份32字节)。这里不包括内存扩展的开销,因为它会触发第二次攻击。
如果值不为零,操作码调用将消耗额外的9000gas。这是因为任何值的传输都会导致存档节点的历史存储显著增加。请注意,实际消费是6700。在此基础上,我们强制附加一个自动赋予接收方的气体值,最小值为2300。这样的
做是为了让接受交易的钱包至少有足够的gas来记录交易。gas机制的另一个重要部分是gas价格本身体现出的经济学原理。比特币中,默认的方法是采取纯粹自愿的收费方式,矿工扮演守门人的角色并且动态设置收费的最小值。以太坊中允许交易发送者设置任意数目的gas。这种方式在比特币社区非常受欢迎,因为它是“市场经济”的体现:允许矿工和交易者之间依据供需关系来决定价格。然而,这种方式的问题是,交易处理并不遵循市场原则。尽管可以将交易处理看作是矿工向发送者提供的服务(这听起来很直观),但实际上矿工所处理的每个交易都必须由网络中的每个节点处理,所以交易处理的大部分成本都由第三方机构承担,而不是决定是否处理它的矿工。
当前,因为缺乏矿工在实际中的行为的明确信息,所以我们将采取一个非常简单公平的方法:投票系统,来设定gas限定值。矿工有权将当前区块的gas限定值设定在最后区块的gas限定值的0.0975% (1/1024)内。所以最终的gas限定值应该是矿工们设置的中间值。我们希望将来能够采用软分叉的方法来使用更加精确的算法。
okex以太坊今日行情
#欧易OKEx##数字货币##以太坊<超话>#
标签: 达成协议