Praktik Terbaik Peningkatan Kontrak Pintar Rust: Belajar dari Kasus Kontrak NEAR

Panduan Upgrade Kontrak Pintar Rust

Kontrak pintar sebagai salah satu jenis program, tidak mungkin tidak memiliki cacat. Bahkan setelah melalui banyak pengujian dan audit, masih mungkin ada celah. Begitu dimanfaatkan oleh penyerang, dapat menyebabkan kerugian aset pengguna, dengan konsekuensi yang serius. Oleh karena itu, kemampuan untuk meng-upgrade kontrak sangat diperlukan, terutama untuk memperbaiki celah dan menambahkan fitur baru. Artikel ini akan memperkenalkan cara upgrade kontrak Rust.

Metode Upgrade Kontrak NEAR

Mengambil proyek StatusMessage sebagai contoh, memperkenalkan metode umum untuk meningkatkan kontrak NEAR.

1. Struktur data kontrak tidak diubah

Jika hanya mengubah logika kontrak tanpa melibatkan perubahan struktur data, Anda dapat langsung menggunakan near deploy untuk menerapkan kode baru:

bash dekat deploy \ --accountId status_message.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm

Data kontrak yang ada dapat dibaca dengan normal.

2. Modifikasi Struktur Data Kontrak

Jika struktur data kontrak dimodifikasi, penyebaran ulang secara langsung akan menyebabkan kegagalan deserialisasi status. Pada saat ini, perlu menggunakan metode migrate untuk melakukan upgrade:

karat #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); Diri { new_field: LookupMap::new(b"n".to_vec)((, old_field: old_state.old_field, } }

Panggil metode migrate saat penyebaran:

bash
dekat deploy
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId status_message.example.testnet

Dengan cara ini, status lama dapat dipindahkan ke kontrak baru.

![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)

Saran Keamanan untuk Peningkatan Kontrak

  1. Fungsi upgrade menambahkan kontrol akses, hanya memperbolehkan pemilik untuk memanggil
  2. Mengatur owner menjadi DAO, dikelola melalui proposal dan pemungutan suara
  3. Tambahkan fungsi migrasi #[init(ignore_state)]
  4. Hapus fungsi migrasi setelah migrasi selesai
  5. Struktur data baru diinisialisasi saat migrasi

Peningkatan yang wajar dapat menjaga keamanan dan skalabilitas kontrak, yang merupakan bagian penting dalam pengembangan smart contract.

Lihat Asli
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Hadiah
  • 3
  • Bagikan
Komentar
0/400
PumpBeforeRugvip
· 13jam yang lalu
Jika tidak dapat mencegah kerentanan dasar, untuk apa bermain lari telanjang?
Lihat AsliBalas0
DegenWhisperervip
· 13jam yang lalu
Tidak salah lagi, rust memang luar biasa
Lihat AsliBalas0
WalletWhisperervip
· 13jam yang lalu
Ada lubang baru lagi, sepertinya menarik
Lihat AsliBalas0
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)