Ethereum:次世代電子契約及び分散型応用ソフトウェア基盤

White Paperの一部を翻訳しました。最終的には全部翻訳したいと思っていますが、長いので非常に時間が掛かります。

 

 最近数ヶ月の間に、Bitcoinと同様な形態を持つブロック鎖(blockchain)の活用に関して多大な関心が集まっている。ブロック鎖は所有権に関する共同データベースの内容の正しさについて、世界中の誰もが納得することのできる判断方法を提供する。そのため、単に貨幣を実現するためだけではなく、その応用を実現するためにブロック鎖を使用することが考えられている。よく挙げられる応用としては、ブロック鎖を用いた暗号貨幣(cryptocurrency)を別の特別の用途のために作成される貨幣や金融商品を表すために使用すること(「有色貨幣(colored coin)」)や、ブロック鎖上の有色貨幣の動きに対応して現在の正当な所有者が決まる財産である「電子財産(smart property)」や、分散型交換所、金融派生商品P2P賭博、ブロック鎖を用いた識別及び評価機能のような、より高度な応用がある。もしかしたら、言及されることのある全ての応用の中で最も野心的であるのは、自律型代行プログラム(autonomous agent)あるいは分散型自治組織(decentralized autonomous organization:DAO)であるかもしれない。これは、ブロック鎖上に格納される独立執行力のある電子契約(smart contract)に従って、参加者が資源と資金を代行プログラム(agent)に自律的に管理させることを合意することによって、あらゆる法的契約や組織規則に従属することなく、また、中心的な管理を全く受けずに動作するブロック鎖上の自律的な存在である。
 しかしながら、現時点では、これらの応用を実現するのは難しい。何故ならば、Bitcoinスクリプト機能や、あるいは、次世代の暗号貨幣プロトコルであるBitcoinを基盤とした有色貨幣プロトコルや所謂「高次貨幣(metacoin)」でさえも、分散型自治組織が必要とするどこまでも複雑な計算を実行するには、余りにも制限があり過ぎるからである。本計画の目標は、十分な機能の備わったTuring完全(Turing-complete)な(しかし、手数料によって厳格に規律されている)暗号学的な元帳を作成し、どこまでも複雑な電子契約や自律型代行プログラムやブロック鎖によって完全に調停される参加者間の関係の符号化を可能にすることによって、有色貨幣や高次貨幣などのプロトコルが齎す革新を現実のものとし、更には、一般化することである。使用者は、特定の種類の取引に制限されず、Ethereumを「暗号金融(crypto-finance)のレゴ」のようなものとして使用することができる。すなわち、使用者は自身が欲するどのような機能でも、単にEthereumに内蔵されているスクリプト言語(scripting language)を使って原始コード(code)を書くだけで実装することができる。特別の用途のために作成される貨幣や金融派生商品や識別機能や分散型組織は全て容易に実現できる訳だが、より重要なのは、従来の仕組みとは異なり、Ethereumの開発者でさえも想像することのできなかった種類の取引をも構成することができるということである。結局のところ、我々はこの計画が「暗号貨幣2.0」の実現に向けての確かな一歩となると信じている。また、我々はEthereumが動的な部分のない1999年のインターネットにウェブ2.0の出現が齎した著しい影響と同じくらいの影響を暗号貨幣の生態系に齎すことを望んでいる。

 

何故新しい基盤を作るのか?
 特に、暗号や暗号貨幣と同程度に細かな注意を要する領域において新しい応用ソフトウェアを作りたい場合には、可能な限り既存のプロトコルを利用するのが、手っ取り早く、正しい最初の自然な取り組み方である。既存の技術を利用するだけで完全に目的が達成できる場合には、新しい貨幣を作成する必要はないし、新しいプロトコルさえも作成する必要がない。実際のところ、Bitcoin上で電子財産や電子契約や分散型自治体(decentralized autonomous corporation:DAC)を実現しようとした際に立ちはだかった困難さが、我々が次世代暗号貨幣プロトコルに興味を持ち始めたそもそものきっかけだった。しかしながら、研究の結果、Bitcoinプロトコルは通貨や、基本的な複数署名(multisignature)の第三者預託(escrow)や、単純な形の電子契約には十分過ぎるものの、それらを超えるような機能の実現は、根本的な制限の所為で不可能であることが明白となった。

 

有色貨幣
 電子財産や特別の用途のために作成される貨幣や資産をブロック鎖上に実装しようとする最初の試みはBitcoinの上層プロトコル(overlay protocol)として構築された。多くの支持者はこれをインターネットプロトコル階層においてHTTPがTCPの上層としての役割を果たしている点と比較する。大まかに、有色貨幣プロトコルは次のように定義される。
  1.有色貨幣の発行者は、特定の取引出力(transaction output)H:i(Hは取引のハッシュ値を表し、iはその取引の中で何番目の出力であるかを表す)が特定の資産を表すものと定める。そして、取引出力とそれが表している資産を明確に記述する「色定義」を発行する(たとえば、H:iの1satoshiがStephen's Gold Companyにおいて引き渡しを受けることのできる1オンスの金を表すものと定めることができる)。
  2.発行者以外の者は有色貨幣のクライアントに色定義ファイルを「導入」する。
  3.色が最初に公開された時点では、H:iのみがその色を有している取引出力である。
  4.取引が色Xを有する取引入力(transaction input)を使って行われた場合には、その取引出力も色Xを有する。たとえば、H:iを5個の口座に分配する取引を行った場合には、それらの取引出力も全て色Xを有することになる。取引が異なる色の取引入力を有する場合には、「色譲渡規則(color transfer rule)」又は「色の核(color kernel)」がどの取引出力がどの色であるかを決定する(たとえば、X番目の取引出力がX番目の取引入力と同一の色となるようにする実装は、非常に単純な実装例である)。
  5.有色貨幣のクライアントが新しい取引出力を受け取った場合には、色譲渡規則に基づいて取引履歴を辿り、取引出力の色を決定する。色譲渡規則には曖昧な点がなく、明確に定まっているので、それぞれの取引出力がどのような色を有しているかに関しては、全てのクライアントの意見が一致する。
 しかしながら、有色貨幣プロトコルは幾つかの根本的な欠陥を抱えている。
  1.単純決済検証(simplified payment verification)を使用するのが困難である。
   BitcoinのMerkle木(Merkle tree)は、「単純決済検証」と言われるプロトコルを使用できる方法によって構成されている。単純決済検証を使用すると、完全なブロック鎖をダウンロードしていないクライアントでも、他のノードに対してMerkle木の単一の枝の暗号学的な正当性の証明を要求すれば、すぐに取引出力の検証を行うことができる。この場合でも、安全を保つためには、ブロックの頭部(header)だけはダウンロードしなければならないが、発生するデータ転送量や検証時間は約1000倍減少する。有色貨幣の場合、これを行うのが非常に難しい。何故ならば、取引出力の色は、単にMerkle木を調べるだけでは決まらず、取引履歴を辿らなければ決まられないからである。そのため、クライアントは、取引がある色を有していると完全に判断するためには、何千もの取引情報を取得しなければならない可能性があるし、全ての関係のある取引の正当性の証明を要求しなければならない。我々の支援を含む1年以上の調査にも拘らず、この問題に対する解決策は全く見付からなかった。
  2.スクリプト機能と両立させることができない。
   如上のように、Bitcoinは適度に柔軟なスクリプト機能を有している。たとえば、使用者は「私に1BTCを支払いたい不特定の人のために、本取引出力を公開する」という形の取引に署名することができる。他の例としては、保証契約や効率的な小額決済やブロック鎖上での競売などが挙げられる。しかしながら、この機能は元々色を認識することができない。すなわち、スクリプト言語は「色」という概念が存在することさえ知らないので、使用者は「私に色の起源(genesis)H:iで定義されている1枚の金貨を支払いたい不特定の人のために、本取引出力を公開する」という形の取引を作成することができない。このことから、信用を必要としない2つの異なる有色貨幣の交換は可能であるが、強制力を有する売買注文を入れる方法がないため、完全な分散型の交換所を作るのは不可能であるということが帰結される。
  3.Bitcoinと同様の制約がある。
   ブロック鎖上のプロトコルは、高度な金融派生商品や賭博や様々な形態の条件付譲渡に対応できるのが理想であるが、残念ながら、有色貨幣はBitcoinの制約を受け継いでおり、このような多くの機能に対応することができない。

 

高次貨幣
 TCP上に構築されているHTTPのように、Bitcoin上に別の新しいプロトコルを構築するという有色貨幣と同一の考え方に基づいて提唱されている概念が、高次貨幣である。高次貨幣の概念は単純である。高次貨幣プロトコルBitcoinの取引出力に高次貨幣の取引データを符号化して埋め込む方法を提供する。そして、高次貨幣のノードは、ある時点における口座残高を決定するために、全てのBitcoinの取引を処理して、有効な高次貨幣の取引となっているBitcoinの取引を評価する。たとえば、単純な高次貨幣プロトコルの場合には、Bitcoinの取引が有効な高次貨幣の取引となるためにはMARKER、FROM、TO、VALUEという4つの口座番号(address)への取引出力を有していなければならないという要件を課すかもしれない。MARKERはBitcoinの取引が高次貨幣の取引でもあるということを識別するための固有の口座番号である。FROMは高次貨幣がどの口座番号から送られたかを示す。TOは高次貨幣がどの口座番号に送られるかを示す。VALUEは送られる高次貨幣の額を符号化した口座番号である。Bitcoinプロトコルは高次貨幣を認識することができないので、無効な高次貨幣の取引を拒否することができない。そのため、高次貨幣プロトコルは最初の取引出力の口座番号がMARKERである全ての取引を有効であると見做して、以後の処理を行わなければならない。たとえば、上述の高次貨幣プロトコルの取引処理部分の実装は以下のようになるだろう。

if tx.output[0] != MARKER:
    break
else if balance[tx.output[1]] < decode_value(tx.output[3]):
    break
else if not tx.hasSignature(tx.output[1]):
    break
else:
    balance[tx.output[1]] -= decode_value(tx.output[3]);
    balance[tx.output[2]] += decode_value(tx.output[3]);

 高次貨幣プロトコルの利点は、特別の用途のために作成される貨幣や分散型の交換所や金融派生商品など、基盤となっているBitcoinプロトコルのみでは実装することのできない、より高度な取引の種類に対応することができるということである。しかしながら、Bitcoin上に構築されている高次貨幣は1つの深刻な欠陥を抱えている。有色貨幣の場合も困難であったが、高次貨幣では単純決済検証を行うのが完全に不可能である。何故ならば、口座番号Xに30枚の高次貨幣を送る取引があるのを確かめることは単純決済検証で可能だが、それだけで口座番号Xが30枚の高次貨幣を有しているとは言えないからである。もし取引の送信者が最初から30枚の高次貨幣を有しておらず、取引が無効であるのならば、どうなるだろうか? 結局のところ、現在の高次貨幣の保有状況を部分的にだけでも調べようと思ったら、高次貨幣が始まって以来の全ての取引を調べて、どの取引が有効でどの取引が無効なのかを明らかにしなければならない。そうすると、クライアントを真に安全なものにするには、Bitcoinのほぼ間違いなく非常に巨大なブロック鎖を全てダウンロードしなければならないということになる。
 有色貨幣の場合も、高次貨幣の場合も、結論は以下のようになる。TCP上に構築されているHTTPのように、Bitcoin上により高度なプロトコルを構築しようとする試みは賞賛に値するし、高度な分散型の応用ソフトウェアを実装しようとする場合には、極めて正しい方法である。しかしながら、Bitcoin上に有色貨幣や高次貨幣を構築しようとする試みは、SMTP上にHTTPを構築しようとするようなものである。SMTPの目的は電子メールを送信することであって、一般的なインターネット通信の基幹としての役割を果たすことではない。そのため、SMTP上にきちんと機能するHTTPを構築しようとしたならば、非効率的で、建築学的に見て醜悪な、多くの実装を行わなければならないだろう。同様に、Bitcoinは単純な取引を行ったり、価値を保存するためには優れたプロトコルであるものの、上述のような有色貨幣や高次貨幣を構築しようとした場合に顕在化する難点は、Bitcoinが基本的に金融P2Pプロトコルの基礎となる下層プロトコルとして機能することを全く目的としていないということを示しているし、実際に機能することができないことも示している。
 Ethereumは独自のブロック鎖を使用して、ブロックに取引の一覧と共にそれ以外の他のブロックのものとははっきり異なる「状態木(state tree)」を格納することによって、拡張性(scalability)の問題を解決する。それぞれのブロックの「状態木」は口座残高や電子契約の状態を含むシステム全体の現在の状態を表す。Ethereumの電子契約は永続性記憶領域(persistent memory storage)にデータを格納することができる。この記憶領域は、Turing完全なスクリプト言語と組み合わせて、電子契約に含まれている全ての貨幣を無数にある他の種類の暗号学的な資産と共に符号化することを可能にする。そうであるから、Ethereumの目的は上述の有色貨幣や高次貨幣を置き換えることではない。そうではなくて、Ethereumは高度な電子契約や貨幣や他の分散型応用ソフトウェアを自由自在に構築することのできる他にはない強力なスクリプト機能を提供して、優れた基盤としての役割を果たそうとしている。現に存在する有色貨幣や高次貨幣を実現しようとする計画がEthereumを利用するようになれば、単純決済検証を利用したり、Ethereumの金融派生商品や分散型交換所と互換性を持たせたり、単一のネットワーク上で一体となって動作させたりと、様々な恩恵を受けることができるだろう。Ethereumがあれば、暗号貨幣を利用して実行できることを劇的に拡大するような新しい電子契約や取引の種類についての考えを有している者は、単にその考えをEthereumのスクリプト言語の原始コードとして実装することができ、独自の貨幣を作る必要がなくなるのである。すなわち、Ethereumは革新のための基盤である。