Panduan Upgrade Smart Contract Rust: Penjelasan Metode Pembaruan Keamanan Platform NEAR

robot
Pembuatan abstrak sedang berlangsung

Panduan Upgrade Kontrak Pintar Rust

Smart contract sebagai salah satu jenis program, tidak dapat dihindari akan memiliki cacat dan celah. Meskipun telah melalui banyak pengujian dan audit, tetap saja mungkin ada masalah yang belum terdeteksi. Begitu celah kontrak dimanfaatkan oleh penyerang, dapat menyebabkan kerugian aset pengguna, yang berakibat serius. Oleh karena itu, kemampuan untuk meng-upgrade kontrak sangat penting, baik untuk memperbaiki celah maupun untuk menambahkan fitur baru. Artikel ini akan memperkenalkan metode upgrade kontrak Rust di platform NEAR.

Metode Pembaruan Kontrak NEAR

Sebagai contoh proyek StatusMessage, perkenalan metode upgrade umum untuk kontrak NEAR.

1. Struktur data kontrak tidak diubah

Jika hanya mengubah logika kontrak, tanpa melibatkan perubahan struktur data, Anda dapat langsung menggunakan perintah near deploy untuk mendepoloy kode baru. Misalnya, kita menambahkan sebuah fungsi baru pada kontrak asli:

karat #[near_bindgen] impl StatusMessage { Option { let account_id = env::signer_account_id(); self.records.insert(&account_id, &message); return self.records.get(&account_id); } }

Setelah dikompilasi, Anda dapat menggunakan near deploy untuk menyebarkan kembali. Data dalam kontrak asli masih dapat dibaca dengan normal.

( 2. Struktur data kontrak telah dimodifikasi

Jika struktur data kontrak diubah, redeploy langsung akan menyebabkan kegagalan deserialisasi status. Misalnya, kita mengubah struktur kontrak sebagai berikut:

karat #[near_bindgen] #[derive)BorshDeserialize, BorshSerialize###] pub struct StatusMessage { taglines: LookupMap<string, string="">, bios: LookupMap<string, string="">, }

Dalam kasus ini, perlu menggunakan metode Migrate untuk melakukan upgrade. Tambahkan metode migrate di kontrak baru:

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

Kemudian panggil metode migrate saat penyebaran:

dekat menerapkan
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet

Dengan cara ini, Anda dapat berhasil memperbarui kontrak dan memigrasi data lama.

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

Pertimbangan Keamanan dalam Peningkatan Kontrak

  1. Kontrol Akses: Fungsi upgrade harus diatur sebagai fungsi only owner, memastikan hanya dapat dipanggil oleh owner.

  2. Disarankan untuk mengatur pemilik kontrak sebagai DAO, melalui proposal dan pemungutan suara untuk mengelola kontrak.

  3. Tambahkan #[init)ignore_state)] sebelum fungsi migrasi, pastikan tidak memuat status sebelum eksekusi.

  4. Setelah migrasi selesai, hapus fungsi migrasi, pastikan hanya dipanggil sekali.

  5. Struktur data baru diinisialisasi saat migrasi.

Pembaruan kontrak adalah proses yang kompleks dan perlu ditangani dengan hati-hati. Melalui desain yang tepat dan pengujian yang ketat, pembaruan kontrak yang aman dan andal dapat dicapai.

</string,></string,>

NEAR-1.91%
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • 2
  • Bagikan
Komentar
0/400
WalletDetectivevip
· 22jam yang lalu
Wah, ini cukup keras ya.
Lihat AsliBalas0
MetaverseVagrantvip
· 22jam yang lalu
Sekali lagi terlibat dalam smart contract.
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)