オブジェクトの広場は株式会社オージス総研グループのエンジニアによる技術発表サイトです

クラウド/Webサービス

ビットコイン論文からさぐる ブロックチェーンのヒント

第8回 インセンティブ 前編:論文の読解
オージス総研
樋口 匡俊
2019年9月26日

今回は、ビットコイン論文の第6章「Incentive」を読みながら、ビットコインのインセンティブの仕組みについて説明します。また、第7, 8, 9章を通じて、軽量クライアントやコインの分割可能性についても説明します。

個人からマイニングファームへ

ビットコインのノードを動かすソフトウェアとして、サトシが初めてリリースしたのは、Windows だけで動く GUI アプリケーションでした。

言うまでもなく、Windows は家庭や企業の PC で圧倒的シェアをもつ OS です。サトシはまず、なるべく大勢の人々が個人のパソコン上で簡単に操作できるアプリを目指したものと思われます。※1

ビットコイン v0.1.0 の画面

現在では、個人で運営するノードよりも、組織的に運営するノードの存在感が非常に大きくなっています。それが、前回紹介したマイニングプールや、マイニングファーム (mining farm) です。

マイニングファームは、特定の組織が専用のハードウェアなど多大な設備投資を行い、多数のノードを一手に運営するデータセンターのようなものです。自身のノードに限らず、他者のノード運営を引き受けたり、マイニングプールを形成したりして、ビットコインなど仮想通貨のネットワークに参加しています。電力を大量に消費し、機器の発熱も高いため、安価な電源を確保できる冷涼な地域を好むなど、立地にもこだわります。

うるさいだとか、資源の無駄づかいだとか、風当たりの強いマイニングファームですが、なぜそうまでしてノードを運営するのでしょうか。

身もふたもない表現ですが、「もうかるから」というのが一つの有力な答えでしょう。かわりに、ちょっと経済学の本 ※2 を読んだことがある人なら、インセンティブ (incentive) があるからと答えるかもしれません。マイニングファームにとって、そのような行動を選択する誘因が存在するからだというわけです。

ビットコインには、ノードを運営するインセンティブを与える仕組みが組み込まれています。さっそく第6章「Incentive」を読んでみたいところですが、第6章は、第9章に出てくる用語を説明なしで使っているなど、いきなり読んでもなかなか分かりづらいものがあります。

そこで前提知識として、まず先に第7, 8, 9章を通じて、軽量クライアントと分割可能性について見ていきたいと思います。

ディスクの節約

第7章「Reclaiming Disk Space」は、ディスク容量を節約する方法について説明しています。

ノードを立ち上げる際、一つの関門となるのがディスク容量です。最近の Bitcoin Core のページには、最低 200GB 推奨と書かれています。この記事を書いている SSD 256GB のノートパソコンではちょっとキビシイです。

主な原因は、トランザクションです。トランザクションのチェーンは、コインを譲渡するごとに伸びていきます。いくら大容量のディスクが安く手に入るようになったとはいえ、いずれは限界に突き当たるでしょう。

同じようなことが、譲渡可能性 (transferability, 転々流通性) のあるコインにとって避けられない問題として、既に 1990年代に指摘されています。※3

第3回で見たとおり、譲渡は銀行とやりとりしないので、オフライン支払の一種でしたね。譲渡するごとに、コインには誰が譲渡したかなどの情報が記録されていきます。あとで銀行に預け入れたときに、二重使用の検査を行うためです。

預入を行わなければ、記録は無限に増えていきますので、何らかの対策を行うことになります。例えば、容量の小さなカードに記録していた場合、譲渡5回につき預入1回を必須とし、不要になった記録を預入のときにカードから削除します。

似たような発想が、第7章には書かれています。

Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space.

あるコインの最新のトランザクションが十分な数のブロックの下に埋まってしまえば、それ以前の使用済みのトランザクションを廃棄してディスク容量を節約できる。

Reclaiming Disk Space

トランザクションのチェーン全体を残しておく必要はなく、最新だけ残して、使用済みのものは捨ててしまってよいのだ、というのがここでの主張です。

ただし、ブロックのチェーンは捨てられません。詳しい説明は省略しますが、第4回に出てきたマークルツリーのおかげで、トランザクションを捨てても、ブロックのチェーンは問題ないのだそうです。

A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year.

ブロック・ヘッダーはトランザクション無しなら80バイトほどになる。ブロックが10分ごとに生成されるとすると、80バイト x 6 x 24 x 365 = 4.2MB/年 となる。

ブロックからトランザクションを消すことができれば、あとはヘッダー (header) のサイズだけを気にすればよくなります。サトシの試算では一年で 4MB ちょっとだそうなので、スマホにも十分おさまりますね。先ほどの最低 200GB という数値とはずいぶん差がありますが、ひとまず次の第8章へ進みましょう。

軽量クライアントにできること・できないこと

第8章は、Simplified Payment Verification 略して SPV という手法について説明しています。

It is possible to verify payments without running a full network node.

完全なネットワーク・ノードを運営しなくとも、支払を検証することは可能である。

完全なネットワーク・ノード (full network node) とは、トランザクションを捨てず、すべてのデータを持っているノードのことです。これまでの連載では、この完全なネットワーク・ノードのことを単にノードと呼んできました。

完全なネットワーク・ノードは、今では「ネットワーク」を省略してフルノード (full node) と呼ばれるようになりました。しかし、サトシはむしろ「フル」を省略して、ネットワーク・ノード (network node) と呼んでいます。全てのトランザクションを持ち続けているノードこそが、ネットワークを構成しているノードなのだと言わんばかりです。

一方でサトシは、ネットワーク・ノードを運用しない人々がビットコインを利用するケースも考えています。論文に名前は出てきませんが、それを可能にするソフトウェアを軽量クライアント (lightweight client) と言います。

軽量クライアントは、ビットコインのデータの一部しか扱いません。詳細は省きますが、それでも SPV という簡易的な支払の検証ならできる、というのがここでの主張です。

the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker.

(SPV による)検証は、誠実なノードがネットワークを制御している間は信じてよいが、攻撃者がネットワークを征服するとより脆弱になる。

一部のデータしか持たない軽量クライアントは、二重使用の検査などさまざまな処理を、ネットワーク・ノードのようには行えません。また、SPV を行うデータが足りないときは、誠実なネットワーク・ノードにお願いしてデータを送ってもらわなくてはなりません。軽量クライアントは、ネットワーク・ノードに比べてだまされやすく、ビットコインのネットワークを安全に保つには力不足なのです。

幻の軽量クライアント

今ではウォレット (wallet) と呼ばれるアプリケーションやデバイスがいくつもあり、ネットワーク・ノードを持たない人でもビットコインを利用できるようになりました。

しかし、実はサトシ自身は、SPV が可能な軽量クライアントを開発することなく姿を消しています。ビットコイン論文には、サトシが実装した機能だけでなく、単なる提案だけのものも書かれているのです。

ノードの専門化

なぜ軽量クライアントを実装しなかったのか。その理由を、メーリングリストやフォーラムの投稿からさぐってみましょう。

サトシは、ビットコインの将来について、以下のような予言を残しています。

At first, most users would run network nodes, but as the network grows beyond a certain point, it would be left more and more to specialists with server farms of specialized hardware.

最初、ほとんどのユーザーはネットワーク・ノードを運用するでしょう。けれども、ネットワークがある水準を超えて成長するにつれて、特殊なハードウェアのサーバーファームを使うスペシャリストに多くを任せるようになっていくでしょう。

サトシは、個人のパソコン用にビットコインの開発を始めましたが、マイニングファームが現れることぐらいお見通しだったようです。

ふつうの個人については、次のように述べています

Simplified Payment Verification is for lightweight client-only users … If the network becomes very large, like over 100,000 nodes, this is what we’ll use to allow common users to do transactions …

SPV は軽量なクライアントのみのユーザーのためのもので …(中略)… 十万ノードを超えるぐらい、ネットワークがとても大きくなったら、われわれはそれを用いてふつうのユーザーが取引できるようにし … (以下略)

ノードが専門化していくだけでは、ビットコインのユーザーは減ってしまうでしょう。そこで、軽量クライアントを提供して、ふつうのユーザーも増やしていきたいということなのでしょう。

SPV is not implemented yet, and won’t be implemented until far in the future, but all the current implementation is designed around supporting it.

SPV はまだ実装していませんし、ずっと将来まで実装しません。けれども、現在の実装はすべてそれが可能なように設計してあります。

サトシとしては、すでに先々のことまで考えて設計、実装してあるということなのですね。

分割可能性

さて、次は第9章「Combining and Splitting Value」です。第9章は、分割可能性 (divisibility) を実現するための、トランザクションの構造について説明しています。

分割可能性とは、お金の額面を分けて使えることを意味します。

例えば、現金には分割可能性はありません。百円玉を砕いて十分割しても、それぞれ十円として使うことはできませんね。そのため、商店などは常におつりのための細かい硬貨を用意しなければなりません。

電子マネーに分割可能性を与える方法は、ビットコイン以前から研究されており、第3回で紹介した NSA のエッセイでもいくつか紹介されています。もちろん、分割可能性がなくとも、おつり用のコインをたくさんかかえておけばよいのですが、いかにも不便ですね。できればその場で、自由自在に細かいお金を作り出しておつりとしたり、大きなお金にまとめられたりする方がよいわけです。

ビットコインの分割可能性

ビットコインの場合、コインは小数点以下8桁までで表すことができます。例えば、コイン1枚を 0.25 と 0.75 に分けたり、0.25 と 0.75 をコイン1枚にまとめたりといった具合です。このように小数で扱えることをビットコインの分割可能性として説明している記事はよくあります。

ただ、そのように分けたりまとめたりできるのは、トランザクションの構造のおかげです。トランザクションの構造については、第2章「Transactions」でも説明されていましたが、第9章での説明は、以下のようにかなり異なります。

To allow value to be split and combined, transactions contain multiple inputs and outputs.

額面価格を分けたり合わせたりできるよう、トランザクションは複数のインプットとアウトプットを含んでいる。

トランザクションのインプットとアウトプット

インプット (input) は、このトランザクションで譲渡するコインの情報です。アウトプット (output) は、譲渡した結果の情報です。

Normally there will be either a single input from a larger previous transaction or multiple inputs combining smaller amounts, and at most two outputs: one for the payment, and one returning the change, if any, back to the sender.

通常は、一つ前のより大きなトランザクションの単一のインプットか、小さな額を合わせた複数のインプットがあり、アウトプットはせいぜい二つである。一つは支払のためのアウトプット、もう一つは、あるとしたら、おつりを送信者に返すアウトプットである。

例えば、アリスがピザを買うとします。そして、ピザの価格はコイン90枚で、アリスはコイン100枚のインプットを一つ使えるとします。すると、アウトプットは二つになります。一つは支払のための90枚のアウトプットで、受け取るのはピザ屋さんです。もう一つはおつりのための10枚のアウトプットで、受け取るのはアリスです。おつりなので、自分から自分へ譲渡するのですね。

単一のインプット

もしもアリスがコイン20, 30, 50枚のインプットを一つずつ使えるとしたら、それら三つをまとめてコイン100枚分として使えます。

複数のインプット

このように、ビットコインでは、複数のインプットとアウトプットを分けたりまとめたりして、分割可能性を実現しているのです。

トランザクションのツリー

アウトプットは、別のトランザクションのインプットの根拠となります。インプットは、根拠になるアウトプットが無いか、すでに使用済みであれば、ノードによる検査で無効と判定されます。要するに、お金が無ければ当然譲渡はできないというわけです。

それを踏まえると、実はトランザクションのチェーンというのは一本の直線ではなく、分かれたりまとまったりしながら、ツリー構造を作り上げていることが分かります。※4

トランザクションのツリー

ただ、その巨大なツリー構造全体を気にしなくても、トランザクションは作れます。以下は、第9章の最後の一文です。

There is never the need to extract a complete standalone copy of a transaction’s history.

あるトランザクションの履歴を丸ごと写したものをひっぱり出す必要は決してない。

これを第9章に書いた意図は分かりにくいのですが、おそらく、履歴を全ては知らない軽量クライアントであってもインプットやアウトプットを作れるのだと言いたかったのでしょう。第7, 8, 9章は、軽量クライアントに関連する章だったわけです。

さて、準備ができましたので、いよいよ第6章「Incentive」を読んでいきましょう。

インセンティブ① コインの発行

サトシは、ビットコインに二種類のインセンティブを導入しました。一つは、コインの発行です。

By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block.

決りにより、ブロック内の一番目のトランザクションは特別なトランザクションであり、ブロックの作成者が所有する新たなコインを生じさせる。

論文には書かれていませんが、この「特別なトランザクション」はコインベース (coinbase) と呼ばれています。

一つのブロックは、一つのコインベースを含みます。まったく取引が無い時など、普通のトランザクションを含まない空ブロック (empty block) を作ることはできますが、その場合でもコインベースは作ります。

通常のトランザクションと異なり、コインベースにはインプットがありません。あるのはアウトプットだけです。

各ノードは、ブロックを作成する際、コインベースのアウトプットに新たなコインを書き込んでよいことになっています。その新たなコインを譲渡する相手は、もちろんそのノード自身です。※5

コインベースで発行・獲得したコインは、以後、転々と譲渡され、トランザクションのチェーンを伸ばしていきます。第2章で明示されていなかったトランザクションのチェーンのはじまりとは、このコインベースだったわけです。

コインベース・トランザクション

This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them.

このことはネットワークを支えるノードにとってのインセンティブを増やすとともに、コインをはじめて流通させる手段を提供する。なぜならコインを発行する中央当局は存在しないからである。

ビットコイン以前から、P2P ネットワークはフリーライダー (free rider) に悩まされてきました。例えば、第1回で紹介したナップスターのようなファイル共有ネットワークでは、他者からファイルをもらうだけで自分からは提供しない「ただ乗り」が後を絶ちません ※6。2000年頃の話ですが、後発のグヌーテラ (Gnutella) では、70% 近くのユーザーが一つもファイルを提供していないという調査結果があります。

P2P ネットワークを有用なものとするために、誰かがやらねばならないことというのがあります。ビットコインにとって、それは PoW などを行うネットワーク・ノードの運用です。軽量クライアントが増えるだけでは、ネットワークは成り立ちません。

放っておいても、誰かがボランティアでノードを立ててくれるかもしれません。しかし、それだけで攻撃者に勝てるかというと心許ないわけです。そこでサトシは、ブロックのチェーンを伸ばしたノードがコインを自ら発行し獲得できるというルールを作って、ノードを運用する気持ちを引き出そうとしたのです。

また、電子マネーは通常、TTP としての銀行や貨幣鋳造所がコインを発行しますが、ビットコインは TTP に依存するわけにはいきません。サトシは、インセンティブを与えるとともに、TTP に依存せずコインを発行する一石二鳥の仕組みを編み出したわけです。

The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended.

一定量の新たなコインの安定的な増加は、資源を費やして金を出回らせる金採掘者と似ている。この場合、費やされるのはCPU時間と電力である。

ネットワーク・ノードを運営する人々をマイナー (miner) と呼ぶ慣習は、このように比喩として登場し、ソースコード ※7 でも使われたことから広まって行ったものと思われます。

ブロック一つあたりに発行するコインは、ルールで決められています。論文には書いてありませんが、始めは50枚で、21万ブロックごと、つまり約4年ごとに半減するルールです。2019年9月現在、すでに2回半減済みで、ブロック一つあたり12.5枚発行するルールになっています (50枚 → 25枚 → 12.5枚)。

インセンティブ② 取引手数料

もう一つのインセンティブは、トランザクション毎に支払う取引手数料 (transaction fee) です。

If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction.

もしもトランザクションのアウトプットの値がインプットの値よりも少なければ、その差額が取引手数料であり、そのトランザクションを含むブロックのインセンティブの値に加算される。

先ほどのピザの例では、アリスが使用したインプットの合計額と、対応するアウトプットの合計額は同じでした。その場合、手数料はゼロです。

けれども、必ずインプットとアウトプットを同じ額にする必要はありません。例えば、アリスは本来おつりが10枚のところを、自ら7枚に減らすことができます。あまった3枚が手数料です。

手数料は、ブロックを作成するノードがコインベースに加算し、発行したコインともどもそのノード自身が獲得します。

ここまでをまとめると、インセンティブは次のような式で表せます。

インセンティブ
= コインベースに加算できるコイン
= ブロック作成時に発行するコイン + 取引手数料のコインの合計

Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free.

あらかじめ決めておいた数のコインが出回ってしまえば、インセンティブはすっかり取引手数料へ移行し、完全にインフレーションから逃れることができる。

サトシが決めたコインの総発行枚数は2100万枚です。すべて発行し終わって、コインがそれ以上増えなくなったら、インセンティブは手数料のみとなります。

ところで、唐突にインフレがなくなる (completely inflation free) と言っていますが、一体どういうことでしょうか。

少なくとも、サトシがインフレを悪いこととみなし、無い方が良いと考えていることは確かでしょう。では反対に、デフレの方が良いというのでしょうか。その理由はなんでしょうか。

また、もしインフレがなくなったとしても、コインが増えなくなることで何か別の問題は発生しないのでしょうか。

そもそも、インフレとは具体的にどういう意味でしょうか。サトシは定義を明示していません。一般的な感覚では、モノの値段が上がっていきお金の価値が下がっていくことですが、十年経った今でも、物価水準とビットコインの取引価格に関係があるようには感じられません。

素朴な疑問を挙げていてもきりがないので、ここではあまり深く考えないで、とりあえず先へ進むことにしましょう。

インセンティブの効果

The incentive may help encourage nodes to stay honest.

インセンティブはノードが誠実なままでいるよう促すのに役立つかもしれない。

完璧ではないにせよ、これらのインセンティブには、攻撃者になろうとする気持ちを抑える効果があるというわけです。

If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins.

もしも欲深い攻撃者が全ての誠実なノードを上回る CPUパワーを集められれば、その攻撃者はそのパワーを、人々をだまして自身の支払を取り戻すために使うか、新たなコインを生成するために使うかの選択が必要になるだろう。

もしも誰か一人だけで CPUパワーとしての多数派になれたとしたら、その人は二重使用攻撃をほぼ確実に成功させることができます。ビットコインの平和は、その人の決断にかかっています。

He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth.

その攻撃者は、他の全員を合わせたよりも、(ビットコインの)システムと攻撃者の財産の正当性をむしばむことよりも、より多くのコインをもたらしてくれるルールに従い行動する方が得だと判断するはずである。

攻撃が成功したら、それと引き換えにビットコインの評判は下がり、コインの価値も下がってしまうでしょう。

それよりは、誠実になってコインを稼ぐ方が、普通に考えたらおトクですよね、というのがサトシの主張です。なにしろ、自分一人で多数派になれたということは、これから発行するコインの半分以上は自分のものになるはずですから、それを逃す手はないというわけです。

おわりに

今回は、第6章「Incentive」を読みながら、ビットコインを支えるインセンティブの仕組みについて見てきました。また、前提として第7, 8, 9章をもとに、軽量クライアントやコインの分割可能性についても説明しました。

TTP に依存しないことを謳うビットコインにとって、ネットワークを支える誠実なノードをいかに確保するかは大きな課題です。それを解決するため、サトシはコインの発行と取引手数料というインセンティブの仕組みを導入しました。

サトシは、ノードがいずれ専門化することを見越しており、それに備えて SPV など軽量クライアントのための提案を論文に書き残しました。

ところで、インセンティブはビットコインに価値がなければ成立しないわけですが、そもそもビットコインに価値はあるのでしょうか。また、ビットコインにかかわる人々は、実際のところ、インセンティブにどのように反応するのでしょうか。

サトシは、暗号をはじめとする情報技術に長けていたことは間違いないでしょう。一方で、今回インフレに関する疑問点をいくつか挙げたように、お金としてのビットコインについては比較的あっさりとした考えのまま、論文を書いたように思われます。

次回はそうしたサトシの素朴な考え方など、論文には書かれていないインセンティブに関するあれこれを紹介したいと思います。


※1: サトシは wxWidgets など OS を問わないライブラリを選択しており、一年ほど後に協力者によって LinuxMac でも動くようになりました。

※2: 例えば、ノーベル経済学賞受賞者の手になる教科書「スティグリッツ ミクロ経済学 第4版」(東洋経済新報社) をパラパラめくってみると、インセンティブの話が何度も登場します。

※3: 参考文献リストの「Transferred Cash Grows in Size

※4: ツリーというより、網の目やメッシュの方が近いかもしれません。そして、鎖の種類にはメッシュチェーンというのもあるそうなので、このままチェーンと呼んでも間違いではなさそうです。

※5: この新たに発行・獲得されるコインは、ビットコインのソースコードでは、「subsidy」つまり補助金、助成金と表現されています。期間限定の補助的な財源であって、ノードの費用は手数料でまかなうものだということなのでしょう。

※6: 共有してよいコンテンツかどうかというのはまた別の問題です。

※7: サトシが開発していたころのビットコインのソースコードには、「miner」という言葉は出てきますが、「mining」は見当たりません。

参考資料