Pembaruan kontrak pintar Rust: memastikan keamanan dan skalabilitas

robot
Pembuatan abstrak sedang berlangsung

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.

INIT-4.92%
Lihat Asli
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.
  • Hadiah
  • 4
  • Bagikan
Komentar
0/400
SandwichTradervip
· 19jam yang lalu
Terus menyalin pekerjaan rumah? Kontrak sudah diganti dan mulai lagi.
Lihat AsliBalas0
BoredRiceBallvip
· 19jam yang lalu
Terpercaya, uji sebelum digunakan
Lihat AsliBalas0
SigmaValidatorvip
· 19jam yang lalu
Seseorang menyerang kontrak pintar saya!
Lihat AsliBalas0
BoredApeResistancevip
· 19jam yang lalu
Agen memiliki cara baru lagi
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)