ブロックチェーン

DApps開発の第一歩 Truffleを利用した「MetaCoin」の実装方法【Truffle v5.0.3】

Truffle(トリュフ)は、スマートコントラクトの開発に必要となる、コンパイラ、リンク、デプロイ、バイナリ管理の機能を持つ統合開発管理フレームワークです。

DApps(分散型アプリケーション)開発には必ず通る道ですのでしっかりおさえておきましょう。

Truffleフレームワークの特徴

  • スマートコントラクトのコンパイル、リンク、デプロイ、バイナリ管理
  • 迅速な開発を目的とするスマートコントラクトのテスト
  • スクリプトで記述できる拡張可能なデプロイとマイグレーションのフレームワーク
  • パブリックネットとプライベートネットにデプロイできるネットワーク管理
  • ERC190規格を使用したEthPMとNPMによるパッケージ管理
  • インテグレーションをサポートする設定変更可能なビルドパイプライン
  • Truffle環境内でスクリプトを実行する外部スクリプトランナー

このTruffleフレームワークには、独自コインを作成してアカウント間でやり取りするコントラクトのサンプルがあります。

今回はその中の一つ、「MetaCoin」の実装をやっていきます。

Truffleの環境構築

macOS環境での環境構築をやっていきます。まずは、npmをインストールしていない方はインストールします。

node.jsにアクセスして、[macOS Installer]をクリックし、pkgファイルをダウンロードし、インストールします。

また、Homebrewでもインストール可能です。npmのインストールが完了したら、npmでTruffleをインストールします。

MetaCoinのサンプルコードをダウンロード

下記のコマンドを入力し、ディレクトリを作成してからその中でtruffle unboxコマンドを実行します。

truffle unboxコマンドはTruffleフレームワークが提供するサンプルをローカル環境にに展開するコマンドです。MetaCoin以外にもさまざまなサンプルがTruffle Boxesとして用意されているのでそちらも試してみてください。

コントラクトの解説

ここではダウンロードしたcontractsディレクトリにダウンロードされたMetaCoin.solを確認します。とにかく実装だけしたい方はここは飛ばしても大丈夫です。

①では、mapping型のbalancesを宣言します。keyがaddress型(ユーザーアカウントのアドレス)でvalueがuint型です。MetaCoinをいくら保持しているのかをここで管理します。

また、値変化の過程はブロックチェーンに保存されますが値そのものはブロックチェーン外のState Treeに保存されます。

②では、event型のTransferを宣言します。Transferはアドレス(_from)からアドレス(_to)にいくら(_value)が送金されたか記録します。

このログでウォレットなどがイベントを追跡可能になります。

③にあるコントラクトと同じ名前の関数は、Solidity0.5.0時点でのコンストラクタ関数の定義です。コントラクトが展開されて初期化される際に実行される関数です。①で定義したBalancesに、key = tx.originで10,000を入れます。tx.originはコントラクトを呼び出したアドレスです。このコントラクトを最初に作成したアカウントは無条件に10,000MetaCoinを入手することになります。

④のsendCoinは、送り先アドレスreceiverと送る数量amountを受け取ります。実行するアカウントmsg.senderが保持するMetaCoinをbalancesで確認します。amountよりも少ない場合はfalseを返し、そうでなければ次の処理に続きます。

msg.senderのbalancesからamountを引き、receiverのbalancesにamountを加えたのち、Transferイベントを実行します。実際にsenderからreceiverへamountのMetaCoin増減が発生したことをログに記録します。処理が成功したらtrueを返します。

⑥ではアドレス型のaddrを取得して、balancesに保持するMetaCoinの数量をuintで返しています。その1つ前の⑤でもアドレス型のaddrを取得して、getBalanceInEthでもConvertLibのconvertメソッドを投げてgetBalance(addr)を呼び出しています。

つぎは、呼び出しているConvertLibの内容を確認します。

libraryとして宣言することで、処理自体はライブラリに存在していても、呼び出し元の状態変数を参照可能になります。

convert関数は、uint型のamountとuint型のconversionRateを取り、それらを掛け合わせてuint型のconvertedAmountとして返す関数です。

getBalanceInEthを呼び出す際にgetBalance(addr)と2を渡しているので単純にMetaCoinの数量を2倍したものが返されます。

テストの実行

ターミナルでテストを実行します。SolidityテストとJavaScriptテストをそれぞれ実行します。

これらのテストはコントラクトに対して実行されて、テストの実行内容が表示されています。

コンパイルとマイグレーションの実行

スマートコントラクトをコンパイルします。

Truffleにはテストをのみ使用できる組み込みのパーソナルブロックチェーンがあります。

そのブロックチェーンを作成して、truffle developを使ってインタラクトできます。

ブロックチェーンとやり取りするときに使用できる10個のアカウント(およびそれらの秘密鍵)を示しています。

次にマイグレーションを行います。

これには、展開した契約のトランザクションIDとアドレスが表示されます。また、コストの概要とリアルタイムのステータス更新も含まれています。

デプロイの確認

以上で、Metacoinがデプロイされたので、正常にデプロイされているか確認していきます。

まず、getBalanceを呼び出して、アカウント0が10,000MetaCoinを保持していることを確認します。下記の通り、変数に保存することでMetaCoinのコントラクトを参照できます。

getBalanceを呼びだします。

次のコマンドを入力するとMetaCoinをいくら保有しているかをイーサリアムに変換して確認できます。

アカウント0からアカウント1にMetaCoinを送ります。

送金後に、アカウント0とアカウント1の残高を確認します。

まとめ

今回はTruffleフレームワークの公式サンプルMetaCoinのコントラクト内容を簡単に把握し、デプロイ確認まで行いました。

Truffleはまだまだ学ぶところが多いので気になる方は、引き続き学習を進めていきましょう。

ブロックチェーンエンジニアになるならTech Academy

スマートコントラクトを開発できる!

自分でオリジナルのサービスを作れる!

 

ビットコイン取引は購入手数料がマイナスのZaifがおすすめ

僕もやっている仮想通貨積立はZaifだけ

Zaif公式サイトを見てみる

Zaifの登録・積立方法はこちら

 

 

手数料無料で取引するならbitbank.cc

 

金融庁の仮想通貨交換業登録した安心取引所

bitbank公式サイトを見てみる

bitbank.ccの登録方法はこちら

 

 

bitFlyerは取り扱い通貨豊富で初心者にもおすすめ

bitFlyer ビットコインを始めるなら安心・安全な取引所で

 

世界に進出した国内大手取引所

bitFlyer公式サイトを見てみる

bitFlyerの登録方法はこちら