Kontrak pintar sebagai salah satu jenis program, tidak dapat dihindari akan memiliki cacat dan celah. Meskipun telah melalui banyak pengujian dan audit, masalah masih bisa muncul. Begitu celah tersebut dimanfaatkan oleh penyerang, dapat menyebabkan kerugian aset pengguna dan konsekuensi serius lainnya. Oleh karena itu, kemampuan untuk memperbarui kontrak sangat penting, artikel ini akan memperkenalkan cara pembaruan kontrak Rust.
Cara Upgrade Kontrak Ethereum
Kontrak pintar di Ethereum memiliki ketidakberdayaan, setelah diterapkan tidak dapat diubah secara langsung. Biasanya, peningkatan dilakukan dengan cara berikut:
Terapkan kontrak baru, ubah alamat kontrak dalam DApp. Kekurangannya adalah perlu memigrasi data status kontrak lama.
Arsitektur pemisahan data dan logika. Simpan data dalam kontrak status, logika diimplementasikan dalam kontrak lain. Saat melakukan upgrade, cukup perbarui kontrak logika.
Gunakan kontrak proxy. Kontrak proxy menyimpan data dan memanggil kontrak logika melalui deleGatecall, saat upgrade hanya perlu memperbarui alamat kontrak logika.
Metode Upgrade Kontrak NEAR
Menggunakan proyek StatusMessage sebagai contoh, memperkenalkan metode peningkatan kontrak NEAR:
1. Struktur data kontrak belum 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 tetap terjaga.
2. Struktur data kontrak telah dimodifikasi
Jika struktur data diubah, melakukan redeploy langsung akan menyebabkan ketidakcocokan antara struktur data lama dan baru, sehingga data tidak dapat dibaca dengan normal.
3. Menggunakan metode Migrate untuk upgrade
NEAR menyediakan metode Migrate untuk membantu peningkatan:
Tambahkan metode migrate di kontrak baru
Panggil metode migrate saat penyebaran untuk melakukan migrasi data
Setelah migrasi selesai, fungsi kontrak baru dapat digunakan dengan normal.
Pertimbangan Keamanan Upgrade Kontrak
Kontrol akses - Fungsi upgrade harus merupakan fungsi only owner
Disarankan untuk mengatur owner sebagai DAO, untuk menghindari risiko sentralisasi
Gunakan #[init(ignore_state)] untuk memastikan tidak memuat status sebelum melakukan migrasi.
Hapus fungsi migrasi setelah migrasi, untuk menghindari pemanggilan ulang.
Struktur data baru diinisialisasi saat migrasi selesai
Dengan merancang rencana peningkatan yang wajar, dapat mencapai kemampuan kontrak untuk diupgrade tanpa mengorbankan keamanan, serta meningkatkan keberlanjutan proyek dalam jangka panjang.
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.
12 Suka
Hadiah
12
6
Bagikan
Komentar
0/400
FlatlineTrader
· 2jam yang lalu
Vulnerabilitas adalah dompet...
Lihat AsliBalas0
Deconstructionist
· 9jam yang lalu
Disarankan untuk menambahkan hot reload.
Lihat AsliBalas0
rekt_but_not_broke
· 9jam yang lalu
Ternyata smart contract ini sangat merugikan ya.
Lihat AsliBalas0
LiquidityWizard
· 9jam yang lalu
secara teoritis, pola proxy hanyalah mutasi status yang dilapisi gula dengan overhead gas 73,4% lebih banyak... smh
Penjelasan Rincian Peningkatan Kontrak Pintar Rust: Praktik Terbaik dari Ethereum ke NEAR
Metode Upgrade Kontrak Pintar Rust Secara Detail
Kontrak pintar sebagai salah satu jenis program, tidak dapat dihindari akan memiliki cacat dan celah. Meskipun telah melalui banyak pengujian dan audit, masalah masih bisa muncul. Begitu celah tersebut dimanfaatkan oleh penyerang, dapat menyebabkan kerugian aset pengguna dan konsekuensi serius lainnya. Oleh karena itu, kemampuan untuk memperbarui kontrak sangat penting, artikel ini akan memperkenalkan cara pembaruan kontrak Rust.
Cara Upgrade Kontrak Ethereum
Kontrak pintar di Ethereum memiliki ketidakberdayaan, setelah diterapkan tidak dapat diubah secara langsung. Biasanya, peningkatan dilakukan dengan cara berikut:
Terapkan kontrak baru, ubah alamat kontrak dalam DApp. Kekurangannya adalah perlu memigrasi data status kontrak lama.
Arsitektur pemisahan data dan logika. Simpan data dalam kontrak status, logika diimplementasikan dalam kontrak lain. Saat melakukan upgrade, cukup perbarui kontrak logika.
Gunakan kontrak proxy. Kontrak proxy menyimpan data dan memanggil kontrak logika melalui deleGatecall, saat upgrade hanya perlu memperbarui alamat kontrak logika.
Metode Upgrade Kontrak NEAR
Menggunakan proyek StatusMessage sebagai contoh, memperkenalkan metode peningkatan kontrak NEAR:
1. Struktur data kontrak belum 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 tetap terjaga.
2. Struktur data kontrak telah dimodifikasi
Jika struktur data diubah, melakukan redeploy langsung akan menyebabkan ketidakcocokan antara struktur data lama dan baru, sehingga data tidak dapat dibaca dengan normal.
3. Menggunakan metode Migrate untuk upgrade
NEAR menyediakan metode Migrate untuk membantu peningkatan:
Pertimbangan Keamanan Upgrade Kontrak
Dengan merancang rencana peningkatan yang wajar, dapat mencapai kemampuan kontrak untuk diupgrade tanpa mengorbankan keamanan, serta meningkatkan keberlanjutan proyek dalam jangka panjang.