242
223

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-11-21

ブロックチェーン技術

ブロックチェーンと呼ばれる技術はかなりの数が存在する。
ただ、実際はブロックチェーンではないものもあげられていることがある。
営業的にはブロックチェーンでなくともブロックチェーンと言った方が売りやすいのだろう。
海外がほとんどだが、企業が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で公開されており、課題・問題点が列挙されている。

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

242
223
12

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
242
223