Ethereum 使用if语句时如何计算气体使用量
假设我与branch有一个智能合约,其中每个分支都有不同数量的操作Ethereum 使用if语句时如何计算气体使用量,ethereum,solidity,Ethereum,Solidity,假设我与branch有一个智能合约,其中每个分支都有不同数量的操作 if (someCondition) { // do operations costing 10 gas } else { //do operations costing 100 gas } 当用户从他们的客户机(比如metamask)调用此函数时,他们如何知道他们的交易将花费多少资金?他们是否只需要猜测并包含足够的gas以用于最昂贵的路径?您可以在(第25页)中找到与交易可能影响的许多抽象操作的相对成本(gas)对应
if (someCondition) {
// do operations costing 10 gas
} else {
//do operations costing 100 gas
}
当用户从他们的客户机(比如metamask)调用此函数时,他们如何知道他们的交易将花费多少资金?他们是否只需要猜测并包含足够的gas以用于最昂贵的路径?您可以在(第25页)中找到与交易可能影响的许多抽象操作的相对成本(gas)对应的所有值
低级语言中的“IF”状态是一个“跳”操作(改变DE程序计数器)。因此,在天然气成本表(第25页)中,JUMPDEST操作的天然气价值为1
您可以在(第25页)中找到与交易可能影响的许多抽象操作的相对成本相对应的所有值
低级语言中的“IF”状态是一个“跳”操作(改变DE程序计数器)。因此,在天然气成本表(第25页)中,JUMPDEST操作的天然气价值为1
客户端应用程序几乎总是能够计算气体使用量。通过运行他们自己的EVM仿真器,或者通过查询模拟事务并返回结果的外部API 所有区块链数据都可以公开读取(即使是私有财产的价值——只是不具有可靠性,而是使用更低级的方法和查询存储槽),并且每个操作的天然气成本都是预先确定的 因此,客户知道,交易即将结束
MLOAD
要花3汽油,一个SSTORE
要花5000汽油,等等
它可以使用所有这些数据来计算最终成本
例外情况是,决策树基于块数据,如
block.timestamp
,这是事先未知的。然后,这取决于客户,但我的猜测是,大多数人建议最昂贵的组合,这样他们就可以降低因天然气不足而恢复交易的风险
例如:
if (block.timestamp % 2 == 0) {
// even second, do operations costing 10 gas
} else {
// odd second, do operations costing 100 gas
}
客户端应用程序几乎总是能够计算气体使用量。通过运行他们自己的EVM仿真器,或者通过查询模拟事务并返回结果的外部API 所有区块链数据都可以公开读取(即使是私有财产的价值——只是不具有可靠性,而是使用更低级的方法和查询存储槽),并且每个操作的天然气成本都是预先确定的 因此,客户知道,交易即将结束
MLOAD
要花3汽油,一个SSTORE
要花5000汽油,等等
它可以使用所有这些数据来计算最终成本
例外情况是,决策树基于块数据,如
block.timestamp
,这是事先未知的。然后,这取决于客户,但我的猜测是,大多数人建议最昂贵的组合,这样他们就可以降低因天然气不足而恢复交易的风险
例如:
if (block.timestamp % 2 == 0) {
// even second, do operations costing 10 gas
} else {
// odd second, do operations costing 100 gas
}