Smart contract pada dasarnya adalah program, pasti akan ada kekurangan. Bahkan smart contract yang telah melalui banyak pengujian dan audit, masih mungkin memiliki celah. Setelah dieksploitasi oleh penyerang, dapat menyebabkan kerugian aset pengguna, dengan konsekuensi yang serius. Oleh karena itu, kemampuan untuk memperbarui kontrak sangat penting. Artikel ini akan memperkenalkan cara untuk memperbarui kontrak Rust.
Kebutuhan untuk Meningkatkan Kontrak
Perbaikan kerentanan dan penambahan fitur baru pada smart contract seringkali perlu dilakukan melalui peningkatan kontrak. Alasan utamanya adalah:
Memperbaiki celah keamanan
Menambahkan fitur baru
Mengoptimalkan kinerja kontrak
Menyesuaikan dengan kebutuhan bisnis baru
Metode Upgrade Kontrak NEAR
Menggunakan proyek StatusMessage sebagai contoh, memperkenalkan metode umum untuk memperbarui 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. Data yang ada masih dapat diakses dengan normal.
2. Struktur data kontrak telah dimodifikasi
Jika struktur data kontrak diubah, penyebaran ulang secara langsung akan menyebabkan struktur data baru tidak dapat dicocokkan dengan status lama, mengakibatkan kesalahan deserialisasi.
3. Menggunakan metode Migrate untuk memperbarui
NEAR menyediakan metode Migrate untuk membantu peningkatan kontrak. Tambahkan metode migrate di kontrak baru:
karat
#[private]
#[init(ignore_state)]
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 penyebaran:
dekat deploy
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet
Dengan cara ini, data lama dapat berhasil dipindahkan ke dalam struktur kontrak yang baru.
Kontrol akses - Hanya mengizinkan pengembang atau DAO untuk memperbarui kontrak
Disarankan untuk mengatur pemilik kontrak sebagai DAO, melalui proposal dan pemungutan suara untuk mengelola.
Fungsi migrasi menggunakan #[init(ignore_state)]
Hapus fungsi migrasi setelah migrasi selesai
Struktur data baru diinisialisasi saat migrasi
Pembaruan kontrak adalah proses yang kompleks, perlu memperhatikan setiap detail dengan hati-hati, untuk memastikan keamanan data dan kelangsungan bisnis.
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.
13 Suka
Hadiah
13
4
Bagikan
Komentar
0/400
Anon4461
· 07-14 08:32
Siapa yang bisa menahan ini~
Lihat AsliBalas0
rekt_but_not_broke
· 07-14 08:22
Apakah near juga telah diperbarui?
Lihat AsliBalas0
LightningPacketLoss
· 07-14 08:20
Setelah dua tahun menggunakan Rust, saya beralih ke Web3.
Lihat AsliBalas0
MidnightMEVeater
· 07-14 08:18
Mesin pemenggal pun tidak berani memainkannya seperti ini, apakah pengembang akan kembali?
Penjelasan Upgrade Kontrak Pintar Rust: Panduan Pembaruan Keamanan Platform NEAR
Penjelasan Metode Upgrade Smart Contract Rust
Smart contract pada dasarnya adalah program, pasti akan ada kekurangan. Bahkan smart contract yang telah melalui banyak pengujian dan audit, masih mungkin memiliki celah. Setelah dieksploitasi oleh penyerang, dapat menyebabkan kerugian aset pengguna, dengan konsekuensi yang serius. Oleh karena itu, kemampuan untuk memperbarui kontrak sangat penting. Artikel ini akan memperkenalkan cara untuk memperbarui kontrak Rust.
Kebutuhan untuk Meningkatkan Kontrak
Perbaikan kerentanan dan penambahan fitur baru pada smart contract seringkali perlu dilakukan melalui peningkatan kontrak. Alasan utamanya adalah:
Metode Upgrade Kontrak NEAR
Menggunakan proyek StatusMessage sebagai contoh, memperkenalkan metode umum untuk memperbarui 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. Data yang ada masih dapat diakses dengan normal.
2. Struktur data kontrak telah dimodifikasi
Jika struktur data kontrak diubah, penyebaran ulang secara langsung akan menyebabkan struktur data baru tidak dapat dicocokkan dengan status lama, mengakibatkan kesalahan deserialisasi.
3. Menggunakan metode Migrate untuk memperbarui
NEAR menyediakan metode Migrate untuk membantu peningkatan kontrak. Tambahkan metode migrate di kontrak baru:
karat #[private] #[init(ignore_state)] 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 penyebaran:
dekat deploy
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet
Dengan cara ini, data lama dapat berhasil dipindahkan ke dalam struktur kontrak yang baru.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Pertimbangan Keamanan dalam Peningkatan Kontrak
Kontrol akses - Hanya mengizinkan pengembang atau DAO untuk memperbarui kontrak
Disarankan untuk mengatur pemilik kontrak sebagai DAO, melalui proposal dan pemungutan suara untuk mengelola.
Fungsi migrasi menggunakan #[init(ignore_state)]
Hapus fungsi migrasi setelah migrasi selesai
Struktur data baru diinisialisasi saat migrasi
Pembaruan kontrak adalah proses yang kompleks, perlu memperhatikan setiap detail dengan hati-hati, untuk memastikan keamanan data dan kelangsungan bisnis.