ビットコイン、ノードにどうやって最新データが行き渡る?
ビットコインを発明し、未だその正体が分かっていないサトシ・ナカモト。そんなサトシが残した約2年間の文章を、小宮自由氏の解説と共に紹介する連載「サトシ・ナカモトが残した言葉〜ビットコインの歴史をたどる旅」の第15回。
まずサトシのメールの前に、本連載の元になっている書籍『ビットコイン バイブル:サトシナカモトとは何者か?』の著者フィル・シャンパーニュ氏の解説も掲載する。
フィル・シャンパーニュ氏の解説
この章の最初で、サトシは話を取引プールに広げている。次に、ノードが近隣のノードへデータをリクエストするネットワーク・ブロードキャストの仕組みを説明している。最後に、コードの作業に直近の18ヶ月間取り組んでいることを打ち明けている。
サトシ・ナカモト 2008年11月17日 火曜日 13時33分04秒
それでは2008年11月17日 13時33分04秒のサトシのメールをみていこう。
========================
Re:ビットコイン ピア・ツー・ピア 電子キャッシュ 論文
サトシ・ナカモト 2008年11月17日 月曜日 13時33分04秒 -0800
(注:斜体部分は、サトシ以外の者の質問を指す)
James A. Donaldは書きました:
サトシは書きました:
幸い、必要なのは、待機中の取引プールを現在の最良のブランチのために保持することだけです。
このときに必要なのは、良いふるまいをする誠実なピアがいて、その通信とデータ保存が良好で、そのピアが、どれが現在の最良のブランチかを知っていることです。
つまり、ノードの方で必要となるのは、いま持っている最良のブランチに対する待機中の取引プールだけです。そのブランチが、そのノードがブロック作成に取り組むブランチです。プールを必要とするのはこのブランチのためだけです。
プロードキャストはたぶん、ほぼ完全に信頼の置けるものになるでしょう 。
全てのメッセージが最低一度は届くと仮定するのではなく、メッセージの未着信が頻繁に起きても情報が必ず届くメカニズムを作る必要があります。
ピアネットワークのプロードキャストの仕組みは説明したと思います。
それぞれのノードは、新規ブロックのハッシュとブロックに含まれる取引のハッシュを集めた目録リストを、近隣のノードに送ります。近隣のノードは未受信の項目をリクエストします。タイムアウト後になっても項目が届かなければ、他のノードにリクエストします。最終的には、ほぼ全てのノードが全ての項目を保持しているので、たとえ一ヶ所からの受信に失敗しても、一度に一ヶ所ずつ試せば、他のノードから取得できます。
目録リクエストデータの構造によりちょっと待機時間が発生しますが、最終的には、伝送キューから余分なデータブロックを外し、帯域を節約することにより、速度を上げます。
あなたにはそういう設計に関する基本構想があり、それは大きな前進ですが、しかし、悪魔が潜んでいるのは些末な細部です。
コーディング作業中のここ一年半の間に、この些末な細部を全て研究しつくしたと思っています。問題はたくさんありました。関数の詳細は論文*1ではカバーできていませんが、ソースコードがまもなく出せます。主要なファイル群をお送りしました(要望に応じて配布します。完成版のリリースはもうすぐです)。
サトシ・ナカモト
暗号学メーリングリスト
========================
【訳注】
*1 ビットコイン論文のこと。
解説
ネットワークの混雑などが原因で、ノードにすべてのデータが速やかに渡らない場合があるのでは? という疑問にサトシが答えています。ビットコインは分散してデータを保管することにより、ほぼすべてのノードが直近までの履歴を保存しています。もしあるノードに接続できなくても、他のノードに接続すればほぼ同じデータが手に入ります。そのため、世界中にほとんどのノードのネットワークが脆弱である、というような特殊な場合(これまで一度も起こっていません)を除いて、ほとんどのノードに最新のデータはすぐに行き渡ります。
小宮自由
Header Image/iStock:Dilok Klaisataporn