Published on

hardhatでdeploy済みのcontractにabiを使って接続しインタラクトする方法

Authors
  • avatar
    Name
    ssu
    Twitter

hardhatでdeploy済みのcontractにabiを使って接続しインタラクトしたいときのやり方を紹介します。 例えば、ある特定の人のwallet addressのUSDCの残高を確認したいとします。

その際には、下記のようにhardhatで記載してあげたら、確認できます。 erc20のabiはその辺に落ちているので、例えばこちらから拾います。

下記のコマンドを実行したらerc20.abi.jsonがダウンロードできます。

curl https://raw.githubusercontent.com/subquery/tutorials-frontier-evm-starter/astar/erc20.abi.json >> erc20.abi.json

そして、hardhatで例えば、scripts/run.jsを下記のように書きます。 下記のように書けば、すでにdeploy済みのcontractにEIPの規格に準拠したabiから、 contractに接続することができます。

const hre = require("hardhat"); const erc20 = require("../erc20.abi.json") const main = async() => { const account = await hre.ethers.getSigner() const contractAddressOfusdc = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' const usdcContract = new hre.ethers.Contract(token.contractAddress, erc20, account) const walletAddress = '0x11....' console.log(usdcContract.balanceOf(walletAddress)) // 残高が確認できます。 } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });

肝となる部分は、

new hre.ethers.Contract(token.contractAddress, erc20, account)

こちらで、new hre.ethers.Contract(コントラクトのアドレス、abiのjson, 著名するwalletアカウント) になります。

これで、既存のdeploy済みのcontractに接続ができるようになります。 また、main netに接続する際はhardhat.config.jsでnetworkの設定が必要なのでそこは忘れないようにしてください。

参考: Hardhat - How to interact with a deployed contract?