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
1k
なぜぼくが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
400
自己組織的な開発チームを如何にして作り上げるか / how to build self-organizing team
kiririmode
8
9.1k
このConsulがすごい!/consul is great!
kiririmode
0
450
Other Decks in Technology
See All in Technology
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
11
3k
JEDAI Meetup! Databricks AI/BI概要
databricksjapan
0
150
偶然 × 行動で人生の可能性を広げよう / Serendipity × Action: Discover Your Possibilities
ar_tama
1
1.1k
7日間でハッキングをはじめる本をはじめてみませんか?_ITエンジニア本大賞2025
nomizone
2
1.9k
2.5Dモデルのすべて
yu4u
2
880
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready Name Tag Data with PHP
tomzoh
0
110
運用しているアプリケーションのDBのリプレイスをやってみた
miura55
1
740
エンジニアが加速させるプロダクトディスカバリー 〜最速で価値ある機能を見つける方法〜 / product discovery accelerated by engineers
rince
4
380
ビジネスモデリング道場 目的と背景
masuda220
PRO
9
560
組織貢献をするフリーランスエンジニアという生き方
n_takehata
2
1.3k
分解して理解する Aspire
nenonaninu
1
300
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
2
250
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Why Our Code Smells
bkeepers
PRO
336
57k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
A Philosophy of Restraint
colly
203
16k
Designing Experiences People Love
moore
140
23k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
330
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Speed Design
sergeychernyshev
27
790
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Faster Mobile Websites
deanohume
306
31k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
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における創発的コンセンサス ★各ノードは単純な(?)ルールに従うだけ ★リーダーすら必要としない ★コンセンサス(合意)がひっくり返されることは(ほぼ)ない ★改竄は困難