どうも、Mejikaです!
前回、コントラクトのコードを作成しました。
今回は、それをコンパイルして
テストとデプロイの準備までをしてみましょう。
まずは、
プロジェクトフォルダ構成
をつくりましょう
こんな構成になります。
前回作成したコードは
Msg.sol
で保存します。
最初はメモ帳でもなんでもいいのでファイルを作ったら
atomなどでコードを書いて
拡張子を.solにしましょう。
そして
contracts というフォルダを作り
その中に入れましょう。
・コンパイルには compile.js
・テストには test.js
・デプロイには deploy.js
を使います。
package.jsonファイルを
msgフォルダの直下におくことで、
「msgフォルダがプロジェクトの最上位ディレクトリだよ!」
となります。
ひとまとめにしてくれるんですね。
では、さっそく
compile.jsのコードを書いてみましょう!
こちらです。
const path = require('path');
const fs = require('fs');
const solc = require('solc');
const inboxPath = path.resolve(__dirname, 'contracts', 'Msg.sol');
const source = fs.readFileSync(inboxPath, 'utf8');
console.log(solc.compile(source, 1));
constで、Node.jsのライブラリから関数を呼び出します。
便利なものがいっぱい詰まってるところから
必要なものを呼び出してくる
ということですね。
^^^^^^^
path → 読み込むファイルの場所(ディレクトリ)をかんたんに指示できます。
fs → file system module です。ファイルの読み込みや書き込みなどができます。
solc → Solidity compiler です。Solidity言語のコードをコンピューターが読めることばに変換します。
コンピューターが読めることば、についてはこちらを参考にどうぞ😌
source → ファイルからコマンドを読み込んで、現在のシェルで実行できます。
シェルとは、人間の指示をコンピューターに伝える仲介役みたいなものです。
コマンドプロンプトなどがそうですね。こちらを参考にどうぞ
(ピヨ太さんのサイト推しすぎww)
^^^^^^^
pathで読み込み先をMsg.solで指定します。
それを、InboxPath とします。
utf8は、コードをbytecodeに変換するときの
決まりごとの1つです。
暗号表みたいなイメージですね。
そして、
console.log
を使って
正しくコンパイルされているか
後で確認できるようにしておきます
まとめると
・読み込み先(Msg.sol)をpathで指定して、
・それをfsでファイルを読み込んで、
・sourceでutf-8の対応表を使いつつ、bytecodeに変換する
という指示を書いたコードが、
compile.js の中身ということですね🥷
では、solidity compiler を
インストールしましょう!
コマンドプロンプトを立ち上げて(わたしは Git CMDをよく使います)
Solidity のバージョンに合うように指定します
勇気をふり絞って、エンター!
インストールが始まりましたw
数分待ちましょう
……終わりました?
うわ、なんかめっちゃメッセージ出た!
と思うかもしれませんが……
エラーが出てないかぎりは、ここはいったんスルーしましょう!
次に、いよいよコンパイル!
またまた勇気をふり絞って、エンター
今度は一瞬で
な、なんじゃこりゃー!
と思わずに…
いったん深呼吸して落ち着きましょう😮💨
「だいじょうぶ、まだだいじょうぶ
まだたすかる
まだたすかる
まだたすかる
マダガスカル!」
……
すみません、取り乱しましたwww
ほんの気晴らしです😌
では、中身を見てみましょう
スクロールして上のほうに行きます。
作成したコードが、
数字(bytecode)に変換されました!!
つぎに、その下の部分を見てみましょう。
こちらが、Interfaceです。ABIですね。
^^^^^^^
ABI → Appreciation Interface の略です。発行したコントラクト(サービス)を利用するために、コンピュータと会話するときの専用の翻訳機ですね😌
^^^^^^^
コンパイルすると
・デプロイ時に、コンピュータに伝えるためのbytecode
・デプロイ後に、コントラクト(サービス)やりとりするときの翻訳機
この2つが生成される
それがSolidity Compiler の機能
ということですねw
中身が無事にかくにんできました!
つぎは、テストとデプロイです!
console.log はなくして、
bytecodeを出力するために
コードを書き換えましょう。
青字の部分ですね。
const path = require('path');
const fs = require('fs');
const solc = require('solc');
const inboxPath = path.resolve(__dirname, 'contracts', 'Msg.sol');
const source = fs.readFileSync(inboxPath, 'utf8');
module.exports = solc.compile(source, 1).contracts[':Msg'];
^^^^^^^
export は、英語で 送付する、とか輸出する、という意味です。
コンパイルした結果(source)を、お届けしますよー、 ということですね。
^^^^^^^
最後の ‘:Msg’ は、
さきほどみた以下と一致させましょう。
お疲れさまでした!
次回は、コンパイルからデプロイまでのテストを実行します!
ここまで読んでくださったあなた、本当にありがとうございます!
それではまた、お会いしましょう!
ウホウホ
🦍
コメント