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:
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:
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)(),
}
}
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.
12 Suka
Hadiah
12
8
Bagikan
Komentar
0/400
GamefiEscapeArtist
· 2jam yang lalu
Ini adalah masalah lama tentang peningkatan kontrak, yang paham pasti mengerti.
Tips Upgrade Smart Contract Rust: Metode Pembaruan Aman untuk Kontrak NEAR
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:
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)(), } }
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
Melaksanakan kontrol akses, hanya memperbolehkan pengembang atau DAO untuk memperbarui kontrak.
Disarankan untuk mengatur pemilik kontrak sebagai DAO, untuk mengelola secara bersama melalui proposal dan pemungutan suara.
Tambahkan #[init(ignore_state(] sebelum fungsi migrate.
Hapus fungsi migrate setelah migrasi selesai, pastikan hanya dipanggil sekali.
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,>