费率模型
在命令行发送交易时,可以使用--fee
指定您可以接受的交易费上限。Gas是衡量交易需要消耗多少资源的单位。Gas上限用--gas
指定。Gas上限太小时,不够交易需要的Gas;交易费太低时,每一单位Gas支付的交易费太低,验证人节点也不会执行这笔交易。交易费 (最小单位)/Gas 应该大于等于 6*10^12 uiris。推荐将Gas上限设置为50000,交易费设置为0.3iris。实际消耗多少Gas就会花多少相应的交易费,剩余的交易费会被退还。
提示
个别交易需要消耗的gas较多(如创建验证人等),此时建议设置--gas=100000 --fees=0.6iris
,以保证交易顺利执行。
Fee
iris
网络中的验证人为了维护自己节点的安全性和网络的正常运行,付出了不小的成本。因此,在iris
网络中的各种交易都需要支付一定的交易费。各种交易中的--fee
选项就是用来指定交易中支付的交易费上限的参数。
Gas
验证人节点处理不同的交易时需要的资源也不同,例如转账交易需要进行计算、查询和修改较少,而创建验证人需要进行的计算、查询和修改较多。Gas是用来衡量每个交易需要的资源多少,下面给出部分操作需要的Gas数量:
操作 | Gas数量 |
---|---|
交易上链 | 10*交易数据的大小(以bytes为单位) |
进行一次数据库读取数据操作 | 10 + ln(data_length)/ln(1.02),data_length为读取数据长度(以bytes为单位) |
进行一次数据库写入数据操作 | 10 + 10 * ln(data_length)/ln(1.02),data_length为写入数据长度(以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价格低于此限制的交易不会被执行。
示例:
iris tx bank send <from_address> <to_address> 1iris --fees=0.3iris --gas=50000 --chain-id=irishub --from=<key-name>
在这个示例中执行的是转账操作,这里设定的交易费上限--fee
为0.3iris,Gas上限--gas
为50000,Gas价格就是 6000iris-nano/Gas。假设执行交易总共需要10000个Gas,那么会有 0.06iris 的交易费被支付给验证人节点;剩余的 0.24iris 会被退还给用户。