部署智能合约传递参数时报错,请求排查原因
部署Solidity合约时
no matching function错误排查 问题背景
我尝试部署一个带有如下构造函数的智能合约:
constructor( string memory name, string memory symbol, uint256 initialSupply, address _marketingWallet )
部署脚本deploy.js代码:
const token = await Token.deploy("MYTOKEN", "TOK", 1000000000, "0x047B2f4Da90dA60916CbB007158f3900BcF3084f"); // 已修改营销钱包地址
执行部署命令:
npx hardhat run --network testnet scripts/deploy.js
出现错误:
npx hardhat run --network testnet scripts/deploy.js Deploying contracts with the account: TypeError: no matching function (argument="key", value="address", code=INVALID_ARGUMENT, version=6.5.1) at makeError (C:\Users\son\Documents\Crypto Tuto\Hardhat_testbsc\node_modules\ethers\src.ts\utils\errors.ts:670:21) at assert (C:\Users\son\Documents\Crypto Tuto\Hardhat_testbsc\node_modules\ethers\src.ts\utils\errors.ts:694:25) at assertArgument (C:\Users\son\Documents\Crypto Tuto\Hardhat_testbsc\node_modules\ethers\src.ts\utils\errors.ts:706:5) at Interface.getFunctionName (C:\Users\son\Documents\Crypto Tuto\Hardhat_testbsc\node_modules\ethers\src.ts\abi\interface.ts:542:23) at buildWrappedMethod (C:\Users\son\Documents\Crypto Tuto\Hardhat_testbsc\node_modules\ethers\src.ts\contract\contract.ts:334:34) at BaseContract.getFunction (C:\Users\son\Documents\Crypto Tuto\Hardhat_testbsc\node_modules\ethers\src.ts\contract\contract.ts:841:22) at Object.get (C:\Users\son\Documents\Crypto Tuto\Hardhat_testbsc\node_modules\ethers\src.ts\contract\contract.ts:747:39) at main (C:\Users\son\Documents\Crypto Tuto\Hardhat_testbsc\scripts\deploy.js:21:39) at processTicksAndRejections (node:internal/process/task_queues:95:5) { code: 'INVALID_ARGUMENT', argument: 'key', value: 'address' }
可能的错误原因
- ABI不匹配:合约修改后未重新编译,导致部署脚本引用的是旧ABI。执行
npx hardhat clean && npx hardhat compile重新生成最新ABI。 - 参数类型或格式问题:构造函数中
uint256类型的initialSupply,若传入的数值格式不符合要求(比如误传字符串)会触发错误。可尝试用ethers.parseUnits("1000000000", 18)标准化数值格式(根据合约小数位数调整)。 - 版本兼容性问题:ethers 6.5.1与当前Hardhat版本不兼容,导致合约方法调用逻辑异常。检查
package.json中的版本配置,升级或降级到匹配版本(比如Hardhat 2.19+适配ethers 6.x系列)。 - 部署脚本代码错误:错误指向脚本第21行,需检查是否误写了类似
Token.address的代码(错误访问合约属性而非调用deploy方法),确保是正确调用Token.deploy()。 - 网络配置错误:
hardhat.config.js中testnet网络的url、chainId、accounts配置有误,导致ethers无法正确获取签名账户,间接引发函数匹配错误。验证网络配置的准确性。
内容的提问来源于stack exchange,提问作者dtjmsy
相关产品推荐
相关产品推荐

