Ethereumを用いて、非中央集権・分散型アプリケーション、いわゆる 「Dapps」 を作成してみます。
今回は、Meteorで作られたBoilerplate(SilentCicero/meteor-dapp-boilerplate)を用います。
到達目標
テンプレートにあるContractを書き換えて、独自のテストネット上にトランザクションを流し、マイニングにより承認されるまでの、一通りの流れを実装する
Meteorの簡単な紹介
- Ycombinater出身のチームが開発している、JavaScript(Node.js)で超速にアプリケーションを開発できるというクールなフレームワーク
- MongoDBが組み込まれている
- サーバー/クライアント間のデータ連携がシームレスに行われる(ちょっと感動するレベル)
- 簡素で柔軟なMVC
- Blazeと呼ばれるテンプレートエンジンを採用
- リアクティブ・プログラミング
- 公式 : https://www.meteor.com/
Dappsとは
- Decentralized Appsの略
- 統一された明確な定義があるわけではないが、ざっくりとした表現だと「P2Pで中央機関が無く、プロトコルに従って自律的に運用されるWebアプリケーション」
その他にも前提となる知識
- Ethereum...Wikipedia
- SmartContract...いわゆる契約の「プログラミング化」(スマートコントラクトとDAO)
- Solidity...Ethereum上で動作するJSベースのSmartContract記述用言語(公式wiki)
- geth...EthereumのGo言語クライアント(公式wiki)
開発環境
- Mac OSX : 10.11.4
- geth, Node.js, Meteor等、必要なものは全てインストール済として進めていきます
gethをプライベートネットワークで起動する
まずはgethテストネットを起動します。
$ geth --networkid "10" --nodiscover --datadir "~/testnet" --genesis "/~/testnet/test.json" --unlock {アカウントNo} --rpc --rpcaddr "localhost" --rpcport "8545" --rpccorsdomain "*" console 2>> ~/testnet/test_err.log
コマンドラインオプションは geth help
で参照可能です。
大事なポイントは、アカウントをunlockしておくこと、crosdomainのオプションをつけることくらいかと思います。
※ 参考(https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options)
templateをセットアップ
今回使わせていただくテンプレートをクローンしてきます。
$ git clone https://github.com/SilentCicero/meteor-dapp-boilerplate.git
必要十分なパッケージが既に入っているので、基本的にはライブラリとかはこのままでOK。
※Include Packagesのリスト
ちなみにMeteorのライブラリは「Atmosphere」と呼ばれています。クールです。
立ち上げてみる
そして、まずはそのままMeteorを立ち上げてみます。
$ cd meteor-dapp-boilerplate/app
$ meteor
これで自動的に必要なパッケージのインストールが始まりローカルホストでサーバーが立ち上がります。
上手くいけば下記画像のようになるはず。
View1には、テストネットとの接続状況や、アカウントの情報、Ether残高などが記載されていると思います。
Miningされているかどうかも確認できます。
長くなったので、後半は第二回に続きます。