SlideShare a Scribd company logo
BitcoinとEthereumの違い
ブロックチェーンとデータ構造
ちゃーりー(@charlie_rebirth)
2016年9月
ブロックチェーンの構造のこと
Bitcoinのブロックチェーン構造について
Mastering Bitcoinなどでよくまとまっている
(7章「ブロックチェーン」に詳細が解説)
が、Ethereumのブロックチェーンは解説が世の中にあまりない?
それについて話します
Bitcoinのブロックチェーン
・ヘッダー部
・トランザクション部
* すべての取引情報(お金のやり取り)はブロックチェーンに書いてある。
ブロックチェーンのデータさえあれば残高わかる
ブロックの図
HEADER部:ブロックに関するデータ
timestamp
Difficulty:採掘難度
Nonce: PoWの結果の値
Merkle Root: マークルツリーの根(root)の値
Transactions部:取引データ
ex )
Alice to Bob: 1BTC
Bob to Charlie: 0.5 BTC
etc
Merkle Root
ブロックの中のトランザクションデータの要約値
= 取引が改ざんされていないことを確認するための値
マークルツリー(ハッシュ木)
マークル・パス
マークルツリーをたどって特定の取引データにたどり着くための必要最小限の
情報
マークルパス
途中のノードのハッシュ値だけでたどることができる
Bitcoinのおさらい
Merkle Treeが使われる
取引データの整合性の確認ための木構造データ
・通貨を送るだけのシステムではない。
・ユーザーが任意のプログラムを書いてそれを実行させる(万能チューリング・マシン)
・取引データだけでなく、「状態データ」(State)を記憶しないといけない
(全アカウント・コントラクトの情報)
膨大なデータ量!!!
Ethereumは複雑だった
Bitcoin
Ethereum
知らなかった! Bitcoinとethereumの違い
知らなかった! Bitcoinとethereumの違い
Ethereum Architecture
参考ページ
Ethereum block architecture
http://ethereum.stackexchange.com/questions/268/ethereum-block-
architecture
> eth.getBlock(2040449)
{
difficulty: 57164803413005,
extraData: "0xe4b883e5bda9e7a59ee4bb99e9b1bc",
gasLimit: 4712380,
gasUsed: 252000,
hash: "0x00a75e75a5a70f7a2550718ae56a34904d63c8a28ef293a18611eb8766a58c92",
logsBloom: "",
miner: "0x61c808d82a3ac53231750dadc13c777b59310bd9",
nonce: "0x5f130ae01311795b",
number: 2040449,
parentHash: "0x5ef63a62aa871d58b8f26cd4acda621557806a943f46ed76e401030f79982b2b",
receiptRoot: "0x42dbcf6a2f8716f63d441459a96b54fdc6d70bc44f6641c144f24647c04c3a97",
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 1896,
stateRoot: "0xb4980433b3f53d0dbfffbe833102e0f37296b60081e9e8170975a05a767d7946",
timestamp: 1470749971,
totalDifficulty: 46140009996266484451,
transactions: ["0xf38046731a2268e0558305449f366c49604bccc0c056efda0dac20207cecd802",
"0x8c10abdf63e369d2db09297de90a9d8b2831ad0b796de36be8ef109643e7d6f5",
"0x0a090cc48494aba9ab587e8e0b4d48e632d27578aab333adc37f85b79dbd1684",
"0xaea8cfbae769dd579d274c0ebbf731b182167decf83ac6dd7c0f42f9d7551acf",
"0x0547b8962b4be66a3636be1ad39221d21f4ad630e203ad62b7ac52ef8e5aabaa",
ブロックチェーンに記録されているのはトランザクション情報のみ
✕「ブロックチェーンにコントラクトを書き込んであってすべての変数が保存
されている」
正しくは↓
コントラクトそのものや、内部変数、状態変数のデータは
ブロックチェーン上には無い
大丈夫かそれ?
状態データ、アカウントデータ
各ノードでデータを保持してる
Transactionsを元に、各ノード独自でState Treeを計算して生成
State Tree(全アカウント・コントラクトの状態を記録した木構造のデータ)
容量が大きくなるが、ブロックチェーン本体さえあればいつでも再構築でき
るのがポイント(State Treeを改ざんできない)
Merkle Patricia Tree
データの整合性(改ざんへの耐性)のためのMerkle Tree
×
データの効率的保持のためのState Tree(Patricia Tree)
↓
融合合体
マークルツリー(ハッシュ木)
Radix Tree (基数木、トライ:Trie)
・検索が高速
・必要なノード(節)の数が
多い
⇨
深くなるほどデータ容量が
O(N^2)で増える
非効率
※ハッシュ値は長い文
字列なので非効率
Patricia Tree(パトリシア木)
通常のトライ木と異なり、
辺には1つの文字だけでなく文字の並びが
ラベルとして付与される。
これは長い文字列の集合や
長い接頭部を共有する文字列の集合などで
効果を発揮する。
パトリシア木
・必要なノード(節)の数
が少なくできる。
⇨データ容量を減らせる
・だが、実装は複雑になる
Merkle Patricia Trie
● Patricia Treeのように効率よくデータを格納・取り出しができる
● Merkle Treeのようにハッシュ値を元にしたツリー構造で改ざんされてい
ない証明ができる
(ツリーのどこかのデータが変わるとState Root値が変わってしまう)
⇨ State Treeにも暗号学的な改ざんへの耐性がある(PoWに基づく)
State tree
● state root から分岐する木構造
● 各ノードはハッシュ値を保持し、子ノードのハッシュ値は親ノードのハッシュ値に影響を与
える
● いずれかのノード内の値を変えると、ハッシュ値が変更⇨親ノードのハッシュ値が変更⇨root
hashが変更される
● root hashが与えられた時、そのハッシュ値と整合性のあるState treeのみが正しい。
⇨ 不正な変更は見つかる
知らなかった! Bitcoinとethereumの違い
Ethereum wiki / Ethereum Development Tutorialより
Ethereum Scalability and Decentralization Updates
Merkle Patricia tree のノードの種類
1. NULL (空文字) [ null ]
2. key-value型 [ key, value]
3. 配列型 [ v0 ... v15, vt ]
例
<以下のkey:valueを記録する場合>
('dog', 'puppy'), ('horse', 'stallion'), ('do', 'verb'), ('doge', 'coin')
key を16進数の値(ASCIIコード)に変換し、配列にする。(その配列は対応するvalueまで辿る経
路を表す)
[ 6, 4, 6, 15, 16 ] : 'verb'
[ 6, 4, 6, 15, 6, 7, 16 ] : 'puppy'
[ 6, 4, 6, 15, 6, 7, 6, 5, 16 ] : 'coin'
Ethereum
基数木(Radix Tree)で値を保存する場合
存在する全経路・分岐でノードを作成する必要が
ある
⇨
分岐(ノード)が多く、深くなればなるだけ記憶
容量をとってしまう。
Merkle Patricia Tree
Patricia Tree状になるように計算(key の値はRLPエンコーディングというもので変換
されている)
ROOT: [ '¥x16', A ]
A: [ '', '', '', '', B, '', '', '', C, '', '', '', '', '', '', '', '' ]
B: [ '¥x00¥x6f', D ]
D: [ '', '', '', '', '', '', E, '', '', '', '', '', '', '', '', '', 'verb' ]
E: [ '¥x17', F ]
F: [ '', '', '', '', '', '', G, '', '', '', '', '', '', '', '', '', 'puppy' ]
G: [ '¥x35', 'coin' ]
C: [ '¥x20¥x6f¥x72¥x73¥x65', 'stallion' ]
この時、子ノードへの参照であるA,B,C,D,E,F,Gは
ハッシュ関数 sha3([..... ]) によって算出される。
そのため、値が変わると参照値が変更され、Rootのハッシュ値も変更される。
Patricia Treeにvalueを格納する図
必要なノード数が少ない
⇨ 記憶容量の節約
詳細は
Understanding the ethereum trie
https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/
または
Ethereum wiki のPatricia Treeの項目参照
まとめ
● Ethereumでは、ブロックチェーンに全データを保持していなくても、改
ざん不可能なデータ構造を各クライアントに保持させることができる。
● 外部記録を有効に活用することで、ブロックチェーンのサイズの肥大化は
抑えられているみたいだー。

More Related Content

PDF
Open vSwitchソースコードの全体像
PPTX
Prometheus入門から運用まで徹底解説
PDF
katagaitai CTF勉強会 #5 Crypto
PDF
C/C++プログラマのための開発ツール
PDF
実装して理解するLINE LoginとOpenID Connect入門
PDF
今なら間に合う分散型IDとEntra Verified ID
PDF
muCon 2016: Authentication in Microservice Systems By David Borsos
PDF
分散型IDと検証可能なアイデンティティ技術概要
Open vSwitchソースコードの全体像
Prometheus入門から運用まで徹底解説
katagaitai CTF勉強会 #5 Crypto
C/C++プログラマのための開発ツール
実装して理解するLINE LoginとOpenID Connect入門
今なら間に合う分散型IDとEntra Verified ID
muCon 2016: Authentication in Microservice Systems By David Borsos
分散型IDと検証可能なアイデンティティ技術概要

What's hot (20)

PPTX
やってはいけない空振りDelete
PDF
Dockerfileを改善するためのBest Practice 2019年版
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
PPTX
NGINXをBFF (Backend for Frontend)として利用した話
PDF
Optimistic Rollupとは何か
PDF
JDKの選択肢とサーバーサイドでの選び方
PDF
AWSにおけるIaCを活かしたTerraformの使い方2選! ~循環型IaCとマルチクラウドチックなDR環境~ (HashiTalks: Japan 発...
PPTX
継続的にテスト可能な設計を考える
PDF
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
PDF
LINE Login総復習
PDF
SQL Server/SQL Database の新機能のお話し
PDF
Keycloak拡張入門
PPTX
Azure Artifactsを触ってみよう
PDF
MySQLレプリケーションあれやこれや
PDF
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
PDF
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
PDF
Cloud Foundryで学ぶ、PaaSのしくみ講座
PPTX
PHPとシグナル、その裏側
PDF
Ruby で高速なプログラムを書く
やってはいけない空振りDelete
Dockerfileを改善するためのBest Practice 2019年版
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
NGINXをBFF (Backend for Frontend)として利用した話
Optimistic Rollupとは何か
JDKの選択肢とサーバーサイドでの選び方
AWSにおけるIaCを活かしたTerraformの使い方2選! ~循環型IaCとマルチクラウドチックなDR環境~ (HashiTalks: Japan 発...
継続的にテスト可能な設計を考える
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
LINE Login総復習
SQL Server/SQL Database の新機能のお話し
Keycloak拡張入門
Azure Artifactsを触ってみよう
MySQLレプリケーションあれやこれや
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
Cloud Foundryで学ぶ、PaaSのしくみ講座
PHPとシグナル、その裏側
Ruby で高速なプログラムを書く
Ad

Viewers also liked (8)

PDF
ブロックチェーンに冷水をぶっかける
PDF
Blockchain@OSC Kyoto 2016
PPT
メイドカフェの歴史と今
PPTX
Bitcoinの個人的勉強ノート 第3版(2015年1月4日)
PPTX
Ethereumをさわって実感するブロックチェーンハンズオン(新版はここ https://www.slideshare.net/mogiken1/et...
PDF
Bitcoinを技術的に理解する
PDF
ブロックチェインとOpen asset protocol
PDF
Nosqlの基礎知識(2013年7月講義資料)
ブロックチェーンに冷水をぶっかける
Blockchain@OSC Kyoto 2016
メイドカフェの歴史と今
Bitcoinの個人的勉強ノート 第3版(2015年1月4日)
Ethereumをさわって実感するブロックチェーンハンズオン(新版はここ https://www.slideshare.net/mogiken1/et...
Bitcoinを技術的に理解する
ブロックチェインとOpen asset protocol
Nosqlの基礎知識(2013年7月講義資料)
Ad

Similar to 知らなかった! Bitcoinとethereumの違い (14)

PPTX
ブロックチェーンの仕組みと動向(入門編)
PDF
5分でわかるブロックチェーンの基本的な仕組み
PDF
ブロックチェーンの基本構造
PDF
Ethereum whitepaper
PPTX
Blockchain wg 20170803
PPTX
筑波大学 Blockchain meetup 第一回
PPTX
ビットコイン~原理からソースまで~
PPTX
ブロックチェーン書き換え不可能な記録によって社会はどう変化するか?
PDF
ブロックチェーン連続講義 第3回 ビットコインの技術
PDF
仮想通貨始めました~GethではじめるEthereum~
PPTX
170301 いまさら聞けないブロックチェーン①
PDF
ビットコインテストネットでの送金体験付きビットコイン・ブロックチェーン勉強会資料
PDF
Blockchain innovation
PDF
Blockchain入門
ブロックチェーンの仕組みと動向(入門編)
5分でわかるブロックチェーンの基本的な仕組み
ブロックチェーンの基本構造
Ethereum whitepaper
Blockchain wg 20170803
筑波大学 Blockchain meetup 第一回
ビットコイン~原理からソースまで~
ブロックチェーン書き換え不可能な記録によって社会はどう変化するか?
ブロックチェーン連続講義 第3回 ビットコインの技術
仮想通貨始めました~GethではじめるEthereum~
170301 いまさら聞けないブロックチェーン①
ビットコインテストネットでの送金体験付きビットコイン・ブロックチェーン勉強会資料
Blockchain innovation
Blockchain入門

知らなかった! Bitcoinとethereumの違い