EthereumをMeteorフレームワークで動かす


前回はRasberry Pi上でEthereumを動かして見ました。
http://qiita.com/satons/items/a44b7d57cc3e2deca6e4

##[Ethereum](https://www.gitbook.com/book/ethereum/frontier-guide/details) とは（発音：エセリウム、イーサリアム、イーサリウムなど）
そもそもの話になってしまうのですが、簡単に言うと

###ビットコインが進化していろいろできるようになったやつ!!!!

です。

いろいろというのは、本当にいろいろなので、
・債券の交換市場を自動化
・車のレンタルキーの貸し借りシステム
・銀行そのもの
・契約書が電子化される

みたいな、今ある既存のあらゆるシステムでやっていることはできるんです。

これを、主にブロックチェーン上に書き込んだプログラム（contract)によって行えるというわけです。

これをコンピューター・サイエンスの言葉では

###「チューリング完全」（望みうるあらゆる処理が可能）と言うらしい。
* bitcoinのプロトコルはチューリング完全ではない
＊余談：開発中の量子コンピュータはまだチューリング完全じゃないらしいので、そういう意味では完全なコンピューターとは言えないようです。

そんな面白おかしい近未来なEthereumですが、ご家庭のパソコンで動かせるんですよ。

#原理や細かい説明は（ググればいっぱい出てくるので）省きますが、とりあえず実行の流れを書いていきたいと思います。

#Meteorフレームワークを使ってみる
MeteorはJavaScriptでフロントエンドとバックエンドを記述して簡単に動かせるフレームワークです。

Meteor Fan
http://meteor-fan.axlight.com/

Meteor日本語ドキュメント
http://meteor-fan.github.io/meteor-docs-ja/


Meteorを使った簡易のテンプレートがあります。
https://github.com/SilentCicero/meteor-dapp-boilerplate


これがシンプルな構成なので使います。

* Meteorのインストールはこちらを参考にしてください。
http://meteor-fan.axlight.com/install-meteor/

* Go-ethereum(Geth)の起動JSON-RPC設定（ローカル環境で行いました）
（注）本番環境でやるので、ウォレットのアカウントにetherをもっておく必要あります。とりあえず0.1etherもあれば足ります。

```
$ geth console
$ >admin.startRPC("127.0.0.1",8545,"*","web3,db,net,eth")
```

重要なのがアカウントのアンロックです。

トランザクションの発行を行うので、アカウントを解除しておく必要があります。

```
$ >personal.unlockAccount("解除するアドレス”,"パスワード",解除継続時間)

//詳細は下記APIを参照してください。
https://github.com/ethereum/go-ethereum/wiki/Go-ethereum-management-API's#personal_unlockAccount

```



* meteorアプリ起動

```
$ cd meteor-dapp-boilerplate/app
$ meteor
```

```
ブラウザでアクセス
http://localhost:3000
```


起動画面こんな感じです。

* 自分のアドレス
* アカウントの残高
* Gas Price
* Block Number
などが表示されました

![151218-0001.png](https://qiita-image-store.s3.amazonaws.com/0/80546/c120d8f4-68cf-2126-72de-765c1b06c575.png "151218-0001.png")


##Contractを発行してみる
右上のview2をクリックすると以下の画面になります。

"CREATE NEW CONTRACT"をクリックするとContractがブロックチェーンにデプロイされます。

![151218-0002.png](https://qiita-image-store.s3.amazonaws.com/0/80546/2f84eccf-469a-5723-f6bb-7e8076f36797.png "151218-0002.png")


クリックするとこの画面に。マイニングされています。
![151218-0003.png](https://qiita-image-store.s3.amazonaws.com/0/80546/e09756b0-e282-59e9-6c45-eea295e166a9.png "151218-0003.png")

今回のデモで行うコントラクトは掛け算をするコントラクトです。


ソースはclient/lib/contractsの中にあります。

```MultiplyContract.sol
contract MultiplyContract {
    function multiply(uint a) returns(uint d) {
        return a * 7;
    }   
}     
```
内容はシンプルで、このコントラクトに数字を送信すると、7を掛けた値が帰ってきます。

少し待つと、マイニングが終わってブロックが認証されるので画面が代わります

![151218-0005.png](https://qiita-image-store.s3.amazonaws.com/0/80546/eac89c21-8d5d-1148-9175-827299e824f1.png "151218-0005.png")

いろいろ表示されてますね。

コントラクトの発行が行われたアドレスが表示されてます。

では実際に試してみましょう。

"Type a number here to multiply"
の中に数字を入れてみると

このように。
![151218-0007.png](https://qiita-image-store.s3.amazonaws.com/0/80546/ef79dd76-497e-1d66-f23a-5136852cb2eb.png "151218-0007.png")

"Multiply Result:21  " 掛け算がされている!


というこれだけなんですが。
まあ一連の流れをやってみると謎の感動がありますね。

今回のコントラクトでは、トランザクションをコントラクトのアドレスに送るといったことはせずに、ローカル上でコントラクトの関数内容が実行されるようになってます。

このアプリのテンプレートを元に改造すると様々なコントラクトを動かしたりできるアプリを自作できますね。Meteorの知識は勉強しないとですが、かなりシンプルに作れると思います。

コントラクトをテストできる有名なアプリだと

CosmoというMeteor製のアプリもありますので、こちらもいじれると良いのではないかと思います。
http://meteor-dapp-cosmo.meteor.com/


全体的に舌足らず、説明不足、これじゃわかんねえよ！！ってあるかもしれませんが、

###私もわからないことだらけです！
##下手に説明するとボロが出まくります!

ですので、このP2Pの分散型コンピュータ（？）というフロンティアを開拓していく人が増えたら良いなとか思います。