見出し画像

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() などを入れずにテストを行うとどうなるでしょう?

スクリーンショット 2021-12-09 8.41.42

そう、テストは通ってしまいました。

ここ大事だと思います。ないはずの21番目をaddr21に格納したにもかかわらず、テストは通ってしまうんです。

では、console.log()を使って、この中身を見にいってみましょう。

describe("account test", async () => {
   it("account test", async () => {
     console.log("addr21のaddress : %s", addr21.address);

   });
 });

結果はこちらです。

スクリーンショット 2021-12-09 8.44.52

とうとう、エラーが出ました!(なんか言い方が変ですが。)

エラーを読むと「address」を読もうとしたところ、値が定義されていない

となっていました。

そうですよね、だって、そのaddr21の中の「address」を見せてって言われても、「いやいや、addr21の中にaddressなんてないですよ」ってなりますよね。

そもそも、addr21には何が入っているのでしょう?
定義をしただけで、何も値が入っていないaddr1と比較してみましょう。

describe("account test", async () => {
   it("account test", async () => {
     console.log(addr21);
     
     console.log(addr1);
     
   });
 });

結果はこちらです。

スクリーンショット 2021-12-09 8.50.54

今回はエラーにならずに「undefined」と表示されました。

ポイントはいくつかあるのかなと思っています。

①何もないを入れた ⇨  何もない状態のまま

21番目のアカウントはありませんでした。

何もないのに、addr21に入れました。

でもこの時点では、特にエラーは起きないんです。

ただ単に、何もないままですというだけです。

これは定義をしただけで、何もいじっていないaddr1と同じだったことから導かれます。

②何もないを入れた、だけではエラーにならない

この時点ではエラーにならないというのも大事なポイントですね。

何もないaddr21の「address」という項目を見ようとして初めて、「そんな項目ありません」とエラーになったのでした。


これで以上となります。

お読みいただき、ありがとうございました。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊