• Duel sudah dibuka di Robinhood Chain
  • Luncurkan duel dua token, tiga pool, satu transaksi
  • Ronde ditutup dalam --:--:--
  • Ronde empat jam pembelian kembali pemenang dibatasi harganya
  • Likuiditas terkunci selamanya, tanpa token tim

Keamanan

Apa yang bernilai

  • ETH dan token di pool, dalam posisi yang tidak bisa ditarik siapa pun. ETH suatu sisi hanya keluar dari pool-nya saat sisi itu dijual ke dalamnya: oleh trader, atau oleh penyelarasan ulang hook setelah sebuah transaksi menjauhkan ketiga harga.
  • Pot, biaya kreator, dan biaya protokol, disimpan oleh hook sebagai klaim ETH di PoolManager Uniswap V4, dicatat terpisah untuk setiap duel.

Apa yang melindunginya

  • Likuiditas terkunci. Hanya factory yang dapat membuka pool terdaftar atau menambahkan likuiditas peluncurannya; penarikan dan donasi di-revert.
  • Penerima yang terbatas. Pot hanya membeli pemenang duelnya sendiri; biaya kreator hanya masuk ke kreator duel: dompet yang meluncurkannya atau alamat yang menerima perannya dan menyetujuinya. Biaya protokol masuk ke treasury saat ini, yang dapat diubah pemilik factory setelah 48 jam, termasuk untuk biaya protokol yang sudah terkumpul.
  • Wewenang factory yang terbatas. Token tidak punya pemilik maupun fungsi mint, dan hook tidak dapat di-upgrade atau dijeda. Pemilik factory dapat menjeda peluncuran baru, mengusulkan ketentuan terbatas untuk duel mendatang, atau mengubah treasury setelah masa tunggu. Pemilik juga dapat langsung menurunkan bagian protokol dari biaya swap semua duel, hingga nol, atau menaikkannya kembali, tidak pernah melebihi ketentuan duel: apa yang tidak diambil protokol masuk ke pot. Pemilik dapat melepaskan peran ini selamanya (renounceOwnership): ketentuan, treasury, tarif protokol, dan jeda lalu tetap seperti adanya, kecuali perubahan yang sudah diusulkan, yang masih dapat diterapkan siapa pun setelah masa tunggunya.
  • Penyelesaian sebelum swap. Swap pertama setelah penutupan menyelesaikan rata-rata yang sudah berakhir sebelum transaksi. Batas atas pembelian kembali berada sekitar 10% di atas referensi yang disimpan dengan presisi pecahan tick: rata-rata eksponensial 30 menit dari tick pool ETH, dibatasi bawah oleh tick saat ini sehingga langsung mengikuti harga saat turun.
  • Ronde hanya dalam ETH. Proporsi dan rata-rata ronde memakai kedua pool ETH. Peralihan A/B yang tidak menggerakkan harga dalam ETH mana pun tidak mengubah sinyal maupun aktivitas ronde yang sebenarnya sepi.
  • Biaya hanya untuk eksekusi penuh. Swap yang dipungut biaya di awal di-revert jika tidak dapat memenuhi jumlah yang diminta sepenuhnya. Gas jaringan terpisah.
  • Penyelarasan ulang yang terisolasi. Hanya loop yang menguntungkan yang dipertahankan, dibatasi oleh ETH di pool yang menjual. Upaya yang gagal dibatalkan dan dilewati; jika kekurangan gas, swap-lah yang di-revert (ArbitrageStarved), agar pemanggil tidak dapat melewatinya dengan menahan gas. Ini tidak menjamin kesesuaian harga atau perlindungan dari semua kerugian trading.
  • Aturan yang sama di setiap rute. Hook memungut biaya, pajak, dan pembakaran baik router-nya milik Duel maupun router V4 lain.

Factory dimulai dengan peluncuran dijeda. Selama paused() bernilai true, hanya owner() yang dapat meluncurkan duel; panggilan pihak lain dibatalkan dengan CreationPaused. Pemilik membuka peluncuran dengan setPaused(false). Duel yang sudah ada tetap diperdagangkan.

Apa yang ditampilkan situs

  • Gambar hanya dari situs. Halaman hanya menampilkan gambar duel dari alamat Duel sendiri, dan hanya gambar yang telah diproses situs: JPEG, PNG, atau WebP yang terlebih dulu dibaca dari header-nya (paling besar 1536 × 1536 piksel dan 5 MB), didekode di WebAssembly, disesuaikan agar muat dalam 1024 piksel, lalu dikodekan ulang sebagai WebP tanpa metadatanya. Kebijakan keamanan halaman tidak mengizinkan pemuatan gambar dari tempat lain.
  • Codec yang dipisahkan. Gambar didekode di Worker tersendiri, yang hanya bisa dijangkau situs dan tidak menyimpan apa pun: tanpa kunci, tanpa penyimpanan. Celah di sebuah codec hanya akan menjangkau gambar yang dibacanya. Situs memeriksa jawaban Worker itu (WebP diam dengan ukuran yang diharapkan) sebelum menyimpannya, dan decoder C dimulai dari awal untuk setiap gambar.
  • Duel yang diluncurkan langsung dari kontrak. Datanya bisa menyebut alamat apa pun. Situs tidak menampilkan gambar https; gambar IPFS diambil sekali dari gateway publik (paling besar 5 MB dan 10 detik), diproses seperti unggahan, lalu ditampilkan salinannya sendiri, atau inisial sisinya.
  • Unggahan yang dibatasi. Situs hanya menerima gambar dari halamannya sendiri: sepuluh per menit dari satu alamat, dan jumlah terbatas per hari. Gambar yang tidak disebut duel mana pun dihapus setelah sehari.

Bagaimana hal ini diperiksa

  • Pengujian otomatis mencakup perilaku kontrak, aplikasi web, dan bot peringatan. Cakupan adalah metrik pengujian, bukan bukti bahwa setiap perilaku yang mungkin aman.
  • Pengujian fork menguji integrasi dengan kontrak Uniswap V4 yang telah di-deploy di Robinhood Chain, termasuk Universal Router, Permit2, dan V4 Quoter.
  • Pengujian regresi menyimpan kasus yang ditemukan selama tinjauan internal, termasuk akuntansi biaya, kasus tepi peluncuran, penyelesaian, dan pool yang terkuras.
  • Pengujian invarian memeriksa akuntansi di sepanjang urutan acak transaksi, penyelesaian, dan klaim: klaim ETH harus sesuai dengan jumlah terutang, dan token perantara tidak boleh tertinggal di hook, factory, atau router. Lolos dari putaran yang dikonfigurasi tidak membuktikan keamanan untuk setiap urutan yang mungkin.

Tinjauan internal menemukan dan memperbaiki rute output pasti yang menghindari pajak anti-snipe, proporsi yang tidak mengikuti sisi yang dibeli sendirian, pool yang habis yang salah dibaca oleh harga referensi pembelian kembali, dan tautan tidak aman di metadata duel.

Melaporkan kerentanan

Jika Anda merasa menemukan kerentanan, terima kasih telah meluangkan waktu untuk melaporkannya. Tulislah kepada kami secara pribadi di Telegram, ke @chatwithdivine, tentang apa yang Anda temukan dan, jika bisa, cara mereproduksinya, dan beri kami waktu untuk menelitinya sebelum membagikan apa pun secara publik. Kami akan menjawab dengan cepat dan terus mengabari Anda.

Kami tidak pernah menghubungi lebih dulu: hanya percayai @chatwithdivine.