PyTezos中fill()、autofill()方法执行速度缓慢的原因是什么
PyTezos
fill()/autofill()方法耗时较长的原因 这两个方法确实会主动请求Tezos节点,并非纯本地计算,核心原因如下:
- 链上动态参数拉取
手续费计算需要的当前区块基准费率、链上gas上限、存储费率、交易发送地址的最新counter值等参数,都是随链出块动态更新的,没有办法在本地静态计算得到,必须通过节点RPC接口拉取最新值才能保证交易合法。 - 交易模拟执行逻辑
默认配置下,两个方法都会调用节点的run_operationRPC接口完整模拟交易上链执行的全过程,一来可以准确计算交易实际消耗的gas、存储占用,避免手续费给多或者给少导致交易失败,二来可以提前校验交易逻辑是否合法,避免无效交易上链白白损失手续费。这个模拟步骤必须依赖节点的全量链上状态,本地没有对应数据无法完成。
你提到的「仅通过请求大小预估手续费」的方案仅能计算交易的基础手续费部分,而Tezos交易手续费还包含和执行逻辑强相关的gas费、和链上存储占用相关的存储押金两部分,这两部分和交易包大小没有直接关联,无法在本地仅凭交易结构估算得到准确值。
- 性能优化方案
如果你可以提前确认交易的gas上限、存储上限、当前地址的counter值,可以在调用方法时手动传入对应参数并关闭模拟:autofill(gas_limit=你的预估值, storage_limit=你的预估值, counter=你的预估值, simulate=False),即可跳过节点请求步骤,实现本地快速填充,但需要自行承担参数错误导致的交易失败风险。
内容的提问来源于stack exchange,提问作者Ezriel_S
相关产品推荐
相关产品推荐

