【区块链】以太坊gas的设计机制
gas机制以太坊中交易的发送,合约的调用及发布,都需要调用EVM虚拟机,在EVM中执行指令时需要消耗gas,执行不同指令所消耗的gas数量也不同,具体指令与gas消耗的对应关系可参考以太坊黄皮书。下面从设计的角度,谈谈自己对gasLimit,gasPrice字段设计的理解。gas费用的计算公式:gasUsed*gasPrice = ether(wei)gas相关字段以......
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开销,由用户自己确认
参考链接
更多推荐
所有评论(0)