聊聊gas那些事

1、gas是什么。

gas在词典中的解释是“气体,汽油,瓦斯”的意思,在以太坊中是驱动矿工参与的手续费的基础。
在以太坊中跟gas有关的概念有gas,usedgas,gasprice,gaslimit,具体解释如下:
gas:每笔交易设置的最大可用gas,相当于每笔交易的gaslimit
usedgas:每笔交易实际花费的gas,并不是设置了多少gas,就使用多少gas,实际花费gas的计算参照gas计算部分
gasprice:gas的单价,每笔交易的usedgas * gasprice即为本次交易的手续费。
gaslimit:这里的gaslimit指的是每个块的最大gas限制,其作用可以限制打包的交易数量
每笔交易需要设置gas,gasprice. 有些项目上默认gas为90000,默认gasprice为18 * 1e6

2、gas有什么用?

生成区块的手续费,用来奖励给生成区块的账户,以提升矿工参与的积极性。
同时作为一种防止恶意操作的手段。
1、防止大量的垃圾交易阻塞有效交易打包进区块(因为有手续费会提高垃圾交易的成本)
2、防止合约代码的无限执行(超过gaslimit即恢复到原始状态,同时所有gas都会被花费)
3、通过gaslimit限制区块打包的交易数等。

3、如何计算gas?

每笔交易花费的usedgas怎么计算:
以太坊中,交易分两种,一种是一般交易,主要用来转账用,一种是合约交易,用来执行合约。
一般交易花费的gas默认是params.TxGas =10 。
合约执行花费的usedgas由两部分组成:
第一部分是基础gas,默认值是params.TxGasContractCreation = 53000;
第二部分是合约交易中data数据中非零字符数unzeronum*params.TxDataNonZeroGas + data数据中零字符数zeronum*params.TxDataZeroGas
       其中TxDataNonZeroGas默认是68,TxDataZeroGas默认是4。
如果交易执行成功,则上述计算的usedgas*gasprice即为本次交易的手续费,剩余的gas*gasprice-usedgas*gasprice将返还给用户;
如果交易执行失败,则合约设置的gas*gasprice将全部作为手续费。

4、如何设置gas,gasprice

以下是以太坊的发送交易的RPC接口描述,其中params中的gas*gasprice就是本次交易的最大手续费以上是以太坊的发送交易的RPC接口描述,其中params中的gas*gasprice就是本次交易的最大手续费

猜你喜欢

转载自blog.csdn.net/adwen2009/article/details/83657645