見出し画像

Hardhat入門⑤-2(コントラクトのテスト) ~ブロックチェーンエンジニアになろう~

こちら、前回の続きになります。

いつも通り、Hardhat公式に沿って進めていきます。

今回は前回のテストコードの解説の部分になります。

ちなみにコードはこちらでした。

const { expect } = require("chai");
 describe("Token contract", function () {
  it("Deployment should assign the total supply of tokens to the owner", async function () {
    const [owner] = await ethers.getSigners();
    const Token = await ethers.getContractFactory("Token");
    const hardhatToken = await Token.deploy();
    const ownerBalance = await hardhatToken.balanceOf(owner.address);
    
    expect(await hardhatToken.totalSupply()).to.equal(ownerBalance);
  });
});

ではやっていきましょう。

まずはここからです。

const [owner] = await ethers.getSigners();

ここはとても大事なところです。

まず「ethers.」とありますので、ethersの機能を使っています。

その後に「.getSigners()」とありますので、「Signers」というものをゲットしているということがわかります。

ではこのSignersとはなんでしょう。

こちらざっくりとイーサリアムのアカウント(群)です。例えばトークンを送るときの「誰から」に当たる部分です。

ただ、このSignerはこの「誰から」にあたる部分について多くの情報を持っています。

Hardhatのテストは「Hardhat Network」で行われていますが、ここにはたくさんのアカウントのリストがあります。

その中のリストの一番最初を持ってきているのがこの処理です。

ちなみに、「ethers」を使っているのに、下のようにrequireはしなくてよかったの?と思う方もいるかもしれません。

const { ethers } = require("hardhat");

実はethersはグローバル(全体で)使えるようになっています。そのため、書かなくても使うことができます。

もちろん、明示的に書くのも可能です。

次はこちらです。

const Token = await ethers.getContractFactory("Token");

ここは「Token」というコントラクトを持ってきて、左の「Token」に入れています。

第4章でコントラクトを作りましたが、あれです。

次はこちらです。

const hardhatToken = await Token.deploy();

上で取得したコントラクトをデプロイしています。

デプロイ前にテストするのが目的でしたもんね。

なんと。。こんなにあっさり。

そして、その結果のデプロイしたものを左の「hardhatToken」に入れています。

次はこちらです。 

const ownerBalance = await hardhatToken.balanceOf(owner.address);

まずは右の「owner.address」は、その名の通り、所有者のアドレスです。なんの所有者?ということですが、コントラクトの所有者です。

そして「balanceOf」は○○さんが持っているトークンの量です。

つまり、コントラクトの所有者が持っているトークンの量を左の「ownerBalance」に入れているのですね。

実は第四章でやったコントラクトをよく見てみると、所有者に1000000トークンを入れるという処理があったんです。

つまり、このownerBalanceには1000000が入っていそうです。

最後にこちらです。

expect(await hardhatToken.totalSupply()).to.equal(ownerBalance);

右の「ownerBalance」は先ほど取得しましたね。

左の「totalSupply()」は全供給量です。

つまり、全供給量と所有者が持っているトークンの量がイコールかどうかを確かめています。

自分のトークンを誰にも渡していないので、もちろんイコールになりますね。

ちなみにここで使われた「expect」は値が等しいかどうかを確認するものなので、「マッチャー」と呼ばれています。

これを提供しているのが「Chai」です。

ちなみに、第三章のこちらを覚えていますでしょうか?

npm install --save-dev  @nomiclabs/hardhat-waffle ethereum-waffle chai

そうなんです。実は「 @nomiclabs/hardhat-waffle」の中にchaiがあり、それをインストールしていたのですね。

まだまだ第5章は続きますが、長くなってしまいそうですので、いったんここまでにします。

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