oasysgames / oasys-opstack

Layer 2, named Verse, built on top of the Oasys gaming blockchain utilizes Opstack.
MIT License
0 stars 1 forks source link

Note about Discussion of instant verify security #118

Closed tak1827 closed 6 months ago

tak1827 commented 6 months ago

Discordで議論の起点となった投稿 https://discord.com/channels/892295154025783346/1036448707605975101/1184497842769899670

以下、Discordでの議論を抜粋

イメージとしては、監視&警報システムです。
FraudなProve(withdrawなしの)を検知したら、verse submitterに警告してあげる形です。

すいません、今検討していて気付いたのですがverify済みの_l2OutputIndexを指定した不正prove txを送ればこのチェックを迂回できてしまいますね

provenWithdrawal.timestampにはロールアップ時点のL1タイムスタンプではなくprove実行時点のタイムスタンプが入るので_isFinalizationPeriodElapsedでチェックしても必ずfalseになります(withdraw -> rollup -> prove の順なので)

1, L2でWithdraw実行 (timestamp = 400)
2. (最大で)10分待ってproposerがロールアップ (output.timestaimp = 1000)
3-1. Prove実行 (prove.timestaimp = 1010)
3-2. InstantVerify実行 (verified timestamp = 1000)
4. 10分待ってproposerがロールアップ (output.timestaimp = 1600)
5. InstantVerify実行 (verified timestamp = 1600)
5. Finalize実行

**proveかstateロールアップのどちらを起点にすべきか?**
proveを起点にすべきと思ってます。optimismの流儀に従うという意味で。つまり、fraudなproofへの対応です。
stateの方を起点にしてしまうと、以前、議論したとおり、fraudなproveに対して脆弱です。
https://discord.com/channels/892295154025783346/1036448707605975101/1189415801690783815
proveを起点にすれば、以前議論したような、監視用のシステムなりを導入することで、対処する余地があります。
proveに対応するwithdrawが本当にL2に存在するかはmessage-relayerがチェックすれば良いのでは、みたいな案も出ていた気がします