You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用flow-js-testing测试时如何获取交易手续费txFee

Flow-js-testing 获取交易手续费(txFee)的实现方法

问题场景

测试付费铸币交易时,预设余额校验逻辑如下:

usersBalanceAfterMinting == usersBalanceBeforeMinting - costOfMinting - txFee

实际调试中打印交易返回的事件列表,无法查询到feesDeducted事件,交易即时返回结果中也不包含任何交易成本相关信息,无法获取txFee数值完成校验。

具体操作步骤

  • 放弃从交易返回事件、即时返回结果中取手续费的思路:Flow的交易手续费是交易执行完成后在结算层统一扣除的,相关扣费事件不会被纳入用户交易返回的事件列表,交易提交后的即时响应对象默认也不会携带手续费字段。
  • 调用框架内置方法拉取最终交易结果取数:发送交易拿到交易ID后,先等待测试环境区块全部执行完成,再调用getTransactionResult方法传入交易ID获取链上最终确认结果,结果对象中的totalFees字段就是该笔交易实际扣除的总手续费,数据类型为UFix64,直接对应校验公式中的txFee。
    参考实现代码:
    // 发送铸币交易拿到txId
    const txId = await sendTransaction({
      name: "mint_token",
      args: [/* 你的铸币交易入参 */],
      signers: [userAccount]
    })
    // 等待所有待打包区块执行完成,本地测试环境必须执行这步否则拿不到最终结果
    await executeAllBlocks()
    // 拉取最终交易结果
    const finalTxResult = await getTransactionResult(txId)
    const txFee = finalTxResult.totalFees
    console.log("本次交易实际手续费:", txFee)
    
  • 余额校验注意事项:
    • 拿到totalFees后要先统一数值精度,和铸币成本、用户余额的单位保持一致后再代入公式计算,避免类型或精度不匹配导致校验失败
    • 本地测试使用Flow Emulator时,确保模拟器版本不低于v0.45,旧版本模拟器的交易结果接口不会正确返回totalFees字段
    • 必须等区块执行完成后再拉取交易结果,交易刚提交时处于pending状态,返回结果不会填充手续费相关数据

内容的提问来源于stack exchange,提问作者pho_pho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:30:51