Cocos-BCXについて(翻訳記事 + サンプル実行) 

#はじめに

BlockChainの用途として、ゲームという観点で、
さらにプラットフォームという観点でみた時に、参考になるものがまだ少ないのが現状です。
自作ゲーム (http://oggata.tumblr.com/)　
はCocos2dxを使う機会が多いのですが、Cocos2dxでBlockChainと連携したプラットフォームとしての
仕組みが提供される予定とのことで、調べてみました。
(cocosbcx)
http://www.cocosbcx.io/en/


#Cocos-BCX 
Cocos-BCXはCocos2d-xの創立チームによって作られたブロックチェーン開発プラットフォームで、
ブロックチェーン・ゲームエンジンと集約された開発環境、
一般的なブロックチェーンの基盤となるCocosChainで構成されている。

(Cocos2d-xは日本国内でも30％のシェア率を誇る大手のオープンソースゲーム開発プラットフォームで、
日本国内では“モンスト”や“ツムツム”、“ブレイブフロンティア”などの基盤となっている。マルチプラットフォームの開発が可能で、html5canvasで動くJavaScriptをSpidermonkeyで解釈し、iOSのネイティブとして動作etc..)

2018年3月にCocos-BCXとして、発表され、
Cocos仮想マシン(Cocos VM)とCocosChainの体験版でゲーム内でのアイテムの生成や移動などが公開された。
LoomやOntology、Nebulas、NEOといったブロックチェーン・プロジェクトを牽引する企業とのパートナーシップが注目されている。

Cocos-BCX Partnership Roundup — Meet our Friends
https://medium.com/cocosbcx/cocos-bcx-partnership-roundup-meet-our-friends-e4df07372093
<img width="695" alt="スクリーンショット 2018-11-02 11.30.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/4b0046ea-0e53-d8a6-1fb2-f5f936c22faa.png">


#Cocos-BCX & LoomSDK
パートナーシップが発表されている中でも、すでに手元で動かせる事例として、
Cocos Creatorとの連携方法がすでにドキュメント化されています。

>Loom-Cocos-SDK have same api, same protobuf, similar contract with loom-js.

「Cocos Creator用Loom SDK」
https://loomx.io/developers/docs/ja/cocos-sdk-quickstart.html
https://github.com/loomnetwork/loom-sdk-documentation/blob/master/docs/cocos-sdk-quickstart.md#loom-cocos-sdk




# WhitePaperの翻訳 (Sep 2018に発表されたもの)
CococsBCXですが、ホワイトペーパーを斜め読みしたので一部を取り上げてみました。何かの参考になればと思います。

(whitepaper)
http://www.cocosbcx.io/en/wp-content/themes/cocosBlog/source/white_paper_en.pdf

####1.1 ブロックチェーンゲームの経済的背景

2009年にビットコインが発表されて以来、ブロックチェーンの技術と、仮想通貨は研究と議論の対象となっています。
ゲーム産業は、ブロックチェーンによって大きく影響を受けた分野です。
ゲームにおいて、コンテンツはオンラインで作成、使用、価格設定、交換されるので、
暗号通貨による価値づけなどに適しているといえます。
さらに、ゲームは堅牢なビジネスモデルや、ユーザーベース、開発コミュニティと共に、成熟したマーケットです。
我々は、ゲーム部門は、デジタルエコノミーを可能にしたボロックチェーンの開発の先駆けになると確信していますし、
このプロセスを加速するためにCocos-BCXを構築しています。


####1.2 当社の価値提案
Cocos-BCXは、使いやすい開発および運用インフラです。
開発者の多くは、分散アプリケーションや、ブロックチェーンアプリケーションの経済的メカニズムに精通しているわけではありません。
Cocos-BCXは、開発者がさまざまなソフトウェアアーキテクチャやと経済的インセンティブを利用して
より良い体験を提供する手助けをします。
長期的には、Cocos-BCXプラットフォームは、手数料ベースから資産ベースまで、ゲームのビジネスモデルの
変換を手助けすることになるでしょう。
Cocos-BCXを使用して開発されたゲームは、そのステークホルダーたちが"PayToPlayモデル"と呼ばれる構造に対して、
デジタルアセットという共通の目的を持つのであれば、その課題を大きく解決するかもしれません。

####1.3.1 ゲーム内経済の決済措置としての"ファンジブルトークン"

当初、トークンというものは、
ゲーム内への経済的な入力と出力を表現するものでした。

イーサリアムのERC-20のトークンは、一般的に、高い互換性、転送性、およびトレーサビリティという
シナリオにおいて使われます。


ゲームプレイヤーに提供される重要な価値は

1.ゲーム内通貨の流通の透明性
2.異なるゲーム間のゲーム内通貨の転送と変換
3.ゲーム内通貨決済からさまざまな暗号化通貨への変換

"The War of Plane"（https://shooter.candy.one）
は、トークンを使用してゲーム結果を解決する事例です。
ユーザーはゲームを開始し、シューターをコントロールするために100キャンディートークンを支払い、
敵機を破壊してステージをクリアすることでゲームポイントを獲得します。
プレイヤーは全てのステージをクリアするか、シューターがクラッシュすることで、ゲームオーバーとなります。
ゲームで得たポイントは、特定のレートでキャンディートークンと交換することができます。
キャンディートークンは他のアプリケーションで使用され、外部の暗号交換で取引されます。

####1.3.2 ゲーム通貨と資産の交換と相互変換

EthereumのERC-20トークンは、スコアや単位などのような、同一のオブジェクトの定量的な測定に適しています。
対照的に、独自の定性的プロパティをもつような形式が必要であり、
非代替トークンの標準規格であるERC-721がEthereumに導入されました。
人気ゲームCryptokittiesはERC-721の代替不可能なトークンの適用例です。
このゲームでは、キティ(子猫)はブリードによる特定の組み合わせから表現された定性的なトークンです.
珍しいキティ(子猫)はその希少性のためにプレミアムな金額で取引されます。
この段階では、ゲーム内のすべてのデジタルオブジェクト（アイテムやユーザーアカウントなど）は
トークン化されます。
ゲームアイテムの生成、購入、取引活動は"トークンの交換イベント"として処理されます。
このメカニズムでは、ゲームプレイヤーは自身のデジタルな保有物を、ゲームやアプリケーション、ブロックチェーンを
超えて取引することができます。



続く...

#サンプルを実行してみる
https://loomx.io/developers/docs/ja/cocos-sdk-quickstart.html

基本的には、quickstartの通りだが、やや作られたloom-cocos-sdkをコピペしたりする流れが
分かりにくかったので、下記に記載しておく

```terminal:terminal
$git submodule update --init

#Loom Cocos SDKを生成と圧縮
$./tools/genCocoSDK.py

#loom-cocos-sdkをcopy&pasete
sample/loomDemoForCreator/assets/scriptに、genCocosSDK.pyで作成された./loom-cocos-sdkの中身をcopy&paseteする

#同期させる
$./tools/syncLoomJSToSample.py

#loomを実行
$../../loom run

$Cocos Creatorから、sample/loomDemoForCreatorをopenDirectoryする

```

>webpackでエラーが起きたので、versionを変更.
>/node_modules/webpack-cli/bin/config-yargs.js:89
>describe: optionsSchema.definitions.output.properties.path.description,

```
vim /cocos-sdk/deps/loom-js/package.json
> "webpack-cli": "^2.1.2",  -> 3.1.1に変更
$rm -rf node_modules && npm install
```

>(memo) webpackのbugらしい。
>Update to webpack-cli v.3.1.1
>it is bug in webpack-cli, not in webpack (so no need to use major release)
>migrating to latest version solved the error for me: webpack-cli@3.1.1
>https://github.com/webpack/webpack-cli/issues/609
>https://github.com/webpack/webpack/issues/8082
>https://github.com/webpack/webpack-cli/issues/607


<img width="1085" alt="スクリーンショット 2018-11-05 22.39.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/a1394a37-370e-459d-7175-99d18cf5e499.png">



<img width="265" alt="スクリーンショット 2018-11-06 13.09.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/43766/5ca6086c-c9df-b868-5185-af2a44995733.png">

```javascript

//main.js 
import createContract from './SimpleContract'
onBtnSave() {
    this.contract.store('score', stringScore, function(e) {}
},

----->
//SimpleContract.js
import './A-loom-polyfill-for-cocos'
import {
  NonceTxMiddleware, SignedTxMiddleware, Client,
  Contract, Address, LocalAddress, CryptoUtils
} from './loom.umd'
import { MapEntry } from './setscore_pb'

class SimpleContract extends Contract {
    store(key, value, cb) {
        const params = new MapEntry()
        params.setKey(key)
        params.setValue(value)

----->
//setscore_pb.js
var jspb = require('./google-protobuf');
proto.MapEntry.prototype.setKey = function(value) {
  jspb.Message.setProto3StringField(this, 1, value);
};

```


# 動画
「Cocos-BCX Exclusive Interview | Blockchain Gaming Full Stack Platform | BlockchainBrad」
https://www.youtube.com/watch?v=LBjDjuqhGzs


# 参考記事
「Meet Cocos-BCX — Future of Blockchain Game Development Empowering Over 1.1 Million Developers」
https://medium.com/cocosbcx/meet-cocos-bcx-future-of-blockchain-game-development-empowering-over-1-1-million-developers-267838239c0d

中国最大のモバイルゲームプラットフォームがLoom DAppチェーンと統合予定!!
https://medium.com/loom-network-japanese/%E4%B8%AD%E5%9B%BD%E6%9C%80%E5%A4%A7%E3%81%AE%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%8Cloom-dapp%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%A8%E7%B5%B1%E5%90%88%E3%82%92%E4%BA%88%E5%AE%9A-5e88d8c8e72

「SDKBOX for Blockchains」
https://www.sdkbox.com/blockchain

「Loom Unity SDKのサンプルを動かしてみる」
https://qiita.com/tsukumaru/items/81e2155a9e03d9a8caef