Buku Harian Pengembangan Kontrak Pintar Rust (9): Peningkatan Kontrak
Kontrak pintar pada dasarnya adalah program, yang tidak dapat dihindari memiliki cacat. Bahkan setelah melalui banyak pengujian dan audit, masih mungkin ada celah. Begitu dieksploitasi oleh penyerang, dapat menyebabkan kerugian aset pengguna, dan konsekuensinya bisa sangat serius. Oleh karena itu, kemampuan untuk memperbarui kontrak sangat diperlukan, artikel ini akan memperkenalkan cara untuk memperbarui kontrak Rust.
1. Kebutuhan untuk Mengupgrade Kontrak
Smart contract sebagai program, tidak dapat dihindari memiliki kekurangan. Perbaikan bug dan penambahan fitur baru harus dilakukan melalui peningkatan kontrak.
2. Cara Umum untuk Meningkatkan Kontrak Solidity
Kontrak pintar Ethereum memiliki sifat tidak dapat diubah, setelah diterapkan tidak dapat diubah. Solusinya adalah menerapkan kontrak baru, tetapi akan menghadapi tantangan seperti perubahan alamat dan migrasi status. Biasanya menggunakan arsitektur kontrak proksi yang memisahkan data dan logika, hanya meningkatkan kontrak logika tanpa perlu khawatir tentang migrasi status.
3. Metode Peningkatan Kontrak NEAR
Sebagai contoh proyek StatusMessage, perkenalan metode upgrade kontrak NEAR:
3.1 Struktur data kontrak tidak diubah
Jika hanya mengubah logika kontrak, tanpa melibatkan perubahan struktur data, Anda dapat langsung menggunakan near deploy untuk mendepoy kode baru. Data yang ada masih dapat dibaca dengan normal.
3.2 Struktur data kontrak telah diubah
Jika struktur data diubah, penyebaran ulang secara langsung akan menyebabkan ketidakcocokan antara struktur data lama dan baru, sehingga tidak dapat membaca data yang ada.
3.3 Menggunakan metode Migrate untuk upgrade
NEAR menyediakan metode Migrate untuk membantu upgrade 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)((,
}
}
Cukup panggil metode migrate saat pengembangan untuk menyelesaikan migrasi data.
4. Pertimbangan keamanan dalam peningkatan kontrak
Peningkatan kontrol hak, biasanya hanya dapat dilakukan oleh pengembang atau DAO
Disarankan untuk menetapkan pemilik kontrak sebagai DAO, 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 memastikan keamanan kontrak dan iterasi fungsional, yang memerlukan desain dan pelaksanaan yang hati-hati.
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.
10 Suka
Hadiah
10
4
Bagikan
Komentar
0/400
SandwichTrader
· 19jam yang lalu
Terus menyalin pekerjaan rumah? Kontrak sudah diganti dan mulai lagi.
Pembaruan kontrak pintar Rust: memastikan keamanan dan skalabilitas
Buku Harian Pengembangan Kontrak Pintar Rust (9): Peningkatan Kontrak
Kontrak pintar pada dasarnya adalah program, yang tidak dapat dihindari memiliki cacat. Bahkan setelah melalui banyak pengujian dan audit, masih mungkin ada celah. Begitu dieksploitasi oleh penyerang, dapat menyebabkan kerugian aset pengguna, dan konsekuensinya bisa sangat serius. Oleh karena itu, kemampuan untuk memperbarui kontrak sangat diperlukan, artikel ini akan memperkenalkan cara untuk memperbarui kontrak Rust.
1. Kebutuhan untuk Mengupgrade Kontrak
Smart contract sebagai program, tidak dapat dihindari memiliki kekurangan. Perbaikan bug dan penambahan fitur baru harus dilakukan melalui peningkatan kontrak.
2. Cara Umum untuk Meningkatkan Kontrak Solidity
Kontrak pintar Ethereum memiliki sifat tidak dapat diubah, setelah diterapkan tidak dapat diubah. Solusinya adalah menerapkan kontrak baru, tetapi akan menghadapi tantangan seperti perubahan alamat dan migrasi status. Biasanya menggunakan arsitektur kontrak proksi yang memisahkan data dan logika, hanya meningkatkan kontrak logika tanpa perlu khawatir tentang migrasi status.
3. Metode Peningkatan Kontrak NEAR
Sebagai contoh proyek StatusMessage, perkenalan metode upgrade kontrak NEAR:
3.1 Struktur data kontrak tidak diubah
Jika hanya mengubah logika kontrak, tanpa melibatkan perubahan struktur data, Anda dapat langsung menggunakan near deploy untuk mendepoy kode baru. Data yang ada masih dapat dibaca dengan normal.
3.2 Struktur data kontrak telah diubah
Jika struktur data diubah, penyebaran ulang secara langsung akan menyebabkan ketidakcocokan antara struktur data lama dan baru, sehingga tidak dapat membaca data yang ada.
3.3 Menggunakan metode Migrate untuk upgrade
NEAR menyediakan metode Migrate untuk membantu upgrade 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)((, } }
Cukup panggil metode migrate saat pengembangan untuk menyelesaikan migrasi data.
4. Pertimbangan keamanan dalam peningkatan kontrak
Peningkatan kontrak adalah cara penting untuk memastikan keamanan kontrak dan iterasi fungsional, yang memerlukan desain dan pelaksanaan yang hati-hati.