アルゴリズムとかオーダーとか

仕事で勉強したことなどをまとめてます

Constantinopleで導入されるEIP-1014について

今回は、いよいよ来週の2019/01/16にupdateされるConstantinopleで導入されるEIPのうちの一つである、EIP-1014について解説します。
eip-1014.mdにも書かれているとおり、これはstate channelに対して非常に重要な機能であり、個人的にConstantinopleで導入される機能の中でも一番注目しています。

では早速EIP-1014について解説していきます。

さわり

CREATE2 opcodeはstate channelのためのopcodeであり、ユーザはまだchain上にdeployされていないContractにcommitしてoff-chainのやり取りを行えるようになります。

というのが.mdファイルに書かれている内容のざっくりとした説明であり、またその他のブログでも書かれている説明です。が、正直これだけだと何がどう変わったのか?なぜ、まだdeployされていないContractに対してcommitできるのか?というのが謎のままなので、今回はそのあたりを中心に説明していきたいと思います。

CREATE opcode

まずは、いま現在使われているCREATE opcodeについて説明します。これはDApps開発者などがSmart Contractを作成してEthereum上にdeployする際に実行されるopcodeになります。
CREATE opcodeでは生成されるContractのaddressが次の2つの要素から計算されます。

  • creator address: CREATE opcodeを呼び出したmsg.senderのaddress
  • nonce: creatorのnonce

CREATE opcodeで生成されるContractのaddressは上記2つの要素をRLP形式で結合したものに対してkeccak256した結果の下位20byteです。つまり、CREATE opcodeで生成されるaddressは決定論的に決まるため、まだdeployされていないContractに対してのaddressは事前に算出可能です。
しかし、前述した通り、Contractのaddressを生成する要素はmsg.senderのaddressとnonceです。そのため、CREATE opcodeによって生成されるaddressは”誰が作成したか?" ということにしかcommitできません。生成された後のContractの動作については何も保証がないという状態です。

CREATE opcodeのより詳しい説明は以下の記事を参照ください。
y-nakajo.hatenablog.com

CREATE2 opcode

変わって、CREATE2 opcodeで生成されるContractのAddressは次の要素を元にして生成されます。

  • 0xff : CREATEで生成されたcontractとaddressが被らないようにするためのoffset値
  • creator address: CREATEと同様、CREATE2を呼び出した人のaddress
  • salt: uint256の任意の値
  • init_code: このCREATE2で生成されるcontractの初期化code

ここで、重要なのが4番目のparameterであるinit_codeです。このinit_codeもContractのaddress計算の要素となるため、CREATE2によって作成されたaddressは必ずContractの動作が保証されたものになります。
これが、CREATE2によってまだdeployされていないContractにcommitしてoff-chainで取引が行える理由となっています。

実際のCREATE2 opcodeが使用される状況として予想されるのは、何かしらのHandshake Contractがdeployされ、そのHandshake ContractがCREATE2を使ってstate channelの結果を保証するためのContractをdeployする。 みたいな流れになるのかなと思います。

なお、以下のrepositoryではCREATE2の使用例を実際のコードも交えて説明しており、非常にイメージが掴みやすいです。
github.com

まとめ

今回は簡単にEIP-1014の仕組みと有用性について紹介しました。Constantinopleが取り込まれた後は、Ethereumの2nd Layerの開発、特にstate channelを用いたoff-chainのプロダクトが活発になっていくと思うので非常に楽しみです。