Edited at

さまざまなブロックチェーン技術

More than 1 year has passed since last update.


ブロックチェーン技術

ブロックチェーンと呼ばれる技術はかなりの数が存在する。

ただ、実際はブロックチェーンではないものもあげられていることがある。

営業的にはブロックチェーンでなくともブロックチェーンと言った方が売りやすいのだろう。

海外がほとんどだが、企業がSaaS形式で提供しているものも多い。

ピックアップしたものは主にソースコードを解析したものや、実際に動作させてみたもの。基本的にAWSで動作確認している。

オープンソース陣営を見ると、サーバー側の実装はパフォーマンスや並行処理に優れるGo言語が多い。

APIをCallする側のクライアントの言語は問われないが、既存のライブラリなどの存在有無により開発生産性も異なる。

Bitcoinのシェアが圧倒的なのは依然としてかわらず。

その他のブロックチェーン技術の中では2番目にシェアの高いEthereumや、多くの資本が入っているChain、Hyperledger fabricあたりが生き残るのではないかと思うがブロックチェーンそのものが生き残る技術なのかどうかも、現時点では不明である。


対象リスト

2016年4月時点の資料だが、ブロックチェーンかもしれない技術の一覧表が記載されている。

これをベースに調査をしたが、開発が停止しているもの、SaaS形式のもの、ブロックチェーンではないものも含まれている。

http://www.digitalmoney.or.jp/wp-content/uploads/2016/04/201604_BlockChain2.0_v06.pdf


ブロックチェーンでない技術


Ripple

https://ripple.com/

RippleConnectというソリューションが存在するがRippleの手前に設置する別システムであり、国内プレスリリースなどでのRippleはRippleConnectを指す。分散台帳・分散システムであり、ブロックチェーンではない。


Orb(version2)

https://imagine-orb.com/jp/

version1はブロックチェーン。現行のversion2は分散システム(分散システム関連のオープンソースをベースに開発されている)であり、ブロックチェーンではない。


Corda

https://github.com/corda/corda

https://docs.corda.net/index.html

https://www.corda.net/

コンソーシアム、プライベート。もともとはクローズドソース。R3主導で進められていたプロジェクト。

Chain同様に、2016年10月オープンソース化が発表され、Hyperledgerプロジェクトを進めているLinux Foundationにソース提供された。

JVM上で動く、Kotlin言語実装。

Ethereum系同様にコントラクト実行機能を保有する。

githubに置かれているサンプルデモはWindowsではエラーで動かず、Linux環境でもGUIがないと動かない(スクリプト内でxtermを起動している)。ubuntuのDesktop環境でもそのままでは動かない。MacOSでは動く。

ただ、MacOS(ローカルPC)で動いても所詮、動作確認と検証程度しかできないのでLinuxOSのServer環境での動作については見直してほしい。

ドキュメントは確かに存在するが、Chainのようにすぐに使えるドキュメントではなく、ソースの解析も必要。ドキュメントはパス記述誤りなどもあり、コードも含め精査されていないので利用はお勧めしない。資本はかなり入っているはずなので残念。

公式Slackで質問を投げたが、整備の必要性は認識していた。

以下の記事では

https://news.bitcoin.com/corda-blasted-r3-fail-funding-goals/

また公開された仕様ではブロックチェーンとは言っておらず、コンセンサスアルゴリズムでは全員がすべてのデータを共有していない(トランザクション関係者のみの同意が必要)。

diag2.png

パフォーマンスを優先しているため、ブロックチェーンの特徴は捨てている。

R3コンソーシアムからはすでにGoldman Sachs,Santander,Morgan Stanley and National Australia Bankが脱退している。

参加している企業にはR3から投資が求められるが、それに見合わないと判断されたのかどうか。今後も脱退企業が出てくるかもしれず、コンソーシアム型が成立しなくなる恐れもある。

将来性の観点からもビジネス利用はお勧めしない。


ブロックチェーン技術リスト


Bitcoin

https://bitcoin.org/ja/

パブリック。オープンソース。C++やJava、nodejs、Go言語、pythonなど複数言語実装あり。

代表的な仮想通貨でありブロックチェーン。

取引の承認に10分前後かかるが、仮想通貨の中でもシェアが圧倒的であり、仮想通貨市場の8割強を占める。

データ改ざんは現実的に不可能。

その安全性から、最終的にBitcoinに記録するソリューションやサービスも数多く存在する。

ColoredCoinsやSidechainなどは証明の場としては有用。


MultiChain

http://www.multichain.com/

プライベート。バイナリ配布で、ソースコードは現在公開されていない為実装技術不明。

Contactをとれば閲覧はできるかもしれない(ただし英語)。

Windows版も出ているので、Go言語かC++か。

環境構築しやすく、扱いやすいブロックチェーン技術。

multisig関連以外は普通に使える。

旧バージョンではbitcoinとの互換性を売りにしていたが、現在は独自の方向に向かっている。

まだアルファバージョンではあるが、開発が続けられている。

アカウントはノード(サーバ)ごとに別管理で、残高などのノード間でのデータ共有はしない。

ただし、別ノードのアドレス宛に送金などは実行できる。

銀行の支店別に口座を持っているようなイメージ。

トランザクション実行パフォーマンスもブロックチェーン技術のなかでは高い部類で、

秒間100トランザクション程度までは簡単にいける。


Ethereum

https://www.ethereum.org/

パブリック、プライベート。オープンソース。Go言語やC++、Javaなど複数言語実装あり。

bitcoinに次いで有名なブロックチェーン技術。

分散ネットワーク上でプログラムを動作させることができる環境で、通貨の送金が目的ではない。

プログラムはコントラクトと呼ばれ、独自言語Solidityで記述するが、Solidity開発のためのIDEも数種類ある。

bitcoinよりは複雑な処理を書くことができる。プログラムもデータもブロック内に持ち、独自仮想マシン(EVM)上で動作する。

原理上、コントラクト実行のパフォーマンスは悪い。

仮想通貨は送金するためのものではなく、プログラムなどを実行するための燃料(手数料)として使われる。

トランザクション能力は秒間20~50程度。

送金業務の置き換え用途ではなく、価値や証明の場としてはパブリックであれば有用。


Hyperledger fabric

https://www.hyperledger.org/

プライベート、コンソーシアム。オープンソース。Go言語実装。ブロックチェーンの共同開発プロジェクト。大手が多数参入している。

もともとはIBMの持っていたOpenBlockChainを、Linux Foundationに提供したもの。

IBMのBluemixではblockchainをEnterprise向けに提供しているので、商用で使うとすればこちらを採用したほうがよい。

http://www-935.ibm.com/industries/jp/ja/blockchain/

Ethereumのように、分散ネットワーク環境でプログラムを実行するための環境。

プログラムはチェーンコードと呼ばれ、Go言語やJava言語など汎用言語で記述することができる。

プログラムはノードPCのOS上で実行される為、Ethereumにくらべパフォーマンスに優れる。

ブロックから参照可能なworld stateと呼ばれる独立したKVSをもち、様々な属性のデータの保存が可能。

ほかのブロックチェーンと違い、決済完了点を持つため、即時決済完了済みとみなすことができる。

認証の仕組みも標準で持っている。

既に実証実験の結果がwebで公開されており、課題・問題点が列挙されている。

http://www.jpx.co.jp/corporate/research-study/working-paper/tvdivq0000008q5y-att/JPX_working_paper_No15.pdf

Qiita上にも関連記事はあるので、そちらを参考に構築・検証を行った。


Hyperledger Sawtooth Lake

http://intelledger.github.io/introduction.html

https://www.hyperledger.org/blog/2016/11/02/meet-sawtooth-lake

もともとはintelの開発していたブロックチェーン技術を、Linux Foundationに提供したもの。

Python実装。

実験用途にしか利用を推奨していない。

独自のコンセンサスアルゴリズムPoETを持つが、これは本来intelが提供するハードウェアを利用して

行われるため完全版ではなく、オープンソース版ではシミュレータが用意されている。

開発は続けられているが、正式なプロダクトへの採用を勧めていない為、選択肢にはならない。

興味があればドキュメントなどを参照のこと。


Hyperledger Iroha

https://prtimes.jp/main/html/rd/p/000000006.000019078.html

https://www.hyperledger.org/blog/2016/11/01/hyperledger-welcomes-iroha

もともとはソラミツが開発していたブロックチェーン技術を、Linux Foundationに提供したもの。

C++実装。

シンプルさとモバイル用途を前面に出している。

規模的にもstar数でもHypeledgerファミリーのほかのブロックチェーン技術に劣る。

開発は続けられているが、ドキュメントやWebでの情報は不足している。

将来的にHyperledger fablicなどとの連携を目指しているようだ。

現在はDraftバージョン。


Hydrachain

https://github.com/HydraChain/hydrachain

プライベート、コンソーシアム。オープンソース。python実装。

Ethereum互換であり、コントラクト実行環境だが、コンセンサスアルゴリズムが独自。

環境構築から動作までは比較的容易だが、ノードは6台以上必要。

コントラクトのプログラムをPythonで記述することができる。

EVMを使わずにコントラクトを動作させられるため、Ethereumにくらべコントラクト実行のパフォーマンスはよい。


Eris(ErisDB)

https://monax.io/docs/documentation/

プライベート。オープンソース。Go言語実装。

コンセンサスアルゴリズムにTendermint Consensus(ほかのオープンソースのブロックチェーン関連技術)を採用。

検証当時、ドキュメント不足で環境構築できず。


Tendermint

https://github.com/jTMSP/jTMSP

ブロックチェーンプロトコル。単体では機能せず、ベースとなる仕組みであり、API実装が必要。

また、コンセンサスアルゴリズムをほかのブロックチェーン技術に提供している。

EthereumのTendermint版も出ている。


NXT

https://nxt.org/

https://www.coin-portal.net/2016/06/10/9569/

パブリック、プライベート。オープンソース。Java実装。githubではなく、bitbucketでソース公開している。

日本語の情報はないが、英語の情報も不足しているため、選択肢としては弱い。

まとまった情報としては、wikiが存在する。

https://nxtwiki.org/wiki/Main_Page

トランザクション能力は秒間80程度。


Rootstock

http://www.rsk.co/

http://media.rsk.co/july2016-pr/

https://github.com/rootstock/ethereumj

パブリック。オープンソース。Java実装。

ethereumjからForkしたソースコードをベースに、bitcoinネットワークの要素を取り入れつつパフォーマンスを改善した技術。

EVM(Ethereumのコントラクト実行仮想環境)のパフォーマンスも改善したとしている。テスト段階。


BigchainDB

https://www.bigchaindb.com/features/

https://github.com/bigchaindb/bigchaindb

パブリック、プライベート。python実装。

非中央集権型の分散Databaseにブロックチェーンの要素を取り入れている。

KVSであるRethinkDBを内部で使用。

P2Pネットワークでノードが相互接続しつつデータ共有するため、すべてがマスターDBになり、書き込み可能。

マスター+スレーブではなく、すべてがマスター。


AntShares

https://www.antshares.org/

https://github.com/AntShares

https://github.com/AntShares/AntShares/wiki/API-Reference

パブリック。オープンソース。C#実装。

中国のブロックチェーン技術。ブロックチェーンの一般的な特徴しか書かれておらず、詳細不明。

英語のドキュメントもあるにはあるが、ほとんどは中国語。


Chain

https://chain.com/

https://github.com/chain/chain

http://fortune.com/2016/10/24/visas-blockchain-chain-open-source/

コンソーシアム、プライベート。もともとはクローズドソース。

Go言語実装。

2016年10月、Chain Core Developer Editionというエディションに限りオープンソース化された。

VISA主導で進められていたプロジェクトのブロックチェーン技術。

まだオープンソース化されたばかりで情報が少ないが、java用のSDK(jar1つ)もあり、ドキュメントも比較的充実しているため、そちらが参考になる。Rubyのサンプルソースも増えている。

現時点ではコントラクト実行機能は保有していない。まだ研究開発が進められている。

dockerベースであり構築からAPI実行までが容易。

名前のせいでgoogle検索しにくい。


DragonChain

https://github.com/dragonchain/dragonchain

https://dragonchain.github.io/

パブリックとプライベートのハイブリッド。オープンソース。

python実装。

2016年10月にディズニーが作ったブロックチェーン技術として公開、オープンソース化された。

パブリックネットワークにチェックポイントを記録するタイプのプライベートブロックチェーン。

オープンソース化の時点で話題にはなったが、その後海外でも目立った動きはない。

まだ実装は続けられているが、今採用するメリットはない。

White Paperにはいろいろ書かれているが、あくまでプロジェクト目標。送金APIなどが最初から用意されているわけではない為、APIは自分で実装する必要がある。APIのソースコード生成にApache Thriftを使っているがThriftはすでに開発は停止している。導入にmakeが必要なのでひと手間かかる(MacOSの場合、brew installで入るようだが未確認)。Thriftそのものの情報も少なく、Thrift IDLも覚える必要がある。Thrift IDLで記述したソースをThriftでコンパイルすると、様々なプログラム言語でソースコードを出力でき複数言語で相互連携できる仕組みだが、特にメリットは感じられない。

導入する場合は、Linuxであればredhat系ではなく、ubuntuの方が躓く箇所が少ない。ただ、githubのreadmeに書かれている手順だけでは環境構築できず、ドキュメントは全体的に不足している。環境構築後、transaction_svc.pyなどを動作させても、curlでjsonでのHTTPリクエストを投げて動作確認ができる程度。


NEM(mijin)

https://www.nem.io/

パブリック、プライベート。Java実装。サーバ側(NISと呼ばれる部分)は非公開でありオープンソースではない。

NEMとmijinはバイナリレベルで同じプログラム。

接続先ネットワークの設定と、接続先メインノードPCのIP指定を変えることでパブリックネットワーク(mainネット・testネット)向けのパブリックブロックチェーンであるNEM、プライベートネットワーク(mijinネット)向けのプライベートブロックチェーンであるmijinとして動作させている。

日本語英語問わず、情報は少ない。NEMのAPIリファレンスも細かい記述があるわけではない。

NEMもmijinもAPI実行時に手数料としてXEMという通貨を消費するため、ユーザーがXEMを所持していないと何もできない仕様であり、プライベートブロックチェーンであるmijinでもXEM手数料は発生する(NEMとmijinは同じプログラムのため、NEMの仕様に引きずられる)。

「mijinのAPI実行時に毎回発生するXEM手数料」を、設定だけでゼロにすることはできない(公式回答+コード解析による)。

その為、mosaicを使って独自通貨を定義する場合は、標準通貨のXEMと、独自通貨の2種類の残高を同時に管理しておく必要がある。また、mosaic作成時にはnamespaceを指定する必要があり、これは1年間の貸出期限付き。期限切れ1か月前に再度作成(更新)処理をしなければ、ほかの人も同じ名前の通貨を使えてしまう為、更新用年次バッチも必要になる。プライベートであるmijinでも同じ。独自通貨を使う場合はシステムが複雑化する。multisigも特殊で、状態によって使うAPIを切り替えなければならず、ラッパー実装は複雑になる。

同一内容のAPIリクエストを連続して投げるとエラーになり、取引成立しない為、パフォーマンス検証にはリクエスト内容を変える必要がある。

次世代NEMであるカタパルトは2017年1Qリリース予定となっているが、もともと2016年8月にオープンソース化する予定だったのが実際されていないため、2017年もどうなるか不明。

カタパルトの構成は海外Forumによればnode.jsの入り口と、その先のC++実装エンジンから成る。


key

blockchain,ブロックチェーン,Bitcoin,Ethereum