Peningkatan kontrak adalah bagian penting dalam pengembangan smart contract. Karena karakteristik blockchain yang tidak dapat diubah, smart contract yang telah dikerahkan di blockchain tidak dapat langsung dimodifikasi. Namun, dalam penerapan praktis, kontrak sering kali perlu memperbaiki kerentanan atau menambahkan fitur baru, yang memerlukan peningkatan untuk mencapainya. Artikel ini akan memperkenalkan metode umum untuk meningkatkan smart contract Rust.
1. Kebutuhan untuk Meningkatkan Kontrak
Smart contract sebagai kode program, tidak dapat dihindari akan ada celah. Bahkan setelah melalui banyak pengujian dan audit, masih mungkin ada masalah yang tidak terdeteksi. Setelah celah dieksploitasi secara jahat, dapat menyebabkan kerugian aset yang serius. Oleh karena itu, memiliki kemampuan untuk diperbarui sangat penting bagi smart contract, terutama digunakan untuk:
Memperbaiki kerentanan keamanan yang ditemukan
Menambahkan fitur baru
Mengoptimalkan logika kontrak, meningkatkan kinerja
2. Metode Peningkatan Kontrak NEAR
Berikut ini dengan proyek StatusMessage sebagai contoh, memperkenalkan metode peningkatan kontrak NEAR:
2.1 Struktur data kontrak tidak diubah
Jika hanya mengubah logika kontrak, tanpa melibatkan perubahan struktur data, Anda dapat langsung menggunakan perintah near deploy untuk menerapkan kode baru. Contoh:
bash
dekat deploy
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Dalam kasus ini, data dalam kontrak yang ada akan disimpan.
2.2 Struktur data kontrak telah dimodifikasi
Jika struktur data kontrak diubah, penyebaran ulang langsung akan menyebabkan kesalahan ketidakcocokan antara struktur data lama dan baru. Pada saat ini, metode migrasi perlu digunakan untuk melakukan upgrade.
Menambahkan metode migrate dalam 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)((,
}
}
Kemudian panggil metode migrate saat melakukan deploy:
Saat melakukan upgrade kontrak, perlu memperhatikan hal-hal berikut:
Mengontrol izin peningkatan dengan ketat, hanya memperbolehkan pemilik kontrak atau DAO untuk melakukan peningkatan
Disarankan untuk mengatur pemilik kontrak menjadi DAO, mengelola upgrade melalui proposal dan pemungutan suara.
Tambahkan #[init(ignore_state)] sebelum fungsi migrasi, pastikan tidak memuat status sebelum eksekusi.
Hapus fungsi migrasi setelah migrasi selesai, untuk menghindari pemanggilan ulang.
Struktur data baru diinisialisasi saat migrasi
Desain dan pelaksanaan rencana upgrade yang baik dapat memastikan kemampuan kontrak untuk diupgrade sambil memaksimalkan keamanan kontrak dan aset pengguna.
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.
Metode upgrade smart contract Rust dan pertimbangan keamanan
Diskusi Metode Peningkatan Kontrak Pintar Rust
Peningkatan kontrak adalah bagian penting dalam pengembangan smart contract. Karena karakteristik blockchain yang tidak dapat diubah, smart contract yang telah dikerahkan di blockchain tidak dapat langsung dimodifikasi. Namun, dalam penerapan praktis, kontrak sering kali perlu memperbaiki kerentanan atau menambahkan fitur baru, yang memerlukan peningkatan untuk mencapainya. Artikel ini akan memperkenalkan metode umum untuk meningkatkan smart contract Rust.
1. Kebutuhan untuk Meningkatkan Kontrak
Smart contract sebagai kode program, tidak dapat dihindari akan ada celah. Bahkan setelah melalui banyak pengujian dan audit, masih mungkin ada masalah yang tidak terdeteksi. Setelah celah dieksploitasi secara jahat, dapat menyebabkan kerugian aset yang serius. Oleh karena itu, memiliki kemampuan untuk diperbarui sangat penting bagi smart contract, terutama digunakan untuk:
2. Metode Peningkatan Kontrak NEAR
Berikut ini dengan proyek StatusMessage sebagai contoh, memperkenalkan metode peningkatan kontrak NEAR:
2.1 Struktur data kontrak tidak diubah
Jika hanya mengubah logika kontrak, tanpa melibatkan perubahan struktur data, Anda dapat langsung menggunakan perintah near deploy untuk menerapkan kode baru. Contoh:
bash dekat deploy
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Dalam kasus ini, data dalam kontrak yang ada akan disimpan.
2.2 Struktur data kontrak telah dimodifikasi
Jika struktur data kontrak diubah, penyebaran ulang langsung akan menyebabkan kesalahan ketidakcocokan antara struktur data lama dan baru. Pada saat ini, metode migrasi perlu digunakan untuk melakukan upgrade.
Menambahkan metode migrate dalam 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)((, } }
Kemudian panggil metode migrate saat melakukan deploy:
bash dekat deploy
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.testnet
Dengan cara ini, data lama dapat dipindahkan ke struktur data yang baru.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
3. Pertimbangan Keamanan untuk Upgrade Kontrak
Saat melakukan upgrade kontrak, perlu memperhatikan hal-hal berikut:
Desain dan pelaksanaan rencana upgrade yang baik dapat memastikan kemampuan kontrak untuk diupgrade sambil memaksimalkan keamanan kontrak dan aset pengguna.