cfx_estimate 接口行为
参数缺省行为
当输入缺少一些域时,一些检查会被跳过。
- 没有指定
from
时,跳过所有和balance
相关的检查。 - 没有指定
gas_price
时,忽略对交易费检查,忽略对 Sponsor Gas Upper Bound 的检查。 - 没有指定
nonce
时,自动填入当前正确的 nonce. (指定nonce
时,按指定 nonce 执行,但交易不会因 nonce 失败) - 没有指定
value
时,默认为 0 - 没有指定
data
时,默认为空 - 没有指定
to
时,默认为创建合约。
冗余参数
Estimate 本身是用来估计 gas 和 storage collateral, 但接口同时允许用户输入 gas 和 storage collateral. 这是一种“带着答案问问题”的请求,estimate 执行如下逻辑。
指定 gas
- 使用指定的
gas
进行交易执行,这是除 gas 消耗超出 15 million 上限外,唯一可能出现OutOfGas
的情形。 - 如同时指定
from
和gas_price
,会在估算交易执行时扣交易费。其余情形只会在交易执行结束后复检交易费。
指定 storage limit
- 估算交易执行时全程忽略传入的
storage_limit
,在全部估算结束后,判断给定的 storage limit 是否足够。
其他
- 当 Storage 被 Sponsor 时,执行是不检查 storage_limit 的,这是 Conflux 自身的逻辑。
实现思路
在模拟执行时尽量删减逻辑检查,将逻辑检查推后至估出 gas 与 storage 消耗后。
- Gas 消耗不受是否被 sponsor 影响,因此直接给足够大的 gas limit (不收交易费) 执行
- Storage 消耗与是否被 sponsor 影响很大,因此跑两遍,分别是被 sponsor 和不被 sponsor.
No Comments