我想在发送之前代表我的用户估计一笔特定交易的gas费。
如果我知道Chainweb区块链上当前的天然气价格,并且我知道一笔交易将消耗多少单位的天然气,那么我可以将它们相乘,以提供发送特定交易所需成本的估计。
我怎么得到这两条信息?
首先,我如何在链网上获得当前的汽油价格?
第二,是否有一种粗略的方法来估计一笔交易将消耗的天然气单位数?例如,将Ether从一个地址转移到另一个地址需要21,000单位的gas。我如何确定将KDA从一个钱包转移到另一个钱包需要多少单位的gas ?或者说执行合约的N步需要多少单位的天然气?
对于现行价格,我只确定如何获得目前的最低汽油价格。在嘉手纳节点的默认配置中设置。目前:0.00000001。这总能让我做交易。
对于估计气体量,您可以使用Pact气体日志功能。将您的合同加载到本地的可执行协议中,并使用带有测试的.repl文件来模拟您将执行的特定合同调用的gas单位成本。在您的repl测试脚本中,您将需要使用
度量的契约调用包含在内。(env-gas 0)(env-gaslog)
重置气体测井并启动,
(env-gaslog)
显示自上次重置以来消耗的气体单位。
在你可以开始记录之前,你需要设置气体模型为表和一个足够高的气体限制。
假设你正在处理硬币合约,你需要知道交易将消耗多少单位的天然气,你可以使用下面的测试:
(env-gasmodel "table")
(env-gaslimit 150000)
(load "fungible-v2.pact")
(load "coin.pact")
(env-gas 0) (env-gaslog)
(create-table coin.coin-table)
(env-gaslog)
如果你想运行上面的代码,你需要将coin合约(coin.pact)和fungibble -v2标准(fungibble -v2.pact)的源代码一起复制到一个文件夹中。您可以运行上面的命令:
$ pact -t test.repl
完整参考:https://pact-language.readthedocs.io/en/stable/pact-functions.html#env-gas