Solidity
Hardhat - 如何與已部署的合約互動?
我可以使用 ethers 和 Hardhat 部署合約,其中包含以下內容:
const myContract = await hre.ethers.getContractFactory("SomeContract"); const deployedContract = await myContract.deploy();
如果我使用該
deployedContract
變數,我什至可以與該已部署契約中的方法進行互動。但是,如果合約已經部署並且我想與之互動怎麼辦?根據我的閱讀,我需要創建該契約的一個實例。我試圖這樣做:const provider = new ethers.providers.JsonRpcProvider(); const fs = require('fs'); const abi = JSON.parse(fs.readFileSync('./abi/SomeContract.json', 'utf8')); const contractInstance = new ethers.Contract('contract address goes here', abi, provider);
我相信在該
contractInstance
變數上創建了一個實例,但是如果我嘗試在控制台中或從腳本中呼叫該實例上的方法,則會出現WARNING: Calling an account which is not a contract
錯誤。也許我對契約實例應該如何工作有誤解?
我遇到了同樣的問題,偶然發現了OpenZeppelin 文件中可能對您有用的部分(它對我有用):
例如:
const MyContract = await ethers.getContractFactory("MyContract"); const contract = await MyContract.attach( "0x..." // The deployed contract address ); // Now you can call functions of the contract await contract.doTheThing();
hardhat-ethers ^2.0.0``getContractAt
為此目的具有特殊功能:const contractAddress = "0x...", const myContract = await hre.ethers.getContractAt("MyContract", contractAddress);