Weitere ähnliche Inhalte
Ähnlich wie neo4jを使ったブロックチェーンデータの解析 (20)
neo4jを使ったブロックチェーンデータの解析
- 1. Copyright ©2016 HAW International Inc. all rights reserved.
neo4jを使った
ブロックチェーンデータの解析
2016/07/02
株式会社ハウインターナショナル
安土茂亨
- 2. Copyright ©2016 HAW International Inc. all rights reserved.
株式会社ハウインターナショナル
Blockchainに関する取り組み
•研究
‣カラードコインの電子投票などへの応用
‣Open Assets Protocolの実装の一つである
openassets-rubyを独自開発しOSSとして公開
•製品・サービス開発
‣Congrechain
Blockchainを使った投票システム
‣Chaintope
Blockchainの実証実験環境
‣Open Assets Explorer
Open Assets Protocolに対応したBlockchain Explorer
- 3. Copyright ©2016 HAW International Inc. all rights reserved.
弊社のドメイン
•ブロックチェーンの上位レイヤー技術の研究開発
‣ 下層は普及しているブロックチェーン(Bitcoinなど)を利用
‣ アセットの変換・ステート管理・トリガー・秘匿化など
•ブロックチェーンの関連ツール等の提供
TCP/IP
HTTP, SSL etc
Side Chain Bitcoin/Altcoin
Colored Coins
FinTechやIoTなどのビジネス応用
Bitcoin
2.0
Blockchainの上位プロトコル
Private
Chain
OAuth, DKIM etc
- 4. Copyright ©2016 HAW International Inc. all rights reserved.
P2Pネットワークを利用した分散DB
Transaction
broadcast
broadcast
broadcast
フルノードのディスクサ
イズは70〜80GBほど
Bitcoinを送るというのは、
Bitcoinの送付トランザザクションを
生成してブロードキャストすること
ブロードキャストされたトラン
ザクションはマイナーによっ
てブロックに格納される
各ノードが全取引データを保持してい
て、任意のノードがダウンしても Bitcoin
のネットワークは動作し続ける
世界中のノードで取引データ
が確認できる
- 5. Copyright ©2016 HAW International Inc. all rights reserved.
【Blockchain】
発生した取引(トランザクション)を10分毎に1つのブロックに取りまとめ、
そのブロックを時系列的につなげたチェーンで、非可逆的な記録台帳。
Blockchainのデータ構造
Block
Transaction Input
Output
Block Block Block
Transaction
Transaction
Input
Output
Output
Output
10min
Proof of Work
10min
Proof of Work
10min
Proof of Work
- 6. Copyright ©2016 HAW International Inc. all rights reserved.
Transactionの中身
{
"txid" : "1643a94f90f27741841984e98444718af7ba48bbde4308906df0f72818eb0058",
"vin" : [
{
"txid" : "97aa4752a511f698390f0214ef6c514dd0e02b8c79bc7e22386c118ae55e7e51",
"vout" : 2,
"scriptSig" : {
"asm" :
"304402201ef071f974592da3acf6d879fb4d7ebed19ff3d19d96ea3ed747c4d09a7e71de022003bd1fa9c0b5311c956223a9b45e05901004b6be3
9cc7cac73d75580d082290f01522601a9c035f03f7efb6f82c40ae65079249c31b4e668581357dd",
"hex" :
"47304402201ef071f974592da3acf6d879fb4d7ebed19ff3d19d96ea3ed747c4d09a7e71de022003bd1fa9c0b5311c956223a9b45e05901004b6b
e39cc7cac73d75580d082290f0121026454f388522efb6f82c40ae65079249c31b4e668581357dd"
}
}
],
"vout" : [
{
"value" : 0.00019400,
"n" : 0,
"scriptPubKey" : {
"asm" : "OP_DUP OP_HASH160 24b3d405bc60bd9628691fe28bb00f6800e14806 OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "76a91424b3d405bc60bd9628691fe28bb00f6800e1480688ac",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"14M4kbAtn71P1nnNYuhBDFTNYxa19t1XP6"
]
}
}, ...
],
"blockhash" : "000000000000000008d8232a809318cf1f2a78112bbe3867b3efe59916db8146",
"confirmations" : 7412,
"time" : 1440672183,
"blocktime" : 1440672183
}
送付先のBitcoinアドレス
出力
Bitcoin送付スクリプト
入力
送るBitcoinの量
- 7. Copyright ©2016 HAW International Inc. all rights reserved.
第三者機関によるオーソリティ
が必要
Bitcoin以外のアセットの流通
Open Assets Protocol
Bitcoinに色付けをすることで株式、証券、ユーザ独自通貨等のあらゆる資産
(アセット)を表現し、Blockchain上でアセットの発行や送付を可能にするプロトコル。
Bitcoinと異なり、発行主体が存在するため債権債務関係などを構成できる。
従来の権利の移転
Blockchainにおける権利の移転
Block Block Block
Transaction
Output
Input
第三者機関
ブロードキャスト
署名
- 9. Copyright ©2016 HAW International Inc. all rights reserved.
P2P型の投票システムCongrechain
CongreChainはブロックチェーン 上
で投票権の発行とその移転を分散
記録するシステム。
併せてOpenAssetsProtocol
(Bitcoinのブロックチェーン上で独自
資 産 を 発 行 できる 拡 張 仕 様)の
Ruby 実 装 であるopenassets-ruby
を開発し、オープンソースとして公開
(MITライセンス)。
第8回 フクオカRuby大賞
優秀賞受賞
- 11. Copyright ©2016 HAW International Inc. all rights reserved.
Blockchain実証環境Chaintope
• 検証に適したマネージド・ブロックチェーン環境
‣複数のノードで構成されるブロックチェーンクラスタの作成と管理
‣ブロックチェーンの基本操作(ブロックや簡単なトランザクションの作成など)
‣ブロックチェーンおよびトランザクションの可視化
‣ブロックチェーンクラスタ全体のスナップショット取得と復元
- 12. Copyright ©2016 HAW International Inc. all rights reserved.
ブロックチェーンデータの解析
ブロックチェーン上のデータから以下のようなデータの抽出、
ビジュアライズをしたい
● 取引履歴の取得
● 流通するBitcoin/アセットのトラッキング
● アセット保有者の確認
● アドレスをキーにした流通状況
● 指定期間内に取引が多いアドレスの抽出
● 指定金額以上の取引の抽出
● etc..
- 13. Copyright ©2016 HAW International Inc. all rights reserved.
公式実装ノードのDB
wallet
【BerkeleyDB】
blocks
chainstate
【LevelDB】
自身のウォレットデータで
鍵やトランザクション、メタデータを管理
ブロックチェーンのデータを管理
Bitcoin Coreでは2つのDBを利用
いずれもシングルプロセス(Bitcoind)
での利用が前提
- 14. Copyright ©2016 HAW International Inc. all rights reserved.
移行しやすいDBへの移行
Transaction
Input
Output
Input
Output
Output
Transaction
Input
Output
Output
Transaction
Input
Output
Input
Output
Output
Transaction
Input
Input
…
入力は必ず既存の
トランザクションの出力と
1対1になる
入力に使われていない出力(UTXO)が
使用可能なBitcoinの量
前提となるブロックチェーンのデータ構造
- 15. Copyright ©2016 HAW International Inc. all rights reserved.
Blockchainのデータをneo4jに
RDBやKVSと異なり、関係性を表現するのに特化したデータモデルで
複雑なデータ探索に最適
【NODE】
BLOCK
【NODE】
BLOCK
【NODE】
Tx
【NODE】
Tx【NODE】
Input
【NODE】
Input
【NODE】
Output
【NODE】
Output
【NODE】
Input
【NODE】
Address
【NODE】
Output
【NODE】
Tx
previous block
out point
send
send
- 16. Copyright ©2016 HAW International Inc. all rights reserved.
BitcoinCoreからデータをインポート
P2P message
import
P2P message
RPCのIFがあるので順次
Block Heightを指定してインポート
ビジュアライズ
- 17. Copyright ©2016 HAW International Inc. all rights reserved.
Cypher Query Language
neo4jにデータをインポートできたら、neo4jのデータに
対してデータ処理を行う際に利用するSQLライクな
クエリ言語Cypher QLを使ってデータ抽出が可能。
(例)送金量の多い出力をピックアップ
MATCH (n:`Graphdb::Model::TxOut`) RETURN n
order by n.value desc LIMIT 25
- 18. Copyright ©2016 HAW International Inc. all rights reserved.
Cypherレスで便利にデータ操作
neo4j便利だけどゴリゴリCypherを書きたくない
neo4jのノードの構造を
RailsのActive Recordライクな
モデルとして扱えるライブラリ
- 19. Copyright ©2016 HAW International Inc. all rights reserved.
● property
neo4jのノードのプロパティを宣言
● callback
Active Recordと同様のフックポイントをサポート
● validation
Active Modelのvalidationをサポート
● association
has_many、has_oneでノード間の関連を宣言
neo4jrbでモデル化
ActiveNode
ActiveRel
class Block
include Neo4j::ActiveNode
property :block_hash, index: :extract
property :height, type: :integer
has_many :in, :transactions, origin: :block
validates :block_hash, :presence => true
after_create :chain_previouse_block
end
関連の定義のみを別途モデル化
- 20. Copyright ©2016 HAW International Inc. all rights reserved.
neo4jrbでモデル化
class Block
include Neo4j::ActiveNode
property :block_hash, index: :extract
property :height, type: :integer
has_many :in, :transactions, origin: :block
validates :block_hash, :presence => true
after_create :chain_previouse_block
end
Node
Relation
Property
neo4jの構成要素
- 21. Copyright ©2016 HAW International Inc. all rights reserved.
neo4jrbでモデル化
query
transaction
scope
Block.all.where(block_hash: ‘xxxxxxxxxxxxx’)
Block.find_by(block_hash: ‘xxxxxxxxxxxxx’)
class Block
scope :with_height, -> (height){where(height: height)}
Neo4j::Transaction.run do |tx|
begin
…
rescue => e
tx.failure
….