Optimismの標準ブリッジコントラクトを紹介します
SolidityOptimismブリッジレイヤー2
中級Optimism(opens in a new tab)は、Optimisitc ロールアップを行うメカニズムのひとつです。 Optimistic ロールアップでは、ネットワークに含まれるすべてノードではなく一部のノードのみを対象としてトランザクションが処理されるため、イーサリアム・メインネット(「レイヤー 1」または「L1」とも呼ばれます)よりも手数料が低くなります。 一部のノードのみを対象として処理されるものの、すべてのデータは L1 に書き込まれるため、あらゆる事項につき、メインネットにおける完全性および可用性についての保証に基づいて証明、再構築することが可能です。
Optimism(またはその他の L2)上で L1 のアセットを使用するには、当該アセットをブリッジする必要があります。 アセットをブリッジする方法のひとつとして、アセット(最も一般的なのは、ETH やERC-20 トークンです)を L1 上でロックし、L2 上で同等のアセットを受け取る方法があります。 最終的に、これらのアセットを所持するユーザーは、再度 L1 にブリッジする必要があるでしょう。 L1 にアセットをブリッジすると、L2 上のアセットはバーンされ、L1 上のアセットがユーザーに戻されます。
以上が、Optimism における標準ブリッジ(opens in a new tab)の仕組みです。 この記事では、このブリッジ機能について Solidity 上で適切に作成したソースコードを確認しながら、その仕組みを学びます。
制御フロー
ブリッジは、2 つのメインフローで構成されます:
- L1 から L2 への入金
- L2 から L1 への出金
入金フロー
L1
- ERC-20 を入金 する場合、入金者はブリッジに対し、入金額を使用するためのアローワンスを与えます。
- 入金者は、L1 ブリッジ(
depositERC20
、depositERC20To
、depositETH
あるいはdepositETHTo
)を呼び出します。 - L1 ブリッジが、ブリッジされたアセットを保持します。
- ETH の場合:アセットは、呼び出しを通じて入金者に送信されます。
- ERC-20 トークンの場合:アセットは、入金者が提供するアローワンスを使用して、ブリッジ自体に送信されます。
- L1 のブリッジが、クロスドメインのメッセージメカニズムを通じて、L2 のブリッジ上で
finalizeDeposit
を呼び出します。
L2
- L2 のブリッジは、
finalizeDeposit
の呼び出しにつき、以下が適切であることを確認します:- クロスドメインのメッセージ・コントラクトからの呼び出しであること。
- ブリッジが L1 上で作成された ものであること。
- L2 のブリッジはさらに、L2 上の ERC-20 トークンコントラクトにつき、以下が適切であることを確認します:
- L2 のコントラクトにおいて、L1 における対応するコントラクトが、L1 上で送信されたトークンと同一であると報告していること。
- L2 のコントラクトが、(ERC-165 を使用した(opens in a new tab))適切なインターフェイスをサポートすると報告していること。
- L2 のコントラクトが適切であると確認できた場合は、適切なアドレスに対して希望する量のトークンをミントするために、そのコントラクトを呼び出してください。 そうでない場合は、出金プロセスを開始して、ユーザーが L1 上のトークンを請求できるようにします。