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)((,
}
}
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.
19 Suka
Hadiah
19
6
Bagikan
Komentar
0/400
SignatureAnxiety
· 17jam yang lalu
keadaan pemain near gg
Lihat AsliBalas0
DAOTruant
· 22jam yang lalu
Apakah akan memindahkan data tergantung suasana hati.
Lihat AsliBalas0
0xSherlock
· 07-25 08:10
Melihatnya saja sudah pusing, tidak bisa belajar lagi.
Lihat AsliBalas0
MEVHunterLucky
· 07-25 08:10
Jujur saja, kodenya tidak ada, bagaimana saya bisa belajar?
Panduan Upgrade Kontrak Pintar Rust: Praktik Migrasi Aman di Platform NEAR
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
Fungsi upgrade harus dilakukan kontrol hak akses, biasanya hanya dapat dipanggil oleh pengembang atau DAO.
Disarankan untuk mengatur pemilik kontrak sebagai DAO, untuk dikelola bersama melalui proposal dan pemungutan suara.
Tambahkan #[init(ignore_state)] sebelum fungsi migrasi, pastikan untuk tidak memuat status sebelum eksekusi.
Setelah migrasi selesai, hapus fungsi migrasi, pastikan hanya dipanggil sekali.
Struktur data baru diinisialisasi saat migrasi.
Mekanisme upgrade yang wajar dapat memberikan fleksibilitas dan pemeliharaan untuk kontrak dengan menjamin keamanan.