![見出し画像](https://assets.st-note.com/production/uploads/images/67371474/rectangle_large_type_2_199a22381c0266d5c3b20b3e421a8d32.png?width=1200)
Hardhat +α(Hardhat network)③アカウントについて ~ブロックチェーンエンジニアになろう~
今回がHardhat networkのアカウントについて、いったん最後です。
今回はあえてエラーを起こしてみたいと思います。
Hardhat 公式
Hardhat networkには20のアカウントリストがあります。
では、21番目のアカウントを見に行こうとするとどうなるのでしょうか。
こんな感じで書きました。
const signers = await ethers.getSigners();
addr21 = signers[20];
あれ、signers[20]となっている?と思った方もいるかもしれません。
こちら、配列は0番目から始まりますので21個目の値は配列20番に格納されているためです。
配列 0番目 ⇨ 1番目の値
配列 20番目 ⇨ 21番目の値
さて、console.log() などを入れずにテストを行うとどうなるでしょう?
そう、テストは通ってしまいました。
ここ大事だと思います。ないはずの21番目をaddr21に格納したにもかかわらず、テストは通ってしまうんです。
では、console.log()を使って、この中身を見にいってみましょう。
describe("account test", async () => {
it("account test", async () => {
console.log("addr21のaddress : %s", addr21.address);
});
});
結果はこちらです。
とうとう、エラーが出ました!(なんか言い方が変ですが。)
エラーを読むと「address」を読もうとしたところ、値が定義されていない
となっていました。
そうですよね、だって、そのaddr21の中の「address」を見せてって言われても、「いやいや、addr21の中にaddressなんてないですよ」ってなりますよね。
そもそも、addr21には何が入っているのでしょう?
定義をしただけで、何も値が入っていないaddr1と比較してみましょう。
describe("account test", async () => {
it("account test", async () => {
console.log(addr21);
console.log(addr1);
});
});
結果はこちらです。
今回はエラーにならずに「undefined」と表示されました。
ポイントはいくつかあるのかなと思っています。
①何もないを入れた ⇨ 何もない状態のまま
21番目のアカウントはありませんでした。
何もないのに、addr21に入れました。
でもこの時点では、特にエラーは起きないんです。
ただ単に、何もないままですというだけです。
これは定義をしただけで、何もいじっていないaddr1と同じだったことから導かれます。
②何もないを入れた、だけではエラーにならない
この時点ではエラーにならないというのも大事なポイントですね。
何もないaddr21の「address」という項目を見ようとして初めて、「そんな項目ありません」とエラーになったのでした。
これで以上となります。
お読みいただき、ありがとうございました。
いいなと思ったら応援しよう!
![ユウキ](https://assets.st-note.com/production/uploads/images/52347520/profile_e7d36b385c74618d7fec56da47f68a35.jpeg?width=600&crop=1:1,smart)