【区块链】以太坊gas的设计机制

 

gas机制

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

【区块链】以太坊gas的设计机制_第1张图片

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费用,由发起交易的用户指定。

【区块链】以太坊gas的设计机制_第2张图片

Questions

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

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

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

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

小结

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

gasLimit的作用

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

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

参考链接

https://zhuanlan.zhihu.com/p/34960267

http://paper.gavwood.com/

你可能感兴趣的:(区块链)