什么是gas
以太坊的运行环境,也被称为以太坊虚拟机(EVM)。每个参与到网络的节点都会运行EVM作为区块验证协议的一部分。每个网络中的全节点都会进行相同的计算并储存相同的值。合约执行会在所有节点中被多次重复,而且任何人都可以发布执行合约,这使得合约执行的消耗非常昂贵,所以为防止以太坊网络发生蓄意攻击或滥用的现象,以太坊协议规定交易或合约调用的每个运算步骤都需要收费。这笔费用以gas作为单位计数,也就是俗称的燃料。
什么是Gas Price
每个Gas的价格。用户可以自行设置的gasPrice的价格。由于网络拥堵等多种情况,此价格会动态变化,可根据交易字节数和当前区块中打包的平均值进行大概的预估。
什么是Gas Limit
一笔交易,最大使用多少个Gas
。每笔交易都包含Gas Limit
和gas Price
。
矿工可以有选择的打包这些交易并收取这些费用。GasPrice 会影响到该笔交易被打包所需等待的时间。
如果该交易的操作所使用的gas数量小于或等于所设置的
Gas Limit
,交易会被处理。如果gas总消耗超过
Gas Limit
,所有的操作都会被重置,但手续费依旧会被收取。区块链会显示这笔交易完成尝试,但因为没有提供足够的gas导致所有的合约命令都被复原。交易完成之后没有被使用的gas会以以太币的形式返还给发起者。gas消耗只是一个预估值,所以许多用户会超额支付gas来保证他们的交易会被接受。
最高成本
- Gas 燃料
- Gas Price 每个燃料价格
- Gas Limit 燃料的上限
Gas Price * Gas Limit = 最高交易成本
基本概念
- Gas Limit : gas数量上限,也叫燃料数量上限
- Gas Price :gas单价,也叫每单位燃料价格
- Gas Used By Txn :实际使用的gas数量,也叫实际使用的燃料数量
- Actual Tx Cost/Fee :实际成本,也叫燃料费
- Gas Price的单位是 Gwei
- 1Gwei = 10^-9 Ether
- 1Ether = 10^9 Gwei
- 即1Ether = 10亿 Gwei
为什么要有gas
广播、打包,都需要矿工付出算力,因此gas可看做矿工的劳动所得
避免无效或恶意性交易高密度地在网络里广播,致使网络拥堵
运行逻辑
- 一笔交易,广播到以太坊网络。每个矿工节点将它发送给其它节点,需要gas。接受该笔交易的矿工节点,把它打包到区块里,也需要gas
- 当gas数量充足、gas price合适的情况下,通常该笔交易能被足够多的节点接受、并打包进区块,从而更大概率被加到区块链总账簿里。交易成功
- 如果gas price太低,节点没有动力广播、打包该笔交易,容易导致交易失败
- 如果gas数量不足,交易可能因无法被广播到足够多的节点,从而交易失败
- 无论交易失败、成功,燃料费都要支付
- 如果实际使用的gas数量燃料费是用钱包账户余额支付的,确保钱包里eth数量不少于燃料费上限
区块gas limit
区块gas limit是单个区块允许的最多gas总量,以此可以用来决定单个区块中能打包多少笔交易。
例如,我们有5笔交易的gas limit分别是10、20、30、40和50.如果区块gas limit是100,那么前4笔交易就能被成功打包进入这个区块。矿工有权决定将哪些交易打包入区块。所以,另一个矿工可以选择打包最后两笔交易进入这个区块(50+40),然后再将第一笔交易打包(10)。如果你尝试将一个会使用超过当前区块gas limit的交易打包,这个交易会被网络拒绝,你的以太坊客户端会反馈错误”交易超过区块gas limit”。
目前使用的gas limit为21000。
区块的gas limit是由在网络上的矿工决定的。与可调整的区块gas limit协议不同的是一个默认的挖矿策略,即大多数客户端默认最小区块gas limit为4,712,388。
以太坊网络上的”DoS”攻击
最近有些评论表示以太坊网络正在慢慢减速,变得拥堵甚至无法使用。这些评论把这个减速的过程称为对以太坊网络的”DoS”攻击。当以太坊网络上持续地出现全满区块并且有大量交易在网络上待处理时就会出现所谓的DoS情况。同时,矿工有权利根据交易费选择打包哪些交易。如果当时队列中(交易池中)有上千笔交易正在等待打包,那么就有可能造成几个小时的非正常交易延迟。DDoS可能是恶意的也有可能是非恶意的。