EthereumのL2間でトークンを移動できるようにするhopの仕組み

公開:2021/02/23
更新:2021/02/23
8 min読了の目安(約7200字TECH技術記事

はじめに

L2間でトークンを移動できるようにするhopのホワイトペーパーを意訳、抜粋しながら解説していきたいと思います。

現状の課題

今だと、Layer2のチェーン間でのやりとりをしようと思うと、一度L1に引き出してから、再度L2にデポジットすることになると思います。
そうなると、L1でのガス代も無駄ですし、Optimistic RollupではFraud Proofという不正証明の仕組みがあるので、L1へ引き出す際に1週間ほどかかってしまいます。

そこで考え出されたのが、L2同士でトークンのやりとりができるhopという仕組みです。

hop protocolとは?

ロールアップ間つまりL2間でのトークンの送信をするプロジェクトです。

この記事でいうL2はロールアップを対象としています。

hop bridge tokenとは?

ホップブリッジトークン(ex: Hop ETH hETH, Hop Dai hDAI )と呼ばれる(以下、hToken)、L2間で一括転送可能な特殊なトークンです。

各hTokenは、L1のホップブリッジコントラクトへのデポジットを表しています。例えば、4ETHがL1でデポジットされると、L2で4hETHが発行されるという感じです。

逆に、L2上で発行されているhTokenをバーンすることによって、hTokenはL1上で元のトークンに交換できます。

hTokenがL2間で転送される時に、送る側のL2でhTokenがバーンされて、送られた方のL2でhTokenが発行されます。

これらの即時転送は、”ボンダー”が少額の手数料と引き換えに、送り先での流動性を提供することを許可することによって、達成できます。

Figure 1: Alice deposits 4 ETH into the L1 Bridge contract and receives 4 Hop
ETH from the L2 Bridge contract. - https://hop.exchange/whitepaper.pdf

トークンを転送する

トークンの転送には以下のような情報が必要です。

  • 目的地のchain Id
  • 受信者のアドレス
  • 転送する量

Transfer Root

マークルツリーを利用して、最小限のデータで、転送を表現します。

  • 転送のマークルルート
  • チェーンIDで表されるユニークなアドレスの配列
  • それぞれのユニークなアドレスに転送される合計金額の配列

Figure 2: The four pending Transfers are aggregated into a Transfer Root with
three destinations. - https://hop.exchange/whitepaper.pdf

1つのTransfer Rootには何千もの転送が含まれていますが、1つの塊としてL1上で処理することができます。
これにより、L1のボトルネックが緩和され、多くの転送をL1を経由して、スケーラブルな方法で方法で転送先のL2に渡すことができます。

しかし、Transfer Rootの伝搬には時間がかかります。これは主に、Transfer Rootの起点となったロールアップのexit timeに起因します。

転送をすぐに実行するためには、次のセクションで説明するサードパーティが目的地のL2上で少額の手数料を払って、前払い流動性を提供することできます。

Transfer Bonds(債権譲渡)

bonder はロールアップの検証ノードを実行することにより、転送が元のL2で行われたことを確認できます。
bonderはL2の検証ノードを実行することで、転送が転送元のL2で行われたことを確認できます。

bonderはすぐに転送を実行するために、転送先のL2で前払い流動性を提供することができます。最終的に転送が目的地に到達すると、bonderの資金が復元されます。

bonderは、送金が伝搬している間、流動性をロックする代わりに、少額の手数料を得ることができます。

AMM

各hTokenはL1トークンを表し、迅速かつ経済的にL2間を移動することができます。

通常のネットワーク条件では、各hTokenはいつでもL1で元のトークンに変換できるため、各hTokenはL1とL2で1-1で交換できる価値があります。

しかしながら各ロールアップ上のサードパーティーはhTokenを直接使用します。

彼らが採用している標準トークンは、ロールアップのネイティブトークンブリッジやアプリケーション固有のトークンによって生成される可能性が高い。

L1トークンと標準L2トークンとの間のブリッジを完成させるために、AMMを利用して、各hToken(例: hETH)との間でスワップを可能にすることができます。

Figure 3: The AMM creates a market between Hop ETH and the Canonical
ETH on the rollup. - https://hop.exchange/whitepaper.pdf

この市場は特定のロールアップにおける流動性のための価格設定メカニズムを提供し、また、市場の動きに応じて流動性をリバランスするためのアービトラージのためのインセンティブメカニズムとしても機能します。

裁定者(アービトラージする人たち)

裁定者 は、Hop プロトコルにおける外部の非公認の登場人物です。

裁定者の役割は、L1トークンとカノニカルなL2トークンとの価格差を利用することです。

この価格差を利用することで、裁定者はサポートされているロールアップの間で流動性を効果的にリバランスすることができます。

次のシナリオは、L1とホップブリッジでサポートされている1つのロールアップについて考えてみましょう。
ユーザーはロールアップにETHを持っていて、すぐにレイヤ1に移動したいと考えています。

ホップブリッジを使用しているのはNative Token Bridgeでは、ロールアップの終了時間が適用されます。
まず、ロールアップ上のETH:hETH AMMを使用して、彼らのETHをHop ETH (hETH)と交換します。

その後、Hop ETHをロールアップ上で燃やし、L1 ETHと交換することができます。

ホップブリッジを経由して抜けることはETH:hETH市場にETHを売却することを意味するため、ETHの価格はホップETHに比べてわずかにディスカウントされます。

このディスカウントが十分に大きくなると(例えば、1.005 ETH/hETH)、裁定者はレイヤー1のETHをホップブリッジを渡って移動し、ホップETHを受け取ります。

その後、ホップETHは、割引されたレイヤ2のカノニカルETHを購入するために使用されます。

裁定者は、レイヤ2のカノニカルETHをレイヤ1に戻すことを選択することができます。

彼らは、アービトラージしたばかりの市場に戻って取引し、その利益を失いたくないので、ネイティブ・トークン・ブリッジを経由して退場し、流動性ロックアップを引き受けることになります。

流動性供給者

各AMMは、流動性供給者にAMMの流動性プールに受動的な流動性を提供することを要求しています。

その見返りとして、流動性供給者は各スワップから少額の手数料(例:0.3%)を受け取ります。

通常、流動性供給者は「永久的な損失」と呼ばれるリスクも負います。

インパーマネントロスは、AMM の資産が価格で乖離した場合に発生します。

HopプロトコルのAMMペアは常に同じような価値の資産であるため、Hop流動性プロバイダーは、通常のネットワーク状況下では永久的な損失のリスクが非常に低くなります。

さらに、狭い範囲内で取引される資産に対して、AMMの価格カーブを最適化することができます。

ロールアップからロールアップへの転送

hTokenとマーケットの両方を使用してのスワップに各ロールアップで hTokenとカノニカル・トークンを使用することで、ユーザーは迅速かつ容易に は、あるロールアップのカノニカルトークンから次のロールアップに変換します。

ホッププロトコルを介したロールアップ間の転送は、個々の転送はL1 トランザクションを必要としません。

アリスがロールアップAでカノニカル ETHを持っていて、ロールアップBにCanonical ETHに転送したい場合のシナリオを考えてみましょう。

  1. アリスはロールアップAでAMMを使ってRollup A Canonical ETHをhETHに交換します。

  2. アリスはホップブリッジを使用して、ロールアップAからロールアップBにhETHを送ります。

  3. ボンダーが彼女の転送に流動性を提供すると、アリスはロールアップBでhETHを受け取ります。

  4. アリスはロールアップBのAMMを使用して、hETHをロールアップBのカノニカルETHと交換することができます。

Figure 4: Users swap between the Canonical Token on each rollup using the
Hop Token as an intermediary asset. - https://hop.exchange/whitepaper.pdf

最終的には彼女のTransferがL1ホップブリッジを伝播し、ボンダーの流動性が戻ってきます。

利便性のために、アリスはまた、単一のトランザクションを行うことによって彼女のクロスロールアップ転送を行うことができます。

アリスはホップブリッジを呼び出し、AMMを使用してロールアップAカノニカルETHからアリスのホップETHへのスワップを実行し、ホップETHをその宛先に送信します。

今回の転送では、転送先でhETHをRollup B Canonical ETHに自動的にスワップするように指示を出して送信します。

この便利な機能により、他のスマートコントラクトがHopプロトコルと直接対話し、クロスロールアップ転送を行うことも容易になります。

ここで重要なのは、アリスの転送はどちらの場合もレイヤー-2のトランザクションのみで完了したということです。
レイヤー1ホップブリッジは、個々の転送そのものではなく、転送のバッチを厳密に扱います。
これにより、何千ものロールアップからロールアップへの転送を、最小限のレイヤ1インタラクションで完了させることができます。

ホワイトペーパーまとめここまでです。長かった!

GitHubに載ってた図、わかりやすいので乗っけておく。(zennの圧縮が酷すぎる・・・。原文はきれいです)

https://github.com/hop-exchange/contracts/blob/master/assets/Hop_Transfer_Diagrams.jpg

hopが成立するための前提条件

こういう前提がないと成り立たないじゃないかな〜と個人的に思ったものを列挙します。

  • オフチェーンの処理をチャレンジする人がいる

    • hop L1 BridgeにL1からERC20を投げた時に、同額のhTokenをL2のOVMでmintしてもらう必要がある(オフチェーン)
    • とはいえここで、不正(mintしない、多くmintする)すると、異議申し立て(チャレンジ)ができるようになっている
    • 具体的なソースコードはここ https://github.com/hop-exchange/contracts/blob/8439b57c1bd4582ccb2a1bdc39c0916705e3d9b2/contracts/bridges/L1_Bridge.sol#L257
    • 実際にチャレンジが成功すると、L1ブリッジに送った総額の25%がバーンされ、残りの75%が異議申し立てをした人がもらえる
    • 第3者がチャレンジし続ける必要がある => たまにしか起こらないであろう不正の検証を誰がやるんだろう?
  • L2上で動いているAMM(Uniswap)でhTokenの価格がある程度安定している

    • リスク取って流動性供給する人おる?
    • 別ロールアップのAMMでアビトラしてくれたら安定するだろうけど、アビトラしたい人おるんかな〜
  • 各ロールアップ上のAMMでhTokenの流動性がそこそこある

    • どこかのロールアップだけである程度流動性があるとかならありそうだけど、いろんなAMMでそんなに流動性出てくるかな〜
  • L1 Hop Bridgeにデポジットされる金額が十分に大きい

    • この金額が少ないとL2->L1へのデポジットの際にもたついちゃいます
    • hTokenの価値が高くなってくるとL1ブリッジにデポジットしてhTokenを貰って儲けたいっていうアビトラのインセンティブがあるので、上手くワークするといいですね

個人的な見解

ロールアップでのL2だといろんなエコシステムが分断されちゃっているので、hopみたいなL2間をL1を介することなく送金できる仕組みはは必要なパーツだなと感じているところでした。

非常に興味深いアプローチであると思いました。
課題はシンプルなのですが、ソリューションが複雑で、複雑な仕組みを維持するための複数の前提の元に成り立っているなという感じがしました。

Fraud Proofの1週間制限に捕まりたくなくて、hTokenの方が需要が高いみたいになると個人的には面白いなと思いましたw
とはいえ、これが完成したり、L2での生活が一般的になってくるとわざわざL1に引き出すみたいな必要がないので、そこまで大きな需要にならないかもですが。

hopに関するツッコミとか

https://ethresear.ch/t/hop-send-tokens-across-rollups/8581/2

vitalik:

面白い!本当にそのhTokenいる?なんでロールアップ内でトークンを直接操作しないの?

作者回答:

Optimismのexitが7日かかるから、どうしてもそれよりも速くexitしたくてhTokenを作ったんだよ〜!

vitalik:

ロールアップの双方がスマートコントラクト機能を必要としてますよね?理想は片方だけスマートコントラクトの機能があるだけで使える方法があることだよね〜。
Loopring, zkSync等々の非EVMのロールアップでもhopできたらいいよね〜

作者回答:

おっしゃる通り、現状は双方のスマコンが必要っす〜。片方のスマコンだけで行けるようになったら最高やな〜。今後の研究とさせてもらうやで!

最後に

もしこの記事が良いなと思ったら、ツイート、いいね、RT等よろしくお願いいたします。
リサーチ活動の励みになります!

間違っている箇所やご質問等ありましたら、お気軽にコメント、リプいただければと思います。

次は、state channelを利用したマルチチェーン間の移動ができるvectorという技術についてリサーチしてみようと思うので、次の記事も気になる方は是非フォローいただければと思います。

Follow @_serinuntius

参考文献