gas机制

以太坊中交易的发送,合约的调用及发布,都需要调用EVM虚拟机,在EVM中执行指令时需要消耗gas,执行不同指令所消耗的gas数量也不同,具体指令与gas消耗的对应关系可参考以太坊黄皮书。下面从设计的角度,谈谈自己对gasLimit,gasPrice字段设计的理解。

gas费用的计算

公式:gasUsed*gasPrice = ether(wei)

gas相关字段

以太坊中为每笔交易定义了一个gasLimit字段,该字段主要用于控制单笔交易的gas消耗上限,由交易发起者指定大小。若指令执行的gas消耗大于gasLimit则该次交易请求失败,gas费用不予退还。(起初交易失败是不收取gas费用,后在THE DAO攻击中,有hack利用此漏洞大批量发送无效交易,进行DDOS攻击,后在硬分叉中规定:失败的交易同样收取gas费用)

以太坊的每个节点同样存在一个gasLimit字段,用于控制节点处理的gas消耗上限。(gasLimit可以看作是计算量和资产,从用户的角度看gasLimit与最终支付的gas费正相关,更偏向于将gasLimit看作是自己的资产消耗上限;从验证交易的节点角度看gasLimit与自己的evm运行指令个数正相关,更偏向与将gasLimit看作是节点计算量的承受上限)

每笔交易中同样包含gasPrice字段,该字段用于指定gas的价格,与gasUsed相乘计算最终应支付的gas费用,由发起交易的用户指定。

Questions

Question1: 为什么evm要使用gas作为消耗对象,而不是直接使用eth?

由用户发起的交易(包含合约部署、调用,普通转账)所消耗的eth数量,应该由用户自主定义。对于资源消耗较大的交易,通过降低gasPrice即可以降低最终的gas费用。同时,gasLimit也可以有效的保护用户的资产,避免在某次交易中不知情的被扣除大量gas费用。

Question2: 为什么节点也存在gasLimit字段?

节点的gasLimit可以保护节点,节点可以自主的选择合适的交易进行处理,不会轻易收到DDOS攻击。

小结

gasLimit与gasPrice共同决定了gas费用的开销

gasLimit的作用

1.保护了用户资产和节点系统的安全

2.交易的gas开销,由用户自己确认

参考链接

如何深入理解以太坊gas机制 - 知乎

http://paper.gavwood.com/

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐