Lanjut ke konten utama

Daftar periksa integrasi token

soliditykontrak pintarkeamanantoken
Tingkat menengah
Trailofbits
Membuat kontrak yang aman(opens in a new tab)
13 Agustus 2020
4 bacaan singkat minute read

Ikuti daftar periksa ini ketika berinteraksi dengan token arbitrari. Pastikan Anda mengerti risiko yang terkait dengan setiap item, dan buat justifikasi terhadap pengecualian apa pun untuk aturan ini.

Untuk kenyamanan, semua utilitas(opens in a new tab) Slither dapat di jalankan langsung pada alamat token, seperti:

Tutorial Menggunakan Slither

slither-check-erc 0xdac17f958d2ee523a2206206994597c13d831ec7 TetherToken

Untuk mengikuti daftar periksa ini, Anda mungkin ingin memiliki output ini dari Slither untuk token:

- slither-check-erc [target] [contractName] [optional: --erc ERC_NUMBER]
- slither [target] --print human-summary
- slither [target] --print contract-summary
- slither-prop . --contract ContractName # memerlukan konfigurasi, dan menggunakan Echidna dan Manticore

Pertimbangan umum

  • Kontrak memiliki ulasan keamanan. Hindari berinteraksi dengan kontrak yang ulasan keamanannya kurang. Lihat durasi penilaiannya (alias "level upaya"), reputasi dari lembaga keamanan, dan jumlah serta keparahan temuannya.
  • Anda telah menghubungi pengembang. Anda mungkin perlu mengingatkan tim mereka akan suatu insiden. Cari kontak yang sesuai di blockchain-security-contacts(opens in a new tab).
  • Mereka memiliki milis keamanan untuk pengumuman penting. Tim mereka harus menasihati penggunan (seperti Anda!) saat masalah genting ditemukan atau saat peningkatan terjadi.

Kesesuaian dengan ERC

Slither memasukkan utilitas, slither-check-erc(opens in a new tab), yang mengulas kesesuaian token dengan banyak standar ERC terkait. Gunakan slither-check-erc untuk mengulas bahwa:

  • Transfer dan transferFrom mengembalikan boolean. Beberapa token tidak mengembalikan boolean pada fungsi ini. Akibatnya, pemanggilan mereka dalam kontrak mungkin gagal.
  • Fungsi nama, desimal, dan simbol ada jika digunakan. Fungsi ini bersifat opsional dalam standar ERC20 dan mungkin tidak ada.
  • Desimal mengembalikan uint8. Beberapa token secara tidak benar mengembalikan uint256. Jika ini terjadi, pastikan nilai yang dikembalikan di bawah 255.
  • Token memitigasi kondisi pacu ERC20(opens in a new tab) yang diketahui. Standar ERC20 memiliki kondisi pacu ERC20 yang diketahui yang harus dimitigasi untuk mencegah penyerang mencuri token.
  • Token bukan token ERC777 dan tidak memiliki pemanggilan fungsi eksternal dalam transfer dan transferFrom. Pemanggilan eksternal dalam fungsi transfer bisa menyebabkan reentancy.

Slither memasukkan utilitas, slither-prop(opens in a new tab), yang membuat tes unit dan properti keamanan yang bisa menemukan banyak kelemahan ERC umum. Gunakan slither-prop untuk mengulas bahwa:

Akhirnya, ada beberapa karakteristik yang sulit dikenali secara otomatis. Ulas kondisi ini secara manual:

  • Transfer dan transferFrom tidak boleh memungut biaya. Token deflasi bisa menyebabkan perilaku tak terduga.
  • Potensi bunga yang diperoleh dari token diperhitungkan. Beberapa token mendistribusikan bunga ke pemegang token. Bunga ini mungkin terjebak dalam kontrak jika tidak diperhitungkan.

Komposisi kontrak

  • Kontrak menghindari kerumitan yang tidak diperlukan. Token seharusnya adalah kontrak sederhana; token dengan kode kompleks memerlukan standar yang lebih tinggi untuk diulas. Gunakan printer ringkasan manusia(opens in a new tab) Slither untuk mengidentifikasi kode yang rumit.
  • Kontrak menggunakan SafeMath. Kontrak yang tidak menggunakan SafeMath memerlukan standar yang lebih tinggi untuk diulas. Periksa kontrak secara manual untuk penggunaan SafeMath.
  • Kontrak hanya memiliki beberapa fungsi yang tidak terkait token. Fungsi yang tidak terkait token meningkatkan kemungkinan timbulnya masalah dalam kontrak. Gunakan printer ringkasan kontrak(opens in a new tab) Slither untuk mengulas secara luas kode yang digunakan dalam kontrak.
  • Token hanya memiliki satu alamat. Token dengan beberapa titik masuk untuk pembaharuan saldo bisa merusak pembukuan internal yang didasarkan pada alamat (contohnya, balances[token_address][msg.sender] mungkin tidak mencerminkan saldo sebenarnya).

Hak istimewa pemilik

  • Token tidak dapat ditingkatkan. Kontrak yang dapat ditingkatkan bisa mengubah aturannya seiring dengan waktu. Gunakan printer ringkasan manusia(opens in a new tab) Slither untuk menentukan apakah kontrak dapat ditingkatkan.
  • Pemilik memiliki kemampuan pencetakan terbatas. Pemilik yang jahat atau membahayakan bisa menyalahgunakan kemampuan pencetakan. Gunakan printer ringkasan manusia(opens in a new tab) Slither untuk mengulas kemampuan pencetakan, dan pertimbangkan meninjau kodenya secara manual.
  • Token tidak bisa dijeda. Pemilik yang jahat atau membahayakan bisa memerangkap kontrak yang mengandalkan token yang dapat dijeda. Kenali kode yang dapat dijeda secara manual.
  • Pemilik tidak dapat membuat kontrak masuk dalam daftar hitam. Pemilik yang jahat atau membahayakan bisa memerangkap kontrak yang mengandalkan token dengan daftar hitam. Kenali fitur pembuatan daftar hitam secara manual.
  • Tim di belakang token dikenal dan bisa dimintai pertanggungjawaban untuk penyalahgunaan. Kontrak dengan tim pengembangan anonim, atau yang tinggal di tempat perlindungan hukum memerlukan peninjauan dengan standar yang lebih tinggi.

Kelangkaan token

Ulasan untuk masalah kelangkaan token memerlukan ulasan manual. Periksalah untuk menemukan kondisi ini:

  • Tidak ada pengguna yang memiliki sebagian besar pasokan. Jika beberapa pengguna memiliki sebagian besar token, mereka bisa memengaruhi operasi yang didasarkan pada partisi ulang token.
  • Total pasokannya cukup. Token dengan total pasokan yang rendah bisa dengan mudah dimanipulasi.
  • Token berada di beberapa bursa. Jika semua token berada di satu bursa, menyusupi bursa bisa membahayakan kontrak yang mengandalkan token.
  • Pengguna memahami risiko terkait dengan dana yang besar atau pinjaman cepat. Kontrak yang mengandalkan saldo token harus mempertimbangkan penyerang dengan dana besar atau serangan lewat pinjaman cepat dengan hati-hati.
  • Token tidak mengizinkan pencetakan cepat. Pencetakan cepat bisa menyebabkan ayunan substansial pada saldo dan pasokan total, yang mengharuskan pemeriksaan overflow yang ketat dan menyeluruh dalam operasi tokennya.

Terakhir diedit: @yeremiaryangunadi(opens in a new tab), 15 Agustus 2023

Apakah tutorial ini membantu?