LoomNetworkのdemoを色々試してみたよ

#はじめに

Ethereumでプロトタイプゲーム「 PlanetTravelers http://planettravelers.net 」を作っているのですがDApps固有の問題であるGas代の高騰が悩ましい今日この頃です。
(参考) https://gitcoin.co/gas/history
Gas代が上がりすぎると、友達にちょっとやってみてよーと勧めることも難しくなるので、解決策を色々探している中
LoomNetworkのSDKがサイドチェーンに対応したと記事に上がっていたので、
試してみることにしました.

#LoomNetwork
Zombie Battlegroundでキックスターターを実行したことで知られている
ブロックチェーン基盤を提供するためのプロジェクトだそうです.
EthereumのサイドチェーンであるDAppChainを開発しており、DApp1つ1つに、DappChainが1個ずつ与えられ専用のチェーンとして動きます.
アプリケーションはEthereumメインネットとLoomNetworkのサイドチェーンで実装されることが期待されており、
MetaMaskの準備や、ガス料金に悩まされず、アプリケーションを実行できることを目的としています.

##DelegateCall
SideChainを使った事例として「DelegateCall」と言うQandAサイトをリリースしており、
https://blockchain.delegatecall.com/#/blocks
がアプリのトランザクションとなっています.

##token
Loom network上のDappsにアクセスするためにトークンが必要で、
https://loomx.io/purchase/   から購入できるようです.

##3Layer構造
Plasma Chainという独自チェーンの下に、ゲームのChainがぶら下がるイメージになっています.
![zu1.png](https://qiita-image-store.s3.amazonaws.com/0/43766/6afd71b2-3b6a-f326-5490-3463c5f0d0f4.png)

##PlasmaCash
https://medium.com/loom-network-japanese/plasma-cash%E3%82%A4%E3%83%8B%E3%82%B7%E3%83%A3%E3%83%AB%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9-7013fcbd4775
http://block-chain.jp/blockchain_study_salon_dojo/ethereum-plasma-cash/

>(参考)
>https://twitter.com/kelvinfichter/status/1039153673362923521

#サンプル実行してみる_A.
##Loomを起動させて、Truffleからcontractをdeployしてサービスから使うまでの一連の流れ
###0.
一回一連の流れを試したく、ここを参考に進めてみました.
https://loomx.io/developers/

###1.loomをインストールして起動

```terminal:terminal
 # loomファイルの取得
 $ wget https://private.delegatecall.com/loom/osx/build-330/loom 
 # loomファイルの権限の変更
 $ chmod +x loom 
 # loom blockchian環境の初期化
 $ ./loom init 
 # loom blockchain起動
 $ ./loom run 
```

###2.truffle-dappchain-example
(参考)
https://loomx.io/developers/docs/en/truffle-deploy.html


```terminal:terminal

 # localにサンプルをclone
 $ git clone https://github.com/loomnetwork/truffle-dappchain-example

 # truffleをinstall
 $ npm install -g truffle

 # ディレクトリ移動
 $ cd truffle-dappchain-example

 # package入れる
 $ npm install

 # contractをデプロイ
 $ npm run deploy 

 # reactの環境を動かす
 $ npm run serve 

```

####??

```src/contracts/index.js
//何故か、そのままで、うまく動かず、微調整. 
//何かのversionが違うのかもだけど、一応動いたからok...。

this.client = new Client(
	'default',
	//'ws://127.0.0.1:46658/websocket',
	'ws://127.0.0.1:46657/websocket',
	'ws://127.0.0.1:46658/queryws',
)

//const networkId = await this._getCurrentNetwork()
//this.currentNetwork = SimpleStore.networks[networkId]
this.currentNetwork = SimpleStore.networks.default;
```

###3.無事起動.
<img width="639" alt="スクリーンショット 2018-09-18 18.47.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/60b33ced-0fdb-57a5-a5e0-eff2dec78ce2.png">


###4.Block-Explorerでtransactionを眺めてみる
Etherscanのようなエクスプローラーもついていますので試してみます.
https://loomx.io/developers/docs/en/block-explorer-tutorial.html

```
git clone https://github.com/loomnetwork/vue-block-explorer.git
yarn install
yarn run serve
```

<img width="1194" alt="スクリーンショット 2018-09-18 19.24.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/7fafc24b-2b7d-08ea-7883-8aa6a6a8b0d5.png">


#サンプル実行してみる_B
##転送ゲートウェイを使ってmainnetからgamechainにtokenを流してみるサンプルを実行してみます

###0.転送ゲートウェイとは何か
Loom DAppChainsとEthereumネットワーク間でトークンを転送できる仕組みのことのようです.
Mainnetにあるethereumやtokenをゲームに持ってきたり、またその逆もできます。

https://github.com/loomnetwork/transfer-gateway-example
に書かれている通りに実行

###1.

```
git clone https://github.com/loomnetwork/transfer-gateway-example.git
./transfer_gateway setup

//StartするとLoomchainとGanacheとあとは、webアプリケーションが同時にbackground実行される
./transfer_gateway start
```

###2.Metamaskに秘密鍵をロード(環境はlocalhost)
metamaskに、0xbb63b692f9d8f21f0b978b596dc2b8611899f053d68aec6c1c20d1df4f5b6ee2
を秘密鍵で、アカウントをロード
(バックグラウンドでGanacheが動いており、test用のethereumが入ったアカウント.)

###3.遊んでみる

####3-1
SendToDappChainを押すと、100tokenがDappCahinに移動します
<img width="1218" alt="スクリーンショット 2018-09-19 17.36.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/ad246eed-75ba-8fe0-0695-1284dae493a6.png">

####3-2
DappChainのtokenをwithdrawするとEthereumGatewayに送られ、
<img width="1230" alt="スクリーンショット 2018-09-19 17.36.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/77d9d76c-1a39-2c92-0f8a-07a2399021ac.png">

####3-3.
そこからさらにWithdrawするとEthereumAccountに戻リます.
<img width="1223" alt="スクリーンショット 2018-09-19 17.37.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/bce69fa0-7c2f-0697-b0ab-1e3001afb2cd.png">

#サンプルを実行してみる_C
##PhaserSDKのdemoを実行してみます
https://github.com/loomnetwork/phaser-sdk-demo

###1.phaser-sdk-demoのREADMEの通りそのままです.
(loomはA,Bで使ったものそのままだとゲームが動かなかったが何が違うんだっけ。。下記手順でloomを起動するとゲームが動いた。後で調べる)

```
wget https://storage.googleapis.com/private.delegatecall.com/loom/osx/build-163/loom
chmod +x loom

mkdir tmpgopath
export GOPATH=`pwd`/tmpgopath
./loom spin weave-blueprint
cd blueprint
export GOPATH=$GOPATH:`pwd`
make deps
make
cd build

../../loom init
cp ../genesis.example.json genesis.json

../../loom run
```

###2.遊んでみる
![スクリーンショット 2018-09-20 20.43.21.png](https://qiita-image-store.s3.amazonaws.com/0/43766/80f93d9e-ece7-e20b-d448-dcfdc71caef0.png)

###3.
j"???lt????
??YM
defaultJ??B??ۊ??V???v???
etMsg

score16 
I[09-20|11:47:17.233] {Data:[8 1] ValidatorUpdates:[] Tags:[]}     
2018/09/20 20:47:17 Event emitted: index: 10675, length: 329, msg: {"caller":{"chain_id":"default","local":"StDnQoyl24qAAvSDVoaN2na7+sQ="},"address":{"chain_id":"default","local":"4ojW7scVDWoi/eM/CqLYHgZZHE0="},"plugin_name":"blueprint:0.0.1","block_height":10675,"encoded_body":"eyJNZXRob2QiOiJTZXRNc2ciLCJLZXkiOiJzY29yZSIsIlZhbHVlIjoiMTYifQ==","original_request":"CgZTZXRNc2cSCwoFc2NvcmUSAjE2"}





#サンプル実行してみる_D
###0.ElasticSearchやRedisと連携した投稿型サイトのサンプル
ElasticSearchやRedisと連携した投稿型サイトのサンプル
https://github.com/loomnetwork/loom-sdk-documentation/blob/master/docs/simple-social-network-example.md

###1.手順
書いてある通り。indexer.jsを8081起動させつつ、clinetを8080で起動。(loomも起動)
やっぱり下記2つのwebsocketのportは46658->46657に書き換えが必要だったのはなぜだろう??
/solidity-social-example/webclient/src/contract.js
/solidity-social-example/webclient/indexer.js

###2.結果
<img width="917" alt="スクリーンショット 2018-11-02 11.57.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/abbb51f1-ea0e-2de0-1b25-a35a58719766.png">




#参考

Zombieチェーンとは？その特徴とDappチェーンとの違いについて解説
https://dappsmarket.net/loomnetwork/dappchain-zombiechain/


Loom Network Plasma Chain 化がもたらす革新
https://harukataro.com/loomnetworkplasmachain/


Plasmachainとは？Loomの新たなサイドチェーン構想の仕組みと特徴
https://dappsmarket.net/loomnetwork/plasmachain/