Panduan Upgrade Kontrak Pintar Rust: Pembaruan Keamanan dan Migrasi Data Kontrak NEAR

Panduan Peningkatan Smart Contract Rust

Smart contract sebagai salah satu jenis program, tidak terhindar dari adanya cacat. Meskipun telah melalui banyak pengujian dan audit, masih mungkin terdapat celah. Jika dieksploitasi oleh penyerang, bisa mengakibatkan kerugian aset pengguna, dengan konsekuensi yang serius. Memperbaiki celah sering kali memerlukan peningkatan kontrak. Selain itu, penambahan fitur baru juga memerlukan peningkatan kontrak. Oleh karena itu, kemampuan kontrak untuk diupgrade sangatlah penting. Artikel ini akan memperkenalkan cara peningkatan kontrak Rust.

Metode Peningkatan Kontrak NEAR

Dengan mengambil proyek StatusMessage sebagai contoh, perkenalan 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 perintah near deploy untuk menyebarkan kode baru. Misalnya menambahkan fungsi baru:

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

Setelah redeploy, data dalam kontrak asli masih dapat dibaca dengan sukses.

( 2. Struktur data kontrak telah diubah

Jika struktur data asli diubah, misalnya:

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

Penyebaran ulang secara langsung akan menyebabkan kesalahan dalam deserialisasi status kontrak.

( 3. Menggunakan metode Migrate untuk meningkatkan

NEAR menyediakan metode Migrate untuk membantu upgrade kontrak. 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)(), } }

Panggil metode migrate saat melakukan penyebaran:

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

Dengan cara ini, kontrak dapat berhasil ditingkatkan dan data lama dapat dipindahkan.

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

Pertimbangan Keamanan dalam Upgrade Kontrak

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

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

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

  4. Hapus fungsi migrasi setelah migrasi selesai, pastikan hanya dipanggil sekali.

  5. Struktur data baru diinisialisasi saat migrasi.

Dengan mengikuti prinsip-prinsip di atas, Anda dapat dengan aman melakukan pembaruan dan pemeliharaan pada smart contract.

</string,></string,>

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
  • 5
  • Posting ulang
  • Bagikan
Komentar
0/400
GweiWatchervip
· 21jam yang lalu
Pemain kontrak berteriak: Naik atau tidak terserah kamu!
Lihat AsliBalas0
ContractHuntervip
· 21jam yang lalu
Aduh, saya lagi-lagi terjebak dalam masalah upgrade rust yang sudah familiar.
Lihat AsliBalas0
NFTRegrettervip
· 22jam yang lalu
Sial, harus upgrade lagi. Sangat menjengkelkan.
Lihat AsliBalas0
TokenVelocityvip
· 22jam yang lalu
Banyak celah, siapa yang berani menyentuhnya?
Lihat AsliBalas0
DuskSurfervip
· 22jam yang lalu
Kekurangan kontrak terjadi setiap hari, benar-benar membuat orang kesal.
Lihat AsliBalas0
  • Sematkan
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)