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

使用web3dart调用ERC20 permit函数遇int与BigInt类型不匹配错误

问题排查与解决

错误原因很明确:你传入的整数参数是Dart的int类型,但web3dart要求Solidity合约的整数类型参数必须使用BigInt类型。

看你的代码,1000、0(如果deadline是普通int的话也包含在内)都是int类型,而ERC20的permit函数中,value、deadline是uint256,v是uint8,这些在web3dart里都需要用BigInt来传递。

修改后的代码如下:

var data = contract.function('permit').encodeCall([
      credentialsA.address,
      appOwnerCredentials.address,
      BigInt.from(1000),
      deadline is int ? BigInt.from(deadline) : deadline, // 确保deadline是BigInt类型
      BigInt.from(0),
      Uint8List(32),
      Uint8List(32),
    ]);

补充说明:Solidity的整数类型(如uint256、uint8)取值范围远大于Dart int的最大范围(2^63-1),所以web3dart强制要求用BigInt来匹配Solidity的整数类型,避免溢出或类型不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:42:05