Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
なぜぼくがbitcoinに心惹かれるのか
Search
Yuichi Kiri
March 01, 2019
Technology
1
970
なぜぼくがbitcoinに心惹かれるのか
Yuichi Kiri
March 01, 2019
Tweet
Share
More Decks by Yuichi Kiri
See All by Yuichi Kiri
CloudNativeなサービス用環境を構築するツールキット Eponaを作った/toolkit to create cloud-native environment for our services
kiririmode
0
390
自己組織的な開発チームを如何にして作り上げるか / how to build self-organizing team
kiririmode
8
9k
このConsulがすごい!/consul is great!
kiririmode
0
430
Other Decks in Technology
See All in Technology
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.1k
Youは何しにJAWS-UGへ?
fukuchiiinu
1
110
mikroBus HAT を用いた簡易ベアメタル開発
tarotene
0
340
Terraform Stacks入門 #HashiTalks
msato
0
330
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
150
RubyのWebアプリケーションを50倍速くする方法 / How to Make a Ruby Web Application 50 Times Faster
hogelog
2
910
Making your applications cross-environment - OSCG 2024 NA
salaboy
0
110
安心してください、日本語使えますよ―Ubuntu日本語Remix提供休止に寄せて― 2024-11-17
nobutomurata
0
670
メールサーバ管理者のみ知る話
hinono
1
110
DMARC 対応の話 - MIXI CTO オフィスアワー #04
bbqallstars
1
150
スクラムチームを立ち上げる〜チーム開発で得られたもの・得られなかったもの〜
ohnoeight
2
340
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
170
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
693
190k
We Have a Design System, Now What?
morganepeng
50
7.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
830
Teambox: Starting and Learning
jrom
133
8.8k
A better future with KSS
kneath
238
17k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
400
Transcript
なぜぼくが Bitcoinに 心奪われるのか kiririmode@吉祥寺.pm #17
自己紹介 ★ アカウント: kiririmode ★ Blog: 理系学生日記 ★ 株式会社TIS ★
木利友一
わたしとPerl ★テクノロジーを好きにさせてくれたのが Perl ★世は Plagger 全盛の時代 ★Googleで「はらへった」と検索するとピザが届く時代 ★Perl Monger への憧れ
★プログラミングは楽しい ★テクノロジーは楽しい ★エンジニアリングは楽しい
報恩謝徳 ★テクノロジーの楽しさ ★テクノロジーの奥深さ
最近の業務 ★Bitcoinテクノロジーを使ったプラットフォーム開発 ★Bitcoinのテクノロジーはめちゃくちゃ面白い ★中央集権機関のない通貨発行 ★楕円曲線暗号とその応用 ★大規模P2Pネットワークにおけるビザンチン・フォールトトレランス ★互いに信頼しないノード間での信頼できる取引 ★目の前に広がるこれまでまったく知らなかった世界
Bitcoinの技術 今日のテーマ: 創発的コンセンサス
そもそもBitcoinとは? ★仮想通貨(暗号資産) ★中央サーバ・管理者無しで発行される通貨 ★プロトコル名 ★プロトコルなので、実装は多数ある ★RI: Bitcoin Core (C++) ★btcd
(golang) ★Perl実装は見当たらず… ★ネットワーク名 ★Bitcoinプロトコルを動かすノードで構成されるP2P NW
Bitcoinネットワーク ★各ノードでプロトコルスタックが動作するP2Pネットワーク ★bitcoin core(bitcoind)/btcd/etc. ★特定の機関に信用を依存しない (trustless) ★no authority. no leader
(⇔ Paxos, Raft) ★各ノードは隣接ノードとトランザクションやブロックをやり取り bitcoind bitcoind bitcoind btcd bitcoind
中央集権機関がない通貨発行 ★どうやって二重支払がないことを担保するか ★ぼくが[ID:abc]の一万円札をaliceに送る ★ぼくが[ID:abc]の一万円札をbobに送る ★一万円札には実体がある ★みんな銀行を信じている ★偽札の製造は、精巧な印刷技術で防止される ★誰がどの一万円札を持っている? ★誰が誰にいつ千円を支払った?
分散システムが直面する問題 ビザンチン将軍問題
ビザンチン将軍問題 ★相互に通信しあうノード ★通信は途絶し得る ★ノードは故障し得る ★ノードは故意に偽の情報を流し得る 全体として正しい合意を 形成できるか (consensus problem)
Bitcoinの世界のコンセンサス ★Bitcoinにおける合意の対象 ★「何を誰が所有しているのか」 ★emergent consensus (創発的コンセンサス) ★各ノードは単純なルールに従うのみ ★個々のノード間の相互作用によって、 ネットワーク全体として「合意」が形成される 相互作用を繰り返すだけで、
ネットワーク全体として一つの合意に収斂する
他のemergentな例 ★群れとしての蟻は餌への最短経路を探すことができる ★複数の蛙が鳴くタイミングが勝手に同期していく ★群れとしての鳥が飛ぶときに編隊を形づくる 相互作用を繰り返すだけで、 全体として一つの振舞いに収斂する
単純なルール 1. トランザクション検証 2. トランザクションのブロックへの集積 (マイニング) 3. ブロック検証とブロックチェーンへの埋め込み 4. ブロックチェーンの選択
(合意形成)
単純なルール 1. トランザクション検証 2. トランザクションのブロックへの集積 3. ブロック検証とブロックチェーンへの埋め込み 4. ブロックチェーンの選択 (合意形成)
トランザクション検証 ★送られてきたトランザクション(tx)を転送する前の検証 ★format/二重支払いでない/標準tx/etc. ★有効なトランザクションだけがNWを流れることを保証 ★無効なトランザクションは捨てる tx txの検証 tx tx txの検証
txの検証
単純なルール 1. トランザクション検証 2. トランザクションのブロックへの集積 3. ブロック検証とブロックチェーンへの埋め込み 4. ブロックチェーンの選択 (合意形成)
トランザクションの集積 ★トランザクションはNWを流れるだけでは意味を為さない ★ブロックに記録されてはじめて参加者から承認される ★ブロックにトランザクションを集積しチェーンに繋ぐこと: マイニング ★マイニングを行うノード:マイナー
マイニング ★受信したTXをブロックに集積すること ★1つのブロックには2,000程度のTXが集積される ★集積のためにはマイナーが計算問題を解く必要がある ★ブロックを繋げることが前ブロックの「承認」 Version Previous Block Hash Merkle
Root Timestamp Difficulty Target Nonce transa ctions block #100 block header block #99 block #101 今の問題難易度 マイナーの回答欄
マイナーの解く計算問題 ★問題「SHA-256(block header) < Difficulty TargetとなるNonceを探せ」 ★ポイント: Block Header は前のブロックにも依存する
★なぜなら前のBlockのハッシュを含むから Version Previous Block Hash Merkle Root Timestamp Difficulty Target Nonce transa ctions block header 今の問題難易度 マイナーの回答欄 block #99
Proof of Work ★Block Header は前のブロックにも依存する ★チェーンが後ろに繋がるほど改竄が困難 ★改竄するにはマイナーがこれまで投入した計算量が必要 ★チェーンが繋がるほどブロック内のTXは信頼ができる ★現実的には6ブロック繋がればOK的なかんじ
マイニングを行うインセンティブ ★マイナーはマイニングの早いもの勝ち競争を行っている ★競争を行うために大量のハッシュ計算 ★一番早く作られたブロックが皆に共有されていく ★マイナーのインセンティブは何か ★競争に勝利したマイナーはBitcoinを得ることができる ★「自分がBitcoinを得た」というTXをブロックに集積する権利
単純なルール 1. トランザクション検証 2. トランザクションのブロックへの集積 (マイニング) 3. ブロック検証とブロックチェーンへの埋め込み 4. ブロックチェーンの選択
(合意形成)
ブロックチェーンへの埋め込み ★マイナーは問題が解け次第ブロックをbroadcast ★ブロックを受け取ったノードはブロックを検証 ★競争に負けたマイナーは次の競争を始める ★検証に成功後、ノード自身の持つBlockchainに追加 block blockの検証 block block blockの検証
blockの検証
単純なルール 1. トランザクション検証 2. トランザクションのブロックへの集積 (マイニング) 3. ブロック検証とブロックチェーンへの埋め込み 4. ブロックチェーンの選択
(合意形成)
ブロックチェーンの選択 ★ブロックを受信したノードは自身のBlock chainに繋ぐ ★同じ世代のブロックを複数受信した場合: ★累積Difficultyが大きい方のBlockを繋ぐ ★ネットワーク全体として計算力が多くつぎ込まれたBlockが Chainに追加されていく block #99 block
#100 block #101 block #101
まとめ ★Bitcoinにおける創発的コンセンサス ★各ノードは単純な(?)ルールに従うだけ ★リーダーすら必要としない ★コンセンサス(合意)がひっくり返されることは(ほぼ)ない ★改竄は困難