Smart contract sebagai salah satu jenis program, tidak terhindar dari adanya cacat. Meskipun telah melalui banyak pengujian dan audit, masih mungkin terdapat celah. Jika dieksploitasi oleh penyerang, bisa mengakibatkan kerugian aset pengguna, dengan konsekuensi yang serius. Memperbaiki celah sering kali memerlukan peningkatan kontrak. Selain itu, penambahan fitur baru juga memerlukan peningkatan kontrak. Oleh karena itu, kemampuan kontrak untuk diupgrade sangatlah penting. Artikel ini akan memperkenalkan cara peningkatan kontrak Rust.
Metode Peningkatan Kontrak NEAR
Dengan mengambil proyek StatusMessage sebagai contoh, 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. Misalnya menambahkan fungsi baru:
Kontrol Akses: Fungsi upgrade harus merupakan fungsi only owner, memastikan hanya dapat dipanggil oleh owner.
Disarankan untuk mengatur pemilik kontrak sebagai DAO, untuk dikelola bersama melalui proposal dan pemungutan suara.
Tambahkan #[init)ignore_state)] sebelum fungsi migrasi, pastikan tidak memuat status sebelum eksekusi.
Hapus fungsi migrasi setelah migrasi selesai, pastikan hanya dipanggil sekali.
Struktur data baru diinisialisasi saat migrasi.
Dengan mengikuti prinsip-prinsip di atas, Anda dapat dengan aman melakukan pembaruan dan pemeliharaan pada smart contract.
</string,></string,>
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.
8 Suka
Hadiah
8
5
Posting ulang
Bagikan
Komentar
0/400
GweiWatcher
· 21jam yang lalu
Pemain kontrak berteriak: Naik atau tidak terserah kamu!
Lihat AsliBalas0
ContractHunter
· 21jam yang lalu
Aduh, saya lagi-lagi terjebak dalam masalah upgrade rust yang sudah familiar.
Lihat AsliBalas0
NFTRegretter
· 22jam yang lalu
Sial, harus upgrade lagi. Sangat menjengkelkan.
Lihat AsliBalas0
TokenVelocity
· 22jam yang lalu
Banyak celah, siapa yang berani menyentuhnya?
Lihat AsliBalas0
DuskSurfer
· 22jam yang lalu
Kekurangan kontrak terjadi setiap hari, benar-benar membuat orang kesal.
Panduan Upgrade Kontrak Pintar Rust: Pembaruan Keamanan dan Migrasi Data Kontrak NEAR
Panduan Peningkatan Smart Contract Rust
Smart contract sebagai salah satu jenis program, tidak terhindar dari adanya cacat. Meskipun telah melalui banyak pengujian dan audit, masih mungkin terdapat celah. Jika dieksploitasi oleh penyerang, bisa mengakibatkan kerugian aset pengguna, dengan konsekuensi yang serius. Memperbaiki celah sering kali memerlukan peningkatan kontrak. Selain itu, penambahan fitur baru juga memerlukan peningkatan kontrak. Oleh karena itu, kemampuan kontrak untuk diupgrade sangatlah penting. Artikel ini akan memperkenalkan cara peningkatan kontrak Rust.
Metode Peningkatan Kontrak NEAR
Dengan mengambil proyek StatusMessage sebagai contoh, 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. Misalnya menambahkan fungsi baru:
karat #[near_bindgen] impl StatusMessage { Option { let account_id = env::signer_account_id(); self.records.insert(\u0026account_id, \u0026message); return self.records.get(&account_id); } }
Setelah redeploy, data dalam kontrak asli masih dapat dibaca dengan sukses.
( 2. Struktur data kontrak telah diubah
Jika struktur data asli diubah, misalnya:
karat #[near_bindgen] #[derive)BorshDeserialize, BorshSerialize###] pub struct StatusMessage { taglines: LookupMap<string, string="">, bios: LookupMap<string, string="">, }
Penyebaran ulang secara langsung akan menyebabkan kesalahan dalam deserialisasi status kontrak.
( 3. Menggunakan metode Migrate untuk meningkatkan
NEAR menyediakan metode Migrate untuk membantu upgrade kontrak. Tambahkan metode migrate di kontrak baru:
karat #) #[init###ignore_state[private]] 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 melakukan penyebaran:
deploy dekat \ --wasmFile target/wasm32-unknown-unknown/release/status_message.wasm \ --initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.blocksec_upgrade.testnet
Dengan cara ini, kontrak dapat berhasil ditingkatkan dan data lama dapat dipindahkan.
ignore_state)] sebelum fungsi migrasi, pastikan tidak memuat status sebelum eksekusi.
Hapus fungsi migrasi setelah migrasi selesai, pastikan hanya dipanggil sekali.
Struktur data baru diinisialisasi saat migrasi.
Dengan mengikuti prinsip-prinsip di atas, Anda dapat dengan aman melakukan pembaruan dan pemeliharaan pada smart contract.