Loom NetworkのDappチェーンにtruffleからコントラクトをデプロイする

Cryptozombiesで有名なLoom Networkが、Loom SDKのBeta版を公開した。
[Loom SDK Beta](https://loomx.io/developers/ja/)
<img width="640" alt="LoomSDKBeta.png" src="https://qiita-image-store.s3.amazonaws.com/0/141797/0adfadeb-0323-87fc-9feb-47635aca48ff.png" >

## 本投稿の内容
とりあえずDappチェーンを動かして見たい人のために、
『truffleを使って、シンプルなコントラクトをDappチェーン上にデプロイする』最短手順をメモしておく。
デプロイしたコントラクトには、`truffle console`や`truffle exec`などでアクセスできる。

## 対象
truffleを使ってコントラクトをデプロイしたことがある人。
ganacheでもテストネットワーク(ropsten, rinkebyなど)でもメインネットでもOK。

## テストした環境
- OS: macOS Sierra 10.12.6
- Truffle v4.1.11 (core: 4.1.11)
- Solidity v0.4.24 (solc-js) 

## 手順
基本的には[公式のドキュメント](https://loomx.io/developers/docs/ja/prereqs.html)に従っていくが、コントラクトのデプロイが目的なので不要なところは飛ばして進む。
#### 必要なものをインストール
```terminal
brew install wget
brew install go
brew install protobuf
```
#### Loom SDKのインストール
```terminal
wget https://storage.googleapis.com/private.delegatecall.com/loom/osx/build-155/loom
chmod +x loom
cp loom /usr/local/bin/loom
```
#### Dappチェーンの起動  
```terminal
mkdir dapp-chain
cd dapp-chain
loom spin weave-blueprint
cd blueprint
make deps
make
cd build
loom init
cp ../genesis.example.json genesis.json
loom run
```
#### 自分のコントラクトをデプロイする
シンプルなコントラクトを用意した。 
https://github.com/ryokomy/loom-truffle-test

```javascript:SimpleStore.sol
pragma solidity ^0.4.22;

contract SimpleStore {
    uint value;

    event NewValueSet(uint _value);

    function set(uint _value) public {
        value = _value;
        emit NewValueSet(value);
    }

    function get() public view returns (uint) {
        return value;
    }
}
```


１. 別のターミナルを開いて適当なディレクトリにリポジトリをクローンし、packageをインストールする。

```terminal
git clone git@github.com:ryokomy/loom-truffle-test.git
cd loom-truffle-test
yarn install
```
２. 秘密鍵と公開鍵を作る。

```terminal
loom genkey -a public_key -k private_key
```
３. デプロイする

```terminal
truffle migrate --network loom_dapp_chain --reset
```
４. コントラクトにアクセスする
今回は以下の`truffle exec`用のファイルを用意した。`truffle console`を使っても慣れた方法でアクセスできる。

```terminal
# for set
truffle exec --network loom_dapp_chain tools/exec_set.js
# for get
truffle exec --network loom_dapp_chain tools/exec_get.js
```

## まとめ
『truffleを使って、シンプルなコントラクトをDappチェーン上にデプロイする』ことができた。
また、そのコントラクトにtruffleのコマンドでアクセスできることを確認した。
このDappチェーンはローカルで動作している。

## 参考
**LoomNetwork, Dappチェーン**について
- [CryptoZombiesはフォークします！](https://medium.com/loom-network-japanese/cryptozombies%E3%81%AF%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99-9f2aab79355c)
- [DAppチェーン 〜サイドチェーンを通したイーサリアムDAppのスケーリング〜](https://medium.com/loom-network-japanese/dapp%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3-f40b5783fb6e)
- [Loom Network SDKアルファ版登場！](https://medium.com/loom-network-japanese/loom-network-sdk%E3%82%A2%E3%83%AB%E3%83%95%E3%82%A1%E7%89%88%E7%99%BB%E5%A0%B4-6a9abebbc7cc)
- [Loom Network(ルームネットワーク)とは？-ゲームdAppsに特化したプラットフォーム-](https://crypto-times.jp/loom_network_about/)
- [Loom Network – Zombieチェーンとは？ 既存のチェーンとの違い](https://crypto-times.jp/zombie_chain_about/)
- [Loom SDKベータ版をパブリック公開!!](https://medium.com/loom-network-japanese/loom-sdk%E3%83%99%E3%83%BC%E3%82%BF%E7%89%88%E3%82%92%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E5%85%AC%E9%96%8B-da33f93c8433)

**その他**
- [WebSocketプロトコル](https://www.slideshare.net/tuvistavie/websocket-29202219)
- [ProtocolBuffersについて調べてみた](https://qiita.com/aiueo4u/items/54dc5dd8c4772253634c)