【问题标题】:Different gas amount for the same transaction同一笔交易的不同gas量
【发布时间】:2018-10-10 17:17:35
【问题描述】:

我想知道如何准确计算交易中使用的气体量。

在 Remix 中,我使用了第一个帐户并在我的智能合约中调用了一个方法,其中有 2 个参数,值为“p1”的字符串和值为 101 的 uint。

交易成本为 198996 gas,执行成本为 176892 gas

我使用了第二个帐户并使用相同的参数调用相同的方法 {string with value "p1" and uint with value 101} 但交易成本为 145032 gas,执行成本为 122928

我的问题是:消耗的气体总量如何不同?尽管我使用了相同的输入负载(相同的字符串长度和相同的 uint 值)?如果它们传递相同的参数和相同的方法但成本不同,我如何计算网络中每个节点的成本?

如果网络中的 2 个节点使用相同的参数调用相同的方法,假设两个节点支付相同数量的气体,我是这样写的吗?如果不是,我如何分析每个节点与智能合约交互需要多少 gas。

谢谢

【问题讨论】:

  • 我注意到第一次调用会花费更多,而下一次调用会花费更少,在第一次调用中是否有任何额外的费用我必须考虑它?如果是,哪个节点会有它??

标签: blockchain solidity smartcontracts


【解决方案1】:

如果你分享智能合约代码,帮助会更容易。

作为一个有根据的猜测,我假设每笔交易都在设置一个状态变量?这涉及到 SSTORE 操作码,而 SSTORE 的 gas 成本取决于存储的价值和之前存储的价值。在曾经是零的地方存储一个非零(例如,在过去有一个空字符串的地方存储一个非空字符串)需要 20,000 个 gas,而在已经有一个非零的地方存储一个非零只需要 5,000 个 gas。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 2022-08-13
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    相关资源
    最近更新 更多