マスタリング・イーサリアム ―スマートコントラクトとDAppの構築
by Andreas M. Antonopoulos, Gavin Wood, 宇野 雅晴, 鳩貝 淳一郎, 中城 元臣, 落合 渉悟, 落合 庸介, 小林 泰男, 土屋 春樹, 祢津 誠晃, 平山 翔, 三津澤 サルバドール将司, 山口 和輝
11章オラクル
この章では、イーサリアムのスマートコントラクトに外部データソースを提供するオラクル(oracle)について見ていきます。「オラクル」という言葉はギリシア神話に由来しており、未来を見通すことができる神と連絡を取る者を指しています。ブロックチェーンの文脈では、オラクルはイーサリアムの外部の質問に答えることができるシステムを指します。理想的なオラクルは、トラストレス(trustless)なシステムです。これは、理想的なオラクルは非中央集権の原理に基づき動作するため、信頼する必要が無いということを意味します。
11.1 オラクルの必要性
イーサリアムプラットフォームの重要なコンポーネントは、イーサリアム仮想マシン(EVM)です。EVMは、非中央集権型のネットワーク内の任意のノード上でプログラムを実行し、イーサリアムのステート(状態)を更新するもので、コンセンサスルールによって制約されています。コンセンサスを維持するために、EVMの実行は完全に決定論的であり、共有されたイーサリアムのステートと署名付きトランザクションのみに基づいていなければなりません。この特徴から2つの特に重要な結論が導かれます。1つ目は、EVMやスマートコントラクトが動作するための本質的なランダム源は存在しないということです。2つ目は、外部データはデータペイロードトランザクションとしてのみ導入されるということです。
これら2つの事柄がもたらす影響について、さらに解説していきます。次のような関数の実行後に、コンセンサスに至る試行の結果について考えてみましょう。これによって、スマートコントラクトにランダム性を与えてしまう、EVM中の真のランダム関数が禁止されていることが理解できます。ノードAはあるコマンドを実行し、スマートコントラクトの実行結果としてストレージに3を格納します。一方でノードBは同じスマートコントラクトを実行して代わりに7を格納します。このようにして、ノードAとノードBは、同じ文脈でまったく同じコードを実行したにもかかわらず、最終的なステートは異なります。たしかに、このようにスマートコントラクトが実行されるたびに、異なる最終的なステートに至ることがあり得ます。そのため、真のランダム関数が存在する場合、世界各地に独立して動作しているノードの集まりで構成されるネットワークが、最終的に達するステートが何なのかについて、分散した状態でコンセンサスに至る方法はないのです。実際には、イーサの送金などの連鎖効果は指数関数的に増えていくので、あっという間にここで示した例よりも非常に悪い状態となるでしょう。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access