カラードコインの実装としてメジャーなOpen Assets Protocolを作ったCoinprismがリリースしたOpenchainのサーバをセットアップしてみた。
Openchainについては↓のブログで詳しく説明されてる。
中身についてはまだ詳しく把握してないので、実際に使ってみた方が理解が進むのと、openassets-rubyと上手く連携できないかと思い、まずは開発環境をセットアップ。(いずれも環境はUbuntu 14.04LTS)
Docker使うパターン
ホントこういったアプリケーション含めた環境をお手軽に配布・実行できるコンテナは便利ね。
事前準備
- Dockerのインストール
$ wget -qO- https://get.docker.com/ | sh
- Docker Composeのインストール
$ sudo apt-get install python-pip $ sudo pip install -U docker-compose
Openchain Serverのインストールと設定
インストールといってもDockerイメージ取得するだけ。
$ git clone https://github.com/openchain/docker.git openchain $ cd openchain $ cp templates/docker-compose-direct.yml docker-compose.yml $ cp templates/project.json openchain/project.json $ mkdir data $ cp templates/config.json data/config.json
data/config.jsonのinstance_seedにランダム文字列を設定する。chain namespaceを生成するのに使われるみたい。
{ // Websocketで受け付けるtransaction streamをこのインスタンスで有効にするかどうかの設定 "enable_transaction_stream": true, "storage": { // 使用するストレージエンジンを指定。(SQLiteかMSSQLを指定可能) "provider": "SQLite", // SQLiteを選択した場合は、"path"でDBファイルのパスを指定。 "path": "ledger.db" }, // validatorとして起動するかobserverとして起動するかで下記設定をする(↓はvalidatorとして起動する設定) // validatorとして起動する際の設定パラメータ "validator_mode": { // このインスタンスを識別するための一意なランダム文字列。 "instance_seed": "ランダムな文字列", "validator": { // トランザクションが登録された際にOpenchainサーバで実行される検証タイプ。(現在サポートされるのは"PermissionBased"のみ) "provider": "PermissionBased", // P2PKHアカウント(/p2pkh/<address>)を有効にするかどうか "allow_p2pkh_accounts": true, // 第三者が発行したアカウント(/asset/p2pkh/<address>/)を有効にするかどうか "allow_third_party_assets": true, // 管理者権限を持つアドレスのリスト "admin_addresses": [ ], "version_byte": 76 } }, // observerとして起動する際の設定パラメータ // "observer_mode": { // "upstream_url": "" // }, "anchoring": { // アンカリングの際に使われるプロバイダで現状設定できるのは"Blockchain"のみ。 "provider": "Blockchain", // WIF形式の秘密鍵で、Blockchainにトランザクションをパブリッシュする際の署名に使われる。 "key": "", // CoinprismのAPIのエンドポイント。listunspentと署名したトランザクションをブロードキャストする際に利用する。(mainnetの場合は https://api.coinprism.com/v1/ ) "bitcoin_api_url": "https://testnet.api.coinprism.com/v1/", // トランザクションを公開するネットワークのnetwork byte "network_byte": 111, // ドキュメントには記載ないけどアンカリングでブロードキャストするトランザクションの手数料? "fees": 5000, "storage": { // anchorのキャッシュ方法。現在サポートされてるのは"SQLite"のみ "provider": "SQLite", "path": "anchors.db" } } }
Openchain Serverはデフォで8080ポートで起動するので、変更したい場合はdocker-compose.ymlのポート設定を変更する。
ちなみにOpenchainのDockerファイル↓見るとわかるけど、ベースとなってるイメージがMicrosoftのASP.NET 5用のDocker ImageでLinuxベースのコンテナにdnx環境が構築される。
そうOpenchain ServerはC#で書かれていて、Linux上ではクロスプラットフォーム環境であるdnx上で動かすと。
FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr
RUN mkdir /openchain
COPY project.json /openchain/project.jsonWORKDIR /openchain
RUN cd /openchain \
&& dnu restoreEXPOSE 8080
https://github.com/openchain/docker/blob/master/openchain/Dockerfile
ENTRYPOINT ["dnx", "start", "--server.urls", "http://0.0.0.0:8080"]
Openchain Serverの起動
↓のコマンドでOpenchain serverがバックグラウンドで起動する。(フォアグラウンドで動かす場合は-dを省略)
$ sudo docker-compose up -d
docker logsで正常に起動しているか確認できる。
$ sudo docker logs openchain-server info: General[0] [2016-01-09 08:36:12Z] Starting Openchain v0.5.0 (DNXCore,Version=v5.0) info: General[0] [2016-01-09 08:36:12Z] info: General[0] [2016-01-09 08:36:12Z] Stream subscriber disabled info: General[0] [2016-01-09 08:36:12Z] Anchoring disabled Hosting environment: Production Now listening on: http://0.0.0.0:8080 Application started. Press Ctrl+C to shut down.
再起動する場合は、
$ sudo docker-compose restart
停止する場合は、
$ sudo docker-compose stop
Docker使わずマシン上に構築するパターン
事前準備
Understanding package management on .NET | CoreCLR site をインストールする。
必要なパッケージをインストール。
$ sudo apt-get install libunwind8 libssl-dev unzip mono-devel libsqlite3-dev make automake libtool curl
libuvのインストール。
(ソースからビルドしないとUnable to find an entry point named uv_loop_sizeとか怒られる)
$ curl -sSL https://github.com/libuv/libuv/archive/v1.4.2.tar.gz | sudo tar zxfv - -C /usr/local/src $ cd /usr/local/src/libuv-1.4.2 $ sudo sh autogen.sh $ sudo ./configure $ sudo make $ sudo make install $ sudo rm -rf /usr/local/src/libuv-1.4.2 && cd ~/ $ sudo ldconfig
ルート証明書を入手。
$ mozroots --import --sync
DNVMのインストール。(dnvmは.Net Coreのバージョン管理ツールでrvmやnvmみたいなもの)
$ curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
.NET Core DNXのインストール。
$ dnvm install latest -r coreclr -u
プロジェクトファイルのダウンロード
$ wget https://raw.githubusercontent.com/openchain/openchain/master/src/Openchain/project.json $ wget https://raw.githubusercontent.com/openchain/openchain/master/src/Openchain/Webroot/App_Data/config.json -P Webroot/App_Data $ dnu restore
dnu restoreするとproject.jsonに記述された依存ライブラリを入手してくれるんだけど、↑でダウンロードしたproject.jsonに記載されているバージョン0.5.1-rc1は見つからないので↓のように0.5.0-rc1に書き換えた。
{ "entryPoint": "Openchain.Server", "dependencies": { "Openchain.Server": "0.5.0-rc1", "Openchain.Sqlite": "0.5.0-rc1", "Openchain.Validation.PermissionBased": "0.5.0-rc1", "Openchain.Anchoring.Blockchain": "0.5.0-rc1" }, "userSecretsId": "Openchain.Server", "commands": { "start": "Microsoft.AspNet.Hosting --webroot \"Webroot\" --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:8080" }, "frameworks": { "dnxcore50": { }, "dnx451": { } }, "publishExclude": [ "**.xproj", "**.user", "**.vspscc" ] }
Openchain Serverの起動
$ dnx start info: General[0] [2016-01-09 10:04:47Z] Starting Openchain v1.0.0 (DNXCore,Version=v5.0) info: General[0] [2016-01-09 10:04:47Z] warn: General[0] [2016-01-09 10:04:48Z] No root URL is configured, this instance is not able to validate transactions info: General[0] [2016-01-09 10:04:48Z] Stream subscriber disabled info: General[0] [2016-01-09 10:04:48Z] Anchoring disabled Hosting environment: Production Now listening on: http://localhost:8080 Application started. Press Ctrl+C to shut down.
と起動する。
マシン上に直接環境作るケースだと途中いろいろエラーが発生したので、お手軽に試すならDockerイメージ使うのがオススメ。