lesson-3_コントラクトと接続しよう
🌵 スマートコントラクトの情報をフロントエンドに反映しましょう
これまで フロントエンドを実装し、ウォレットとの接続も出来ました!
このレッスンではあなたのスマートコントラクトとフロントエンドを連携します。
コントラクトは既にデプロイしたので、実際に使えるようにスマートコントラクトの情報をフロントエンドに渡します。
📽️ コントラクトのアドレスをコピーする
コントラクトをデプロイし、そのアドレスをフロントエンドにコピーします。
ここでもう一度コントラクトをデプロイしますが、
PreCompileであるTransactionAllowList
の型定義ファイルもフロントエンド側で必要なのでpackages/contract/contracts
ディレクトリ内にIAllowList.sol
ファイルを作成し、中に以下のコードを貼り付けてください。
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
interface IAllowList {
// Set [addr] to have the admin role over the precompile
function setAdmin(address addr) external;
// Set [addr] to be enabled on the precompile contract.
function setEnabled(address addr) external;
// Set [addr] to have no role the precompile contract.
function setNone(address addr) external;
// Read the status of [addr].
function readAllowList(address addr) external view returns (uint256 role);
}
IAllowList
はPreCompileが実装しているインタフェースです。
📓 型定義ファイル フロントエンドで使用している TypeScript は静的型付け言語なので、外部から取ってきたコントラクトのオブジェクトの情報として型を知りたい場合があります。 その時に役に立つのが型定義ファイルです。
コントラクトの型定義ファイルは、コントラクトがコンパイルされた時に生成され、
typechain-types
ディレクトリに自動的に格納されます。 これはnpx hardhat init
実行時に typescript を選択したため、初期設定が済んでいる ためです。
それではpackages/contract
ディレクトリ直下で下記のコマンドを実行してデプロイします!
% npx hardhat run scripts/deploy.ts --network local
Compiled 1 Solidity file successfully
bank address: 0xFD6866b81c681ba8127b5fbB874d971744774208
deployer address: 0x9726A1976148789be35a4EEb6AEfBBF4927b04AC
ここでCompiled 1 Solidity file successfully
と出ているのはIAllowList
のコンパイルです。
bank address: 0xFD6866b81c681ba8127b5fbB874d971744774208
をpackages/client
ディレクトリ内、hooks/useContract.ts
の中の以下の部分に貼り付けてください。
export const BankAddress = "0x8C6dFbFC0b3e83cBBB82E4b5A187Bc9C0EcE0630";
例:
export const BankAddress = "0xFD6866b81c681ba8127b5fbB874d971744774208";
📽️ ABIファイルを取得する
ABIファイルは,コントラクトがコンパイルされた時に生成され,artifacts
ディレクトリに自動的に格納されます。
contract
からパスを追っていくと、contract/artifacts/contracts/~.sol/~.json
というファイルがそれぞれのコントラクトに対して生成されているはずです。
これらをclient/artifacts
ディレクトリ内にコピーします。
contract
直下からターミナルでコピーを行う場合、このようなコマンドになります。
cp artifacts/contracts/Bank.sol/Bank.json ../client/artifacts/
cp artifacts/contracts/IAllowList.sol/IAllowList.json ../client/artifacts
📽️ 型定義ファイルを取得する
typechain-types
内に型定義ファイルが出力されているので、client/artifacts
ディレクトリ内にコピーします。
contract
直下からターミナルでコピーを行う場合、このようなコマンドになります。
cp -r typechain-types/* ../client/types/
以上でコントラクトの情報を反映することができました。