前回のNFT記事ぶりにブロックチェーンネタです。EthereumとPolygonのブリッジについての話です。理論的な話というより、実務的にどう動いているのかを中心にまとめました。
ブリッジとは
ブリッジとは、チェーン間のトークン移動を橋渡しする存在です。今回取り上げるPolygon公式ブリッジについて、理論的な話は以下を参照ください。
基本的な考え方として、
- L1,L2にブリッジコントラクトが存在しており、L1,L2それぞれのコントラクトをtokenmapperというマッピングに登録する
- 「おじさん」と呼ばれる、どこかSPOFになりうるところを信頼してL1のコントラクトの移動を検知してL2に移動させる。このとき、tokenmapperを参照する。トラストレスは存在せず、おじさんがコントラクトをみて、L2/L1への引換券をくれる。
おじさんの元ネタはこちらです。チェーン間のトークン移動のため、トラストレスなブリッジを実現しようとみんな頑張っています。しかしながら、完全なトラストレスは難しく、何らかトラストする対象を挟むことで解決しています。これを「おじさん」とごく少数の人間の間では呼んでいます。
昨夜 @hereisyourbtg が言ってた、大体のBridgeはおじさんが現物を預かって引換券をくれるという話が凄く皆の腑に落ちたんだよね。あのセンスは流石と言わざるを得ない。
— shingen.eth (@shingen_crypto) February 16, 2021
そして私の脳裏にはこの人の良さそうなおじさんの顔が思い浮かぶのだった pic.twitter.com/gA66tsCfhZ
※ Polygon公式ブリッジでは完全な一存ではなく、トラストレスらしくするためのチェックポイントを設けていますが、便宜上おじさんと呼びます。
EthereumからPolygonへのブリッジ方法
- EthereumにERC20をデプロイ
- L2のERC20は、deposit, withdrawと呼ばれるものを実装してデプロイする必要があります。これはChildERC20という公式の実装がある。
ChildERC20
- Ethereum,Polygonへそれぞれデプロイが済んだら、tokenmapperを使ってマッピングを登録する。登録後数日まつと反映される。
参考
Bridging ERC-20 from Ethereum to Polygon PoS | Chainstack documentation
Ethereum↔Polygonで公式ブリッジを使ったトークン移動のフロー
具体的なトークン移動のフローを見てみましょう。登場人物は以下です。
Ethereum
- PolygonBridgeContract
- Proxy:0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf
- ImplementContract:0x608669d4914Eec1E20408Bc4c9eFFf27BB8cBdE5 (執筆時点)
Polygon
- ChildChainContract 0xD9c7C4ED4B66858301D0cb28Cc88bf655Fe34861
オフチェーン
- token mapper
- おじさん
EthereumからPolygonにERC20を送る場合
以下のようになります。EOAはPolygonBridgeContractに対してdepositFor(預金) functionを叩きます。 PolygonBridgeContractは預けたいEthereumのERC20をPolygonBridgeContractに送って預託(lock)します。
オフチェーンのおじさんはこのdepositForのイベントを監視し、Polygon側のChildChainContractにdepositTokens Functionを投げ、Polygon側のERC20トークンコントラクトにdeposit functionを叩きにいきます。 このEthereumのERC20コントラクトとPolygonのERC20コントラクトを紐づけるためにおじさんが参照するものがtokenmapperです。故に、tokenmapperに登録されてから出ないとこれらのブリッジは動きません。 tokenmapperへの登録はPolygonチームへの申請式です。
depositは実質mintであり、Polygon側でトークンを新たに生み出します。
PolygonからEthereumに送る場合
PolygonからEthereumに送る場合は上記の逆です。Polygon側でwithdraw関数を行うとburnされ、Ethereum側でロックされているトークンが払い戻されます。
L1のEthereumで預けられたらL2のPolygonで生み出し、L2のPolygonから引き出されたら、L2でバーンしてL1で戻す。まさに引換券ですね。 上記の処理のために、ChildERC20Contractではdeposit/withdrawを実装する必要があります。
まとめ
ブリッジについて少し動きが分かったでしょうか。L2チェーンが勃興しており、ChildERC20など、手順を整備しているPolygonのように他チェーンでもブリッジのための手順が整備されていくかと思います。チェーンごとにブリッジ要件があり、Polygonの要件と限らないのでブリッジしたいチェーンはよくよく調べることになるでしょう。