~原理からソースまで~
ビットコインとは? 
•勘違いが多い 
•雑な例え方 
•先入観は捨てて 
•素晴らしく見える 
•理解すれば簡単
ビットコインの始まり 
• 論文は2008年10月31日 
metzdowd.comにて公開 
• バージョン0.1は2009/01/09 
• Windowsのみ 
• CLI無し 
• wxWidgetsとBerkeleyDBと 
Boostを使用 
• MVSでコンパイル 
• 2010年中旬に 
Gavin Andresen & Jeff Garzikに舵を取ってもらった。
現リリースについて 
 ごちゃごちゃになっていたソースのモジュール化 
 ガヴィン氏がリードの座をウラジミール氏に譲渡 
 現在目標は新機能より、ソースの安定化 
 現UIはQt、ストレージはLevel DB 
 「テストネット」と「メインネット」 
 整数は殆どリトルエンディアン、IPアドレスと 
ポート番号のみビッグエンディアン
モジュール 
 P2Pネットワーク 
 採掘アルゴリズム 
 GUI / インターフェース 
 ブロックチェーン 
 取引 
 契約条件 
 ウォレット管理 
 ペイメント(送金)
形成アルゴリズム 
 ハッシュ(SHA-256 & RIPEMD-160) 
 公開鍵vs 公開鍵ハッシュ 
 ECDSA / secp256k1 
 マークルツリー 
 ブルームフィルター
ビットコインのP2Pネットワーク 
 DNSを用いてシードサーバーへ接続 
 1000ピア以下のリストをダウンロード 
 旧バージョンではIRCを使っていた(<0.6) 
 TCP/8333でリッスン状態 
 メッセージの送受信をピアと行う 
 「inv」メッセージで最新状態に 
 ちょうど先日(10/12)にヘッダ先同期が仮実装
取引とは 
 ビットコインの拡張性がここにあり 
 入力と出力の概念 
 コーディングのことを「契約条件」と呼ぶ 
 コード以外のデータも挿入可 
 未使用出力のことを「UTXO」と呼ぶ 
 採掘手数料は出力に当てられていない入力の余分 
 「コインベース」取引は特別
取引を見よう 
TXID: 'B' 
入力1 中の1: 
出力元: TX 'A' (Bob) 
入力額: 5 BTC 
出力1 中の1: 
出力先: Charlieの公開鍵ハッシュ 
出力額: 4 BTC 
採掘手数料: 1 BTC 
コインベースTXID 'A' 
報酬: 25 BTC 
採掘者: Bob 
出力先: Bobの公開鍵 
TXID: 'C' 
入力1 中の1: 
出力先: TX 'A' (Bob) 
入力額: 7 BTC 
出力1 中の1: 
出力先: Aliceの公開鍵ハッシュ 
出力額: 6.5 BTC 
採掘手数料: 0.5 BTC 
UTXO / 残高 
採掘者Bob: 13 BTC 
Charlie: 4 BTC 
Alice: 6.5 BTC 
採掘手数料: 1.5 BTC
取引の連鎖 
TXID 'B' 
TXID 'C' (複数入力) 
Block #300 
(最古) 
コインベース 
TXID 'A' 
Block #301 Block #302 Block #303 
(最新)
取引は契約なり 
 「送金」というのは行為というより記録 
 全取引は契約のように条件が盛り込まれている 
 Forthのようにスタック手法(registerなし)、 
チューリング完全でない 
 StackはLittle Endian、可変長整数、MSBで+-が決まる 
 False = 0、True = 0以外のデータ全て 
 エラーが無く、Stackの最上層がTrueなら成立 
 採掘者は採掘する前に契約のTrueさを確認 
 通常ピアも横渡しする前に確認
契約条件について 
 現在コマンドが100個程度 
 よく使われるのが十数個 
 'standard' vs 'non-standard' 
 四つほどの 
テンプレートが殆ど 
 間違いは巻き戻せない
ブロックとは? 
 承認(採掘)された取引の塊 
 平均的に1ブロック400-600取引程度 
 サイズの上限が1000 KiB 
 コインベース取引が1つ 
 前ブロックのヘッダのハッシュ 
 含まれた取引のマークルルーツ 
 ノンス
ブロックを見てみよう 
Block #299 
ヘッダ 
取引A 
取引B 
取引C 
取引D 
取引E 
取引F 
取引G 
ハッシュに含まれない: 
Magic No バージョン情報 
Blocksize malloc() and sanity 
Transaction count Sanity/speed opt. 
ハッシュに含まれる: 
Version 拡張性を見据えて 
hashPrevBlock 前ブロックID 
hashMerkleRoot 取引の承認 
Time タイムスタンプ 
Target Bits 難易度: 低=難 
Nonce Proof of work
ブロックチェーンとは? 
 特定の順番にあるブロックの連鎖 
 ビットコイン史上全ての取引が含まれている 
 大体33万ブロックでサイズが22GB程度(2014/10/12) 
 ブロック高さが絶対的な時間の位置 
 ブロック深さが最新ブロックに対する相対的な 
時間の位置 
 0.9以降はヘッダのみのSPVモードに対応(26MB程度) 
 ゆくゆくは非UTXOの取引を除く「Pruning」も可能
採掘者の仕事は? 
 ダブルスペンド防止と通貨の発行 
 もらった取引をブロックに入れていく 
 有効なブロックID(ハッシュ)を見つける 
 有効なブロック発見時にネットワークに配信 
 2016ブロック(約2週間)ごとに難易度が自動調整 
 ブロックのハッシュが前ブロックのハッシュに 
依存するため、攻撃者との競争がブロックを 
見つける度に再び0からスタートする
ブロックチェーンの動き 
300 
301 302 303 
304 305 306 
無効なブロック 
報酬無し 
無駄な時間 
= 
採掘者のお金の無駄 
短いチェーンが負ける 
有効なブロック 
=25 BTC の報酬 
ブロック高さ(時間) 
7 ブロック(約70分)
1ビットコインとは何か? 
100,000,000サトシ
サトシとは? 
 未使用出力(UTXO)の出力額 
 公開鍵ハッシュに宛ててある 
 取引の中 
 ブロックの中 
 ブロックチェーンの中
近い将来 
 x.509 とhttp 連動 
 NFC でネット不要 
 BIP 70 (瞬時確認) 
 契約条件解禁 
 サイドチェーン 
 BIPsのGithubを参照! 
https://github.com/bitcoin/bips
スケーリングについて 
 ビットコインは平均1秒1取引のペースで動く 
 今の上限は故意に抑えられた結果 
 本当の一番のネックは取引・ブロックの 
ハッシュ確認の処理時間 
 恐らく一般デスクトップ型のCPUでは 
1秒4,000取引が限界ではないかと 
 ネットワークの速度でいうと16 Mbps 
 ブロックチェーンの膨大化 
 サトシ氏の一番の悩みがネットワークが 
技術的成熟する前に広まりすぎてしまうこと
ご清聴ありがとうございます 
本日受講された皆様限定! 
https://bitbankwallet.jp/ 
ビットバンクウォレットを作成された方に 
もれなくビットコインをプレゼントします!

ビットコイン~原理からソースまで~

  • 1.
  • 2.
    ビットコインとは? •勘違いが多い •雑な例え方 •先入観は捨てて •素晴らしく見える •理解すれば簡単
  • 3.
    ビットコインの始まり • 論文は2008年10月31日 metzdowd.comにて公開 • バージョン0.1は2009/01/09 • Windowsのみ • CLI無し • wxWidgetsとBerkeleyDBと Boostを使用 • MVSでコンパイル • 2010年中旬に Gavin Andresen & Jeff Garzikに舵を取ってもらった。
  • 4.
    現リリースについて  ごちゃごちゃになっていたソースのモジュール化  ガヴィン氏がリードの座をウラジミール氏に譲渡  現在目標は新機能より、ソースの安定化  現UIはQt、ストレージはLevel DB  「テストネット」と「メインネット」  整数は殆どリトルエンディアン、IPアドレスと ポート番号のみビッグエンディアン
  • 5.
    モジュール  P2Pネットワーク  採掘アルゴリズム  GUI / インターフェース  ブロックチェーン  取引  契約条件  ウォレット管理  ペイメント(送金)
  • 6.
    形成アルゴリズム  ハッシュ(SHA-256& RIPEMD-160)  公開鍵vs 公開鍵ハッシュ  ECDSA / secp256k1  マークルツリー  ブルームフィルター
  • 7.
    ビットコインのP2Pネットワーク  DNSを用いてシードサーバーへ接続  1000ピア以下のリストをダウンロード  旧バージョンではIRCを使っていた(<0.6)  TCP/8333でリッスン状態  メッセージの送受信をピアと行う  「inv」メッセージで最新状態に  ちょうど先日(10/12)にヘッダ先同期が仮実装
  • 8.
    取引とは  ビットコインの拡張性がここにあり  入力と出力の概念  コーディングのことを「契約条件」と呼ぶ  コード以外のデータも挿入可  未使用出力のことを「UTXO」と呼ぶ  採掘手数料は出力に当てられていない入力の余分  「コインベース」取引は特別
  • 9.
    取引を見よう TXID: 'B' 入力1 中の1: 出力元: TX 'A' (Bob) 入力額: 5 BTC 出力1 中の1: 出力先: Charlieの公開鍵ハッシュ 出力額: 4 BTC 採掘手数料: 1 BTC コインベースTXID 'A' 報酬: 25 BTC 採掘者: Bob 出力先: Bobの公開鍵 TXID: 'C' 入力1 中の1: 出力先: TX 'A' (Bob) 入力額: 7 BTC 出力1 中の1: 出力先: Aliceの公開鍵ハッシュ 出力額: 6.5 BTC 採掘手数料: 0.5 BTC UTXO / 残高 採掘者Bob: 13 BTC Charlie: 4 BTC Alice: 6.5 BTC 採掘手数料: 1.5 BTC
  • 10.
    取引の連鎖 TXID 'B' TXID 'C' (複数入力) Block #300 (最古) コインベース TXID 'A' Block #301 Block #302 Block #303 (最新)
  • 11.
    取引は契約なり  「送金」というのは行為というより記録  全取引は契約のように条件が盛り込まれている  Forthのようにスタック手法(registerなし)、 チューリング完全でない  StackはLittle Endian、可変長整数、MSBで+-が決まる  False = 0、True = 0以外のデータ全て  エラーが無く、Stackの最上層がTrueなら成立  採掘者は採掘する前に契約のTrueさを確認  通常ピアも横渡しする前に確認
  • 12.
    契約条件について  現在コマンドが100個程度  よく使われるのが十数個  'standard' vs 'non-standard'  四つほどの テンプレートが殆ど  間違いは巻き戻せない
  • 13.
    ブロックとは?  承認(採掘)された取引の塊  平均的に1ブロック400-600取引程度  サイズの上限が1000 KiB  コインベース取引が1つ  前ブロックのヘッダのハッシュ  含まれた取引のマークルルーツ  ノンス
  • 14.
    ブロックを見てみよう Block #299 ヘッダ 取引A 取引B 取引C 取引D 取引E 取引F 取引G ハッシュに含まれない: Magic No バージョン情報 Blocksize malloc() and sanity Transaction count Sanity/speed opt. ハッシュに含まれる: Version 拡張性を見据えて hashPrevBlock 前ブロックID hashMerkleRoot 取引の承認 Time タイムスタンプ Target Bits 難易度: 低=難 Nonce Proof of work
  • 15.
    ブロックチェーンとは?  特定の順番にあるブロックの連鎖  ビットコイン史上全ての取引が含まれている  大体33万ブロックでサイズが22GB程度(2014/10/12)  ブロック高さが絶対的な時間の位置  ブロック深さが最新ブロックに対する相対的な 時間の位置  0.9以降はヘッダのみのSPVモードに対応(26MB程度)  ゆくゆくは非UTXOの取引を除く「Pruning」も可能
  • 16.
    採掘者の仕事は?  ダブルスペンド防止と通貨の発行  もらった取引をブロックに入れていく  有効なブロックID(ハッシュ)を見つける  有効なブロック発見時にネットワークに配信  2016ブロック(約2週間)ごとに難易度が自動調整  ブロックのハッシュが前ブロックのハッシュに 依存するため、攻撃者との競争がブロックを 見つける度に再び0からスタートする
  • 17.
    ブロックチェーンの動き 300 301302 303 304 305 306 無効なブロック 報酬無し 無駄な時間 = 採掘者のお金の無駄 短いチェーンが負ける 有効なブロック =25 BTC の報酬 ブロック高さ(時間) 7 ブロック(約70分)
  • 18.
  • 19.
    サトシとは?  未使用出力(UTXO)の出力額  公開鍵ハッシュに宛ててある  取引の中  ブロックの中  ブロックチェーンの中
  • 20.
    近い将来  x.509とhttp 連動  NFC でネット不要  BIP 70 (瞬時確認)  契約条件解禁  サイドチェーン  BIPsのGithubを参照! https://github.com/bitcoin/bips
  • 21.
    スケーリングについて  ビットコインは平均1秒1取引のペースで動く  今の上限は故意に抑えられた結果  本当の一番のネックは取引・ブロックの ハッシュ確認の処理時間  恐らく一般デスクトップ型のCPUでは 1秒4,000取引が限界ではないかと  ネットワークの速度でいうと16 Mbps  ブロックチェーンの膨大化  サトシ氏の一番の悩みがネットワークが 技術的成熟する前に広まりすぎてしまうこと
  • 22.
    ご清聴ありがとうございます 本日受講された皆様限定! https://bitbankwallet.jp/ ビットバンクウォレットを作成された方に もれなくビットコインをプレゼントします!