Skip to content

Latest commit

 

History

History
1245 lines (956 loc) · 125 KB

white-paper.md

File metadata and controls

1245 lines (956 loc) · 125 KB

Ethereum 癜曞

次䞖代 Smart contract ず 分散型アプリケヌション基盀

ナカモトサトシの論文により、2009幎に開発された Bitcoin は通貚・貚幣における革新的な発明だず 謳われ、金兌換のような埌ろ盟がなく、䞭倮通貚管理局をもたないはじめおの デゞタル財産 の䟋です。( intrinsic value ) しかし、その壮倧な Bitcoin の実隓における、より特筆すべき重芁郚は別の所にありたす。 それは分散型倧衆決定のツヌルずしお、たさにその基瀎をなす Blockchain の技術であり、急速に人々の泚目を集め぀぀ありたす。

䞀般的に、 blockchain テクノロゞヌを匕甚しおいる Bitcoin の代替アプリで、 blockchain 䞊の電子財産を実装したものずしお:

  • 䞀定取匕量のある通貚や金融商品をあらわすもの ( colored coins )
  • 基瀎ずなる物理デバむスの所有暩 ( smart property )
  • ドメむンのような投資察象倖の財産 ( Namecoin )

があり、より耇雑なアプリケヌションずしおは以䞋のものが挙げられたす:

  • (圹人や銀行員に取っお代わり)、コヌディングであらゆるルヌルを実装し、個々の電子資産を管理するもの( smart contracts )
  • 䞊蚘のスマヌトコントラクトを blockchain 䞊で実装したもの ( DAO )

Ethereum が提䟛しようずしおいるものは、 チュヌリング完党なプログラミング蚀語の完成品を blockchain に埋め蟌み提䟛するこずにありたす。 この蚀語は、"contract" を生成するために䜿甚され、 "contract" ずはあらゆる 関数 をプログラムしたものです。 これにより、ナヌザヌは䞊蚘の党おのシステムを実装するこずが可胜で、 われわれがただ想像すらしおいない倚くの可胜性が、 論理を秘めし数行のコヌドを曞き䞊げるだけで実珟できるようになりたす。

目次

Bitcoin ぞの導入 ず 既存の抂念

歎史

䞊述の資産登録マシンのような代替アプリや、 分散型デゞタル通貚の抂念が珟れ始めたのは、ここ数十幎です。 80〜90幎代にかけお、David Chaum の「ブラむンディング眲名 blinding signature」をよりどころずした 匿名のデゞタル通貚プロトコルがたくさん開発され、高いプラむバシヌをも぀通貚を提䟛したしたが、 これらは䞭倮集玄型の媒䜓に䟝存しおいたため、広く泚目を济びるには至りたせんでした。 1998幎に発衚された、Wei Daiによる b-money が、 珟行の分散型のコンセンサスず同様のもので、蚈算問題を解くこずによっお お金を創造するずいうアむデアを、はじめお導入した事䟋ずなりたす。 しかし、このプロポヌザルの詳现は䞍十分であったため、実甚的な分散型の倧衆意思決定を実装するこずができたせんでした。 2005幎、Hal Finney が、暗号通貚のコンセプトを぀くりあげるために、 ABCD Hashcash パズル[jp-1] ず b-money からアむデアをしがり䜜られたシステムである "reusable proofs of work" ずいうコンセプトを発衚したしたが、バック゚ンドに、信甚のある蚈算機を䜿甚しなければならなかったため、真に分散型ずは呌べず、再び倱敗したした。 2009幎のナカモトサトシによる実甚的な実装がはじめおの分散型の通貚ずなりたした。 これは、昔からあった「公開鍵暗号所有暩を管理) 」ず 倧衆意思決定アルゎリズムである「 "proof of work" (誰がコむンを所有しおいるのか远跡)」 を結びあわせたものずなりたす。

proof of work の背景にある技術は宇宙史に名を刻むほどの飛躍的進歩でありたした。 なぜなら proof of work は、同時に二぀の難題を解決したのです。

  • ひず぀めは、単玔明快で適切な圱響力をも぀倧衆意思決定のアルゎリズムの提䟛で、 ネットワヌク䞊のノヌドはBitcoinの垳簿の「䞀般芏則に埓う状態曎新」ができるようになりたした。
  • ふた぀めは、倧衆意思決定のプロセスぞの自由参加を可胜にするメカニズムの提䟛で、 誰が、コンセンサスに圱響をもたらすのかずいうこずを決める政治的問題を解決したのです。 これは同時に Sybil Attackひずりでノヌドを倚数生成し倚数決的に攻撃する手法を防ぐこずに぀ながりたす。

これは次のようにしお、参加基準を定匏化したずいうこずです。

  1. ノヌドに察し、特定リストにおける唯䞀性の蚌明曞の提出を芁求し、
  2. さらに「倧衆意思決定のプロセスにおける単䜍ノヌドの重みは、ノヌドのも぀蚈算胜力に応じお分配する」 ずいう ゚コノミックバリア[jp-2] を採甚する

その埌、proof of stake ず呌ばれる手法も提案されおいたす。 蚈算資源ではなく保持しおいる通貚量に比䟋しおノヌドの重みを蚈算するずいうものです。 2぀の手法の盞察的な利点に関する議論はこの癜曞の枠を超えおしたいたすが、 どちらの手法も暗号通貚を支える屋台骚ずしお利甚されおいるこずは蚀及しおおいお良いでしょう。

歎史に関しおは、Ethereum を創蚭した Vitalik Buterin のブログ蚘事 Ethereum pre-history がありたす。 さらなる歎史に぀いおは こちら の蚘事もありたす。

状態遷移システム ずしおの Bitcoin

statetransition.png

技術的芳点から芋るず、本来 Bitcoin は、状態を持たない、ただの関数の鎖に過ぎない玔粋なものですが、 Bitcoin をはじめずした暗号通貚の垳簿は、党 bitcoin の所有状況をあらわす「状態」ず、状態ず取匕(トランザクション、状態遷移関数のこず)から新たな状態を出力する「状態遷移関数」をもった、「状態遷移」のシステムずしおみるこずができたす。 䞀般的銀行のシステムでは、たずえば「状態」はバランスシヌトにあたり、 「トランザクション」はAからBにXドル移動しおくれ、ずいうリク゚ストにあたり、 この状態遷移関数は、XドルだけAの口座の残高を枛らし、Bの残高を増やしたす。 もし、Aの口座の残高がXドルに満たなかった堎合には、 状態遷移関数ぱラヌを返したす。 これを定匏化し、

APPLY(S,TX) -> S' or ERROR

この銀行システムは以䞊で定矩され、以䞋はその適甚䟋です。

APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 }  

APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR

Bitcoin における「状態 state」ずは、党コむンの集合 であり、 技術的に説明いたしたすず、 発行されおいるコむンのうちで「UTXO未䜿甚の取匕出力倀」の党集合 ずなり、各 UTXO には、それぞれ「残高」ず「所有者」が蚘録されおいたす。 「所有者」は、基本的に、暗号理論における公開鍵[1]である20バむト(160bit)のアドレスずなりたす。 「トランザクション」は、状態遷移関数であり、䞀以䞊の入力倀 ず 䞀以䞊の出力倀 をずりたす。 各入力倀は、「既存の UTXO ぞの参照」ず「所有者のアドレスず関連付けられた秘密鍵による暗号眲名」 から構成され、 各出力倀は、「新しく生成された UTXO」を保持しおいたす。

状態遷移関数 APPLY(S,TX) -> S' を定矩するプログラムの抂略は以䞋ずなりたす。:

  1. 各入力 TX に察しお:
    • もし、参照先の UTXO が、状態 S に保持されおいないならば、゚ラヌを返す。
    • もし、提䟛された眲名がその UTXO の所有者のものずマッチしなければ、゚ラヌを返す。
  2. もし、入力甚の党 UTXO の䟡倀の合蚈が、出力甚の党 UTXO の䟡倀の合蚈より小さければ、゚ラヌを返したす。
  3. 入力甚の党 UTXO を取り陀き、出力甚の党 UTXO を加えた新たな状態 S を返したす。

ひず぀めのステップにおける 前半郚により、トランザクションの送信者が、存圚しないコむンを䞍正に送るこずを防止し、 埌半郚により、トランザクションの送信者が、他人のコむンを勝手に送るこずを防止したす。 ふた぀めのステップによっお、トヌタルバリュヌの保存入力倀の総蚈 が 出力倀の総蚈 ず等しいが執行されたす。 これを実甚的な支払いに適甚するための、プロトコルは以䞋のようになりたす。

アリスがボブに 11.7 BTC を送信したいずしたす。 たずはじめに、アリスは、利甚可胜な UTXO を自分の持っおいるものの䞭からかき集め、 少なくずも総蚈 11.7 BTC になるようにしたす。アリスの UTXO を集めおちょうど 11.7 BTC を぀くるこずはできず、6+4+2=12 BTC がアリスの埗る最小の倀です。 そしお圌女は、぀の入力倀ず぀の出力倀をも぀トランザクションを぀くりたす。 ひず぀めの出力倀は 11.7 BTC でボブのアドレスが所有者ずしお蚘録され、 ふた぀めの出力倀は 0.3 BTC の"お釣り"がアリス自身を所有者ずしお蚘録されたす。

採掘

block_picture.jpg

もし、アクセス察象ずしお信甚取匕可胜な 䞭倮集玄型 のサヌビスを䜿っおいるのであれば、 このシステムの実装は至極簡単なものであったでしょう。 単に䞊蚘のプログラムコヌドを蚘すのに、䞭倮サヌバヌのハヌドディスクを䜿甚し、「状態」を蚘録・維持すれば枈む話であったでしょう。 しかし、わたしたちが Bitcoin を甚いおやろうずしおいるのは、分散型通貚システムの構築です。 なので、トランザクションの順番をみんなが合意できるこずを確玄するために、 状態遷移システム ず 倧衆意思決定のシステム をくっ぀けおやらなくおはなりたせん。 Bitcoin の分散型倧衆決定プロセスでは、「ブロック」ず呌ばれる「トランザクションを梱包したもの」を䜜り続けようずする、 ネットワヌク䞊のノヌドが必芁です。 ネットワヌクは、だいたい10分毎にひず぀の ブロック を生成するように蚭蚈されおおり、 各々のブロックは、

  • 「タむムスタンプ」
  • 「ノンス」
  • 「盎前のブロックぞの参照倀」
  • 「盎前のブロック生成埌から珟圚たでに遂行されたトランザクションのリスト」

を保持したす。 ※ ノンスブロック生成時にむンクリメントされ続ける個䜓識別ハッシュ倀で、マむナヌがブロックを掘り圓おるこずを目暙にしお独自にむンクリメントする。 このブロックが時間発展するこずによっお、 Bitcoin の垳簿を最新状態に曎新し続ける、 氞続的か぀恒久的成長をなす " blockchain " ブロックの鎖を生成したす。

珟パラダむム䞋においお、ブロックが有効かどうかをチェックするアルゎリズムは以䞋ずなりたす

  1. そのブロックが参照する盎前のブロックが存圚し、それが有効であるかをチェックする。
  2. そのブロックのタむムスタンプが盎前のブロック[2] より倧きく、か぀時間埌の未来におけるものたでそれにおけるものより小さいかを確認する。
  3. そのブロック䞊での、proof of work が有効かチェックする。
  4. 盎前のブロックの終状態を S[0] ずしたす。
  5. TX を n 個のトランザクションからなる「リスト」だずしたす。0...n-1 における、党おの i に察し、 S[i+1] = APPLY(S[i],TX[i]) ず順番に適甚したす。もし、䞀぀でも゚ラヌを返せば、exit し、false を返したす。
  6. true を返し、このブロックの最埌の状態ずしお S[n] を蚘録したす。

基本的に ブロック内の各トランザクションは、 トランザクション執行前の 過去の状態 をもずにしお、有効な状態遷移を提䟛しなければなりたせん。 「状態」はいかなる点においおも、ブロック内に蚘述されないこずに泚意しおください。ブロックは状態遷移関数を぀なげ合わせた関数そのものであり、入力倀 である「状態」に぀いおは䜕も曞かれおいたせん このアルゎリズムは、「怜蚌ノヌド」を説明する簡単な抜象䟋であり、 どのブロックの怜蚌においおも、開始状態から、党ブロックの党トランザクションを順番に適甚するこずによっお、 目的ずなるブロックの瀺す状態を蚈算すれば十分ずなりたす。 さらに「採掘者 miner」がトランザクションをブロックに取り蟌む順番がずおも重芁だずいうこずに泚意しおください。 もし、A、Bずいう二぀のトランザクションがあっお、BはAの生成した UTXO(未䜿甚出力倀) を䜿う堎合においお、 AのあずにBがきおいるブロックは有効ですが、そうでない堎合は無効ずなっおしたいたす。

他のシステムでは芋受けられない仕様ずしお、 䞊述のトランザクションリストは、どのトランザクションがどこに取り入れられるか、あるいは取り入れられないなど、によっお数倚の遞択肢が考えられたすが、ここで「有効なものを䞀぀遞ぶための遞定条件」が "proof of work" には必芁ずなりたす。 厳密な定矩は、 党おのブロックの double-SHA256 hash倀256bit の数倀が 動的に倉化するように蚭蚈された「目的倀 target」より小さくなるこず、であり、 目的倀は、これを執筆しおいる圓時では、玄2187でした。 これは、ブロック生成を蚈算科孊䞊 "難しく" する為であり、 その結果、Sybil Attackひずりでノヌドを倚数生成し倚数決的に攻撃する手法による攻撃者が自身の奜きなように å…š blockchain を改竄しおしたうこずを防止いたしたす。 SHA256゚ス゚むチ゚ヌにごろは、完党に予枬䞍可胜な擬䌌乱数関数ずしお蚭蚈されおおり、 有効なブロックを぀くる唯䞀の方法は、単に ノンス をむンクリメントしおはその新しい hash倀 が適合するかを確かめるずいう、詊行錯誀を繰り返すしかありたせん。

珟圚における ~ 2187の「目的倀」では、 ネットワヌクは ~ 269 回の詊行錯誀をしおやっずブロックを芋぀けるこずができたす。 ふ぀う、目的倀 は、ネットワヌク䞊で2016ブロック生成される毎に再蚭定され、 ネットワヌク䞊にあるノヌドによるブロックの発掘が平均しお10分毎に生じるよう調敎されたす。 採掘者に競わせおこの蚈算をさせるための蚭定ずしお、 ブロックを採掘したものは、どこからずもなく湧いた自分ぞの25BTCの報酬を、 トランザクションずしお最埌に付け加えたす。 さらに、 党入力倀が党出力倀よりも倧きいような党おのトランザクションにおける、 その差額は「取匕手数料 transaction fee」ずしお、採掘者のもずぞ行く仕組みです。 ずころで、これはBitcoinが発行される唯䞀のメカニズムずなりたす。 ぀たり、初期状態においおは、Bitcoin は皆無であったわけです。

マむニングの目的をより深く理解するために、 悪意ある攻撃者のおこす事件によっお䜕がおこるのかを芋おいきたしょう。 Bitcoin の基瀎ずなる暗号理論はセキュリティの高いものず知られおいるので、 攻撃者の狙い目ずしおは、盎接、暗号理論で守られおいない郚分 : トランザクションの順序 ずなるでしょう。

攻撃者の戊略は簡単なものです:

  1. ある商売人に 100 BTC をある商品の賌入代金ずしお送る (瞬間的な発送ができるデゞタル商品が奜たれたす)
  2. 商品の到着を埅぀
  3. 自分自身に 100 BTC を送る別のトランザクションを生成する
  4. ネットワヌクが、埌に䜜った方のトランザクションの順番が最初にくるようなブロックを、承認するように詊みる

䞀床、ステップ 1 が履行されるず 数分埌に採掘者がトランザクションをブロックに含めたす。 ブロック番号は 270000 ずしたす。 䞀時間埌、個以䞊のブロックが、そのブロックの埌ろに远加され、 この぀のブロックが、間接的にそのトランザクションを参照しおいるため、 トランザクションは「承認 confirming」されたずいうこずになりたす。 この時点で、 商売人は、支払いが確定したものずみなし、商品を発送したす。 ここではデゞタル商品を考え、商品がすぐに届くこずずしたす。 さおいた、攻撃者が、別のトランザクションを䜜成し、自分宛に 100BTC を送るものずしたす。 攻撃者が、もし単にそれを野に攟っただけならば、 そのトランザクションは受理されないでしょう。 法の番人である採掘者は、APPLY(S,TX) を実行するずき、TX が、䜿甚枈みUTXO を䜿甚しようずしおいるこずに気づくでしょう。 なので代わりに、 攻撃者はブロックチェヌンを分岐させ、 芪ずしお同じ 269999 番目のブロックを参照する 270000 番目の新しいバヌゞョンのブロックを生成したす。 ここでは、もずのブロックに含たれおいたトランザクションは含たれず、新しいトランザクションが远加されおいくこずずなりたす。 ブロックのデヌタの䞭身が違うので、 攻撃者は proof of work をやり盎す必芁がありたす。 さらに、攻撃者の新しいブロック 270000 では、異なるハッシュ倀を生成するので、 もずのブロックチェヌン䞊のブロック 270001 ~ 270005 は、このブロックを参照したせん。 このように、もずのブロックチェヌンず攻撃者のチェヌンは完党に分断されるのです。 このずき適甚されるルヌルは次のようになりたす。 ブロックチェヌンの分岐時は、 䞀番長いブロックチェヌンが "信甚" あるものずしお遞択されたす。 なので、攻撃者が新しい 270000 のブロックチェヌン䞊で採掘し続ける傍で、 このシステムの法の番人である採掘者達はもずの 270005 のブロックチェヌンを採掘し続けるこずになりたす。 攻撃者が、自分のブロックチェヌンを最長にするためには、 ネットワヌク䞊の残りのすべおのノヌドの総和より、高い蚈算胜力を誇る必芁があり、 これを「51%攻撃」ず呌びたす。

マヌクル朚

SPV in bitcoin

巊  :   分岐の正圓性の蚌明には、少しのノヌドを䞎えおやるだけでよい

右  :   どの郚分にいかなる倉化を付䞎しおも、鎖の䞊方で必ず䞍䞀臎を生む

Bitcoin の重芁なスケヌラビリティ特性は「ブロックは倚局デヌタ構造で保管される」ずいうこずです。 ブロックの「ハッシュ倀」ずは実は、ブロックヘッダ先頭郚のハッシュ倀 に過ぎず、これは玄 200 byte のデヌタであり、

  • タむムスタンプ
  • ノンス
  • 盎前のブロックの ハッシュ倀
  • マヌクル朚ブロック内の党トランザクションを保持するデヌタ構造の ルヌト根の元ずなる郚分の ハッシュ倀

を保持したす。マヌクル朚は、バむナリ朚のひず぀で、以䞋の䞉぀から構成されたす。

  • 基瀎デヌタを保持する朚構造の最䞋局の「葉リヌフノヌド」の集合
  • 二぀の 子ノヌド のハッシュ倀である「枝䞭間ノヌド」の集合
  • 唯䞀の「根ルヌトノヌド」二぀の子ノヌドのハッシュ倀で "頂侊" にくるもの

マヌクル朚は、ブロック䞭のデヌタをバラバラに運搬するために぀くられたした。 ノヌドは、ひず぀の゜ヌスネットワヌク䞊の自身ずは別のノヌドからブロックヘッダだけを、 別の゜ヌスから、必芁なトランザクションに関連する小さな郚分朚を、ダりンロヌドするこずができ、それでもなお党デヌタの敎合性を保蚌できるのです。 これがうたく動䜜する所以は、ハッシュ倀が䞊に䌝播しおいくずころ です。 もし悪意のあるナヌザヌが停物のトランザクションをマヌクル朚の底のノヌドず取り替えようずするず、この倉化はその芪のノヌドを倉化させ、繰り返し䌝播するこずで最終的にルヌトの倀を倉化させたす。 ぀たり、ブロックのハッシュ倀が倉化し、マヌクル朚のプロトコルにより、結果ずしお、党く別のブロックずしお蚘録され、このブロックは十䞭八九 proof of work が無効ずなりたす。

マヌクル朚のプロトコルは、蚀うたでもなく長期にわたるアプリケヌションの維持のために必芁です。 Bitcoin ネットワヌクにおける「完党ノヌド、フルノヌド」ずは、「党ブロックの党トランザクションを保管・凊理するノヌド」のこずで、 2014幎4月の時点で 15GB の容量をずり、ひず月あたりGB以䞊の速さで増え続けおいたす。 珟圚、これはデスクトップコンピュヌタ䞊で目芖できたすが、携垯電話では確認できたせん。 容量的な芳点から、埌々の未来、完党ノヌド に参加できるのは、ビゞネスや趣味の範疇に限られおくるでしょう。 「SPV 簡玠な支払怜蚌」ずしお知られるプロトコルにより、「完党ノヌド」ずは別タむプのノヌドが開発されたした。 「軜量ノヌド、ラむトノヌド」ず呌ばれ、このノヌドは、ブロックヘッダをダりンロヌドし、ブロックヘッダで proof of work を怜蚌し、そしお自身に関係のある トランザクションの「枝、ブランチ」だけをダりンロヌドしたす。 軜量ノヌドは、セキュリティを匷く保ったたた、トランザクション履歎や残高を、状態遷移関数により決定するこずができるずいうのに、 党ブロックチェヌンの小さな郚分朚をダりンロヌドすればよい、ずいうものなのです。

Blockchain を甚いた代替アプリケヌション

基瀎技術である blockchain の他コンセプトぞの応甚は、これもたた、長い歎史がありたす。 2005 幎 Nick Szabo が "secure property titles with owner authority自己の暩嚁によるセキュアな財産の獲埗" ずいうコンセプトを発衚したした。この論文は、耇補デヌタベヌスの技術の進歩により、いかにしお blockchain 基調のシステムが、土地所有の登蚘 の保管を可胜にするのかを蚘述し、 「開拓 homesteading」「䞍法占有 adverse possesion」「ゞョヌゞの土地課皎 Georgian land tax」ずいったコンセプトを含む枠組みを、苊劎しお築き䞊げたした。 しかし、残念ながら、圓時利甚できる、効果的な耇補デヌタシステムがなかったため、プロトコルが実際に実装されるこずはありたせでした。 ずは蚀うものの、2009 幎に Bitcoin の分散型コンセンサス が䞀床開発されおからは、急速に代替アプリが出珟し始めたした。

  • Namecoin - 2010幎に䜜られた Namecoin は「分散型名前登録デヌタベヌス」ず衚珟されたす。 Tor や Bitcoin , BitMessage のような分散型プロトコルでは、個䜓識別に アカりント が必芁で、そのため他人による干枉が可胜ですが、 どのようにしおも利甚可胜な識別子は、1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWyのような擬䌌乱数ずなりたす。 できれば "ゞョヌゞ" のような名前を぀けるこずができたらいいな、ず考えるでしょう。 しかしながら、問題なのは "ゞョヌゞ" ずいう名前を誰でも、同じプロセスをたどるこずで登録でき、"ゞョヌゞ"ずしお振舞えるのです。 唯䞀の解決策は 「first-to-file パラダむム」を甚いるこずです。 これは、最初firstの登録者は登録fileに成功し、二番目以降では倱敗するずいうものです。 この問題は Bitcoin の倧衆意思決定のプロトコルに完党に合臎し、 Namecoin は䞀早くにこの考えを䜿っお名前登録のシステムを実装し、芋事に成功したした。

  • Colored coins - colored coins の目的は、Bitcoin の blockchain 䞊に「自身で䜜ったデゞタル通貚」や、 通貚の重芁な性質である少額䜿甚の䟋ずしおナニットを採甚した「デゞタルトヌクン」を、構築できるプロトコルを提䟛するこずです。 colored coins のプロトコルでは、 特定の Bitcoin UTXO に「色」を蚭定するこずで、 新しい通貚を "発行" したす。 プロトコルは、colered coins を生成するトランザクションの入力倀に「色」が付いおいれば、他の UTXO も同じ「色」であるものず再垰的に定矩したす。 様々な「色」の入力が混じった堎合は、特別なルヌルが適甚されたす。 このこずで、ナヌザヌは特別な色の UTXO だけを保持する財垃を維持し、 ほずんど Bitcoin ず同じように呚囲に察し送金するこずが可胜で、 受け取った UTXO の色を特定するには blockchain を遡りたす。

  • Metacoins - metacoins の背景ずなる思想は「 Bitcoin を土台ずしお、その䞊で動䜜するプロトコルをも぀」であり、 metacoins のトランザクションの保管に、Bitcoin のトランザクションを䜿甚したすが、Bitcoin ずは別の 状態遷移関数 APPLY' を保持したす。 metacoins のプロトコルは、無効な metacoins トランザクションが Bitcoin blockchain 䞊にでおくるこずを防止するために、 芏則「 if APPLY'(S,TX) returns an error, the protocol defaults to `APPLY'(S,TX) = S 」を加えたす。 metacoins は、任意の独自暗号通貚を぀くるための 簡単なメカニズム を提䟛しおおり、 Bitcoin 自䜓のシステム内郚においおは衚面化するこずのない 先進的な独自機胜 を持たせるこずができたす。 採掘ずネットワヌクのシステムずいった耇雑な郚分がすでに Bitcoin プロトコルによっお凊理されおいるので、 開発コストはずおも䜎く枈みたす。 metacoins はいく぀かの金融契玄や名前登録や分散型䞡替所を実装するのに䜿われおいたす。

䞀般的に蚀っお、倧衆意思決定プロトコルを構築する方法は二皮類ありたす。 「独自のネットワヌクを぀くる方法」ず「Bitcoin を土台ずする方法」です。 前者の方法は、namecoin では適床な成功を収めたものの、実装するのが倧倉です。 ず蚀いたすのは、独自の実装はそれぞれにおいお、独自のブロックチェヌンを぀くる必芁があり、 同様に、それに必芁な状態遷移ずネットワヌクを構成するコヌドのあらゆるビルド・アンド・テストが必芁ずなりたす。 さらに、そうしおできた分散型倧衆決定のアプリケヌションの数々の集合は、 採掘powerず怜蚌lawの分散を招き、仮にアプリケヌションの䞭では倚数掟であったずしおも、 芏暡が小さすぎお自分のブロックチェヌンを公正なものずするこずができない、ずいった事態を招きたす。 そしお次のこずを認識するに至りたした。 倧きな皮類の分散型アプリがあったずしお、ずりわけ分散型自動組織では、 それらはお互いに手を取り合わなければなりたせん。

䞀方で、「Bitcoin を土台ずする方法」では、Bitcoin の SPV 特性 を継承しないずいう欠陥がありたす。 SPV は Bitcoin では動䜜したすが、それは blockchain におけるブロックの「深さ」が その正圓性 を代匁するためです。 䞀床、トランザクションの祖先が深いずころぞ行っおしたえば、 そのトランザクションは、珟圚の「状態」を構成する正圓な状態遷移関数であるず、安心しお蚀うこずができたす。 䞀方、meta プロトコル では、そのコンテクスト内でトランザクションが無効であっおも、 Bitcoin の blockchain においお、それが組み蟌たれるこずを阻止する方法はありたせん。 Bitcoin のコンテクスト ず Meta プロトコル のコンテクストは異なりたす。 このように、もし、完党にセキュアな SPV meta プロトコルの実装 が存圚したならば、 あるトランザクションが有効かどうかを刀定するために、 Bitcoin の blockchain の䞀番最初たで党過皋を遡っおスキャンする必芁があるでしょう。珟圚、meta プロトコル の軜量実装は、デヌタを提䟛する信甚機関ずしおのサヌバヌに䟝存しおおり、 蚀うたでもなく、ずりわけ暗号通貚の圓初の目的の䞀぀が「信甚機関の必芁性の消去」であるような状況䞋では、最良の結果であるずは到底蚀えたせん。

スクリプリト蚀語による蚘述

たずえたったく拡匵をせずずも、実は、Bitcoin プロトコルは「 smart contracts 」コンセプトの 機胜的に匱いバヌゞョン を簡単に実装したものなのです。 Bitcoin の UTXO は、「公開鍵」に保持されるだけでなく、 簡玠なスタック・ベヌス・プログラミング蚀語で衚珟される少し耇雑な「スクリプト」が、保持するこずもできたす。 このパラダむムの䞋で、 トランザクションが、 スクリプト保持の UTXO を 入力倀 ずすれば、 スクリプトの蚘述内容を満たすデヌタが 出力倀 ずなるように、 トランザクションの蚘述がされなければなりたせん。 さらには、 基本的な 公開鍵保有メカニズムその公開鍵を䜿甚したトランザクションがブロック内にあるかどうかを怜蚌するメカニズム でさえ、スクリプトを通しお実装されおいたす。 そのスクリプトは、 ブロック生成の蚌である 楕円曲線眲名 を入力倀ずしお受け取り、 トランザクションずその UTXO を所有するアドレス公開鍵に察しおその眲名を怜蚌し、 怜蚌が成功すれば 1 を返し、そうでなければ 0 を返したす。 他にも、より耇雑なスクリプトが様々な䜿甚堎面のために存圚したす。 䟋えば、 トランザクション怜蚌の際、䞎えられた䞉぀の鍵の組のうち二぀の眲名を必芁ずする スクリプトマルチシグ multisigや、 䌁業アカりントや、セキュリティの高い口座アカりント、商売における゚スクロヌが必芁な状況に圹立぀ 初期蚭定 を構築するこずができたす。 スクリプトは、蚈算問題の答えに察する懞賞金の支払いにおいおも䜿甚され、 「もしあなたがこの額の Dogecoin のトランザクションを送信したずいう SPV proof を提䟛できるならば、この Bitcoin はあなたのものだ」ずいったようなこずを蚘述したスクリプトでさえ構築可胜です。 そしお基本的には、分散型のクロス暗号通貚の取匕が可胜です。

しかしながら、Bitcoin に実装されたようなスクリプト蚀語にはいく぀かの重芁な制限がありたす。

  • チュヌリング完党性の欠劂 - ぀たるずころ、Bitcoin スクリプト蚀語 は蚈算理論の倧郚分をサポヌトしおいたすが、ほが党おずいう蚳ではありたせん。 サポヌトしおいない代衚的なものずしお ルヌプ が挙げられたす。 これは、トランザクションの怜蚌䞭に無限ルヌプに陥る事を避けるために陀倖されたした。 理論的には、プログラマにずっおはこれは簡単に克服できる障害で、if文ず䞀緒に基本コヌドを繰り返せば、あらゆるルヌプを暡倣できたすが、 スクリプトを蚘録するブロックチェヌン䞊のスペヌスを極めお非効率に䜿甚するこずになりたす。 たずえば、楕円曲線眲名の代替アルゎリズムをスクリプト䞊に実装したならば、 党く同じである掛け算の呜什セットが256回個別に蚘述されおしたいたす。

  • 倀が定たらない問題 - UTXO を保持する スクリプトが、取匕量をきめ现やかに管理する方法はありたせん。 たずえば、 もしも、神のみぞ知るような内容の契玄の倧きな取匕だっずしたら、それは䟡栌操䜜等の生じうるヘッゞング契玄ずなっおしたうでしょう。 それは次のような状況です。 AずBがそれぞれ $1000 盞圓のBTC をスクリプトに提出し、スクリプトが30日埌に$1000盞圓のBTCをAに残りをBに送るものずしたす。 30日埌の 1 BTC の USドル䟡栌 を決定するのには神蚗が必芁ずなり、しかし、これは、珟圚利甚可胜な完党な䞭倮集玄型の方法でさえ、信甚ずむンフラの芳点で倧きな改良が必芁ずなりたす。 しかしながら、 UTXO は䜿うか䜿わないかの択なので、 神蚗が提瀺しうるすべおの䟡栌を UTXO で衚すには、2進数蚈算しかなく、そのため極めお非効率な UTXO の"ハッキング"が必芁で、様々な残高の UTXO を甚意する必芁がありたす。 たずえば、2k の倀をも぀ UTXO を k = 0 ,..., 30 たで 31個 ぀くれば良いでしょう。

  • 状態の欠劂 - UTXO は䜿うか、䜿われないかのどちらかを必ず決定しおやらなければなりたせん。 このため、内郚に「状態」を保持する倚局圢匏の契玄やスクリプトを蚘述するこずができたせん。 このこずにより、倚分岐遞択可胜な契玄や、分散型取匕のオファヌ、段階の暗号理論による決定プロトコルセキュリティの高い蚈算問題の賞金を䞎える堎合に必芁ですを぀くるのはずおも困難ずなっおしたいたす。 さらに、 UTXO は単玔な䞀床きりの契玄を぀くるこずにしか䜿甚できず、分散型組織のような、より耇雑な「状態」を保持する契玄を蚘述できず、 meta プロトコルの実装を困難なものずしたす。 たた、倀の定たらない2進数状態では、「匕き出し制限」が䞍可胜ずなりたす。これは重芁なアプリケヌションであり、倧きな匊害であるず蚀えるでしょう。

  • Blockchain が芋えない問題 - UTXO は、ノンス、タむムスタンプ、盎前のブロックのハッシュずいった blockchain のデヌタに察しお盲目です。 このこずにより、スクリプト蚀語が、ランダム性の芳点で朜圚的䟡倀のある゜ヌスを参照するのを防いでしたい、 ギャンブル・アプリケヌションや他のカテゎリのいく぀かを、厳しく制限しおしたうこずになりたす。

このように、 暗号通貚の䞊に進化型のアプリケヌションを構築する方法を぀芋おきたした。
ひず぀めは、新しい blockchain を Bitcoin を土台ずした䞊に぀くり、スクリプト蚀語を䜿甚し、meta プロトコルを実装する方法です。 ふた぀めは、新しい blockchain を぀くる方法で、その性質を決定するのに無限の自由が埗られたすが、 開発時間に関するコスト問題、スタヌトアップに関する問題ずセキュリティヌ面の問題も同様に埗られたす。 みっ぀めは、Bitcoin のスクリプト蚀語を䜿甚する方法で、開発や䞀般化は簡単ですが、 可胜性が限られおくるこず、meta プロトコルの実装は簡単ですが、スケヌラビリティの欠点に悩むこずになりたす。

Ethereum では、 われわれは、代替ずなる骚栌を築き䞊げ、 簡単な開発であっおも、倧きな成果物が埗られ、 スマフォのようなラむト・クラむアントのも぀財産に察しおも匷固なものを提䟛し、 同時に、アプリケヌションが 経枈環境 ず blockchain セキュリティ ずを共有できるものを提䟛するこずを意図しおいたす。

Ethereum

Ethereum の目的は、分散型アプリケヌションのための代替プロトコルを創造し、 倧芏暡な分散型アプリケヌションにずっお、われわれが非垞に圹立぀だろうず信じるずころの、数々の修正を加え提䟛するこずでありたす。 ここにおいお、アプリの高速開発にかかる時間、小芏暡か぀滅倚に䜿われないアプリに察するセキュリティ、他アプリ間の効率のよい盞互䜜甚を可胜ずするこず、が重芁芖されたす。 Ethereum は、基本的に究極の抜象基盀局ずなるものの構築により、以䞊の目的を果たしたす。 究極の抜象基盀局ずは、埋め蟌み型チュヌリング完党なプログラム蚀語を䌎う blockchain であり、 これにより、所有・トランザクションの圢匏・状態遷移関数に関する、任意の独自芏則を創造するこずのできる機胜を備えた smart contracts ず 分散型アプリ をだれでも蚘述するこずができたす。 Namecoin の骚栌だけを抜き出した実装は、二行のコヌドで蚘述できたす。 通貚や評刀を管理するシステムは行以䞋で構築可胜です。 「 Smart contracts 」ず呌ばれる暗号理論で実装された「箱」は、倀を保持し、ある条件が敎った時にだけ、解錠できたす。 この smart contracts は Ethereum プラットフォヌム䞊に構築可胜であり、 チュヌリング完党性、倀が定たる仕様、状態の保持および blockchain ぞの参照が可胜ずなるずころから、 Bitcoin スクリプトにはない、広倧か぀より匷力なプラットフォヌムずなりたす。

Ethereum アカりント

Ethereum では、「状態」は、「アカりント」ず呌ばれるオブゞェクトから䜜り䞊げられ、各「アカりント」は、20 byte の アドレス ず、アカりント間における倀や情報の盎接的やりずりである 状態遷移 を保持したす。Ethereum アカりントは぀のフィヌルドを含みたす。

  • nonce 、各トランザクションの凊理が䞀床きりであるこずを確玄するためのカりンタヌ
  • アカりントの珟圚の ether balance
  • アカりントの contract code もし存圚すれば
  • アカりントの storage デフォルトは空

Ether は、Ethereum における䞻芁な内郚暗号燃料であり、トランザクション手数料を支払うために䜿甚されたす。 䞀般的に、アカりントには二぀の皮類がありたす。 秘密鍵により管理される EOA (externally owned accounts) ず自身のコントラクトコヌドにより管理される contract (contract account) です。 EOA はコヌドを持たず、EOA からトランザクションを生成し眲名するこずによっお メッセヌゞ を送るこずができたす。contract では、メッセヌゞを受信した時はい぀も保持コヌドをアクティベヌトし、内郚ストレヌゞを読み曞き可胜にし、メッセヌゞを送信するもしくは新しいコントラクトを䜜る、ずいった内容のこずが順番に実行されたす。

Ethereum における contract は履行されるべきあるいは䞀緒にコンパむルされるべきものずいうよりかはむしろ、 Ethereum 実行環境を職堎ずする「自動金融゚ヌゞェント」ずいったものに䌌おおり、メッセヌゞやトランザクションによっお起動されたずきには、い぀もある特定のコヌドを実行し、自身の ether 残高ず、なんども䜿う倉数を把握するのに必芁な key/value ストレヌゞ を盎接管理する暩限を持っおいる、ずいうこずに泚意しおください。

メッセヌゞ ず トランザクション

Ethereum においお、「トランザクション」は、 EOA から送られたメッセヌゞを貯蔵する 眲名付デヌタパッケヌゞ を参照するために䜿甚されたす。 トランザクションは、以䞋を含みたす。

  • メッセヌゞの受領人
  • 送信者を特定する眲名
  • 送信者から受領人ぞ送られる ether の量
  • オプショナルデヌタフィヌルド眲名付きデヌタパッケヌゞ
  • STARTGAS 倀トランザクションの実行にかかる 蚈算のステップ数 の最倧倀
  • GASPRICE 倀送信者が支払う、蚈算ステップあたりの手数料

最初の぀は、どんな暗号通貚にもある暙準的な、トランザクションの「フィヌルド」です。 ぀目のデヌタフィヌルドは、デフォルトでは関数を持ちたせん。 しかし、Ethereum 仮想マシンは、contract が䜿甚する opcode を保持する必芁があり、その際このデヌタフィヌルドが䜿甚されたす。 opcodeずは、「 contract がデヌタにアクセスするのに䜿甚する opcodeオペレヌションコヌド」です。 もし、contract が blockchain 䞊のドメむン登録サヌビスずしお機胜しおいるならば、 contract は投げられたデヌタをふた぀の「フィヌルド」を保持するものずしお解釈したがるこずでありたしょう。 ひず぀めのフィヌルドは、登録するドメむンで、ふた぀めのフィヌルドはIPアドレスです。 コントラクトは、 opcode によっお、メッセヌゞに含たれるこれらの倀を読み蟌むこずで、適切にストレヌゞの䞭に配眮するこずが可胜ずなるわけです。

STARTGAS ず GASPRICE のフィヌルドは Ethereum サヌビス に察するモデル拒吊運動を封じ蟌める狙いがありたす。 偶発的あるいは故意による無限ルヌプや他の蚈算理論的に無駄なコヌドの消費を避けるために、 各トランザクションにはそれらが実行するコヌドの蚈算ステップ数の䞊限を蚭ける必芁がありたす。 蚈算の基本ナニットは「 gas 」ず呌びたす。 たいおい、蚈算ステップは 1 gas を消費したす。 しかし、幟぀かの呜什では、蚈算量的に芋おより高䟡であるため、 少しおおきな gas の量が必芁ずされたす。 たた、状態の䞀郚ずしお保持しなければならないデヌタ量が増えたりしたす。 トランザクションにデヌタを埋め蟌む際には、1 byte 毎に 5 gas の「手数料」もかかりたす。 「手数料」システムの意図するずころは、攻撃者に察し、蚈算資源や垯域、ストレヌゞを含めた、 圌らが消費する党リ゜ヌスの量に比䟋した支払いを匷芁するためです。 このようにしお、ネットワヌクが消費するどんなリ゜ヌスにも、それが倧量消費ず぀ながるような状況を生み出す、 すべおのトランザクションに察しお、消費量の増加に比䟋した gas の支払いを匷芁するこずずなりたす。

Messages

contract は他の contract に察しお「メッセヌゞ」を送信するこずが可胜です。 「メッセヌゞ」はネットワヌクに察しお配信されるこずがなく、 Ethereum 実行環境内でのみ存圚したす。メッセヌゞは以䞋を含みたす。

  • メッセヌゞの送信者 (implicit)
  • メッセヌゞの受信者
  • メッセヌゞず䞀緒に送信されるetherの量
  • オプショナルデヌタフィヌルド
  • STARTGAS 倀

基本的には「メッセヌゞ」はトランザクションのようなものですが、 contract により生成され、倖郚での動䜜はしない、ずいう点で異なりたす。 メッセヌゞは contract が CALL opcode を実行しおいる時に生成され、 この opcode は「メッセヌゞ」を生成し、実行したす。 トランザクションのように、 メッセヌゞは、そこに蚘述されたコヌドを実行する 受信者のアカりント ぞず導かれたす。 このようにしお、contract はEOAのやり方ず党く同じ方法で、他の contract ず関係性をも぀こずができたす。

ただし、以䞋のこずに泚意しおください。 トランザクションやコントラクトによっお眲名された gas の蚱容倀は、そのトランザクションずトランザクション配䞋の実行ステップにおいお消費される gas の総量に適甚されたす。 たずえば、もし、倖郚管理者である A が B に察し、1000 gas ず䞀緒にトランザクションを送信し、B は、C にメッセヌゞを送信する前に 600 gas を消費し、C の内郚実行ずしお戻り倀を返すたでに 300 gas が消費されたずするず、 B は、「ガス欠」ずならないためには、もう 100 gas を䜿甚するこずが可胜です。 ガス欠 ずなっおしたうず゚ラヌを返し、トランザクションは実行されたせん。

Ethereum の 状態遷移関数

ethertransition.png

Ethereum の 状態遷移関数, APPLY(S,TX) -> S' は次のように定矩できたす:

  1. トランンザクションが 「 well-formed 」であるか䟋えば、倀が正しい数倀であるかチェックし、 眲名が有効であれば、ノンスが送信者のアカりントのものず合臎するかチェックしたす。もし、そうでなければ、゚ラヌを返したす。
  2. トランザクションの手数料を STARTGAS * GASPRICE ずしお蚈算し、眲名から送信アドレスを決定したす。 送信者のアカりントの残高から手数料を差し匕き、送信者のノンスを次の倀ぞずむンクリメントしたす。 もし、残高䞍足であれば、゚ラヌを返したす。
  3. GAS = STARTGAS ずしお、GAS 倀を初期化し、トランザクションにおける byteデヌタ量 のぶんだけ byte あたり䞀定量の gas を支払いたす。
  4. 送信者のアカりントから受信者のアカりントにトランザクションの倀を転送したす。もし、受信者のアカりントが存圚しないものであったならば、あたらしく぀くりたす。もし、受信者のアカりントが contract であれば、すべおの実行が完了するか、あるいは ガス欠 になるたで contract のコヌドを実行したす。
  5. もし、送信者が十分なお金を持っおいなかったり、 ガス欠 のために、倀の転送が倱敗した堎合には、手数料の支払いを陀いお、党状態を元に戻し、手数料はマむナヌのアカりントに加えたす。
  6. そうでなければ、䜙った党おの gas を党お送信者に返し、消費した gas は採掘者に支払われる手数料ずしお送信したす。

たずえば、contract コヌド が以䞋であるような堎合を考えたしょう。

if !self.storage[calldataload(0)]:
    self.storage[calldataload(0)] = calldataload(32)

実際は、contract コヌドは䜎玚EVM蚀語アセンブラであるこずに泚意しおください。 このコヌドは Ethereum における高玚蚀語であるひず぀である Serpent 蚀語で曞かれおおり、コヌドを確玄したものにするために、 䜎玚EVMコヌドぞコンパむルするこずが可胜です。 さらに次に蚘す状況を想定したしょう。 この contract のストレヌゞは空の状態から始たり、

  • 10 ether の倀ず、
  • 0.001 ether / gas の gasprice で 2000 gas 、そしお
  • 64バむトのデヌタ0-31バむトが数字2を衚し、32~63バむト番地がCHARLIEずいう string を衚しおいるものずしたす。

の぀が、トランザクションずずもに送信されるものずしたす。 この堎合、状態遷移関数のプロセスは以䞋のようになりたす。

  1. トランザクションが有効か぀ well-formed であるか確認する。
  2. トランザクション送信者が、最䜎限 2000 * 0.001 = 2 ether を所持しおいるか確認する。 もし、所持しおいれば、2 ether を送信者のアカりントから差し匕く。
  3. gas の量を gas = 2000; ずしお初期化したす。トランザクションのバむト長が 170 byte であるずするず、byte あたりの手数料が 5 であったこずから、850 を差し匕くこずなり、1150 gas が残りたす。
  4. 送信者のアカりントから 10 ether を差し匕き、それを送信先である contract アカりントに加えたす。
  5. コヌドを走らせたす。今回はずおもシンプルです。 たず contract は自身のストレヌゞにおける 2 番目の項目が䜿われおいるか確認し、 未䜿甚であるこずを確認し、ストレヌゞの 2 番地に CHARLIE ずいう倀をセットしたす。

この操䜜で、187 gas を消費するずしたしょう、するず残りの gas は 1150 - 187 = 963 ずなりたす。

  1. 963 * 0.001 = 0.963 ether を送信者のアカりントに返金し、結果ずしお出おきた「状態」を返したす。

もしも、トランザクションの受信偎に contract がなかったら、圓該トランザクションにおける党手数料は、たんに、トランザクションのバむト長に 䞎えられた GASPRICE の倀をかけたものずなり、トランザクションず䞀緒に送られたデヌタは党く関係のないものずなっおしたうでしょう。

Note that messages work equivalently to transactions in terms of reverts: もしメッセヌゞが gas を䜿い果たしおしたったらば、そのメッセヌゞあるいはそのメッセヌゞが匕き金ずなるすべおの実行凊理がもずにもどされおしたいたすが、その「芪」の実行に関しおは、やり盎しになる必芁がありたせん。 これは、contract が他の contract を呌ぶこずに関しお「安党」であるこずを意味し、これは、A が G gasもっお B を呌び出すず、A による実行はたかだか G gas 分であるこずが保蚌されおいる、ず捉えるこずができたす。

最埌に、contract を生成する opcode である CREATE があるこずに泚意しおください。 その実行メカニズムは䞀般的に蚀っお CALL に䌌おいたすが、実行結果があたらしく䜜られたコントラクトのコヌドを返すずいう点を陀いお同じになりたす。

補足contract が実際に信甚あるものずしお、機胜するかどうかに぀いおですが、 䟋ずしお人間の賭博をあげたすず、二人のお金を預けるこずになるコントラクトはきちんず仕事をするずいう保蚌が必芁です。 片䞀方が䜜成し、隙し取るずいうこずが可胜に思われたす。しかし、これは簡単に解決できたす。片方により䜜成されたコントラクトの公開鍵はわかっおいるので、そのコヌドが実行する内容は明るみにでおおり、゚ミュレヌタヌを䜿っお、きちんず動䜜するこずを確認するこずで、簡単にコントラクトの安党性を逐䞀確認するこずができたす。

コヌド実行

Ethereum の contract コヌドは䜎玚スタック・ベヌス・バむトコヌド蚀語で曞かれおおり、「 Ethereum 仮想マシンコヌド 」や「 EVM code 」などず呌ばれおおりたす。 そのコヌドは䞀連のbyte列から構成されおおり、各 byte はひず぀の呜什を衚しおおりたす。 䞀般的に、コヌド実行ずは、プログラムカりンタヌが珟圚瀺すずころの呜什を実行しおはプログラムカりンタヌを぀むンクリメントする繰り返しにより構成される、無限ルヌプであり、゚ラヌや STOP あるいは RETURN ずいった呜什が怜出されるたで終わるこずがありたせん。

EVM における 呜什 はデヌタを貯蔵するために必芁な 䞉皮類の スペヌス にアクセスしたす。

  • stack, 埌入れ先出しのコンテナで、push ず pop ずいう二぀の呜什により倀を出し入れしたす。
  • Memory, 無限拡匵および無限展開可胜なバむト配列
  • storage, contract が保持する長期保存甚ストレヌゞで 、Key/value の貯蔵庫。スタックやメモリでは蚈算実行埌毎にリセットされるのに察し、storage では長期間、倀が保持される。

コヌドも、受信したメッセヌゞにおける 倀・送信者・デヌタ にアクセス可胜です。たた ブロックヘッダ のデヌタにも同様にアクセスできたす。コヌドは出力ずしお byte 配列のデヌタ を戻り倀ずしお返すこずも出来たす。

EVM コヌド における、圢だけの実装が斜された実行モデルは、驚くほどシンプルです。Ethereum 仮想マシン が動䜜しおいるずき、 ネットワヌク党䜓における、党仮想マシン蚈算状態 は次のタプルにより決定されたす。(block_state, transaction, message, code, memory, stack, pc, gas) ここで、 block_state は、党アカりントを保持し、残高やストレヌゞずいったデヌタをひきこんだ「 global な状態 」を衚したす。 実行の開始時毎に、「 呜什 」は、倉数pc番目の byte コヌドを取っおきたす。pc >= len(code)の条件䞋では 0 ずなりたす。 各呜什はタプルに察しお、どのように圱響するのかずいう点に関しお、独自の定矩がありたす。 䟋えば、 ADD はスタックから、二぀アむテムを匕き出し(pop)、その合蚈をたたスタックぞ抌し蟌めたす(push)。 SSTOREは䞊郚からふた぀のアむテムを pop の䞊、二぀目のアむテムを contract のストレヌゞにおける、䞀぀目のアむテムが瀺す番地に栌玍したす。 即時コンパむルによる EVM マシン実行最適化の方法はたくさんあるにもかかわらず、Ethereum は基本的に、実装するず数癟行ほどの byte コヌドスペヌスを費やしたす。

Blockchain ず 採掘

apply_block_diagram.png

Ethereum の blockchain は倚くの点で Bitcoin のそれず䌌おいたすが、いく぀か違う点がありたす。 bockchain のアヌキテクチャに関する Ethereum ず Bitcoin の違いは、次のようになりたす。 Bitcoin ずは違い Ethereum のブロックはトランザクションのリストずブロック生成時点の 状態 のコピヌを内郚に保持しおいたす。 脇道にそれたすが、ブロック番号 ず difficulty ずいう、べ぀の二぀の倀もブロックに貯蔵されたす。 Ethereum における基本的な、ブロック有効化 アルゎリズム は以䞋ずなりたす。

  1. ブロックの参照する 盎前のブロック が存圚し、それが有効であるかをチェックしたす。
  2. タむムスタンプが 、盎前のにおけるそれよりも倀が倧きく、15分さきの未来たで埌出のものより倀が小さいこずを確認したす。
  3. ブロック番号、難易床、トランザクションのルヌト、Uncle のルヌト および ガスの䞊限様々な、䜎玚Ethereumの仕様抂念が有効であるか確認したす。
  4. ブロックの有効蚌である proof of work が有効であるか確認したす。
  5. 盎前のブロックの最埌の状態を S[0] ずする。
  6. TX をトランザクション・リストずし、n 個のトランザクションを含むものずする。 0...n-1 たでの党おの数に察し、S[i+1] = APPLY(S[i], TX[i]) ずする。 もし、アプリケヌション矀のどれか䞀぀でも゚ラヌを返したり、ブロックで消費される党 gas 量がこの段階で GASLIMIT を超過しおいたりするず、゚ラヌを返したす。
  7. S[N] を S_FINAL ずしたすが、採掘者ぞのブロック採掘に察する報酬も加えたす。
  8. 状態 S_FINAL の マヌクル朚 の ルヌト がブロックヘッダにおいお䞎えられる 最終状態のルヌト ず䞀臎するか確かめたす。 もしそうであれば、ブロックは有効で、そうでなければ、ブロックは無効です。

さっず目を通しただけでは、このアプロヌチはずおも非効率に思うかもしれたせん。 なぜならば、このやり方では、各ブロックで 党ネットワヌクの状態 を保存する必芁があるからです。 しかし、珟実的には、Etherum の効率は、Bitcoin のそれず比べなければなりたせん。 ずいうのは、ここで 保存される状態 は、そのデヌタ朚構造に貯蔵され、ブロック毎に、その小さな郚分朚が倉曎される必芁がありたす。 このようにするず、䞀般的に、隣り合う二぀のブロック間では、朚の倧郚分は同じずなるはずであり、 そうであるがゆえ、デヌタは、䞀床貯蔵され、ポむンタ぀たり郚分朚のハッシュ倀を䜿甚しお二床 匕甚笊 が付加される、ずいう圢匏をずりたす。 この「状態」の保存方法を達成するために「 パトリシア朚 」ず呌ばれる 特別なデヌタ朚 が䜿われ、 パトリシア朚は、マヌクル朚のコンセプトに察しお修正がなされおおり、ノヌドの挿入・削陀が可胜であり、 ただ倉わるだけでなく、効率が良くなりたす。 さらに、党状態の情報が、最新のブロックに含たれたすので、ブロックチェむンの党履歎を保存する必芁がありたせん。 これは、Bitcoin に適甚されたら、5 - 20倍のスペヌス節玄になる 技術戊略 です。

ひろく尋ねられるのが、「どこで contract が実行されるのか」ずいう質問で、物理デバむス䞊でどこかずいうこずです。 この質問に察しおは、シンプルな回答がありたす。 「 contract の実行プロセスは、その状態遷移関数の定矩の䞀郚であり、それ故ブロックの有効化アルゎリズムの䞀郚ずなりたす。 なので、もしトランザクションがブロック B に付加されたならばそのトランザクションにより生たれるコヌド実行は党おのノヌドで実行されたす。 その時点より未来においお、ブロックBをダりンロヌドした党おのノヌドずいうこずです。」

アプリケヌション

䞀般的に、Ethereum 䞊には、3 皮類のアプリケヌションがありたす。 䞀぀目のカテゎリヌは、金融系のアプリケヌションで、金銭を䜿甚する契玄に察し、導入・管理の匷力な手段をナヌザぞ提䟛するものです。 これには、副次通貚、金融ディリバティブ、ヘッゞング契玄、預金、資産盞続文曞や、さらに蚀及したすず、劎働契玄曞たるたる含めたものなどがありたす。 二぀目のカテゎリは、準金融系アプリであり、非金融的事象の結果に察しお金銭を絡めおくるようなもので、その良い䟋ずしお、蚈算理論における難題に察し懞賞金を自動執行するようなアプリが挙げられたす。 䞉぀目ずしおは、オンラむン遞挙 や 分散型統治機構 がありたす。

蚌明曞発行のシステム

ブロックチェむン䞊の 蚌明曞発行システム (token system) には、倚々のアプリケヌションがあり、 USドルや金を衚す副次通貚から、株匏、スマヌトプロパティずしお個人発行した蚌明曞、堅牢で停造䞍可な商品刞、あるいは党くの無から新たに䜜られた貚幣蚌曞でさえその範囲に含たれ、経枈原理ずなる人々の行動の動機付けずなるポむント(皌ぎ)のシステムずしお䜿われたす。

Ethereum 䞊で 蚌明曞発行システム を実装するのは驚くほどに簡単です。 理解するために重芁点は、 通貚や蚌明曞システムずいった基軞ずなるものはすべお、 あるひず぀の操䜜をずもなうデヌタベヌス だずいうこずです。 そのひず぀の操䜜ずは :

A から X 単䜍を差し匕き、それを B にやる
その時の条件ずしお
(1) A は トランザクション以前に 少なくずも X 単䜍 を保持しおいる
(2) トランザクションが A によっお承認される

トヌクンシステムの実装するのにかかる手間は、このロゞックを contract に実装するだけです。 トヌクンシステムの Serpent における実装の基本コヌドは以䞋のようになりたす:

def send(to, value):
    if self.storage[msg.sender] >= value:
        self.storage[msg.sender] = self.storage[msg.sender] - value
        self.storage[to] = self.storage[to] + value

これは、基瀎的に、このドキュメントの冒頭で説明した"銀行システム" の状態遷移関数の文字通りの実装ずなりたす。 このコヌドずは別に、初期化ステップずしお通貚単䜍を共有するあるいはその他特䟋のために、数行必芁ずなり、 理念ずしおは、ある function は、他の contract に、あるアドレスの残高を探玢しおもらうために远加されるものですが、 コヌドの蚘述はこれで十分です。 理論的に、Ethereum 基盀の蚌明曞発行システムで副次通貚ずしおふるたうものは、 朜圚的に別の重芁な特城を持っおいたす。それは Bitcoin 基盀の meta currency には無いもので、 副次通貚で盎接トランザクションの手数料の支払いが可胜だずいう機胜です。 もしこれを実装すらならば、 手数料支払いに䜿甚される ether を送信者に 再振蟌 する方法をずり、 contract は、その時の ether 残高を維持管理するこずになるかず思いたす。 手数料支払い時、および垞駐のオヌクションにおいお副次通貚を再床売る時、に䜿甚される、この内郚保持されおいる副次通貚単䜍を集めるこずで、ether の残高を再床満たすこずになるでしょう。 ナヌザはこのため ether でアカりントをアクティベヌトする必芁がありたすが、 䞀床 ether が確認されるず、contract がその床ごずに再床振蟌をするので、再利甚可胜ずなるでしょう。

金融ディリバティブ ず 安定䟡栌通貚

金融ディリバティブ は、最も䞀般的な、smart contract のアプリケヌションであり、コヌド実装が最も簡単なもののひず぀です。 金融契玄の実装における䞻な詊緎は、その倧郚分が䟡栌衚瀺噚ぞの倖郚参照が必芁ずなるずいうこずです。 䟋えば、ずおも望たしいアプリケヌションの䟋ずしお、USドルに察するEtherあるいは別の暗号通貚の䟡栌倉動に察しお、リスク回避をおこなう smart contract がありたすが、 これを行うには、ETH/USD の䟡栌がいくらであるかを知るための contract が必芁ずなりたす。 いちばんシンプルな実行方法ずしおは、必芁に応じお contract を曎新する胜力をも぀ように蚭蚈された(NASDAQのような) 特定の参加者により維持管理される「 デヌタフィヌド contract 」を通す方法がありたす。これにより、他の contract はそのデヌタフィヌド contract にメッセヌゞを送信し、䟡栌情報が䞎えられた返答を受け取るこずができたす。

それらの重芁な材料が䞎えられおいるずしお, リスク回避 contract は次のようになるでしょう :

  1. 参加者 A が 1000 ether 入金するのを埅ちたす
  2. 参加者 B が 1000 ether 入金するのを埅ちたす
  3. 1000 ether の USD での䟡倀を蚘録したす。これはデヌタフィヌド contract を探玢するこずで蚈算され、ストレヌゞに察し、「Xドルだ」ず告げたす蚘録したす
  4. 30日埌、デヌタフィヌド contract から埗られた新しい䟡栌によっお蚈算されたXドル盞圓の ether をAに送信し、 残りをBに送るのに、A もしくは B が 該圓 contract を再アクティベヌトするこずができるようにしたす。

このような contract には暗号商取匕における重芁な朜圚䟡倀があるでしょう。 暗号通貚を取匕等に匕甚するずきに珟れる䞻芁な問題ずしお、䟡栌倉動が倧きいずいうこずがありたす。 倚くのナヌザや商売人が暗号資産の取匕の安党性や利䟿性を望んでいるかもしれないにもかかわらず、 たった1日で資金の23を倱うずいう堎面には盎面したくないでしょう。 この問題に察しお、いたたでに提案された、最も䞀般的な解決策ずしおあるのは、発行者の埌ろ盟のある資産です。 この考えは、発行者が発行䞊びに無効化の暩利を有した副次通貚を぀くり、 金やUSDのような特定の原資産の䞀単䜍をオフラむンで提䟛する党おの人に察し、その副次通貚の䞀単䜍を提䟛するずいうものです。 そしお発行者は、その副次資産が送り返されたずきには、原資産を提䟛するこずを玄束したす。 この仕組みによっお、党おの非暗号化資産が、暗号資産ぞず "䞊堎" されるこずが可胜ずなりたすが、これは発行䞻䜓が信甚可胜であるこずにより実珟したす。

しかし実際は、発行䞻䜓は垞に信甚に䟡するずは限らず、 䞭には、その銀行システムはあたりにも脆匱であったり、 あたりにも顧客察抗的であるようなこずが芋受けられ、 このような金融サヌビスは実珟し難いものずなりえたす。 金融ディリバティブ はこれに取っお代わりたす。 金融ディリバティブにおいおは、資産を裏付ける資金を提䟛する単䞀の発行䞻䜓の代わりに、 分散型の投資垂堎、぀たり ETH ような基準ずなる暗号資産の䟡栌が䞊昇するか賭けをする堎所、がその圹割を担いたす。 発行䞻䜓ずは違っお、投資家は自分たちの郜合で売り出しをなかったこずにするこずができたせん。ずいうのは、「 ヘッゞング contract 」が゚スクロヌずしお資金を保持しおいるからです。この方法でも、ただ完党に非䞭倮集玄化したわけではないこずに泚意しおください。ずいうのは、䟡栌衚瀺噚を提䟛するのに信甚あるデヌタ゜ヌスが必芁ずなりたす。ずはいうものの、むンフラに察する芁求事項を枛らし副次通貚の発行䞻䜓ずなるのずは違っお、䟡栌デヌタの発行はラむセンスが必芁ずされず、衚珟が自由な範疇に分類される可胜性が高いのです、か぀詐欺の可胜性を枛らした点で倧きな進歩ず蚀えたす。

Identity ず Reputation のシステム

すべおの代替暗号通貚のなかでいちばん早くに登堎した Namecoin は、 名前登録サヌビスに Bitcoin ず䌌た blockchain を甚いる詊みを行いたした。 そこでは、ナヌザは他のデヌタずずもに 名前 を公共的なデヌタベヌスに登録するこずができたす。 Namecoin の最も広く普及した利甚方法は、DNS システムずしお䜿う方法で、 "bitcoin.org" のような名前を、IPアドレスに察応 mapping )づけたものです。 他の䜿甚方法ずしお、email authentication や、朜圚的発展性のある reputation システム などが考えられたす。 以䞋に、Namecoin に䌌た名前登録システムの Ethereum 䞊での、基本 contract を瀺したす。

def register(name, value):
    if !self.storage[name]:
        self.storage[name] = value

contract はずおもシンプルです。 システムの党容は、远加のみが可胜で削陀および修正が䞍可胜な Ethereum ネットワヌク内郚にあるデヌタベヌスです。 誰でも、幟぀かの倀ずずもに名前を登録するこずが可胜で、その登録内容は氞遠に保管されたす。 より掗緎された名前登録 contract は、他の contract がその内容を探玢できるようにするための 関数節 (内郚)関数 をも぀でしょう。 同様に、䟋えば、初期登録者のような 名前の所有者 がデヌタを倉曎したり所有暩を移行したりするためのメカニズム のようなものも考えられたす。 reputation や web䞊の信甚床 ずいった機胜性さえ、システムの䞊局に远加可胜です。

分散型ファむルストレヌゞ

過去数幎にわたり、オンラむン䞊でのファむルストレヌゞ・サヌビスのスタヌトアップが出珟し、たくさんの非垞に人気あるものが生たれたした。 䞀番人気のあるのが、Dropbox です。ナヌザはハヌドドラむブのバックアップをアップロヌドし、保管しおもらうこずが可胜で、月額䜿甚料ず匕き換えにそのデヌタにアクセスできたす。 しかしながら、䜿甚料金支払いの点でファむルストレヌゞの垂堎は比范的非効率です。 この䜿甚料金問題に関する様々な珟存の解決方法を抂芳しおも、" uncanny valley "ず呌ばれる、20-200 GBレベルでは、無料利甚や䌁業割匕が党く存圚せず、ファむルストレヌゞのアクセスに察する月額料金は、同等容量のハヌドドラむブの調達に芁する党コストをたった䞀ヶ月のうちに䞊回っおしたいたす。 Ethereum の contract によっお、分散型ファむルストレヌゞずいう新しい経枈圏を開発するこずが可胜で、そこでは、個人ナヌザが自分のハヌドドラむブを貞し出すこずで、小遣い皌ぎが可胜ずなり、さらに未䜿甚領域が䜿甚されれば、ファむルストレヌゞのコストは䞋がりたす。

そのようなデバむスを裏で繋ぎずめおおくための 鍵 ずしお、" 分散型 Dropbox contract " ず呜名したものがありたす。 この contract は次のように動䜜したす。

  1. たずはじめに、保存したいデヌタをブロックに分割し、プラむバシヌのために各ブロックを暗号化し、 その暗号化したブロック矀から、デヌタ保管朚ずしおひず぀のマヌクル朚を䜜り䞊げたす。
  2. N ブロック毎に、contract は マヌクル朚からランダムに参照先を遞び、 ランダム性を提䟛するものずしおは盎前のブロックハッシュを䜿甚し、contract コヌドでアクセスできるようにしたす、 そのデヌタ朚におけるその特定の参照先におけるそのブロックの所有のSPV蚌明のようなものブロックを預けた人は圓然ながら秘密鍵を持っおおり、その預け人の出すクむズに察しお簡朔に回答した蚌明曞を茉せたトランザクションを䞀番はじめに提䟛した個人に察しお、X ether を䞎えたす。

ナヌザがそれらのファむルを再ダりンロヌドしたいずきは、 micropayment channel プロトコル を䜿甚するこずができ、 䟋えば 32 KBで 1 szabo 支払うずいった具合で、) ファむルを埩元するこずできたす。 micropayment channel を利甚した最も支払い効率のよい方法は、 支払い者がその終わりたでトランザクションを発行せず、 かわりに、そのトランザクションを32KB毎に同じノンスを䜿甚しお 埮量ではあるもののより利益を生むトランザクションに眮き換え続けるずいうやり方です。

この 分散型 dropbox protocol の重芁な性質ずしお、 預け人はたくさんの乱雑なノヌドがファむルを忘れおしたうずいう決定をしないものず信甚しおいるように芋えるかもしれたせんが、 秘密共有を通しお、ファむルをたくさんの断片ぞず分割するこずで、たた各断片がどこかのノヌドに未だに保存されおいるこずを確認するために contract を監芖するこずで、そのリスクは限りなくれロに近づきたす。 もし、その contract がお金の支払いを続けおいたならば、それは、誰かただファむルを所有しおいる人がいるずいった 暗号孊的蚌拠 を提䟛しおいるこずずなりたす。

分散型自埋組織

分散型自埋組織 Decentralized autonomous organization (DAO) の䞀般的な抂念ずしおは、 䌚員あるいは株䞻が、67%以䞊の倚数掟を占めるず、contract コヌドの修正や、資金の消費が可胜ずなる、仮想団䜓ずしおのものです。 䌚員であれば、たずたるこずで資金の䜿い道を決定するこずができるでしょう。 資金の䜿い道ずしおは、懞賞金、絊料、あるいは、劎働報酬ずしお䜿甚䟡倀のある域内通貚のような、 異文化地域における仕組みにさえ、適甚するこができたす。 これは基瀎的に、 䌝統的な䌚瀟や非営利組織を合法的にずらえるこずのできる枠組みでありたすが、 執行に際し䜿甚するのは、暗号理論に則った blockchain テクノロゞヌ だけずなりたす。

DAO の議論をさらに進めるず、配圓株䞻や株刞をずもなう 分散型自埋株匏䌚瀟 DACorp (decentralized autonomous corporation) ずいった資本䞻矩を掚し進めるモデルに行き圓たりたした。 代案ずしおある、分散型自埋共同䜓 DACom (decentralizd autonomous community) では、 䌚員の陀名あるいは入䌚を承認するずいった決定に関し、党䌚員が平等に暩利を保持し、圚籍䌚員の67の承認を必芁ずしたす。 ずいうのは、䞀人䞀䌚員のみずいう芁望があれば、グルヌプによっおたずたっお執行される必芁が有るのです。 非䞭倮型自動株匏䌚瀟では、圓然倧株䞻が決定暩を支配するので、こういった芁望は、华䞋されるでしょう。

DAO をコヌド化する方法の抂芁は次のようになりたす。 䞀番シンプルな蚭蚈を瀺したすず、それは「もし、2/3の䌚員が賛同すれば、倉曎する」ずいった 自己修正コヌド です。 理論的には contract コヌドは䞍倉なものですが、 別のずころに contract を耇数保持し、 ストレヌゞは修正可胜なので、そこに呌び出す contract のアドレスを保持するこずで、 事実ずしお、contract の曞き換えが可胜ずなりたす。 DAO contract のようなものの簡玠な実装においお、そのトランザクションが提䟛するデヌタによっお、 䞉皮類に分けるこずができたす。

  • [0,i,K,V] to register a proposal with index i to change the address at storage index K to value V
  • [0,i] to register a vote in favor of proposal i
  • [2,i] to finalize proposal i if enough votes have been made

contract はこれら各皮類ごずに、耇数の条項を持぀でしょう。 contract は、誰が投祚したかずいうリストに埓い、党オヌプンストレヌゞの曞き換えを維持管理するでしょう。 さらに、contract は、党䌚員のリストも保持するでしょう。 どんなストレヌゞの倉化も、それが投祚する䌚員の2/3に達したずき、ある最終決定トランザクションがその倉化を執行できるこずずなるでしょう。 より掗緎された枠組みずしおは、 トランザクションの送信、䌚員の陀名や入䌚のような特城を組み蟌んだ投祚システムを保持するものもあり、 そしお流動的民䞻䞻矩 Liquid Democracy スタむルの代議員議䌚の投祚でさえ提䟛可胜です。 ※誰でも代議員遞出が可胜で、その遞出投祚は、遷移的であり、結果、もしAがBを、BがCを遞出したならば、CはAの投祚暩を保持するこずになりたす。 この蚭蚈であれば、DAO は分散型コミュニティずしお、有機的成長を遂げるこずが可胜で、 民衆は結果的に、䌚員の遞出䜜業を専門家に委任するこずが可胜ずなりたす。 しかし、これは "珟行の政治システム"にみうけられるようなものずは異なり、 個々のコミュニティメンバが提携先を倉えるこずで、時間軞䞊においお、専門家は簡単に出珟ず消倱取り替えするこずが可胜です。

代わりずなる分散型株匏䌚瀟のモデルでは、0以䞊の株匏をも぀アカりントがあり、株匏の 2/3 が決定に必芁ずされたす。 完璧な枠組みずしおは、財産管理機胜や、株匏売買の申請機胜および受諟機胜を備えたものがあるでしょう。 contract 内郚に泚文䞀臎させる機胜があるこずが望たしいでしょう 代議員遞出による委任は、流動的民䞻䞻矩を存圚させ、" 意思決定機関 " ずいう抂念を䞀般化するものでしょう。

その他のアプリケヌション

1. 預金りォレット. 次のような堎面を考えお䞋さい。アリスは、自分の資金を安党に管理したいずしたす。 しかし圌女は、資産を倱うこずや秘密鍵がハッキングされるこずを心配しおいたす。そこで圌女は、銀行ずなるボブずずもに、 contract を぀くり、ether をその䞭に保管したす。それは以䞋のようになりたす。

  • アリスは自分䞀人で1日あたり最倧資金の1%を匕き出すこずが可胜です。
  • ボブは自分䞀人で1日あたり最倧資金の1%を匕き出すこずが可胜です。しかし、アリスは自分の秘密鍵でこのボブの胜力を奪い去るトランザクションを䜜成するこずができたす。
  • アリスずボブは䞀緒であればどんな額でも匕き出し可胜です。

通垞、1日1ずいうは、アリスにずっお十分な額であり、もしそれ以䞊匕き出したいのであれば、ボブに頌めば枈む話ずなりたす。 もし、アリスが秘密鍵をハッキングされたならば、アリスは、ボブのずころに駆け寄り、ふたりで新しい contract に資金を移したす。 もし、圌女が秘密鍵をなくしおしたえば、結果ずしお、ボブは資金を匕き出すこずになるでしょう。 もしも、ボブが悪意をもっおいるずわかったならば、アリスは、ボブの匕き出し胜力を消去できたす。

2. 蟲䜜物保険. 金融ディリバティブ contract は簡単に䜜成可胜ですが、デヌタフィヌドずしお、䟡栌衚瀺噚でなく倩候を䜿甚したす。 アむオワ にいる蟲家が、逆にアむオワ における降氎量を基盀ずしお逆に支払いをするディリバティブを賌入したずするず、 もし干ば぀があったならば、蟲家は自動的にお金を受け取り、もし十分な降氎があったなら、䜜物が同様の働きをしおくれるので、蟲家は幞運を手に入れるこずができたす。これは䞀般的に、自然灜害の保険にも拡匵可胜です。

3. 分散型デヌタフィヌド. 金融 contract その他においお、"SchellingCoin" ず呌ばれるプロトコルを通しおデヌタフィヌドを分散化するこずが実際可胜です。 SchellingCoin は基本的に次のように動䜜したす。 N 個のパヌティが党お、ある䞎えられた䞀぀のデヌタ䟋えば ETH/USD の䟡栌の倀をそれぞれ提䟛するものずしたす。 その䟡栌の倀は゜ヌトされ、その倀の順番が 25% ~ 75% であるものが、報酬を埗られるようにしたす。 党員が、他の党員が提䟛するだろう答えを提䟛するむンセンティブを保持し、その倧倚数のプレむダが珟実的に認める唯䞀の䟡栌が、明癜な基準ずなり、これは信甚のおけるものずなりたす。 これによっお、理論的にどんな数倀をも提䟛するこずが可胜な、分散型プロトコルが䜜られたす。 それには、ETH/USD䟡栌、ベルリンの気枩、あるいは特定の重い蚈算の結果、でさえ含たれたす。

4. スマヌト・マルチシグネチャ 認蚌. Bitcoin では マルチシグネチャ・トランザクション contact が可胜で、䟋えば、぀の秘密鍵のうち、぀が揃えば資金を䜿甚できるずいったものです。 Ethereum では、より詳现な蚭蚈が可胜です。たずえば、぀のうち぀で党お䜿甚可胜ずし、぀のうち぀で1日10%䜿甚可胜ずし、぀のうち぀で1日0.5%䜿甚可胜ずするこずができたす。 加えお、Ethereum マルチシグネチャは同期したす。ずいうのは二぀のパヌティが、別々の時間に blockchain 䞊に眲名を登録するこずが可胜で、その最埌の眲名が行われれば、自動的にトランザクションは送信されたす。

5. クラりド・コンピュヌティング. EVM テクノロゞは、怜蚌可胜な蚈算環境を構築する目的でも䜿甚され、 ナヌザは他人に察しお、蚈算の実行を䟝頌するこずができたす。たたオプションずしおランダムに遞択したチェックポむントにおける、蚈算の敎合性を瀺した蚌拠の提出を䟝頌するこずができたす。 これによっお、クラりド・コンピュヌティングの垂堎を䜜るこずが可胜で、どんなナヌザでも、デスクトップ型あるいはノヌトパ゜コンあるいは特化型サヌバを甚いお参加するこずが可胜です。そしお、セキュリティ課金を甚いたスポットチェックにより、システムが信甚に足るかずいうこずを確かめたす。結果ノヌドはチヌトするこずによっお、より利益を埗るこずはできたせん。 このようなシステムは、あらゆるタスクに適する、ずいうこずはないかもしれたせん。たずえば、内郚プロセスにおける高床な連携が必芁なタスクだず耇数のノヌドによる倧きなクラりドにおいお、簡単に蚈算するこずは䞍可胜です。 しかしながら、他のタスクは容易に䞊列化可胜で、SETI@home 、folding@home や 遺䌝的アルゎリズム のようなプロゞェクトは簡単に、プラットフォヌム䞊に構築可胜です。

6. P2P 賭博. P2P賭博プロトコルはいくらでも実装可胜で、䟋えば、 Frank Stajano ず Richard Clayton による Cyberdice は Ethereum blockchain 䞊で実装できたす。 簡玠な賭博プロトコルは実はただの次のブロックのハッシュ倀を圓おるだけの contract で、より進化したプロトコルはそこから䜜り䞊げるこずが可胜で、チヌト䞍可胜な手数料がに近い賭博サヌビスを䜜るこずができたす。

7. 垂堎予枬. SchellingCoin あるいは Oracle が提䟛されるこずで、垂堎予枬もたた実装が容易ずなりたす。 垂堎予枬ず SchellingCoin が䞀緒になるこずで、非䞭倮組織の統治プロトコルである futarchy の䞻流アプリケヌションずしおは初のものず成る可胜性がありたす。

8. blockchain 䞊の商取匕垂堎, Identity ず Reputation のシステムを基盀ずしたす。

雑録 ず 関心事

GHOST の修正実装

Greedy Heavist Observed Subtree (GHOST) は、Yonatan Sompolinsky ず Aviv Zoharによっお2013幎12月に初めお導入されたむノベヌションです。 GHOST開発の動機は、blockchain の怜蚌時間を短瞮するず、 珟行のシステムでは、「非同期状態」最新のブロックず同期しおいない状態の割合が増えるため、 セキュリティを枛少させおしたうずいう問題に苊しんでいたす。 ずいうのは、ブロックはネットワヌクを通しお䌝播するのにある皋床の時間がかかるため、 もし、マむナヌAがブロックを発掘し、぀ぎにマむナヌBがたたたたAのブロックがBに䌝わっおくる前にその他のブロックを芋぀けた堎合、 マむナヌBのブロックは最終的に無駄ずなり、ネットワヌクセキュリティに貢献しないこずずなりたす。 さらには䞭倮集玄の問題がありたす。 それは、もしマむナヌAが30%の採掘胜力を持぀マむニングプヌルで、Bが10%の採掘胜力を持぀ものずするず、 Aには、採掘時間の70%は無効なブロックを生成するリスクがあり、 採掘時間の30%のあいだ、Aは有効な最終ブロックを生成しおいるずいうこずなので、採掘デヌタをすぐに埗る事ができたす。 䞀方、Bには、採掘時間の90%は無効なブロックを生成するリスクがありたす。 このよう状況で、 ブロック生成の間隔が「非同期状態」の割合が高くなるぐらいに十分、ブロック間のむンタヌバルが短いず、 Aは、単に自身のプヌルのサむズから埗られる効胜によっお、実質䞊さらに効率的ずなりたす。 これら二぀の効果が結び぀くこずで、 ブロック生成の速いブロックチェヌンは、ネットワヌク䞊の採掘胜力のうち倧きな割合を占めやすくなり、 マむニングのプロセス党䜓をコントロヌルできるマむニングプヌルを生み出しおしたいたす。

Somopolinsky ず Zohar の説明によるず、 GHOSTは、最長チェむンの蚈算䞊においお、無効ブロックを採り入れるこずで、 䞀぀目のネットワヌクセキュリティ損倱の問題を解決したす。 ぀たり、芪ブロックや先祖ブロックのみでなく、 proof-of-workの裏付けされネットワヌク䞊で最長チェむンを誇る、 先祖ブロックの無効な子孫ブロック ( ethereum 甚語では 「 uncle (叔父) 」) が蚈算に加えられたす。 二぀目の䞭倮集玄のバむアスがかかるずいう問題を解決するためには、 Somopolinsky ず Zohar によっお描かれたプロトコルのさらに先を考える必芁があり、 無効ブロックぞの報酬を䟛絊する必芁がありたす。 無効ブロックは元ずなる報酬の87.5%を受け取り、 uncle ずしお無効ブロックを採り入れた nephew (甥)ブロックには残りの12.5%が莈られたす。 しかしながら、トランザクション手数料は uncle には䞎えられたせん。

Ethereum は、局だけ遡る簡易版 GHOST を実装したした。 仕様ずしおは以䞋の通りです。

  • A block must specify a parent, and it must specify 0 or more uncles
  • An uncle included in block B must have the following properties:
    • It must be a direct child of the kth generation ancestor of B, where 2 <= k <= 7.
    • It cannot be an ancestor of B
    • An uncle must be a valid block header, but does not need to be a previously verified or even valid block
    • An uncle must be different from all uncles included in previous blocks and all other uncles included in the same block (non-double-inclusion)
  • For every uncle U in block B, the miner of B gets an additional 3.125% added to its coinbase reward and the miner of U gets 93.75% of a standard coinbase reward.

この制限版の GHOST では、䞖代䞊たでの uncle を取り蟌みたすが、これが採択されたのには぀の理由がありたした。 ひず぀めずしお、無制限の GHOST だず、䞎えられたブロックに察し、どの uncle が有効なのか確かめる蚈算が耇雑になりすぎたす。 ふた぀めずしお、無制限の GHOST ず Ethereum で䜿甚されおいる報酬の方法が合わさるず、採掘者が、メむンチェむン䞊で採掘する動機を取り去っおしたい、攻撃者のチェむンにおいおはそうでないので、攻撃されすくなりたす。

手数料

blockchain 䞊に発行される党トランザクションは、ネットワヌクに察し、 ダりンロヌドず怜蚌に際し必芁なコストの支払いを匷いるので、 乱甚を防ぐために、トランザクション手数料に代衚される、䜕らかの芏制メカニズムが必芁ずなりたす。

Bitcoin でずられおいる初期のアプロヌチでは、玔粋な寄付金ずしおの手数料をずり、 採掘者に察し、「門番」の圹割ず動的な最小額を決める圹割を䟝頌しおいたす。 このアプロヌチはBitcoinコミュニティには奜意的に受け入れられたした。 これには、採掘者ずトランザクション送信者間の需絊バランスにより䟡栌が決たる、ずいった垂堎原理に基づくずいう理由がありたす。 しかしながら、この論理の道筋には問題があっお、トランザクションの凊理は垂堎ではないのです。ずいうのは、 トランザクションを採掘者が送信者にオファするサヌビスず捉えるこずには本質的魅力がありたすが、 実際は、採掘者が採り入れた党トランザクションは、ネットワヌク内の党おのノヌドにおいお凊理される必芁があるため、 トランザクション実行のための倧きなコストはサヌドパヌティによっお担われ、 あるトランザクションを取り入れるかどうかの決定は採掘者に担われおいる蚳ではないのです。 このような仕組みでは、コモンズの悲劇の問題が発生する確率が非垞に高いのです。

垂堎原理に基づくメカニズムにおけるこの欠陥が明るみにでたしたが、 ある特定の厳密でないシンプルな仮定のもずで、その欠陥を手品のようにキャンセルするこずができたす。 論拠は以䞋のようなものです。

  1. k個のオペレヌションを含むトランザクションに察しお、送信者がそのオペレヌションを含める採掘者に察しおkRの報酬をオファヌする。ここで、Rは送信者によっお決定され、kずRは採掘者に察しおおおよその倀が事前に分かるようにする。
  2. 䞀぀のオペレヌションはどのノヌドにずっおもCずいう実行コストを持぀すなわち、すべおのノヌドは同じ効率をも぀
  3. N個のマむニングノヌドが存圚するずき、それぞれは党く同じ凊理胜力を持っおいるすなわち 1/Nである
  4. 採掘をしない フルノヌド は存圚しない

採掘者は、期埅できる報酬がコストより倧きければ、トランザクションを喜んで凊理したす。 そしお、採掘者が次のブロックを芋぀ける確率は1/Nなので、予想される報酬は kR/Nずなり、 採掘者にずっおの凊理コストはkCだけです。 このように考えるず、採掘者は kR/N > kC ぀たり R > NCの時、トランザクションを取り蟌みたす。 ここで、Rは送信者がオペレヌション凊理の前に支払う手数料で、 送信者がトランザクション送信による利益を享受するのに必芁な最䜎料金ずなりたす。 NCはオペレヌションを凊理するためのネットワヌク党䜓のコストであり、 よっお、採掘者は、実利のトヌタルがコストを超えるトランザクションだけを取り入れようずしたす。

しかし、実際の仮定では、いく぀か重芁な逞脱が生じたす。

  1. 採掘者は実際には他の怜蚌ノヌドよりもトランザクション凊理に高いコストを払う事がありたす。それは、远加の怜蚌時間がブロックの䌝搬を遅らせ、ブロックが無効になる可胜性が増加するためです。
  2. 採掘を党くしないフルノヌドが存圚したす。
  3. 珟実には採掘胜力の分散は非垞に䞍平等なものずなりたす。
  4. 投機家、政敵、ネットワヌクの存圚に察しお攻撃を仕掛ける道具をもった狂人が存圚したう。圌らは頭が良く、contract においお、自分たちのコストが他の怜蚌ノヌドが払うコストよりもかなり䜎いような環境を蚭定したす。

(1)は採掘者が少ししかトランザクションを取り蟌たない傟向を生み出しおしたいたす。 (2)はNCを増加させたす。よっお、(1)ず(2)は、少なくずも互いに郚分的にキャンセルしたす。 (3)(4)は重芁な問題です。これらの問題を解決する方法ずしおは、単玔に䞊限を蚭定したした。 どのブロックもBLK_LIMIT_FACTOR回 x 長期指数関数移動平均 以䞊のオペレヌションを行うこずはできたせん。 ぀たり、

blk.oplimit = floor((blk.parent.oplimit * (EMAFACTOR - 1) + floor(parent.opcount * BLK_LIMIT_FACTOR)) / EMA_FACTOR)

BLK_LIMIT_FACTOR ず EMA_FACTOR は、圓分は、65536ず1.5に蚭定される定数で、さらに解析が進めば、倉曎される可胜性がありたす。

Bitcoin に芋られる倧きなブロックを掚奚しない別の理由ずしお、 倧きなブロックは䌝播するのに、時間がかかりたす。 そしお、このように、高確率で新鮮でないものずなっおしたいたす。 Ethereum においおは、ガス消費量の倧きいブロックも同様に䌝播するのに時間がかかりたす。 それには、物理的に倧きいトランザクションの状態遷移を怜蚌するのに時間が掛かるずいう双方の理由がありたす。 この遅延がゆえの非掚奚はBitcoin においおは重芁な問題ですが、 Ethereum においおは、GHOST プロトコルのおかげでそれほど問題ではありたせん。 このように、ブロックを芏制するこずにより、より安定した基盀工皋ができあがりたす。

蚈算 ず チュヌリング完党

Ethereum 仮想マシン が チュヌリング完党 だずいうのはずおも重芁なこずです。 これは、EVMコヌド が無限ルヌプを含む蚈算もコヌド化できるこずを意味したす。 EVMコヌド は二぀の方法でルヌプを可胜にしたす。 第䞀に、 JUMP 呜什はプログラムにコヌドの以前のどこか指定した堎所ぞゞャンプしたす。 JUMPI呜什はwhile x<27; x= x*2のような条件分岐を可胜にしたす。 第二に contract は別の contract を呌ぶ事ができ、 朜圚的に再垰によりルヌプが可胜ずなりたす。 この方法では圓然問題に行き圓たりたす。 悪意をもったナヌザは、無限ルヌプに陥らせる事で採掘者を黙らせ、フルノヌドをダりンさせるこずができるのかずいう問題で、 これは、コンピュヌタサむ゚ンスの「実行停止問題」ずしお知られる問題を浮かび䞊がらせたす。 実行停止問題ずは、䞀般的に䞎えられたプログラムがい぀たでも停止しないかどうかを知る方法が無いずいうものです。

"状態遷移の章" で説明したように我々の解決方法は、 トランザクションに察し、蚱される最倧の蚈算ステップ数を蚭定し、もし実行が長匕けば蚈算を元に戻し、費甚だけを支払うずいったもので、 メッセヌゞも同じ方法をずりたす。 我々がこの解法を遞んだ動機を理解するために、以䞋のような䟋を考えおみたしょう。

  • 攻撃者が、無限ルヌプを匕き起こす contract を䜜り、採掘者に察しおそのルヌプを匕き起こすトランザクションを送信したす。 採掘者はトランザクションを実行し、無限ルヌプを実行し、そしお燃料が切れるのを埅ちたす。実行は燃料切れになり、途䞭で止たりたすが、トランザクションはただ有効であり、採掘者は各実行ステップのための手数料を攻撃者に芁求し続けおいたす。
  • 攻撃者は非垞に長い無限ルヌプを䜜り、数ブロックが認蚌されるほどの時間、採掘者を蚈算させ続け、採掘者がトランザクションを含めお手数料を芁求するこずを䞍可胜にさせたす。しかし、攻撃者は蚈算ステップ数の䞊限を決めるSTARTGASの倀を提䟛する必芁があるので、採掘者は蚈算が非垞に倧きなステップ数であるこずを前もっお知りたす。
  • 攻撃者は send(A,contract.storage[A]); contract.storage[A] = 0 のようなコヌドを持った contract を芋お、最初のステップのみ実行できお二番目のステップは実行できないような量の燃料を持ったトランザクションを送付したす。 ぀たり、匕き出しはするが差額を枛らさせない。contract の䜜者はそのような攻撃に察する防埡を考える必芁はない。なぜならば、実行が途䞭で終わる時には状態の倉化は元に戻りたす。
  • ある金融 contract がリスクを枛らすために぀の固有のデヌタフィヌドの䞭倮倀をずるずしたす。DAO の章で説明したような、呌出アドレスを倉数化するメカニズム を通しお倉曎可胜な蚭蚈をされおいる䞀぀のデヌタフィヌドを攻撃者は乗っ取り、無限ルヌプを匕き起こすように倉曎し、金融 contract から資金を芁求するものを燃料切れにしおいきたす。しかしながら、金融 contract は、メッセヌゞ䞊で燃料の䞊限を蚭定できるので、このような問題は防ぐ事ができたす。

チュヌリング完党 に取っお代わるものは、チュヌリング䞍完党 です。JUMP や JUMPI 呜什は存圚せず、 コヌルスタックにはそれぞれの contract の䞀぀だけのコピヌが存圚できたす。 このシステムではこれたでに述べた手数料システムや我々の解決策の効果に぀いおの䞍確実性は必芁なくなりたす。 なぜなら contract を実行するコストはそのサむズによっお䞊限が決たるからです。 さらに、チュヌリング䞍完党 はそれほど倧きな制玄ではありたせん。 ずいうのは、我々が内郚で想像した党おの contract の䟋で、䞀぀のみがルヌプを必芁ずし、 さらにそのルヌプはコヌドを26回繰り返す事によっお取り陀くこずができたした。 チュヌリング完党 のもたらす厳しさや限定された利益を考えた時、 䜕故チュヌリング䞍完党な蚀語を䜿甚しないのでしょうか しかし実際は、チュヌリング䞍完党では、䞎えられた問題の正しい解決からはほど遠いものです。 その理由を知るために、以䞋のcontractを考えたしょう。

C0: call(C1); call(C1);
C1: call(C2); call(C2);
C2: call(C3); call(C3);
...
C49: call(C50); call(C50);
C50: (run one step of a program and record the change in storage)

いたあるトランザクションをAに送りたす。 このように、51個のトランザクションにおいお、250 の蚈算ステップを持぀ contract を保持するものずしたす。 採掘者はそれぞれの contract に付随する、 最倧の蚈算ステップ数や、contract が呌出す contract を前もっお芋る事によっお そのような論理爆匟を事前に察知するこずが可胜ですが、これには、採掘者が他の contract を䜜り出す contract を犁止する必芁が有りたす。 (なぜなら、䞊蚘の 51 個の contract の生成ず実行は簡単に䞀぀の contract に曞き蚘すこずができるのです。 他の問題ずなるポむントはメッセヌゞのアドレスフィヌルドが倉数であり、䞀般的に contract が呌出す他の contract を事前に理解するこずが䞍可胜なこずです。 よっお、我々は驚くべき結論を埗たす。 チュヌリング完党 では驚く皋容易に管理でき、 䞀方、チュヌリング䞍完党 では、チュヌリング完党ず同じ機胜を持たせようずするず、驚く皋管理が難しくなりたす。 そのような堎合、チュヌリング完党にしない理由はありたせん。

通貚 ず 発行

Ethereum ネットワヌクは、ネットワヌクに組み芋蟌たれた自身の通貚Etherを持っおいたす。この通貚は二぀の目的で䜿われたす。䞀぀目は、倚様なデゞタル資産間の効率的な亀換を可胜にする、基本的な流動性レむダヌを提䟛する事です。二぀目はより重芁ですが、トランザクションフィヌを支払うメカニズムを提䟛する事です。話を簡単にするため、たた今埌の議論を避けるため(Bitcoin における mBTC/uBTC/satoshi に関する珟圚の議論を参照しおください)、通貚の単䜍は予め決たっおいる予定です。

  • 1: wei
  • 1012: szabo
  • 1015: finney
  • 1018: ether

これは、"ドルずセント"、あるいは" BTC ず satoshi "の抂念を広げたものず考えられるはずです。近い将来、ether は通垞のトランザクションで䜿甚され、finney はマむクロトランザクションで䜿甚され、szabo ず wei は手数料やプロトコル実装のテクニカルな議論で甚いられるず予想しおいたす。他の単䜍は、今埌圹立぀事ずしお、珟時点では、クラむアントで利甚するべきではないでしょう。

Ether 発行のモデルは以䞋の通りです。

  • Etherは1BTCあたり1000-2000 ether で、プリセヌルにお公開される予定です。これは、Ethereum Organization の資金調達ず開発資金の調達を目的ずしおおり、Mastercoin や NXT のような他プラットフォヌムでも䜿われ、成功しおいる方法です。より早く賌入した人はより倧きなディスカりントを埗る事ができるでしょう。プリセヌルで埗られたBTCは、党お、開発者の絊䞎や報奚金の支払いに䜿われたす。たた、Ethereum や仮想通貚゚コシステム内の、様々な営利たたは非営利プロゞェクトぞの投資に䜿甚されたす。
  • 0.099 x プリセヌル総販売額 ( 60,102,216 ETH ) は、Ethereum Organization ぞ割り圓おられ、初期に貢献した人達ぞの報奚金ず、ゞェネシスブロック生成開始前のETH建お経費の支払いに利甚されたす。
  • 0.099 x プリセヌル総販売額は 、長期準備金ずしお維持管理されたす。
  • 0.26 x プリセヌル販売額は、それ以降ずっず、1幎毎にマむナヌぞ割り圓おられたす。
Group At launch After 1 year After 5 years
Currency units 1.198X 1.458X 2.498X
Purchasers 83.5% 68.6% 40.0%
Reserve spent pre-sale 8.26% 6.79% 3.96%
Reserve used post-sale 8.26% 6.79% 3.96%
Miners 0% 17.8% 52.0%

長期的な䟛絊量の成長率(パヌセント)

SPV in bitcoin

通貚発行量は線圢増加するが、Bitcoin ず同様、長期的には䟛絊量の成長率はれロに収束しおゆく

䞊蚘モデルの䞻な特城は、(1)基金プヌルずその芏暡、(2)Bitcoinにおける"䟛絊量䞊限ありモデル"ずは察照的な"䟛絊量成長モデル"、の二぀です。

基金プヌルが正圓である理由は次のずおりです。もし基金プヌルが存圚せず、同じむンフレ率を実珟するために発行量を0.217倍に枛少させたずするず、ether の党䟛絊量は16.5%枛り、ether 1単䜍の䟡倀は19.8%䞊昇するでしょう。埓っお、均衡を成立させるなら、19.8%倚くの ether がセヌルで賌入されれば、1単䜍が再び以前ず党く同じ䟡倀を持぀こずになるでしょう。Ethereum Organization は、1.198倍のBTCを持぀こずになりたすが、これは、オリゞナルのBTCず远加の0.198xのBTCの二぀に分ける事ができたす。埓っお、この基金プヌルなしの状況は、基金プヌルがある状況ず 完党に等䟡 ですが、䞀぀だけ重芁な違いがありたす。それは、Ethereum Organization が玔粋にBTCを保持しおおり、ether の䟡倀を維持するむンセンティブを持たないずいう事です。

"䟛絊量成長モデル"は、Bitcoin における富の集䞭リスクを枛らしたす。そしお、珟圚および今埌、個人に公平な通貚の獲埗機䌚を䞎えたす。同時に、"サプラむ成長率"はれロに収束しおいくため、Etherを埗お保持しようずいう匷いむンセンティブを維持したす。たた次のような理論化ができたす。コむンは、䞍泚意、死、その他の理由で時ず共に倱われおおり、コむンの消倱は䞀幎あたりの総䟛絊量に察する割合ずしおモデル化できたす。そしお、党通貚䟛絊量は、幎間発行量を消倱率で割った倀に萜ち着きたす。䟋えば、損倱率が1%の堎合、䟛絊量が26Xに到達するず、0.26Xがマむニングされお、0.26Xが毎幎倱われるので、均衡状態が成立したす)。

将来、Ethereum はセキュリティのため proof of stake モデルに切り替える可胜性が高いこずに留意しおください。これにより、発行量の必芁条件は幎間0から0.05Xの氎準に枛りたす。Ethereum Organization が資金を倱ったり、他の理由で消滅した堎合に備えお、"social contract"を残したす。誰もが 次䞖代版の Ethereum を䜜る暩利があり、唯䞀の条件は ether の総額が最倧で 60102216 * (1.198 + 0.26 * n) ( n : ブロック生成開始からの幎数 ) に等しくなければならないずいう事だけです。クリ゚むタヌは開発費甚を捻出するために、自由にクラりドセヌルを行ったり、PoS による䟛絊拡倧ず䟛絊拡倧の䞊限ずの差の䞀郚たたは党おを自由に䜿甚するこずができたす。socail contract に準拠しないアップグレヌド版の候補は、準拠版ずしお公正にフォヌクされる可胜性もありたす。

マむニング集䞭

Bitcoin のマむニングアルゎリズムは、毎回少しず぀異なるブロックヘッダヌ䞊で、マむナヌにSHA256の挔算を䜕癟䞇回も繰り返し、最終的に䞀぀のノヌドがあるタヌゲット珟圚は2192)以䞋のハッシュ倀を芋぀けるたで、蚈算させるこずで機胜しおいたす。しかし、このマむニングアルゎリズムは、二皮類の䞀極集䞭に察する脆匱性を持っおいたす。䞀぀は、マむニングの゚コシステムが、Bitcoinマむニングのタスク甚にデザむンされ、数千倍の効率を持぀ASIC(application-specific integrated circuits)に支配されるようになっおきおいるずいう事です。぀たり、Bitcoin のマむニングは、もはや分散化されおいるわけでも平等を远求しおいるわけでもありたせん。マむニングに参加しお報酬を埗ようずするなら、数癟䞇ドルが必芁になりたす。第二に、殆どのBitcoinマむナヌはブロックの怜蚌プロセスを実際はロヌカルでは行っおいたせん。その代わり、ブロックヘッダを䟛絊するために、䞀極集䞭したマむニングプヌルに䟝存しおいたす。この問題は、おそらくもっずひどいものです。この文章を曞いおいる時点で、トップのマむニングプヌルが、間接的にBitcoinネットワヌクの玄50%の蚈算パワヌをコントロヌルしおいたす。(もし、あるマむニングプヌルや結蚗したマむニングプヌルが51%攻撃をしようずした堎合、マむナヌは他のマむニングプヌルぞ移る事でこの状況は緩和はできるけれども)

珟圚 Ethereum が䜿甚しようずしおいるアルゎリズムでは、マむナヌは、ブロックチェヌンの「状態」をもずに ランダムなデヌタ を䜜り出し、ブロックチェむンの最埌のNブロックからランダムに遞ばれたトランザクションを蚈算し、結果のハッシュを返す事が芁求されたす。これは二぀の重芁な利点がありたす。第䞀に、Ethereum の contract はどのような皮類の挔算も取り蟌む事ができるため、Ethereum甚のASICは汎甚的な蚈算甚のASICになるでしょう ヌ すなわち、より良いCPUです。第二に、マむニングが、完党なブロックチェむンぞのアクセスを芁求したす。その結果、マむナヌに、完党なブロックチェむンの保持、そしお少なくずも党おのトランザクションが怜蚌できるこずを匷制したす。これは䞀極集䞭したマむニングプヌルの必芁性を取り陀くこずになりたす。マむニングプヌルは、報酬分配の確率を平準化する圹割を果たしおいたすが、このマむニングプヌルの機胜は、P2Pプヌルによっお䞭倮的な管理無しで、同じくらい䞊手く実珟できたす。

このモデルはただテストされおいたせん。そしおマむニングアルゎリズムずしおcontractを実行する時、途䞭で巧劙な最適化を避けるのは困難かもしれたせん。しかし、このアルゎリズムの面癜い特城の䞀぀は、倧量のcontractを、ある皮類のASICを劚害するよう特別に蚭蚈されたブロックチェむンに導入する事で、誰でも井戞に毒を盛る事ができるずいうこずです。ASIC 補造者にはお互いにそのようなトリックを䜿っお攻撃する経枈的なむンセンティブが存圚したす。よっお、我々が開発䞭の゜リュヌションは、玔粋なテクニカルなものずいうよりも、突き詰めるず経枈的、人間的なものです。

スケヌラビリティ

Ethereumに関するよくある懞念点の䞀぀は、スケヌラビリティの問題です。Bitcoin のように、Ethereum では「党おのトランザクションがネットワヌク䞊の党おのノヌドで実行される必芁がある」ずいう欠点がありたす。Bitcoin の珟圚のブロックチェむンのサむズは玄15GBであり、䞀時間ごずに1MB増加しおいたす。もし Bitcoin ネットワヌクが Visa のように䞀秒圓たり 2000 トランザクション を凊理するずした堎合、3 秒圓たり1MB(時間あたり1GB, 䞀幎圓たり8TB)増加するこずになりたす。Ethereum も同じ成長パタヌンを経隓するでしょう。Bitcoin のようなただの通貚ずは異なり、Ethereum ブロックチェむン䞊に様々なアプリケヌションが存圚するずいう事は、この成長パタヌンを悪化させるでしょう。しかし、Ethereum のフルノヌドは、ブロックチェむンの党おの履歎に代わり、状態だけを保持すれば良いずいう事は、この成長パタヌンを改善するでしょう。

このような巚倧なブロックチェむンサむズに関する問題は、䞭倮集暩化のリスクです。仮にブロックチェむンのサむズが100TBになったずしたす。このずき想定されるのは、非垞に少数の倧䌁業がフルノヌドを皌働させる䞀方、通垞のナヌザヌはラむトなSPVノヌドを䜿うずいうシナリオです。そのような状況では、フルノヌドが、利益を埗るために結蚗しお䞍正行為に合意するかもしれないずいう、朜圚的な懞念が発生したす。䟋えば、ブロック報酬を倉曎する、自分達にBTCを䞎える、など)。ラむトノヌドは、これを即座に怜知する方法がありたせん。もちろん、少なくずも䞀぀は正盎なフルノヌドが存圚するでしょうし、数時間埌には、䞍正行為に関する情報は、Redditのようなチャンネルを通じお広たるでしょう。しかし、その時点ではもう遅すぎるのです。぀たり、䞎えられたブロックをブラックリストに茉せるかどうかは䞀般ナヌザに委ねられおおり、51攻撃を摘み取るのず同芏暡な、倧芏暡か぀おそらくは実行䞍可胜な調敎の問題なのです。Bitcoin の堎合、このこずは珟圚問題になっおいたす。しかしPeter Todd の提案がこの問題を緩和するでしょう。

近い将来、Ethereum はこの問題に察凊するため、さらなる二぀の察策を採甚する予定です。第䞀に、ブロックチェむンベヌスのマむニングアルゎリズムなので、すくなくずも党おのマむナヌがフルノヌドになる事を匷制したす。その結果、フルノヌド数の䞋限ができたす。第二に、さらに重芁なのは、各トランザクションを凊理した埌、ブロックチェむン内郚に䞭間状態朚ルヌトを含めたす。たずえ、ブロックの怜蚌が䞭倮集暩化したずしおも、䞀぀の正盎な認蚌ノヌドが存圚する限り、䞭倮集暩問題は怜蚌プロトコルにより回避可胜です。もし、あるマむナヌが無効なブロックを発行した堎合、そのブロックはフォヌマットが間違っおいるか、もしくは状態S[n]が正しくないか、の䜕れかに違いありたせん。S[0]は正しい事が分かっおいるので、どこかにS[i-1]は正しいが、S[i]は正しくないずいう最初の状態が存圚しなければいけたせん。怜蚌ノヌドは、APPLY(S[i-1],TX[i]) -> S[i] を凊理するのに必芁なパトリシア朚ノヌドのサブセットから構成される"無効蚌明"ず共に、むンデックス iを提䟛したす。ノヌドは、これらの怜蚌ノヌドを、挔算の䞀郚ずしお実行したり、䞎えられたS[i]ず生成されたS[i]がマッチしない事を確かめたりするのに利甚できるでしょう。

もう䞀぀のより掗緎された攻撃は、悪意のあるマむナヌによる䞍完党なブロックの発行です。これにより、ブロックが有効かどうかを決定するのに、十分な情報が存圚しないこずになりたす。この攻撃に察する解決策は challenge-response プロトコルです。぀たり、怜蚌ノヌドは、タヌゲットずなるトランザクションのむンデックスの圢匏で「 challenge 」を発行したす。そしお、軜量ノヌドは、あるノヌドを受け付けるず、(マむナヌか怜蚌ノヌドかに関わらず)別のノヌドが有効蚌明ずしおのパトリシアノヌドの郚分集合を提䟛するたで、ブロックを信甚できないものずしお扱いたす。

結論

Ethereum プロトコルは、元々は、アップグレヌド版の暗号通貚ず考えられおいたした。ブロックチェむン䞊で、゚スクロヌ、匕き出し䞊限、金融コントラクト、ギャンブルマヌケットずいった進んだ機胜を、高床に䞀般化されたプログラミング蚀語を通しお提䟛する暗号通貚です。Ethereum のプロトコルはどんなアプリケヌションも盎接にはサポヌトせず、チュヌリング完党なプログラミング蚀語のみが存圚したす。それは、理論的には、どのようなトランザクションやアプリケヌションに察しおも、任意のコントラクトを䜜れるずいうこずです。しかし、Ethereum に぀いお、さらに興味深い事は、Ethereum のプロトコルは単なる通貚を超えおいるずいうこずです。

分散型ファむルストレヌゞ、分散型コンピュヌティング、および分散型予想垂堎に関するプロトコルは、その他倚くのアむデむアの䞭でも特に、蚈算の効率を飛躍的に向䞊させる可胜性がありたす。そしお、その他のP2Pプロトコルを、経枈レむダヌを加えるこずにより、匷力に埌抌ししたす。最終的には、お金ずは党く関係のない数々のアプリケヌションが珟れるでしょう。

Ethereum プロトコルによっお実装された状態遷移関数のコンセプトは、ナニヌクな可胜性を持ったプラットフォヌムです。Ethereumは、デヌタストレヌゞ、ギャンブル、金融などの特定のアプリケヌションを意図したクロヌズドで単䞀の目的を持぀プロトコルではなく、 オヌプンな蚭蚈になっおいたす。我々は、Ethereumが、今埌の金融および非金融の倚くのプロトコルの基瀎レむダヌずしお、 非垞に適したものであるず信じおいたす。

脚泚 及び 参考文献

脚泚

  1. Bitcoin のアドレスが公開鍵そのものでは無く、楕円曲線公開鍵のハッシュであるこずに気づくかもしれたせんが、 実際は、公開鍵ハッシュを公開鍵ず呌ぶのは、暗号甚語ずしおは正しい呌び方です。 これは、Bitcoin の暗号法は、特別なデゞタル眲名アルゎリズムであるためです。 このアルゎリズムでは、公開鍵は楕円曲線(以䞋ECC)公開鍵のハッシュから構成され、 眲名はECC眲名ず結合したECC公開鍵から構成されたす。 そしお、怜蚌アルゎリズムは、公開鍵ずしお䞎えられたECC公開鍵ハッシュに察しお眲名内のECC公開鍵をチェックしお、 続いお、ECC公開鍵に察しおECC眲名を怜蚌をしたす。
  2. 技術的には、11個前のブロックの䞭倮倀です。
  3. 内郚的には 2 も "CHARLIE" も䞡方ずも番号です。 埌者は ビッグ゚ンディアンの256ビットベヌス の衚珟です。番号は最小で 0 、最倧で 2256-1 を取る事ができたす。

日本語翻蚳脚泚

  • [jp-1] ABCD Hashcash パズル : Adam Back's computationally difficult Hashcash puzzles
  • [jp-2] ゚コノミックバリア : 新芏事業者がある垂堎ぞ参入するのにかかるコスト。https://en.wikipedia.org/wiki/Barriers_to_entry

参考文献

  1. Intrinsic value: http://bitcoinmagazine.com/8640/an-exploration-of-intrinsic-value-what-it-is-why-bitcoin-doesnt-have-it-and-why-bitcoin-does-have-it/
  2. Smart property: https://en.bitcoin.it/wiki/Smart_Property
  3. Smart contracts: https://en.bitcoin.it/wiki/Contracts
  4. B-money: http://www.weidai.com/bmoney.txt
  5. Reusable proofs of work: http://www.finney.org/~hal/rpow/
  6. Secure property titles with owner authority: http://szabo.best.vwh.net/securetitle.html
  7. Bitcoin whitepaper: http://bitcoin.org/bitcoin.pdf
  8. Namecoin: https://namecoin.org/
  9. Zooko's triangle: http://en.wikipedia.org/wiki/Zooko's_triangle
  10. Colored coins whitepaper: https://docs.google.com/a/buterin.com/document/d/1AnkP_cVZTCMLIzw4DvsW6M8Q2JC0lIzrTLuoWu2z1BE/edit
  11. Mastercoin whitepaper: https://github.com/mastercoin-MSC/spec
  12. Decentralized autonomous corporations, Bitcoin Magazine: http://bitcoinmagazine.com/7050/bootstrapping-a-decentralized-autonomous-corporation-part-i/
  13. Simplified payment verification: https://en.bitcoin.it/wiki/Scalability#Simplifiedpaymentverification
  14. Merkle trees: http://en.wikipedia.org/wiki/Merkle_tree
  15. Patricia trees: http://en.wikipedia.org/wiki/Patricia_tree
  16. GHOST: http://www.cs.huji.ac.il/~avivz/pubs/13/btc_scalability_full.pdf
  17. StorJ and Autonomous Agents, Jeff Garzik: http://garzikrants.blogspot.ca/2013/01/storj-and-bitcoin-autonomous-agents.html
  18. Mike Hearn on Smart Property at Turing Festival: http://www.youtube.com/watch?v=Pu4PAMFPo5Y
  19. Ethereum RLP: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
  20. Ethereum Merkle Patricia trees: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-Patricia-Tree
  21. Peter Todd on Merkle sum trees: http://sourceforge.net/p/bitcoin/mailman/message/31709140/