BTC $79,940.74 +0.20%
ETH $2,478.89 +0.95%
BNB $777.34 +7.94%
XRP $1.42 +1.18%
SOL $103.81 +1.93%
TRX $0.3342 +0.70%
DOGE $0.0913 +7.56%
ADA $0.2208 +3.52%
BCH $257.05 +1.65%
LINK $12.03 +2.94%
HYPE $86.01 +1.12%
AAVE $134.82 +3.01%
SUI $0.8050 +6.62%
XLM $0.1850 +3.30%
ZEC $1,023.20 -0.93%
BTC $79,940.74 +0.20%
ETH $2,478.89 +0.95%
BNB $777.34 +7.94%
XRP $1.42 +1.18%
SOL $103.81 +1.93%
TRX $0.3342 +0.70%
DOGE $0.0913 +7.56%
ADA $0.2208 +3.52%
BCH $257.05 +1.65%
LINK $12.03 +2.94%
HYPE $86.01 +1.12%
AAVE $134.82 +3.01%
SUI $0.8050 +6.62%
XLM $0.1850 +3.30%
ZEC $1,023.20 -0.93%

イーサリアム開始前の物語

Summary:

著者:Vitalik Buterin

原題:《イーサリアムプロトコルの前史

発表日時:2017年9月14日

現在のイーサリアムプロトコルの背後にあるアイデアは基本的に2年間安定していますが、イーサリアムは一気に登場したわけではなく、現在の概念に完全に形成されているわけでもありません。ブロックチェーンが立ち上がる前に、このプロトコルは多くの重要な発展と設計の決定を経てきました。本稿の目的は、このプロトコルが最初に立ち上がった際のさまざまな進化を振り返ることです。Geth、Cppethereum、Pyethereum、Ethereumjなどのプロトコル実装に関する無数の作業や、イーサリアムエコシステム内のアプリケーションやビジネスの歴史については、意図的に範囲を超えています。

CasperとSharding Researchの歴史も登場します。もちろん、私たちはフラッド、ギャビン、私自身、そして他の人々のすべてのアイデアについて、"プルーフ・オブ・ワーク"、"ラジアルチェーン"、"ハイパー立法"、シャドーチェーン(言うなればPlasmaの前身)、チェーンファイバーCasperのさまざまな反復についてさらに多くのブログ記事を発表することができますが、フラッド(Vlad)については、私たちは今は省略します。

まず、イーサリアムに最終的に変わる最初のバージョンから始めましょう。その時点では、まだイーサリアムとは呼ばれていませんでした。2013年10月にイスラエルを訪れた際、私はマスタコインチームと多くの時間を過ごし、彼らにいくつかの機能を提供しました。彼らが何をしているのかを考えた後、私はチームに提案を送り、プロトコルをより一般的にし、同じように大きくて複雑な機能を追加することなく、より多くの種類の契約をサポートすることを提案しました:

https://web.archive.org/web/20150627031414/http://vbuterin.com/ultimatescripting.html

image

これは、イーサリアムの後のより広範なビジョンとは大きく異なることに注意してください:これは純粋にマスタコインが特に研究しようとしたものであり、二者間契約であり、当事者AとBが資金を投入し、その後、契約に指定された特定の公式に基づいて資金を取得することになります(例えば、賭けは「Xが発生した場合、すべての資金をAに渡し、そうでなければBに渡す」と言うでしょう)。スクリプト言語は完全ではありませんでした。

マスタコインチームは感銘を受けましたが、彼らが行っているすべてを放棄してこの方向に進むことには興味がなく、私はそれが正しい選択であるとますます確信しました。したがって、ここに12月2日のバージョン2があります:

https://web.archive.org/web/20131219030753/http://vitalik.ca/ethereum.html

image

ここでは、実質的な再研究の結果を見ることができます。これは主に、スマートコントラクトが完全に一般化される可能性に気づいた旧金山への長旅の結果です。単に二者間の関係の条件を記述するスクリプト言語ではなく、契約自体が完全なアカウントであり、資産を保持、送信、受信する能力を持ち、さらには永続的なストレージを保持することができるということです(当時、永続的なストレージは「メモリ」と呼ばれ、唯一の一時的な「メモリ」は256のレジスタでした)。この言語は、スタックベースのコンピュータから、私自身の意志に基づくレジスターベースのコンピュータに移行しました。見た目がより複雑な場合を除いて、私はこれについてほとんど議論しませんでした。

さらに、現在は組み込みの手数料メカニズムがあることに注意してください:

image

この時点で、イーサは実際にはガスです。各計算ステップの後、取引所が要求する契約の残高は減少し、契約が通貨を使い果たすと停止します。この「受取人支払い」メカニズムは、契約自体が送信者に契約に対して手数料を支払うよう要求し、この手数料が存在しない場合は即座に退出する必要があることを意味します;プロトコルは、契約が未払いの取引を拒否できるように、16の無料実行ステップの手当を割り当てました。

これは、イーサリアムプロトコルが完全に私自身の創造であった時点です。しかし、ここから新しい参加者が折りたたみに参加し始めました。これまでのところ、プロトコルの最も目立つ側面は、2013年12月に私に接触したギャビン・ウッド(Gavin Wood)です。

image

GOクライアントのチーフ開発者であるジェフリー・ウィルク(当時は「Ethereal」と呼ばれていました)も、ほぼ同じ時期に手を差し伸べましたが、彼の貢献はプロトコル研究よりもクライアント開発に多くありました。

image

「やあ、ジェフリー、イーサリアムに興味を持ってくれて嬉しい……」

ギャビンの最初の貢献は二重でした。まず、初期設計の契約呼び出しモデルは非同期であることに気づくかもしれません:契約Aは契約Bに「内部取引」を作成できますが(「内部取引」はEtherscanの用語です;最初は単に「取引」と呼ばれ、その後「メッセージ呼び出し」または「呼び出し」と呼ばれるようになりました)、最初の取引の実行が完全に完了するまで、内部取引の実行は開始されませんでした。これは、取引が内部取引を他の契約から情報を取得する手段として使用できないことを意味します;唯一の方法はExtro OpCode(他の契約のストレージを読み取るために使用できるSloadのようなもの)であり、その後、ギャビンや他の人々の支持の下で削除されました。

私の初期仕様を実装する際、ギャビンは自然に内部取引を同期的に実装しましたが、意図が異なることに気づいていませんでした。つまり、ギャビンの実装では、契約が別の契約を呼び出すと、内部取引が即座に実行され、実行が完了すると、VMは内部取引を作成した契約に戻り、次のOPCODEに進みます。私たち二人にとって、このアプローチは優れているように思えたため、私たちはそれを仕様の一部として採用することに決めました。

次に、彼と私の間の議論(サンフランシスコの散歩中に、正確な詳細は歴史の風によって永遠に失われるでしょうが、NSAの深いアーカイブの中に一つか二つのコピーが失われるかもしれません)では、取引手数料モデルが「契約支払い」方式から「送信者支払い」方式に移行し、「ガス」アーキテクチャに切り替わりました。取引の送信者は、各取引ステップを即座に奪うのではなく、いくつかの「ガス」を割り当て、計算ステップはこのガスの手当から取得されます。取引がガスを使い果たすと、ガスは没収されますが、全体の実行は復元されます;これは、全体のコースを削除するため、最も安全なことのように思えました。

ギャビンは、イーサリアムをプログラム可能な資金プラットフォームとして構築するというビジョンを持つことにも大いに貢献しました。ブロックチェーンに基づく契約がデジタル資産を保持し、事前に設定されたルールに従ってそれらを移転できるようにすることから、汎用計算プラットフォームへと進化しました。これは、焦点と用語の微妙な変化から始まり、その後「Web 3」の合奏に対する関心が高まるにつれて、この影響はさらに強力になりました。この合奏は、イーサリアムを一連の分散技術と見なします。他の二つは、ウィスパーとハイパーです。

image

他の人々も2014年初頭に変更を提案しました。アンドリュー・ミラー(Andrew Miller)や他の人々がこのアイデアを提案した後、私たちは最終的にスタックベースの構造に戻りました。

image

チャールズ・ホスキンソン(Charles Hoskinson)は、ビットコインのSHA256から新しいSHA3(より正確にはKeccak256)に移行することを提案しました。しばらくの間の議論の後、ギャビン、アンドリュー、他の人々との議論は、スタック上の値のサイズを32バイトに制限することを決定しました。考慮された別の代替案は、無限サイズの整数でしたが、どれだけのガスが必要かを理解するのが難しいという問題がありました。加算、乗算、その他の操作も同様です。

私たちが最初に考えたマイニングアルゴリズムは、2014年1月にさかのぼります。それは「Dagger」と呼ばれる装置です:

https://github.com/ethereum/wiki/blob/master/Dagger.md

image

Daggerは「有向非巡回グラフ」(DAG)と呼ばれるアルゴリズムで使用される数学的構造にちなんで名付けられました。このアイデアは、各nブロックごとに、新しいdagがシードから生成される擬似ランダムであり、dagの底層は数ギガバイトを必要とするノードの集合であるということです。しかし、DAG内で個々の値を生成するには、数千のエントリを計算する必要があります。「Dagger計算」は、この底部データセット内のランダムな位置でいくつかの値を取得し、それらを組み合わせることを含みます。これは、Dagger計算を行うための迅速な方法があることを意味します - データがメモリに保存されているため、記憶集約型の方法ではなく、各値を最初から取得する必要があります。

このアルゴリズムの目的は、当時人気のあるアルゴリズムと同じ「メモリ」特性を持つことです。例えばScryptですが、依然として軽量クライアントに優しいものでした。マイナーは迅速な方法を使用するため、彼らのマイニングはメモリ帯域幅に制限されます(理論的には消費者向けRAMが非常に重視されているため、ASICによってさらに最適化するのが難しいです)。しかし、ライトクライアントは、メモリなしで遅いバージョンを使用して検証できます。迅速な方法は数マイクロ秒を要し、メモリなしの方法は遅く、ミリ秒を要しないため、ライトクライアントにとっては非常に実行可能です。

ここから、イーサリアムの開発プロセスでこのアルゴリズムは何度も変更されます。私たちが経験した次のアイデアは「適応型プルーフ・オブ・ワーク」です。ここでは、プルーフ・オブ・ワークがランダムに選ばれたイーサリアム契約を実行することを含み、ASICに対抗する方法があるという賢い理由があります:ASICが開発された場合、競争するマイナーは、これらの契約の説明がASICが実行するのが得意でないことを示す多くの契約を作成し、公開する動機を持つことになります。この物語は、一般的な計算のためのASICのようなものには適用されません。なぜなら、それは単にCPUだからです。したがって、私たちはこの対抗的なインセンティブメカニズムを使用して、基本的に一般計算を実行するプルーフ・オブ・ワークを行うことができます。

失敗の理由は簡単です:リモート攻撃です。攻撃者は、ブロック1から始めて、彼らが専用ハードウェアのために作成できる単純な契約でそれを埋め込み、主チェーンを迅速に超えることができます。だから……再び設計ボードに戻ります。

次のアルゴリズムは「ランダム回路」と呼ばれ、私自身とVlad Zamfirによって提案され、Matthew Wampler-Dotyなどによって分析されました。ここでのアイデアは、マイニングアルゴリズム内の一般計算をシミュレートすることですが、今回はランダムに生成された回路を実行することです。これらの原則に基づいて、何も証明するのは難しくありませんが、私たちが2014年に接触したコンピュータハードウェアの専門家は、しばしば非常に悲観的でした。Matthew Wampler-Doty自身は、SAT解決に基づくプルーフ・オブ・ワークを提案しましたが、最終的には拒否されました。

最終的に、私たちは「Dagger Hashimoto」と呼ばれるアルゴリズムで回路を完成させました。「dashimoto」は時折「dashimoto」と呼ばれ、hashimotoから多くのアイデアを借りています。HashimotoはThaddeus Dryjaのプルーフ・オブ・ワークアルゴリズムであり、「I/Oのプルーフ・オブ・ワーク」の概念を初めて提案しました。ここでの掘削速度の主な制限要因は、毎秒ハッシュではなく、毎秒RAMアクセスの大規模な範囲です。しかし、それはDaggerの軽量クライアントに優しいDAG生成データセットと組み合わされています。私自身が多くの調整を行った後、Matthew、Tim、他の人々と共に、これらのアイデアは最終的に私たちが現在ethashと呼んでいるアルゴリズムに融合しました。

image

2014年夏までに、プロトコルは大幅に安定し、プルーフ・オブ・ワークアルゴリズムを除いて、2015年初頭までEthash段階に達することはありませんでした。これは、ギャビンのイエローペーパーの形で半公式な仕様として存在しました。

image

2014年8月、私は叔ブロックメカニズムを開発し、導入しました。このメカニズムは、イーサリアムのブロックチェーンに短いブロック時間と高い容量を持たせ、集中化リスクを軽減します。これはPOC6の一部として導入されました。

Bitsharesチームとの議論は、スタックを第一級のデータ構造として追加することを検討することにつながりましたが、時間が不足していたため、最終的にはそうしませんでした。その後のセキュリティ監査とDOS攻撃は、実際には私たちが考えていたよりもはるかに難しいことを示しました。当時、安全にこれを実行することを考えていました。

9月、私はギャビンと共にプロトコル設計の次の2つの重要な変更を計画しました。まず、状態ツリーとトランザクションツリーの横に、各ブロックには「レシートツリー」も含まれます。レシートツリーには、取引作成のログのハッシュと中間状態のルートが含まれます。ログは、取引作成がブロックチェーン内に「出力」を保存できるようにし、ライトクライアントがアクセスできるようにしますが、将来の状態計算にはアクセスできません。これにより、分散アプリケーションがトークン移転、購入、作成および埋め込まれた交換注文、オークションの開始などのイベントを簡単に照会できるようになります。

他にも考慮されたアイデアがありました。例えば、全取引の実行トレースからメルクルツリーを生成して何かを証明することです。ログを選択した理由は、単純性と完全性の妥協だからです。

2つ目は「プリコンパイル」のアイデアで、EVMで複雑な暗号計算を利用可能にする問題を解決し、EVMのオーバーヘッドを処理する必要がありませんでした。私たちはまた、「ローカル契約」に関するより野心的なアイデアを経験しました。「もしマイナーが特定の契約の実装を最適化できるなら、彼らはこれらの契約のパッケージ料金に「投票」できるので、ほとんどのマイナーがより迅速に実行できる契約は自然にガス価格を引き下げるでしょう。しかし、これらのアイデアはすべて拒否されました。なぜなら、私たちはこのようなことを実施するための暗号経済的に安全な方法を考え出せなかったからです。攻撃者は常に契約を作成でき、その契約が特定のトラップの暗号操作を実行し、トラップドアを自分や友人に割り当てて、その契約をより迅速に実行し、その後その契約を実行し、ガスの投票を行い、それをネットワークに使用することができます。代わりに、私たちは、ハッシュや署名スキームなどの一般的な操作に使用される、プロトコルで指定された少数のプリコンパイルを単純に指定するという野心的なアプローチを選びました。

ギャビンはまた、「プロトコル抽象化」の概念を開発する上で重要な初期の声でもありました。イーサ残高、取引署名アルゴリズム、ナンスなどのプロトコルの多くの部分を契約自体として移動させ、理論的な最終目標に到達することができる場合、イーサリアムプロトコル全体を特定の原始状態を持つ仮想マシンへの関数呼び出しとして記述することができるということです。これらのアイデアは、最初のフロンティアバージョンに十分な時間を持っていませんでしたが、原則はコンスタンティノープルのいくつかの変更、カスパー契約、シャーディング仕様を通じて徐々に統合されることが期待されていました。

これらすべてはPOC7で実装されました;POC7の後、プロトコルには大きな変更はなく、未成年者を除いて、重要な詳細はセキュリティ監査から得られました…

2015年初頭、ユッタ・シュタイナー(Jutta Steiner)らが発起したプレリリースセキュリティ監査が行われ、ソフトウェアコードレビューと学術レビューが含まれました。このソフトウェア監査は主に、ギャビン・ウッドとジェフリー・ウィルクがリードするC++およびGO実装によって行われましたが、私のPyethereum実装にも小規模な監査がありました。この2つの学術監査のうちの1つは、イッタイ・エヤル(「自己中心的なマイニング」で有名)によって行われ、もう1つはアンドリュー・ミラーと他の最低権威によって行われました。EYAL監査は、チェーンの総難易度に叔ブロックを含めないという小さなプロトコル変更をもたらしました。最小権限の監査は、スマートコントラクトとガス経済学、パトリシアツリーに焦点を当てました。この監査は、いくつかのプロトコル変更をもたらしました。小さな変更は、sha3(addr)とsha3(key)を直接アドレスとキーの使用ではなくtrieキーとして使用することでした;これにより、Trieに対する最悪の攻撃がより困難になります。

image

警告はその時代よりも少し早すぎるかもしれません…

私たちが議論したもう一つの重要なことは、ガス制限投票メカニズムです。当時、私たちはビットコインのサイズに関する議論の進展の欠如を懸念しており、イーサリアムにおいてより柔軟な設計を持ち、必要に応じて時間とともに調整できることを望んでいました。しかし、課題は:最適な制限は何か?私の最初の考えは、実際のガス使用の長期指数移動平均に基づいて動的制限を設定することでした。したがって、長期的には平均ブロックが満杯になるでしょう。しかし、アンドリューは、これはある意味で利用可能であると考えました - 特に、制限を引き上げたいマイナーは、自分のブロックに取引を含めるだけで、これらの取引は大量のガスを消費しますが、処理するのにほとんど時間がかからないため、常に全体のブロックを作成します。したがって、少なくとも上向きの方向では、セキュリティモデルは単にマイナーにガス制限に投票させることと同等です。

私たちは、壊れる可能性が低いガス制限戦略を考え出すことができなかったため、アンドリューが提案した解決策は、単にマイナーにガス制限に明示的に投票させ、デフォルトの投票戦略をEMAルールに設定することでした。理由は、最大ガス制限を設定する正しい方法までには長い道のりがあり、特定の方法が失敗するリスクは、マイナーが投票権を乱用するリスクよりも大きいように思えたからです。したがって、私たちは単にマイナーにガス制限に投票させ、限度が高すぎるか低すぎるリスクを受け入れることにしました。その代わりに、柔軟性の利点と、マイナーが必要に応じて非常に迅速に上または下に制限を調整する能力を得ることができます。

image

ギャビン、ジェフ、私自身の間で小規模なハッカソン(POC9)が行われた後、POC9は3月に発表され、概念リリースの最終的な証明となることを意図していました。Livenetで使用することを意図したスキームを使用し、イーサリアムの長期計画を構築し、4ヶ月間のテストネットを実行しました。ヴィナイ・グプタは、イーサリアムLivenet開発の4つの予想段階を説明したブログ記事「イーサリアムの立ち上げプロセス」を執筆し、それに現在の名前を付けました:フロンティア、ホメステッド、メトロポリス、セレニティ。

ハッカソンは4ヶ月間続きました。最初の2ヶ月間、さまざまな実装で多くのバグが発見され、合意の失敗が発生しましたが、6月頃にはネットワークが明らかに安定しました。7月、コードの凍結を決定し、その後リリースを行い、7月30日にリリースされました。

image

warnning リスク警告
app_icon
ChainCatcher Building the Web3 world with innovations.