Tips Upgrade Kontrak Pintar Rust: Praktik Terbaik dari Ethereum ke NEAR

robot
Pembuatan abstrak sedang berlangsung

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):

  • 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)((, } }

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:

  • 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.

Lihat Asli
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.
  • Hadiah
  • 5
  • Bagikan
Komentar
0/400
liquiditea_sippervip
· 20jam yang lalu
Kedengarannya sangat kuat, tapi saya masih tidak berani mencobanya.
Lihat AsliBalas0
NeverVoteOnDAOvip
· 20jam yang lalu
Apakah upgrade itu dapat diandalkan? Saya merasa tidak terasa bersih.
Lihat AsliBalas0
BrokenDAOvip
· 20jam yang lalu
Hak sama dengan pintu belakang, bagaimana bisa membicarakan keamanan?
Lihat AsliBalas0
LayerZeroHerovip
· 20jam yang lalu
Setelah peningkatan selesai, tidak ada dewa yang bisa mengendalikannya.
Lihat AsliBalas0
ser_ngmivip
· 20jam yang lalu
plafon kontrak rug
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)