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

如何使用web3.js向Solidity函数传递IERC20类型参数?

问题解决指南

1. 先修正调用逻辑:view函数用call(),别用send()

你的Solidity函数check是internal view类型,这里有两个关键错误:

  • internal函数只能在合约内部或继承它的合约里调用,外部通过web3.js根本调不了,必须把修饰符改成public view或者external view。
  • view是只读函数,不需要发交易,用send()纯属浪费gas(而且根本没必要),正确姿势是用call(),它不会触发链上状态变更,只是查询数据。

2. 关于IERC20参数的传递

别想复杂了,Solidity里的IERC20本质就是个合约地址的抽象——你只需要把目标ERC20代币的合约地址字符串直接传进去就行,完全不需要创建什么“IERC20类型变量”。

给你修正后的完整示例代码:

// 先初始化合约实例,注意要填合约的部署地址
const contractInst = new web3.eth.Contract(contractABI, "你的合约部署地址");
// 替换成你要传入的ERC20代币合约地址
const erc20Addr = "0x123456...";
// 获取当前连接的钱包地址
const connectedAddr = await web3.eth.getAccounts().then(accs => accs[0]);

// 调用check函数,用call()
const checkResult = await contractInst.methods.check(erc20Addr).call({ from: connectedAddr });
console.log("调用结果:", checkResult);

3. 最后补个Solidity函数的修改

把原来的internal改成public或者external,不然外部调用会报错:

// 修改后的函数声明
function check(IERC20 _token) public view returns (/* 这里填你的返回值类型 */) {
    // 函数逻辑不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:12:09