上次在以太坊上一笔合约调用因为参数写错直接revert失败,结果gas费一分没少扣,白交了学费,这周翻Dusk的费用机制文档,发现这条逻辑在这边也是一样的,顺手把细节理了一遍。
Dusk这边费用单位叫LUX,费用计算逻辑是gas_used乘以gas_price,用户提交交易时设定一个gas上限和愿意支付的单价,如果实际消耗的gas超过了设定的上限,交易会直接revert失败——但已经消耗掉的那部分gas依然要付费,不会因为最终失败就退回,跟以太坊的机制在这点上几乎是一个逻辑。收上来的手续费会并入区块奖励,按前面聊过的那套分配比例,分给出块人、投票委员会,还有开发基金。
我一开始觉得"失败了还要扣钱"这个设计有点反直觉,后来想明白这其实是必要的防护——如果失败的交易不用付费,恶意用户可以疯狂发起注定失败的交易,反正不用付出代价,借此堵塞网络、消耗节点算力做无用功,这是一种事实上的DoS攻击,收取"已消耗计算量"对应的费用,本质是在为节点已经付出的真实计算资源买单,不管这笔交易最终成不成功,节点确实为它算过东西、花过资源,这部分成本理应有人承担。
这个机制对用户来说,意味着写交易、调合约参数的时候得多留一份心,尤其做批量操作或者复杂合约调用,参数没设对,不只是交易失败这么简单,是实打实要付出真金白银的学费,这跟很多人以为的"链上操作失败大不了重来"这种直觉有点出入,失败的代价从来不是零。
我这次没在Dusk上真栽跟头,纯粹是从以太坊那次教训里长了记性,先把机制搞明白,比事后交学费划算。
#dusk $DUSK @Dusk
Dusk这边费用单位叫LUX,费用计算逻辑是gas_used乘以gas_price,用户提交交易时设定一个gas上限和愿意支付的单价,如果实际消耗的gas超过了设定的上限,交易会直接revert失败——但已经消耗掉的那部分gas依然要付费,不会因为最终失败就退回,跟以太坊的机制在这点上几乎是一个逻辑。收上来的手续费会并入区块奖励,按前面聊过的那套分配比例,分给出块人、投票委员会,还有开发基金。
我一开始觉得"失败了还要扣钱"这个设计有点反直觉,后来想明白这其实是必要的防护——如果失败的交易不用付费,恶意用户可以疯狂发起注定失败的交易,反正不用付出代价,借此堵塞网络、消耗节点算力做无用功,这是一种事实上的DoS攻击,收取"已消耗计算量"对应的费用,本质是在为节点已经付出的真实计算资源买单,不管这笔交易最终成不成功,节点确实为它算过东西、花过资源,这部分成本理应有人承担。
这个机制对用户来说,意味着写交易、调合约参数的时候得多留一份心,尤其做批量操作或者复杂合约调用,参数没设对,不只是交易失败这么简单,是实打实要付出真金白银的学费,这跟很多人以为的"链上操作失败大不了重来"这种直觉有点出入,失败的代价从来不是零。
我这次没在Dusk上真栽跟头,纯粹是从以太坊那次教训里长了记性,先把机制搞明白,比事后交学费划算。
#dusk $DUSK @Dusk
