# 简介

交易费上限使用--fee指定。Gas是衡量交易需要消耗多少资源的单位。Gas上限用--gas指定。Gas上限太小时,不够交易需要的Gas;交易费太低时,每一单位Gas支付的交易费太低,验证人节点也不会执行这笔交易。交易费(最小单位)/Gas应该大于等于 6*10^12 iris-atto。推荐将Gas上限设置为50000,交易费设置为0.3iris。实际消耗多少Gas就会花多少相应的交易费,剩余的交易费会被退还。

注意:个别交易需要消耗的gas较多(如创建验证人等),此时建议设置--gas=100000 --fee=0.6iris, 以保证交易顺利执行。

# Fee

iris网络中的验证人为了维护自己节点的安全性和网络的正常运行,付出了不小的成本。因此,在iris网络中的各种交易都需要支付一定的交易费。各种交易中的--fee选项就是用来指定交易中支付的交易费上限的参数。

# Gas

验证人节点处理不同的交易时需要的资源也不同,例如转账交易需要进行计算、查询和修改较少,而创建验证人需要进行的计算、查询和修改较多。Gas是用来衡量每个交易需要的资源多少,下面给出部分操作需要的Gas数量:

  • 交易上链需要的gas为:10*交易数据的大小(以bytes为单位)
  • 进行一次数据库读取数据操作需要的Gas数量为:10 + 读取数据长度(以bytes为单位)
  • 进行一次数据库写入数据操作需要的Gas数量为:10 + 10*写入数据长度(以bytes为单位)
  • 进行一次签名验证:100
  • ....
操作 Gas数量
交易上链 10*交易数据的大小(以bytes为单位)
进行一次数据库读取数据操作 10 + 读取数据长度(以bytes为单位)
进行一次数据库写入数据操作 10 + 10 * 10*写入数据长度(以bytes为单位)
进行一次签名验证 100

一笔交易中各种操作需要的Gas加起来就是这个交易总共需要的Gas。用户可以使用--gas参数给自己发起的交易设置这笔交易的Gas上限,如果一笔交易使用的Gas超过了用户设定的Gas上限则交易就无法成功执行,用户的交易费不会被扣除。如果一笔交易使用的Gas未超过用户设定的Gas上限,则交易可能被成功的执行(还需要检查交易是否符合要求)。当交易被成功执行的时候,用户支付的交易费为: 交易费 * 实际消耗的Gas/Gas上限。

注意:在用户设置的gas不足的情况下,如果交易在checkTX阶段检查失败,则不会收取fee。如果已经在deliverTX阶段失败,则fee仍然会被扣除。

Gas价格 = 交易费 / Gas上限,代表用户为每个单位的资源消耗支付的Gas价格。

为了使用户支付的交易费维持在一个合理的水平,我们给Gas价格设定了一个下限,6*10^(-6) iris/Gas,Gas价格低于此限制的交易不会被执行。

例子

iriscli bank send --amount=1iris --fee=0.3iris --gas=50000 --chain-id=<chain-id> --from=<key_name> --to=<account_address>

在这个例子中执行的是转账操作,这里设定的交易费上限--fee为0.3iris,Gas上限--gas为50000,Gas价格就是 6000iris-nano/Gas。假设执行交易总共需要10000个Gas,那么会有 0.06iris 的交易费被支付给验证人节点;剩余的 0.24iris 会被退还给用户。