コントラクトをコンパイルしよう

 

どうも、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’ は、

さきほどみた以下と一致させましょう。

 

 

 

 

お疲れさまでした!

次回は、コンパイルからデプロイまでのテストを実行します!

 

 

ここまで読んでくださったあなた、本当にありがとうございます!

 

それではまた、お会いしましょう!

 

ウホウホ

🦍

コメント

タイトルとURLをコピーしました