使用ethers.getContract获取已部署合约报错求助
问题解决:ethers.getContract 报错 "No Contract deployed with name [地址]"
错误原因:你误用了
ethers.getContract的参数逻辑。该方法第一个参数是项目中编译后的合约名称(从artifacts文件读取),而非合约地址;第二个参数是签名者/提供者实例,不是合约创建者地址。你把合约地址当作名称传入,自然找不到匹配的合约记录。正确调用方式二选一:
- 直接通过ABI和地址初始化合约(通用场景):
// 替换为你的合约ABI内容 const contractAbi = [/* 合约ABI数组 */]; // signer可以是ethers.provider或钱包实例,根据你的交互需求选择 const deployedContract = new ethers.Contract( "0x33F4623337b8F9EDc9529a79F0d68B2BeC98d5E2", contractAbi, signer ); - 基于Hardhat/Truffle框架的合约名称调用(项目内已编译合约):
// 替换为你的合约编译名称,比如"MyToken" const deployedContract = await ethers.getContract( "YourContractName", "0x33F4623337b8F9EDc9529a79F0d68B2BeC98d5E2" );
- 直接通过ABI和地址初始化合约(通用场景):
额外验证点:确保你的ethers提供者已正确连接到Goerli测试网,否则即使地址和ABI正确也无法正常交互。
内容的提问来源于stack exchange,提问作者Rajan Lagah
相关产品推荐
相关产品推荐

