2019年2月20日Truffle(トリュフ)は、スマートコントラクトの開発に必要となる、コンパイラ、リンク、デプロイ、バイナリ管理の機能を持つ統合開発管理フレームワークです。DApps(分散型アプリケーション)開発には必ず通る道ですのでしっかりおさえておきましょう。迅速な開発を目的とするスマートコントラクトのテストスクリプトで記述できる拡張可能なデプロイとマイグレーションのフレームワークパブリックネットとプライベートネットにデプロイできるネットワーク管理ERC190規格を使用したEthPMとNPMによるパッケージ管理インテグレーションをサポートする設定変更可能なビルドパイプラインTruffle環境内でスクリプトを実行する外部スクリプトランナーこのTruffleフレームワークには、独自コインを作成してアカウント間でやり取りするコントラクトのサンプルがあります。今回はその中の一つ、「MetaCoin」の実装をやっていきます。まとめTruffleの環境構築macOS環境での環境構築をやっていきます。npmをインストールしていない方はインストールします。Installer]をクリックし、pkgファイルをダウンロードし、インストールします。Homebrewでもインストール可能です。npmのインストールが完了したら、npmでTruffleをインストールします。unboxコマンドを実行します。unboxコマンドはTruffleフレームワークが提供するサンプルをローカル環境にに展開するコマンドです。Boxesとして用意されているのでそちらも試してみてください。コントラクトの解説ここではダウンロードしたcontractsディレクトリにダウンロードされたMetaCoin.solを確認します。実装だけしたい方はここは飛ばしても大丈夫です。1では、mapping型のbalancesを宣言します。keyがaddress型(ユーザーアカウントのアドレス)でvalueがuint型です。MetaCoinをいくら保持しているのかをここで管理します。Treeに保存されます。2では、event型のTransferを宣言します。Transferはアドレス(_from)からアドレス(_to)にいくら(_value)が送金されたか記録します。このログでウォレットなどがイベントを追跡可能になります。3にあるコントラクトと同じ名前の関数は、Solidity0.5.0時点でのコンストラクタ関数の定義です。コントラクトが展開されて初期化される際に実行される関数です。tx.originで10,000を入れます。tx.originはコントラクトを呼び出したアドレスです。このコントラクトを最初に作成したアカウントは無条件に10,000MetaCoinを入手することになります。4のsendCoinは、送り先アドレスreceiverと送る数量amountを受け取ります。実行するアカウントmsg.senderが保持するMetaCoinをbalancesで確認します。amountよりも少ない場合はfalseを返し、そうでなければ次の処理に続きます。msg.senderのbalancesからamountを引き、receiverのbalancesにamountを加えたのち、Transferイベントを実行します。実際にsenderからreceiverへamountのMetaCoin増減が発生したことをログに記録します。処理が成功したらtrueを返します。6ではアドレス型のaddrを取得して、balancesに保持するMetaCoinの数量をuintで返しています。その1つ前の5でもアドレス型のaddrを取得して、getBalanceInEthでもConvertLibのconvertメソッドを投げてgetBalance(addr)を呼び出しています。つぎは、呼び出しているConvertLibの内容を確認します。libraryとして宣言することで、処理自体はライブラリに存在していても、呼び出し元の状態変数を参照可能になります。convert関数は、uint型のamountとuint型のconversionRateを取り、それらを掛け合わせてuint型のconvertedAmountとして返す関数です。getBalanceInEthを呼び出す際にgetBalance(addr)と2を渡しているので単純にMetaCoinの数量を2倍したものが返されます。テストの実行ターミナルでテストを実行します。SolidityテストとJavaScriptテストをそれぞれ実行します。これらのテストはコントラクトに対して実行されて、テストの実行内容が表示されています。コンパイルとマイグレーションの実行スマートコントラクトをコンパイルします。Truffleにはテストをのみ使用できる組み込みのパーソナルブロックチェーンがあります。developを使ってインタラクトできます。ブロックチェーンとやり取りするときに使用できる10個のアカウント(およびそれらの秘密鍵)を示しています。次にマイグレーションを行います。これには、展開した契約のトランザクションIDとアドレスが表示されます。コストの概要とリアルタイムのステータス更新も含まれています。以上で、Metacoinがデプロイされたので、正常にデプロイされているか確認していきます。getBalanceを呼び出して、アカウント0が10,000MetaCoinを保持していることを確認します。下記の通り、変数に保存することでMetaCoinのコントラクトを参照できます。getBalanceを呼びだします。次のコマンドを入力するとMetaCoinをいくら保有しているかをイーサリアムに変換して確認できます。アカウント0からアカウント1にMetaCoinを送ります。送金後に、アカウント0とアカウント1の残高を確認します。まとめ今回はTruffleフレームワークの公式サンプルMetaCoinのコントラクト内容を簡単に把握し、デプロイ確認まで行いました。Truffleはまだまだ学ぶところが多いので気になる方は、引き続き学習を進めていきましょう。普段はブロックチェーンプログラム勉強しながらたまにブログ書いてます。技術からみた仮想通貨とブロックチェーン。