こんにちはCryptoGames Inc.のyamapyblackです。
最近FrontierDAOというDAOを立ち上げました。フルオンチェーンゲーム作ってます。
https://medium.com/@yamapyblack/full-on-chained-game-by-frontierdao-b8e50549811d
今回はLayer2のOptimisticRollupの「Optimism」を取り上げます。
Optimismのexplorerやコントラクトを実際に見ながら、Rollupの仕組みを見ていきたいと思います。
※ざっくりLayer2に関する知識がある方を対象としています
Optimistic Ethereum Explorer
OptimismのExplorerはこちらです。
https://optimistic.etherscan.io/
パッと見た感じ、L1のEtherscanと変わらんやん、と思いかもしれませんが、結構カスタマイズされています。
「ブロックナンバーは?」
この「Ba」ってやつがブロックナンバーに見えるんですが、実は違います。クリックすると「Batch Index」であり、ブロックナンバーではないんですね。
ブロックナンバーみたいなもんじゃん?と思うかもしれませんが、間隔が一定ではありません。
画像を見ると、9分、3分、9分、3分となっており、一定ではないようです。
Optimismは決まった時間で生成されるBlockはなく、処理したトランザクションをまとめて送っているだけなので、こうなってます。
トランザクションのところをクリックすると、以下画面に飛びます。
Indexがカウントアップしてますね。シーケンサによって作られていることがわかります。
続いて、Hashのところをクリックしてみましょう。Rollup先のL1のトランザクションが見れます。
※L1のEtherscanに飛んでます。
なるほどー、L2の複数トランザクションをまとめてL1にRollupしている。それをExplorerから見ることができるんですね。
Rollup先のコントラクトは?
Rollupのトランザクションを見ればわかるのですが、「CanonicalTransactionChain」というコントラクトの「appendSequencerBatch」を実行しています。
githubはこれだと思います。
https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/rollup/CanonicalTransactionChain.sol#L276
引数はないように見えますが、calldataの中身を分解して、実際のデータは「ChainStorageContainer」に入れています。
internalトランザクション
https://etherscan.io/tx/0x2a6914c453dd775eca6b50391795db895746a38e2e5c58abc433827aa217dda8/advanced#internal
中身あまり見てないですが、txのMarkleRootと、tx数などを入れているようです。
State
ここまでトランザクションのRollupを見てきましたが、OptimisticRollupでは、txとstateをL1に書き込んでいます。Stateのほうも見てみましょう。
「StateCommitmentChain」というコントラクトのappendStateBatchを実行しています。
こちらはbyte配列でいれています。
実際のデータは「ChainStorageContainer」に入れています。txを保存しているコントラクトと同じコントラクトですが、コントラクトは2個存在し、異なるアドレスとなっています。
以下にoptimsimのコントラクトアドレス一覧があります。
チャレンジはどうなってるの?
Optimismのドキュメントを読むと、BondManagerにシーケンサのETHが担保としてプールしていて、チャレンジ成功するとそのETHがスラッシュされると記載があります。
BondManagerはこちら
https://etherscan.io/address/0xcd626E1328b41fCF24737F137BcD4CE0c32bc8d1#code
うーん、みた感じプールされてない?ですかね。。。
isCollateralizedというfunctionがあったので、シーケンサのアドレス「0x473300df21D047806A082244b417f96b32f13A33」を入れてみたところ、trueとなりました。
担保していると言い張っているようです。
ここがtrueじゃないとrollUpのtxを起こせないので、まあ当然といえば当然です。が、実際は担保していないように見えます。
Optimismが「Proofs disabled」になっているのは、こーゆーことなんでしょうかね。
まとめ
optimismがtxとstateをきちんとRollupしていることがわかりました。
explorerを見れば、L2のどのtxがL1のRollupに対応するか簡単にわかっていいですね。
ただ、チャレンジのしくみはまだ整っていないようなので、そこが早くLIVEになることが期待されます!