Truffle、Solidity、GanacheでEthereum DAppsを作る




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

TRUFFLE BOXES

EthereumでDAppsを開発するときに何をどうやって作ればいいかわからないことが多いですよね。そんな時はTRUFFLE BOXESを参考にするといいです。ここにはいろんなサンプルアプリケーションがあり、Reactを使ったサンプルもあるのでモダンなアプリケーションを作る手がかりにもなるかと思います。

環境設定

バージョン

  • Node.js v8.9.4
  • npm v5.7.1
  • solidity v0.4.17
  • truffle v4.1.3
  • Ganache v1.0.2

インストール

truffle unbox pet-shopで今回使用するサンプルコードをダウンロードすることができます。

pet-shopアプリケーションはMetaMask経由でトランザクションを発行し、好みのペットに対して自分のアドレスを紐づけることができるようになっています。自分が現在どのペットと紐づいているかをスマートコントラクト経由で取得することもできるようになっています。

なのでスマートコントラクトを使った更新と読み取りの基本的なアプリケーションを作ることができます。

DApps開発

スマートコントラクト

contracs/Adoption.solを実装します。

adopt()関数はこの関数を呼び出したアドレスをpetIdを紐づけることで購入者を識別します。getAdopters()は購入者全てのアドレスを返す関数です。Solidityで実装するスマートコントラクトはこれだけです。

マイグレーション

migrations/2_deploy_contract.jsを作成し下記を実装します。

コンパイル

コンパイルは最後にWriting artifacts to ./build/contractsが表示されれば成功です。

デプロイ

デプロイする前にGanacheを起動しておきます。Ganacheは起動するだけでローカル環境にブロックチェーンを起動してくれて、さらにアドレスを10個作ってそれぞれに100ETHずつ最初から持たせてくれるので開発がものすごくしやすくなるツールです。

デプロイもAdoptionもコントラクトアドレスが表示されれば成功です。

Ganache上でトランザクションも確認できます。

テストコード

テストコードもSolidityで書きます。Adoption.solに実装した変数と関数に対してテストを行なっています。

テストを実行すると3つともちゃんとテストが通りました。

フロントエンド開発

stc/app.jsをドキュメントに沿って実装します。ここはただの作業になるのでweb3jsの初期化部分だけ説明します。

web3がundefinedじゃないという状況はMetaMask内臓のweb3がちゃんとブラウザでグローバル変数として使えるときです。グルーバルなweb3が取得できればcurrentProviderを使って新たにweb3インスタンスを作成し、MetaMask経由でトランザクションを発行できるようになります。

ここら辺は最初理解しづらいですがかなり重要なところなので頑張って理解できるようになってください。

DAppsの起動

Truffleにはlite-serverという機能でサーバのホスティングもできるようになっています。この機能を使って実装したアプリをブラウザから確認できるようになります。

package.jsonにnpm run devでlite-serverを実行できるようにscriptsが記述されているので下記で実行します。

MetaMask連携

アプリが起動したら次はMetaMask連携を行います。Custom RPCを選択し、http://127.0.0.1:7545を入力してSaveするだけです。これでMetaMaskがローカルで起動しているブロックチェーンにアクセスできるようになります。

Ganacheアカウントのインポート

DAppsで使うアカウントをGanacheからMetaMaskにインポートします。GanacheのACCOUNTから鍵マークをクリックします。

アドレスのprivate key(秘密鍵)が表示されるのでこれをコピーします。

MetaMaskのImport Accountにprivate keyを貼り付けるとGanacheで作成されたアカウントをMetaMaskから使えるようになります。

これでGanacheで起動させたブロックチェーンに対してGanacheで作られたアドレスからトランザクションを発行できます。

まとめ

想像していたよりも簡単にDAppsを作ることができました。なんでもいいからとりあえず作ってみるとかなり理解が進むのでオススメのサンプルコードだと思います。

今回はメインがSolidityのスマートコントラクトの解説だったのでフロントエンド開発も今後説明を追記していきます。

The following two tabs change content below.

高妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 現在はTwitterなどSNSのテキスト解析を行うソーシャルメディア分析のサーバーサイドを開発中。言語はNode.js、Kotlinを使用。






2 件のコメント

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です