Kontrak pintar sebagai salah satu bentuk kode program, tidak dapat dihindari akan memiliki cacat dan celah. Bahkan kontrak yang telah melalui pengujian dan audit yang memadai, mungkin masih memiliki masalah yang tidak terdeteksi. Masalah potensial ini, jika dieksploitasi, dapat menyebabkan kerugian aset pengguna dan konsekuensi serius lainnya. Oleh karena itu, kemampuan untuk memperbarui kontrak sangat penting untuk memperbaiki celah dan menambahkan fitur baru. Artikel ini akan memperkenalkan cara pembaruan kontrak Rust di platform NEAR.
1. Kebutuhan untuk Upgrade Kontrak
Smart contract pada dasarnya adalah kode program, yang tidak dapat dihindari akan memiliki cacat. Meskipun telah melalui banyak pengujian dan audit, masih mungkin ada celah. Jika celah ini dimanfaatkan oleh penyerang, dapat menyebabkan kerugian aset pengguna dan konsekuensi serius lainnya. Memperbaiki celah sering kali memerlukan peningkatan kontrak untuk mencapainya. Selain itu, penambahan fitur baru juga memerlukan peningkatan kontrak. Oleh karena itu, kemampuan kontrak untuk diperbarui sangat diperlukan.
2. Cara Umum untuk Meningkatkan Kontrak Ethereum
Kontrak pintar di Ethereum memiliki sifat tidak dapat diubah, setelah dikerahkan tidak dapat dimodifikasi. Untuk mengatasi masalah ini, biasanya digunakan pendekatan kontrak proxy (Proxy Contract):
Kontrak delegasi digunakan untuk menyimpan data, dan menggunakan deleGatecall untuk memanggil kontrak logika
Kontrak logika mencakup logika bisnis spesifik
Saat melakukan upgrade, cukup deploy smart contract baru dan perbarui alamat yang ditunjuk oleh kontrak proxy.
Cara ini dapat mempertahankan data yang ada, hanya memperbarui bagian logika.
3. Metode Peningkatan Kontrak NEAR
Berikut ini adalah contoh proyek StatusMessage, yang memperkenalkan 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 perintah near deploy untuk menyebarkan kode baru. Data yang ada akan dipertahankan.
3.2 Struktur data kontrak telah dimodifikasi
Jika struktur data pada kontrak diubah, penyebaran ulang secara langsung akan menyebabkan ketidakcocokan antara struktur data lama dan baru, sehingga data yang ada tidak dapat dibaca dengan baik.
3.3 Menggunakan metode Migrate untuk upgrade
NEAR menyediakan metode Migrate untuk peningkatan kontrak. Tambahkan fungsi migrate di kontrak baru:
karat
#[private]
#[init(ignore_state)]
Self {
let old_state: OldStatusMessage = env::state_read().expect("gagal");
Diri {
taglines: old_state.records,
bios: LookupMap::new(b"b".to_vec)((,
}
}
Dengan cara ini, migrasi data dapat diselesaikan, dan meskipun struktur data kontrak lama dan baru tidak konsisten, pembaruan masih dapat dilakukan dengan normal.
4. Pertimbangan Keamanan dalam Peningkatan Kontrak
Pembaruan kontrak perlu mempertimbangkan faktor keamanan berikut:
Mengontrol hak upgrade secara ketat, hanya memperbolehkan pengembang atau DAO untuk melakukan upgrade
Disarankan untuk mengatur pemilik kontrak sebagai DAO, dikelola melalui proposal dan pemungutan suara.
Tambahkan #[init)ignore_state)] sebelum fungsi migrate
Hapus fungsi migrate setelah migrasi, pastikan hanya dipanggil sekali
Struktur data baru diinisialisasi saat migrasi
Dengan langkah-langkah ini, keamanan peningkatan kontrak dapat dipastikan, mengurangi risiko selama proses peningkatan.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
10 Suka
Hadiah
10
5
Bagikan
Komentar
0/400
liquiditea_sipper
· 20jam yang lalu
Kedengarannya sangat kuat, tapi saya masih tidak berani mencobanya.
Lihat AsliBalas0
NeverVoteOnDAO
· 20jam yang lalu
Apakah upgrade itu dapat diandalkan? Saya merasa tidak terasa bersih.
Lihat AsliBalas0
BrokenDAO
· 20jam yang lalu
Hak sama dengan pintu belakang, bagaimana bisa membicarakan keamanan?
Lihat AsliBalas0
LayerZeroHero
· 20jam yang lalu
Setelah peningkatan selesai, tidak ada dewa yang bisa mengendalikannya.
Tips Upgrade Kontrak Pintar Rust: Praktik Terbaik dari Ethereum ke NEAR
Rust smart contract养成日记(9):合约安全之合约升级
Kontrak pintar sebagai salah satu bentuk kode program, tidak dapat dihindari akan memiliki cacat dan celah. Bahkan kontrak yang telah melalui pengujian dan audit yang memadai, mungkin masih memiliki masalah yang tidak terdeteksi. Masalah potensial ini, jika dieksploitasi, dapat menyebabkan kerugian aset pengguna dan konsekuensi serius lainnya. Oleh karena itu, kemampuan untuk memperbarui kontrak sangat penting untuk memperbaiki celah dan menambahkan fitur baru. Artikel ini akan memperkenalkan cara pembaruan kontrak Rust di platform NEAR.
1. Kebutuhan untuk Upgrade Kontrak
Smart contract pada dasarnya adalah kode program, yang tidak dapat dihindari akan memiliki cacat. Meskipun telah melalui banyak pengujian dan audit, masih mungkin ada celah. Jika celah ini dimanfaatkan oleh penyerang, dapat menyebabkan kerugian aset pengguna dan konsekuensi serius lainnya. Memperbaiki celah sering kali memerlukan peningkatan kontrak untuk mencapainya. Selain itu, penambahan fitur baru juga memerlukan peningkatan kontrak. Oleh karena itu, kemampuan kontrak untuk diperbarui sangat diperlukan.
2. Cara Umum untuk Meningkatkan Kontrak Ethereum
Kontrak pintar di Ethereum memiliki sifat tidak dapat diubah, setelah dikerahkan tidak dapat dimodifikasi. Untuk mengatasi masalah ini, biasanya digunakan pendekatan kontrak proxy (Proxy Contract):
Cara ini dapat mempertahankan data yang ada, hanya memperbarui bagian logika.
3. Metode Peningkatan Kontrak NEAR
Berikut ini adalah contoh proyek StatusMessage, yang memperkenalkan 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 perintah near deploy untuk menyebarkan kode baru. Data yang ada akan dipertahankan.
3.2 Struktur data kontrak telah dimodifikasi
Jika struktur data pada kontrak diubah, penyebaran ulang secara langsung akan menyebabkan ketidakcocokan antara struktur data lama dan baru, sehingga data yang ada tidak dapat dibaca dengan baik.
3.3 Menggunakan metode Migrate untuk upgrade
NEAR menyediakan metode Migrate untuk peningkatan kontrak. Tambahkan fungsi migrate di kontrak baru:
karat #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect("gagal"); 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, migrasi data dapat diselesaikan, dan meskipun struktur data kontrak lama dan baru tidak konsisten, pembaruan masih dapat dilakukan dengan normal.
4. Pertimbangan Keamanan dalam Peningkatan Kontrak
Pembaruan kontrak perlu mempertimbangkan faktor keamanan berikut:
Dengan langkah-langkah ini, keamanan peningkatan kontrak dapat dipastikan, mengurangi risiko selama proses peningkatan.