#はじめに
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がぶら下がるイメージになっています.
##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をインストールして起動
# 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
# 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
####??
//何故か、そのままで、うまく動かず、微調整.
//何かの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;
###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
#サンプル実行してみる_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に移動します
####3-2
DappChainのtokenをwithdrawするとEthereumGatewayに送られ、
####3-3.
そこからさらにWithdrawするとEthereumAccountに戻リます.
#サンプルを実行してみる_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
###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
#参考
Zombieチェーンとは?その特徴とDappチェーンとの違いについて解説
https://dappsmarket.net/loomnetwork/dappchain-zombiechain/
Loom Network Plasma Chain 化がもたらす革新
https://harukataro.com/loomnetworkplasmachain/
Plasmachainとは?Loomの新たなサイドチェーン構想の仕組みと特徴
https://dappsmarket.net/loomnetwork/plasmachain/