どうも、Mejikaです❗️
前回は、コントラクトをコンパイルしました。
いよいよデプロイ……
なんですけど
本番って
なにかと不安ですよね🥺
・ちゃんとコントラクト発行されるかなぁ
・発行したあとうまく動作するかなあ
こんな不安をなくすために
本番まえのテストをします
コントラクトのデプロイは
本番では
・イーサリアム上のノードにトランザクションを送ります。
・コントラクトをイーサリム上で発行します。
・web3 providerを通じてコントラクトを動かします。
^^^^^^
web3 providerは
イメージ、海外旅行の現地ガイドでしょうかw
日本語が通じないので、翻訳機を使って会話して
やりたいことを伝えたら、代わりに手配してくれます😌
^^^^^^
テストでは
・自分のPC(ローカル)上に仮想イーサリアムを作ります
・仮想イーサリウム上の仮想ノードにトランザクションを送ります
・コントラクトを仮想イーサリウム上で発行します。
・web3 provider を通じてコントラクトを動かします
まさに本番と同じ仮想環境で
テストするんですねw
今回は、Truffle の ganacheを使います。
ローカルに仮想環境を作ってくれます。
テストの実行には mocha を使います。
自動でテストしてくれるツールで、
・コントラクトの発行と操作
・うまくいったかどうか連絡
をしてくれます。
あとはweb3 もインストールしましょう。
web3 providerですね。
では、早速この3つをインストールしてみましょう。
^^^^^
ganache-cli は、ganache の1つで、
コマンドライン(キーボードだけで操作するもの)です。
^^^^^
エンター!
インストールできましたでしょうか?
なお、package.jsonファイルのtestの部分は、
mocha、としておきましょう。
それでは、テスト実行のためのコードを書きましょう
まずは、コントラクトの発行までテストします
const assert = require('assert');
const ganache = require('ganache-cli');
const Web3 = require('web3');
const web3 = new Web3(ganache.provider());
const { interface, bytecode } = require('../compile');
let accounts;
let msg;
beforeEach(async () => {
// Get a list of all accounts
accounts = await web3.eth.getAccounts();
msg = await new web3.eth.Contract(JSON.parse(interface))
.deploy({
data: bytecode,
arguments: [''],
})
.send({ from: accounts[0], gas: '1000000' });
});
describe('Msg', () => {
it('deploys a contract', () => {
console.log(msg);
});
});
const → ライブラリから関数を呼び出します。
assert → 書いたコードがうまくいってるかを確認します。
Web3 / web3 → web3 provider を指定します。
^^^^^
Web3がコンストラクタ
web3がインスタンス
のイメージです。
web3でnewして web3 provider を定義します。
今回はテストなので ganache です。
本番だと、イーサリウムになります。
^^^^^
中身をみていきましょう。
今回は、
アドレスを入手
→ 終わったら、コントラクト発行
という順番で処理したい(非同期処理をしたい)ため、
beforeEach() というコールバック関数を使います。
さらにpromise (async/await) をつけることで、
コードの繰り返しも省略できます。
^^^^^
非同期処理については、コチラの動画の説明が分かりやすかったです!
^^^^^
^^^^^
JOSN.parse → データのやり取り、データの解析方法の指示をします。
JSON → JavaScript Object Notificationの略です。
webサーバーとデータのやり取りに使います。
parse → 英語で、解析する、分析する の意味です。
^^^^^
コントラクト発行のためには、
bytecode
ABI
が必要です。
コントラクトを動かすには
ABI
コントラクトアドレス
が必要です。
describe と it という mocha の関数を使います。
テストがうまくいったら deploy a contract と表示してくれます。
ではいよいよ
テストを実行しましょう!
npm run test🚀 ゴーっ!
なんかいろいろ出てきましたww
無事にコントラクトが発行されましたね!
ではつぎに
発行したコントラクトが動作するかのテストです。
コードを追記します。
青字 の部分です。
const assert = require('assert');
const ganache = require('ganache-cli');
const Web3 = require('web3');
const web3 = new Web3(ganache.provider());
const { interface, bytecode } = require('../compile');
let accounts;
let msg;
beforeEach(async () => {
// Get a list of all accounts
accounts = await web3.eth.getAccounts();
msg = await new web3.eth.Contract(JSON.parse(interface))
.deploy({
data: bytecode,
arguments: [''],
})
.send({ from: accounts[0], gas: '1000000' });
});
describe('Msg', () => {
it('deploys a contract', () => {
assert.ok(msg.options.address);
});
it('has a default message', async () => {
const message = await msg.methods.message().call();
assert.equal(message, '');
});
it('can change the message', async () => {
await msg.methods.setMessage('グッモー忍!').send({ from: accounts[0] });
const message = await msg.methods.message().call();
assert.equal(message, 'グッモー忍!');
});
});
console.logの代わりに、assert の関数を使います。
つぎに、コントラクトの動作確認です。
メッセージが正しく刻み込まれるか
確認します。
では、テストしてみましょう。
うまくいきましたね!
お疲れさまでした!
次回は、いよいよ本番デプロイです!
(イーサリウムのテストネット Rinkeby 上にデプロイします!)
ここまで読んでくださったあなた
本当にありがとうございます!
それではまた
お会いしましょう1
ウホウホ
🦍
※この入門編では、solidity ^04.17 を使っています。(ちょい古いかも、、、、
最新のバージョンでは、少しコードの中身が変わってくる部分もあります。
そのあたり、また別でお伝えしていきますね😀
コメント