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章は続きますが、長くなってしまいそうですので、いったんここまでにします。