美文网首页区块链
7分钟理解以太坊手续费

7分钟理解以太坊手续费

作者: 就像以往 | 来源:发表于2018-03-13 13:22 被阅读261次

    全文阅读约7分钟,本篇适合希望对以太坊机制进一步探究的朋友。

    如果想知道怎么省点手续费,直接跳到最后一节。

    以太坊设计的机制要求所有以太坊的使用必须消耗燃料(手续费),这是出于安全和矿工激励的考虑,其设计的合理性和实用性,我打算后续专门来讨论。先科普下以太坊的手续费是怎么计算的呢?在使用钱包时,我们调节手续费的各个参数会有什么影响?

    Gas/Gas Price/Gas Limit之间是什么关系?

    我们可以把在以太坊上运行程序比作汽车上路,汽车需要消耗汽油(Gas),汽油有油价(GasPrice),每辆车上路(每次转账)消耗的汽油量是根据每辆车不同的。

    汽油费 = 实际汽油消耗量 * 油价
    
    • Gas(汽油):在以太坊上执行代码、存储数据都需要消耗一定量的以太币,实际消耗的多少份Gas是由该笔交易的代码计算量和数据存储量决定的。这里是不同计算需要的Gas量:evm-opcode-gas-costs_EIP-150
    • Gas Price(油价):就是每一份Gas多少钱,用以太币ETH度量,但1ETH太大了,用个较小的单位GWei来度量,1Gwei = 10e-9 ETH,ETH的最小单位是Wei(10e-18 ETH),更多单位换算参考:Ether Wei Converter
    • Gas Limit(油箱容量):限定每次交易允许消耗最多多少份的Gas数量。若该笔交易实际需要的Gas数量超过了Gas Limit, 则该笔交易失败,转账金额被退回,但Gas就被消耗光了。

    以太坊是如何确定每笔实际手续费的?

    手续费 = Gas * Gas Price 
    

    用户发起每笔转账可以指定Gas Limit和Gas Price, 但实际消耗多少Gas,用户是无法改变的(程序的计算量和存储量已经决定了),也就是说你调整的参数只有Gas Price会影响最终手续费。而如果你调整Gas Limit到太小,可以会导致交易没成功却白花费了Gas。(就像车上路油箱的油不足,耗了油却没到目的地)


    image.png

    如图是一笔交易的信息,交易指定Gas Limit 139732,实际消耗Gas 93155

    实际交易的一些Gas值:

    • 转ETH, Gas:21000
    • 转Token(执行代币合约), Gas: > 21000, 一般2w~4w
    • 执行其他合约,就看合约的计算和存储量了

    费用太低时,交易pending太久会不会超时?

    如果GasPrice过低(如<2Gwei)可能导致pending时间特别长,目前以太坊上pending是不会超时取消的。

    主流以太坊钱包交易手续费怎么样设计?

    主流钱包 手续费设置
    Mist 只能调节GasLimit * GasPrice最大手续费, 无法看到具体每项值
    imToken 默认调节GasLimit * GasPrice最大手续费,高级选项分别调节参数

    以imToken为例:
    转ETH,可调节范围:0.0000252 ~ 0.00252 ETH(即GasPrice: 1.2 Gwei~120 Gwei)
    转Token,可调节范围:0.00006 ~ 0.006 ETH
    其调节手续费功能设计存在的问题:
    1、用户无感知预计的转账时间。
    2、使用ETH作为总单位,用户对费用无感知。
    3、若选择高级功能不默认填写Gas Limit,多高级的用户才能知道Gas Limit多少合适啊

    钱包该如何为用户更好的节约手续费?

    可以考虑根据当前以太网络矿工打包情况来动态调节GasPrice(钱包可以把可行的最低价推荐给用户)。写本篇时看到这个博文,the-safe-low-gas-price 安全低价手续费
    其提出计算一个安全的低价手续费准则,基本满足我们的要求。
    1、需要至少5%哈希算力可以支持的GasPrice。(以防需要等n个小时)
    2、A price that was mined within a reasonable time (< 50 blocks) the last time it was posted to the network as a pending transaction. (防止矿工之前可以接受低价GasPrice, 最近却不再接受打包低价GasPrice)(注:50个块*15s/块=12.5分钟)

    原谅我第二点直接贴英文,我一直没理解上来,有理解的同学可以联系我哈。以太坊爱好者有个翻译,如何安全的调低 gas 价格,但两个要点中文翻译的也无法理解。

    当然直接使用这个参考的安全低价的手续费是可以的,通过 API获取,每过100个块更新一次。

    我是用户,怎么节约手续费?

    前提,你的钱包可以设置Gas Price,那么目前设置
    转ETH, Gas Price:2 Gwei
    转Token, Gas Price:3 Gwei
    大概率是几分钟后确认。

    若钱包还需要你设置Gas Limit就要小心了,不要设置太小(比如100000),设置多了也不会多用你的。

    相关文章

      网友评论

      • 龙猫同学:感谢笔者,终于理解了gas的来龙去脉

      本文标题:7分钟理解以太坊手续费

      本文链接:https://www.haomeiwen.com/subject/xzsefftx.html