メインコンテンツまでスキップ

lesson-3_コントラクトをデプロイしよう

💥 コントラクトを Subnet にデプロイしましょう

contractディレクトリ直下に.envという名前のファイルを作成し、以下を記入してください。

TEST_ACCOUNT_PRIVATE_KEY="YOUR_PRIVATE_KEY"

"YOUR_PRIVATE_KEY"の部分を管理者アカウントの秘密鍵と入れ替えてください。 ※管理者アカウント: section1-Lesson_3でgenesis fileに記載したアドレスのアカウントです。

YOUR_PRIVATE_KEYの取得

  1. お使いのブラウザから MetaMask を開き、管理者アカウントを選択します。

  1. それから、Account detailsを選択してください。

  1. Account detailsからExport Private Keyをクリックしてください。

  1. MetaMask のパスワードを求められるので、入力したらConfirmを押します。 あなたの秘密鍵(= Private Key )が表示されるので、クリックしてコピーします。

.env内のYOUR_PRIVATE_KEYの部分をここで取得した秘密鍵とを入れ替えます。

⚠️gitignoreファイルに.envが記述されていることを確認して下さい。 秘密鍵は外部に漏れないようにGitHubに上げません。

次にcontractディレクトリ直下にあるhardhat.config.ts中身を以下のコードに書き換えてください。 ※ solidityのバージョンの部分(solidity: "0.8.17",)は元々記載されているものを使用してください。

// 環境構築時にこのパッケージはインストールしてあります。
import * as dotenv from "dotenv";
import "@nomicfoundation/hardhat-toolbox";
import { HardhatUserConfig } from "hardhat/config";

// .envファイルから環境変数をロードします。
dotenv.config();

if (process.env.TEST_ACCOUNT_PRIVATE_KEY === undefined) {
console.log("private key is missing");
}

const config: HardhatUserConfig = {
solidity: "0.8.17",
networks: {
local: {
url: "RPC URL",
gasPrice: 225000000000,
chainId: 321123,
accounts:
process.env.TEST_ACCOUNT_PRIVATE_KEY !== undefined
? [process.env.TEST_ACCOUNT_PRIVATE_KEY]
: [],
},
},
};

export default config;

'RPC URL'の部分に、section1のLesson_3で保存したRPC URLを貼り付けます。

RPC の確認はavalanche network statusを実行するとCustom VM informationの欄に rpc の情報が表示されるので、いずれか 1 つの URL をコピーして使用してください。 (※ ネットワークが起動してない場合はavalanche network startを実行してください。)

例えば、このように書き換えます。

      url: 'http://127.0.0.1:9654/ext/bc/2vVjEw8dH2SVtkuC75CgofJNj5DKqJBfoc1ez3cYnvyu5kywWH/rpc',

また、chainIdなども事前に設定したものと同じか確認してください。

続いて、scriptsディレクトリ内にあるdeploy.tsを以下のコードに書き換えてください。

import { Overrides } from "ethers";
import { ethers } from "hardhat";

async function deploy() {
const [deployer] = await ethers.getSigners();

const fund = ethers.utils.parseEther("200");

const Bank = await ethers.getContractFactory("Bank");
const bank = await Bank.deploy({
value: fund,
} as Overrides);
await bank.deployed();

console.log("bank address:", bank.address);
console.log("deployer address:", deployer.address);
}

deploy()
.then(() => process.exit(0))
.catch((err) => {
console.error(err);
process.exit(1);
});

このスクリプトを実行する際に先ほどhardhat.config.tsで設定したネットワークを指定すると、ethers.getSigners()の返す初めのアカウントの値はあなたのアカウントのアドレスになります。

それではcontractディレクトリ直下で下記のコマンドを実行してデプロイします!

$ npx hardhat run scripts/deploy.ts --network local

このような出力結果が出たら成功です!

% npx hardhat run scripts/deploy.ts --network local
bank address: 0x1Ae90672a06fD28311ac3Efce7Cd2660E78fa6f1
deployer address: 0x9726A1976148789be35a4EEb6AEfBBF4927b04AC

このようなエラーが出た場合は、.env ファイルが正しい場所に作成されておらず、アカウントが参照できないなどの原因が考えられます。

% npx hardhat run scripts/deploy.ts --network local
private key is missing
private key is missing
TypeError: Cannot read properties of null (reading 'sendTransaction')
...

最後に.gitignore.envが含まれていることを確認してください!

🌔 参考リンク

こちらに本プロジェクトの完成形のレポジトリがあります。 期待通り動かない場合は参考にしてみてください。

🙋‍♂️ 質問する

ここまでの作業で何かわからないことがある場合は、Discordの#avalancheで質問をしてください。

ヘルプをするときのフローが円滑になるので、エラーレポートには下記の3点を記載してください ✨


1. 質問が関連しているセクション番号とレッスン番号
2. 何をしようとしていたか
3. エラー文をコピー&ペースト
4. エラー画面のスクリーンショット


スマートコントラクトのデプロイができました 🎉

次のsectionではフロントエンドを構築します!