ビットコイン軽量クライアントについて語るサトシ
ビットコインを発明し、未だその正体が分かっていないサトシ・ナカモト。そんなサトシが残した約2年間の文章を、小宮自由氏の解説と共に紹介する連載「サトシ・ナカモトが残した言葉〜ビットコインの歴史をたどる旅」の第44回。
まずサトシのメールの前に、本連載の元になっている書籍『ビットコイン バイブル:サトシナカモトとは何者か?』の著者フィル・シャンパーニュ氏の解説も掲載する。
フィル・シャンパーニュ氏の解説
時間の経過とともに、ブロックチェーンは2009年1月以降の全ての取引記録を含みながら絶えず拡大を続けている。ビットコインウォレットには複数のビットコインアドレスが対応の秘密鍵とビットコイン収支とともに格納されているが、ビットコインのネットワークでは取引時にどのアドレスを使えば良い か、一つか複数か、を把握する必要がある。
例えば、アドレスAに0.1 BTC、アドレスBに0.2 BTC、アドレスCに0.3 BTC残っていて、これから0.5 BTCの支払を実行するとしよう。いずれのアドレスも単独では不足し、支払総額の0.5 BTCを満たせないため、ビットコインウォレットでは二つか三つのアドレスを組み合わせて0.5 BTCをカバーする必要が出てくる。ビットコイン・クライアントにフルのブロックチェーン*1 がなく、各アドレス内の現在の収支が分からなければ、フルのブロックチェーンを格納するサーバーと通信しなければならない。
簡易支払検証(Simplified Payment Verification、SPV)に初めて言及したのはサトシのビットコイン論文*2 だったが、SPVにより、クライアントは、フルのブロックチェーンを持ちながら採掘過程への参加の有無は問われないビットコインネットワーク内のサーバーに依存できるようになる。これは後に実装され、軽量クライアントに利点をもたらした。
【訳注】
*1 いわゆるフルノードのこと。
*2 ビットコインホワイトペーパーの「8. トランザクションの簡易検証」を参照。
サトシ・ナカモトの投稿
それではサトシの投稿をみていこう。
========================
Re:スケーラビリティ
サトシ・ナカモト 2010年07月14日 午後09時10分52秒
(注:斜体部分は、サトシ以外の者の質問を指す)
引用:jib 2010年07月12日 午前11時36分17秒
全てのノードが全ての取引情報を受けとるという理解で合っていますか?これだと、ビットコインを通貨として大規模に利用するには全く非実用的ではありませんか?
設計では、フルのブロックチェーンを必要としない軽量クライアントの概略を提示しています。PDFファイルでは「簡易支払検証」と呼んでいます。軽量クライアントは送金も受取もできますが、ブロックの生成には加われません。支払を検証するノードを信用する必要はなく、クライアント自身で検証できます。
軽量クライアントはまだ実装していませんが、必要なときが来れば実装する予定です。現在は全員がフルのネットワークノードを稼働しています。
私の予想ではノードの数は十万*1 を越えることはなく、それ以下になると見ています。いつか、これ以上ノードが参加してもメリットにならない均衡点に達するでしょう。残りは軽量クライアントになり、その数は百万単位になるはずです。
均衡点のサイズになると、多数のノードがサーバーファームとなり、一つか二つのネットワークノードがLANを介してファーム内のその他のコンピューターに情報を流す形になります。
========================
【訳注】
*1 8年間の推移を確認したところによると、2024年2月13日現在でこれまでの最高値は約 17,500 であり、10万を大きく下回っている。
解説
今日において SPV は主にビットコインウォレットで広く用いられています。スマートフォンアプリのウォレットであれば容量を考慮すると100%がSPVでしょう。SPV は必要に応じてフルノードに通信してデータを取得しています。つまり、フルノードを信用することがSPVを使うにあたって必須となります。通信しているフルノードが悪意をもって運用されたり、ハッキングされたりすると、間違ったデータを取得する可能性が出てきます。このため、別人が管理する複数のフルノードに通信して内容を照らし合わせているSPVもあります。
“Don’t Trust. Verify.” いわゆるトラストレスを強く望む人は、SPV を使わずにフルノードが入ったウォレットで自己の資産を管理しています。
小宮自由