9 コインの融合と分離
ビットコインでは、コインを一枚一枚別々に処理するので、そのままではすべての送金を最小単位に分割せざるを得ず、不便である。そこで、1度の取引に複数のインプット(前回の取引への参照)と複数のアウトプット(支払先のビットコインアドレスと支払額)を設け、コイン額を融合・分離できるように作られている。あらかたの場合、インプットは、過去のより大きな取引への参照か、複数の小さな取引への参照を寄せ集めたものになるだろう。対してアウトプットは、受取人への支払いと、もしあればお釣りの返却とで成り立つ。
このように設計すると、一つの取引が複数の取引に依存し、それらの取引もさらに多くの取引に依存することになるが、問題ではない。コインの取引履歴を、1本に連なったリストとして取り出す必要性は無いからである。
何度も書きましたが、コインとは取引履歴そのものでした。ですから、誰かが誰かにコインを支払うということは、単にそのコインの最後に受取人のアドレスを追加するだけの作業となります。ネットワークは、誰が幾ら持っているかではなく、コイン毎にその持ち主が誰であるかを管理しているわけです。しかしこれでは、一円玉しか発行されない通貨体系のようなものです。
例えば、1コインの支払いと1,000コインの支払いを同じ体系で扱うのが困難です。金額が低い方に合わせる必要があり、後者の場合、少なくとも1,000個ものコインの取引履歴を変更せねばならず、それぞれに電子署名などの処理が必要です。積み重なると、耐えられないほどの重い処理になるでしょう。これを避けるため、取引履歴を合流・分岐、つまりコインを融合・分離できるように作られているわけです。現実の通貨では10円玉や100円玉など決まった額のコインを使用しますが、ビットコインではその場で任意の額(正確には1Satoshi=0.00000001 BTC単位)のコインを作り出せます。
原論文の図だけでは、少し仕組みがわかりにくいかと思います。次のようなイメージを持つと良いでしょう。2節にこのような図があり、
取引履歴がどこまでも実線の矢印で一直線につながっているように描かれていました。しかし実際には、インプットもアウトプットも複数の矢印が許されているわけです。そして各取引が有機的につながり、網の目のようなグラフを構成します。Bitcoin Wikiにその一例が掲載されているので、ご覧下さい。「一つの取引が複数の取引に依存し、それらの取引もさらに多くの取引に依存する」ことの意味が良く分かります。
ただそうすると、7節で言及されていたディスクスーペース削減の際に困るのではないかと思います。どの取引データを削除すべきか慎重に選ばないと、思いがけず広い範囲に影響するでしょう。この辺りをどう実装しているのか、興味深いところです。
最近のコメント