Tips Upgrade Smart Contract Rust: Metode Pembaruan Aman untuk Kontrak NEAR

robot
Pembuatan abstrak sedang berlangsung

Tips Upgrade Kontrak Pintar Rust

Kontrak pintar sebagai salah satu jenis kode program, tentu memiliki cacat dan celah. Meskipun telah melalui banyak pengujian dan audit, masalah keamanan masih bisa muncul. Begitu celah kontrak dieksploitasi oleh penyerang, dapat mengakibatkan kerugian aset pengguna dan konsekuensi serius lainnya. Oleh karena itu, peningkatan kontrak sangat penting untuk memperbaiki celah dan menambahkan fungsi baru. Artikel ini akan memperkenalkan metode peningkatan kontrak pintar Rust.

Metode Umum untuk Upgrade Kontrak NEAR

Sebagai contoh proyek StatusMessage, perkenalan metode peningkatan umum untuk kontrak NEAR:

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

impl Default for StatusMessage { Self { Diri { catatan: LookupMap::new(b'r'.to_vec)((, } } }

#[near_bindgen] impl StatusMessage { pub fn set_status)&mut self, message: String) { let account_id = env::signer_account_id(); self.records.insert(\u0026account_id, \u0026message); }

Option { return self.records.get(&account_id); } }

( Struktur data kontrak tidak diubah

Jika hanya menambahkan fungsi baru tanpa melibatkan perubahan struktur data, Anda dapat langsung menggunakan perintah near deploy untuk menyebarkan kode baru. Data yang ada dapat dibaca dengan normal.

) Struktur data kontrak telah diubah

Jika struktur data diubah, penyebaran ulang secara langsung akan menyebabkan ketidakcocokan antara struktur data lama dan baru, sehingga data tidak dapat dibaca dengan normal. Pada saat ini, perlu menggunakan metode Migrate untuk melakukan upgrade:

  1. Tambahkan metode migrate di kontrak baru:

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

  1. Panggil metode migrate saat penyebaran:

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

Dengan cara ini, data lama dapat dipindahkan ke struktur data baru.

Pertimbangan Keamanan Upgrade Kontrak

  1. Melaksanakan kontrol akses, hanya memperbolehkan pengembang atau DAO untuk memperbarui kontrak.

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

  3. Tambahkan #[init(ignore_state(] sebelum fungsi migrate.

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

  5. Struktur data baru diinisialisasi saat migrasi.

Dengan metode di atas, peningkatan kontrak pintar Rust dapat dilakukan dengan aman dan efisien.

![])https://img-cdn.gateio.im/webp-social/moments-af3fe22c1999da5db0e2853b8a271276.webp)</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
  • 7
  • Bagikan
Komentar
0/400
CryptoNomicsvip
· 14jam yang lalu
*sigh* biarkan saya menjelaskan menggunakan matriks probabilitas stokastik mengapa upgradeability != keamanan
Lihat AsliBalas0
HodlBelievervip
· 08-01 07:16
Risiko kontrak seberapa rendah pun tidak boleh dipertaruhkan
Lihat AsliBalas0
SnapshotLaborervip
· 08-01 07:16
Lagi-lagi mengerjakan smart contract, diam-diam melihat saldo dompet.
Lihat AsliBalas0
MEV_Whisperervip
· 08-01 07:11
Upgrade kontrak juga hanya seperti ini, ada apa yang hebat?
Lihat AsliBalas0
GateUser-beba108dvip
· 08-01 07:09
Upgrade seperti ini bisa dilakukan siapa saja!
Lihat AsliBalas0
MemeCuratorvip
· 08-01 07:07
Terlalu dekat, jadi tidak berani menulis kontrak... takut dicuri.
Lihat AsliBalas0
WalletDivorcervip
· 08-01 06:54
Rugi parah, bahkan upgrade pun tidak bisa menyelamatkanku.
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)