Panduan Upgrade Kontrak Pintar Rust: Praktik Migrasi Aman di Platform NEAR

robot
Pembuatan abstrak sedang berlangsung

Panduan Upgrade Smart Contract Rust

Kontrak pintar sebagai salah satu jenis program, tidak terhindar dari adanya cacat. Meskipun telah melalui banyak pengujian dan audit, masih mungkin ada celah. Begitu celah tersebut dimanfaatkan, bisa menyebabkan kerugian aset pengguna dan akibat serius lainnya. Oleh karena itu, kemampuan untuk memperbarui kontrak sangat penting, terutama untuk memperbaiki celah dan menambahkan fitur baru.

Metode Peningkatan Kontrak NEAR

Sebagai contoh proyek StatusMessage, perkenalan metode umum untuk meningkatkan kontrak NEAR.

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 dalam kontrak asli masih dapat dibaca dengan normal.

2. Struktur data kontrak telah dimodifikasi

Jika struktur data kontrak diubah, penyebaran ulang secara langsung akan menyebabkan struktur data baru tidak cocok dengan status lama, sehingga mengakibatkan kesalahan.

3. Menggunakan metode Migrate untuk upgrade

NEAR menyediakan metode Migrate untuk membantu meningkatkan 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)((, } }

Panggil metode migrate saat redeploy:

near deploy
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.blocksec_upgrade.testnet

Dengan cara ini, kontrak baru dapat berhasil diterapkan dan data lama dapat dipindahkan.

![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)

Pertimbangan Keamanan dalam Peningkatan Kontrak

  1. Fungsi upgrade harus dilakukan kontrol hak akses, biasanya hanya dapat dipanggil oleh pengembang atau DAO.

  2. Disarankan untuk mengatur pemilik kontrak sebagai DAO, untuk dikelola bersama melalui proposal dan pemungutan suara.

  3. Tambahkan #[init(ignore_state)] sebelum fungsi migrasi, pastikan untuk tidak memuat status sebelum eksekusi.

  4. Setelah migrasi selesai, hapus fungsi migrasi, pastikan hanya dipanggil sekali.

  5. Struktur data baru diinisialisasi saat migrasi.

Mekanisme upgrade yang wajar dapat memberikan fleksibilitas dan pemeliharaan untuk kontrak dengan menjamin keamanan.

INIT-1.96%
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
  • 5
  • Bagikan
Komentar
0/400
DAOTruantvip
· 2jam yang lalu
Apakah akan memindahkan data tergantung suasana hati.
Lihat AsliBalas0
0xSherlockvip
· 07-25 08:10
Melihatnya saja sudah pusing, tidak bisa belajar lagi.
Lihat AsliBalas0
MEVHunterLuckyvip
· 07-25 08:10
Jujur saja, kodenya tidak ada, bagaimana saya bisa belajar?
Lihat AsliBalas0
blocksnarkvip
· 07-25 08:10
Guru NEAR datang untuk mengajar
Lihat AsliBalas0
rugpull_survivorvip
· 07-25 08:00
Selalu mendengarkan near stabil ya
Lihat AsliBalas0
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)