社长昨天参加credits的ico,亲历了5次打包失败,突然发现原来out of gas是不退矿工费的,常在河边走,还是湿了鞋...
社长反思很久,作为一个已经比较了解区块链的老人来说都踩了这个坑(损失合计大概几百块的燃料费),那就发篇文给大家讲讲这个坑的原理,以免后边有粉丝一顿猛如虎的操作反而额外遭受不必要的损失。
以太坊网络转账ERC20代币,需要给矿工费或者说交易费,也就是俗称的燃料费。以下是gas相关的基本概念、逻辑,以及ico时gas设置需要注意的事项。
几个基本概念
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 limit、gas price的大小,都可由我们自己设置,常规设置范围:
gas limit:100,000 - 200,000
gas price: 50 - 200 Gwei
两个公式
实际成本(燃料费)
Actual Tx Cost/Fee = Gas Used By Txn * Gas Price
最高成本(燃料费上限)
Limited Tx Cost/Fee = Gas Limit * Gas Price
为什么要有gas
广播、打包,都需要矿工付出算力,因此gas可看做矿工的劳动所得
避免无效或恶意性交易高密度地在网络里广播,致使网络拥堵
运行逻辑
一笔交易,广播到以太坊网络。每个矿工节点将它发送给其它节点,需要gas。接受该笔交易的矿工节点,把它打包到区块里,也需要gas
当gas数量充足、gas price合适的情况下,通常该笔交易能被足够多的节点接受、并打包进区块,从而更大概率被加到区块链总账簿里。交易成功
如果gas price太低,节点没有动力广播、打包该笔交易,容易导致交易失败
如果gas数量不足,交易可能因无法被广播到足够多的节点,从而交易失败
无论交易失败、成功,燃料费都要支付
如果实际使用的gas数量
燃料费是用钱包账户余额支付的,确保钱包里eth数量不少于燃料费上限
ICO时如何设置gas
对于火爆的ico,要想提高抢中几率,需要注意以下几点:
速度:提前做好准备,在规定的区块高度或开始时间时,最快速度抢。越早交易的,越可能被充分广播、打包进区块。速度,是第一优先原则
gas price的设置:高gas price会被矿工优先处理。价格,是第二优先原则
gas limit的设置:即使前两者做到了,但gas limit设置太低,会因gas数量不够用,无法成功。gas数量,是第三优先原则
并非任何时候,gas price、gas limit越高越好,尤其在速度不够快,导致很可能无法达成交易时,设置的越高,成本越高。交易失败,燃料费却照样要付
重要性上:速度 > gas price > gas limit
举例
以decentraland ico为例,是从区块4170700开始的。
成功的例子:速度够快,gas limit 和 gas price 设置没有太小
失败的例子:速度够快,但因gas limit设置太低,燃料不够用,交易失败
失败的例子:速度太慢,众筹已满。这种情况下,gas price、gas limit设置太高,反而会增加自己的成本,浪费了子弹。
以上就是昨天社长亲自踩完坑之后的分享,如果浓缩成一句话给大家的话那就是:
任何ico如果有建议的gas和gas limit,请务必按照他们的建议值来否则其他的gas大概率会打包失败,而打包失败的燃料费不退,不退,不退!
领取专属 10元无门槛券
私享最新 技术干货