Smart contract pada dasarnya adalah program, yang tidak dapat dihindari memiliki cacat. Meskipun telah melalui banyak pengujian dan audit, masih mungkin ada celah. Celah dalam kontrak yang diserang dapat menyebabkan kerugian aset pengguna, dengan konsekuensi yang serius. Memperbaiki celah dan menambahkan fitur baru memerlukan peningkatan kontrak. Oleh karena itu, kemampuan kontrak untuk ditingkatkan sangat diperlukan. Artikel ini akan memperkenalkan cara peningkatan kontrak Rust.
Metode Peningkatan Kontrak NEAR
Sebagai contoh proyek StatusMessage, memperkenalkan 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 near deploy untuk mendistribusikan kode baru. Data dalam kontrak asli dapat dibaca dengan normal.
2. Struktur data kontrak telah diubah
Jika struktur data kontrak diubah, melakukan redeployment langsung akan menyebabkan ketidakcocokan antara struktur data baru dan lama, sehingga data yang ada tidak dapat dibaca.
3. Menggunakan Migrate untuk memperbarui kontrak
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 redeploy:
dekat menerapkan
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}'
--accountId statusmessage.blocksec_upgrade.testnet
Dengan cara ini, data kontrak lama dapat berhasil dipindahkan ke kontrak baru.
Fungsi upgrade harus merupakan fungsi hanya pemilik, memastikan hanya pemilik yang dapat memanggilnya.
Disarankan untuk mengatur pemilik kontrak sebagai DAO, untuk mengelola bersama melalui proposal dan pemungutan suara.
Tambahkan #[init(ignore_state)] sebelum fungsi migrasi
Hapus fungsi migrasi setelah migrasi selesai
Struktur data baru diinisialisasi saat migrasi
Peningkatan kontrak adalah cara penting untuk menjaga keamanan kontrak, pengembang perlu menangani dengan hati-hati, memastikan keamanan proses peningkatan.
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.
9 Suka
Hadiah
9
2
Posting ulang
Bagikan
Komentar
0/400
SandwichVictim
· 08-13 22:24
Banyak celah membuatku merasa panik.
Lihat AsliBalas0
BlockImposter
· 08-13 22:24
Naik atau tidak, tidak ada yang bisa keluar dari lubang~
Panduan Lengkap Upgrade Smart Contract Rust: Dari NEAR hingga Pertimbangan Keamanan
Praktik Upgrade Smart Contract Rust
Smart contract pada dasarnya adalah program, yang tidak dapat dihindari memiliki cacat. Meskipun telah melalui banyak pengujian dan audit, masih mungkin ada celah. Celah dalam kontrak yang diserang dapat menyebabkan kerugian aset pengguna, dengan konsekuensi yang serius. Memperbaiki celah dan menambahkan fitur baru memerlukan peningkatan kontrak. Oleh karena itu, kemampuan kontrak untuk ditingkatkan sangat diperlukan. Artikel ini akan memperkenalkan cara peningkatan kontrak Rust.
Metode Peningkatan Kontrak NEAR
Sebagai contoh proyek StatusMessage, memperkenalkan 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 near deploy untuk mendistribusikan kode baru. Data dalam kontrak asli dapat dibaca dengan normal.
2. Struktur data kontrak telah diubah
Jika struktur data kontrak diubah, melakukan redeployment langsung akan menyebabkan ketidakcocokan antara struktur data baru dan lama, sehingga data yang ada tidak dapat dibaca.
3. Menggunakan Migrate untuk memperbarui kontrak
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 redeploy:
dekat menerapkan
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}'
--accountId statusmessage.blocksec_upgrade.testnet
Dengan cara ini, data kontrak lama dapat berhasil dipindahkan ke kontrak baru.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Pertimbangan Keamanan dalam Upgrade Kontrak
Fungsi upgrade harus merupakan fungsi hanya pemilik, memastikan hanya pemilik yang dapat memanggilnya.
Disarankan untuk mengatur pemilik kontrak sebagai DAO, untuk mengelola bersama melalui proposal dan pemungutan suara.
Tambahkan #[init(ignore_state)] sebelum fungsi migrasi
Hapus fungsi migrasi setelah migrasi selesai
Struktur data baru diinisialisasi saat migrasi
Peningkatan kontrak adalah cara penting untuk menjaga keamanan kontrak, pengembang perlu menangani dengan hati-hati, memastikan keamanan proses peningkatan.