Skip to main content

cfx_estimate 接口行为

参数缺省行为

当输入缺少一些域时,一些检查会被跳过。

  1. 没有指定 from 时,跳过所有和 balance 相关的检查。
  2. 没有指定 gas_price 时,忽略对交易费检查,忽略对 Sponsor Gas Upper Bound 的检查。
  3. 没有指定 nonce 时,自动填入当前正确的 nonce. (指定 nonce 时,按指定 nonce 执行,但交易不会因 nonce 失败)
  4. 没有指定 value 时,默认为 0
  5. 没有指定 data 时,默认为空
  6. 没有指定 to 时,默认为创建合约。

冗余参数

Estimate 本身是用来估计 gas 和 storage collateral, 但接口同时允许用户输入 gas 和 storage collateral. 这是一种“带着答案问问题”的请求,estimate 执行如下逻辑。

指定 gas

  1. 使用指定的 gas 进行交易执行,这是除 gas 消耗超出 15 million 上限外,唯一可能出现 OutOfGas 的情形。
  2. 如同时指定 fromgas_price ,会在估算交易执行时扣交易费。其余情形只会在交易执行结束后复检交易费。

指定 storage limit

  1. 估算交易执行时全程忽略传入的 storage_limit,在全部估算结束后,判断给定的 storage limit 是否足够。

其他

  1. 当 Storage 被 Sponsor 时,执行是不检查 storage_limit 的,这是 Conflux 自身的逻辑。

实现思路

在模拟执行时尽量删减逻辑检查,将逻辑检查推后至估出 gas 与 storage 消耗后。

  1. Gas 消耗不受是否被 sponsor 影响,因此直接给足够大的 gas limit (不收交易费) 执行
  2. Storage 消耗与是否被 sponsor 影响很大,因此跑两遍,分别是被 sponsor 和不被 sponsor.