Pedoman Protokol Staking Auditing

Pedoman Protokol Staking Auditing

Waktu Baca: 6 menit

Di blog ini, kami telah menguraikan konsep protokol staking likuiditas dan pedoman audit untuk protokol staking. Pedoman tersebut mencakup berbagai titik rentan seperti mekanisme penarikan, kesalahan pembulatan, panggilan eksternal, logika biaya, loop, struct, durasi taruhan, dll. Posting blog ini akan menjadi referensi yang berguna untuk mengaudit protokol taruhan dan dapat membantu Anda mengidentifikasi potensi bug .

Apa itu Taruhan Likuiditas?

Staking likuiditas memungkinkan pengguna untuk mempertaruhkan kepemilikan cryptocurrency mereka dan mendapatkan hadiah tanpa mengorbankan likuiditas. Alih-alih mengunci koin mereka untuk jangka waktu tertentu, pengguna dapat menerima token cair yang mewakili aset yang dipertaruhkan. Token ini dapat diperdagangkan atau digunakan seperti cryptocurrency lainnya, memungkinkan pengguna untuk menggunakan aset mereka sesuka mereka sambil tetap mendapatkan hadiah staking.

Pedoman untuk Mengaudit Protokol Staking Kecerdasan Data PlatoBlockchain. Pencarian Vertikal. Ai.

Misalnya, Anda memiliki 100 ETH yang ingin Anda pertaruhkan di jaringan Ethereum. Alih-alih mengunci ETH Anda untuk jangka waktu tertentu, Anda dapat menggunakan layanan taruhan likuiditas seperti Lido untuk mempertaruhkan ETH Anda dan menerima token cair yang disebut stETH sebagai gantinya. Dengan steTH, Anda masih dapat memperdagangkan atau menggunakan ETH yang Anda pertaruhkan sambil mendapatkan hadiah taruhan.

Mari kita mulai mengaudit kontrak taruhan:

Periksa semua spesifikasi audit yang tersedia sebelum memulai dengan kode kontrak. Bisa dalam bentuk kertas putih, file README, atau yang lainnya. Ini akan memberi Anda gambaran tentang isi kode kontrak.

Saat melihat dokumen spesifikasi audit untuk kontrak staking, carilah poin-poin berikut:

  • Jenis-jenis Fee berdasarkan dan perhitungannya.
  • Mekanisme hadiah untuk token yang dipertaruhkan
  • Kekuatan pemilik
  • Akankah kontrak memegang ETH?
  • Token apa yang akan dimiliki kontrak?
  • Kontrak asli dari mana itu bercabang

Pastikan spesifikasi cocok dengan kode. Mulailah dengan fee dan tokenomik, diikuti dengan validasi otoritas pemilik. Periksa apakah semua nilai reward dan fee sudah sesuai dengan dokumentasi.

Tempat yang rentan untuk dicari?

1. Mekanisme Penarikan Hadiah:

Periksa apakah mekanisme hadiah token yang dipertaruhkan diterapkan dengan benar dan bahwa hadiah didistribusikan secara adil dan proporsional ke semua pembuat taruhan. Proyek dapat mendistribusikan hadiah dengan dua cara: baik secara otomatis, berkala, atau atas permintaan pengguna sendiri. Fungsi penarikan dapat diimplementasikan dan disesuaikan menurut logika bisnis protokol.
Di bawah ini adalah beberapa pos pemeriksaan:

  • Periksa apakah ada pengguna yang dapat menarik lebih dari hadiahnya + jumlah yang dipertaruhkan.
  • Periksa Overflow/underflow dalam perhitungan jumlah
  • Periksa apakah parameter tertentu dapat berdampak negatif pada hadiah selama perhitungan.
  • Jika block.timestamp atau block.number digunakan dalam fungsi ini. Periksa apakah itu dapat dieksploitasi dengan cara apa pun.

2. Logika Biaya:

Jika setoran dan penarikan dikenakan biaya tertentu, pastikan bahwa tidak ada satu pengguna pun yang dapat melewati biaya tersebut. Selain itu, waspadai potensi masalah overflow atau underflow. Hanya administrator atau pemilik yang berhak mengubah pengaturan biaya. Pastikan juga bahwa ambang batas untuk biaya maksimum telah ditetapkan, mencegah administrator menetapkannya pada jumlah yang terlalu tinggi.

3. Mekanisme Pencetakan/Pembakaran Token LP:

Verifikasi apakah mekanisme pencetakan dan pembakaran telah diterapkan dengan benar. Fungsi pembakaran harus membalikkan semua perubahan status yang dibuat oleh fungsi mint. Selain itu, sangat penting untuk memverifikasi bahwa pengguna menerima jumlah token yang sesuai selama taruhan pertama, saat kumpulan kosong.

Logika fungsi pencetakan dan pembakaran dapat diverifikasi secara matematis untuk mengungkap kerentanan tersembunyi. Juga, total pasokan token LP yang dicetak tidak boleh melebihi aset yang dipertaruhkan.

4. Kesalahan Pembulatan:

Meskipun kesalahan pembulatan kecil tertentu biasanya tidak dapat dihindari dan bukan masalah, kesalahan tersebut dapat tumbuh secara signifikan jika memungkinkan untuk memperbanyaknya. Cari kasus tepi di mana seseorang dapat memperoleh keuntungan dari kesalahan pembulatan dengan mempertaruhkan dan melepaskan taruhan berulang kali.

Untuk menentukan apakah kesalahan pembulatan dapat bertambah menjadi jumlah yang substansial selama periode waktu yang lama, kita dapat menghitung secara matematis kisaran kemungkinan kesalahan pembulatan.

5. Durasi Taruhan:

Pastikan perhitungan durasi taruhan dalam kontrak selaras dengan logika bisnis yang ditentukan. Verifikasi bahwa pengguna tidak dapat menukarkan hadiah sebelum durasi taruhan berakhir dengan melewati pemeriksaan durasi. Juga, Periksa apakah durasi mempertaruhkan dapat dimanfaatkan oleh penyerang untuk mendapatkan lebih banyak hadiah.

6. Panggilan Eksternal dan Penanganan Token:

Sebagian besar panggilan eksternal akan ke kontrak token. Jadi, kita harus menentukan jenis token apa yang akan ditangani oleh kontrak staking. Sangat penting untuk memeriksa panggilan eksternal untuk setiap kesalahan dan serangan reentrancy. Token deflasi atau token dengan biaya transfer, seperti Safemoon, dapat menimbulkan masalah jika logikanya tidak diterapkan dengan benar.

7. Cek Manipulasi Harga:

Manipulasi Harga melalui flash loan adalah salah satu peretasan yang paling sering terjadi pada proyek DeFi. Mungkin ada situasi di mana aktor jahat dapat menggunakan flash loan untuk memanipulasi harga selama staking atau unstaking token dalam jumlah besar. Tinjau dengan hati-hati fungsi staking dan unstaking untuk menghindari skenario edge-case yang dapat mengakibatkan serangan manipulasi harga berbasis flash loan dan hilangnya dana pengguna lain.

8. Beberapa Pemeriksaan Tambahan:

  • Loop: Jika logika kontrak melibatkan perulangan array, penting untuk memastikan bahwa batas gas blok tidak terlampaui. Ini dapat terjadi ketika ukuran larik sangat besar, jadi Anda harus menyelidiki fungsi apa yang dapat meningkatkan ukuran larik dan apakah ada pengguna yang dapat mengeksploitasinya untuk menyebabkan serangan DoS. Lihat ini melaporkan.
  • Struktur: Staking contract menggunakan tipe struct untuk menyimpan data pengguna atau kumpulan. Saat mendeklarasikan atau mengakses struct di dalam suatu fungsi, penting untuk menentukan apakah akan menggunakan "memori" atau "penyimpanan". Mungkin membantu kita menghemat bensin. Untuk informasi lebih lanjut, silakan merujuk untuk artikel ini.
  • Lari Depan: Cari skenario apa pun di mana aktor jahat dapat menjalankan transaksi apa pun untuk keuntungan mereka.
  • Pemeriksaan Visibilitas Fungsi/Kontrol Akses: Fungsi apa pun yang dideklarasikan sebagai eksternal atau publik dapat diakses oleh siapa saja. Oleh karena itu, penting untuk memastikan bahwa tidak ada fungsi publik yang dapat melakukan tindakan sensitif apa pun. Sangat penting untuk memverifikasi bahwa protokol taruhan telah menerapkan kontrol yang sesuai untuk mencegah akses tidak sah ke koin yang dipertaruhkan dan infrastruktur sistem.
  • Risiko Sentralisasi: Penting untuk tidak memberi pemilik kekuatan yang berlebihan. Jika alamat admin disusupi, hal itu dapat menyebabkan kerusakan signifikan pada protokol. Verifikasi bahwa hak istimewa pemilik atau admin sesuai dan pastikan bahwa protokol memiliki rencana untuk menangani situasi di mana kunci pribadi admin bocor.
  • Penanganan ETH / WETH: Kontrak seringkali menyertakan logika khusus untuk menangani ETH. Misalnya, ketika msg.value > 0, kontrak dapat mengonversi ETH menjadi WETH sambil tetap mengizinkan WETH untuk diterima secara langsung. Saat pengguna menentukan WETH sebagai mata uang tetapi mengirimkan ETH dengan panggilan tersebut, ini dapat merusak invarian tertentu dan menyebabkan perilaku yang salah.

Sejauh ini, kami telah membahas protokol pertaruhan likuiditas dan pedoman audit untuk protokol tersebut. Singkatnya, staking Likuiditas memungkinkan pengguna untuk mendapatkan hadiah staking tanpa mengorbankan likuiditas. Kami telah menguraikan titik-titik rentan dalam kontrak staking yang harus diperhatikan oleh auditor, seperti mekanisme penarikan, logika biaya, mekanisme pencetakan/pembakaran token LP, kesalahan pembulatan, durasi staking, panggilan eksternal, dan pemeriksaan manipulasi harga. 

Kami merekomendasikan auditor untuk memeriksa dokumen spesifikasi audit, mencocokkan spesifikasi dengan kode, dan memeriksa biaya dan validasi tokenomik. Kami juga merekomendasikan pemeriksaan tambahan seperti mengulang array, menentukan memori atau penyimpanan untuk data tipe struct, dan skenario yang berjalan di depan. Panduan ini akan berguna untuk mengaudit protokol staking dan membantu mengidentifikasi potensi bug.


11 views

Stempel Waktu:

Lebih dari Quillhash