Akıllı sözleşmeler bir program kodu türü olduğundan, kusurları ve açıkları barındırması kaçınılmazdır. Çok sayıda test ve denetimden geçse bile, güvenlik sorunları ortaya çıkabilir. Bir kez sözleşme açığı saldırganlar tarafından kullanıldığında, kullanıcı varlıklarının kaybı gibi ciddi sonuçlar doğurabilir. Bu nedenle, sözleşme güncellemeleri açıkları düzeltmek ve yeni işlevler eklemek için hayati öneme sahiptir. Bu makalede Rust akıllı sözleşmelerinin güncelleme yöntemleri tanıtılacaktır.
NEAR akıllı sözleşmeler güncelleme yaygın yöntemleri
StatusMessage projesini örnek alarak, NEAR akıllı sözleşmelerinin yaygın güncelleme yöntemlerini tanıtma:
Eğer sadece yeni fonksiyonlar ekleniyorsa, veri yapısı değişiklikleri söz konusu değilse, doğrudan near deploy komutunu kullanarak yeni kodu yeniden dağıtabilirsiniz. Mevcut veriler normal bir şekilde okunabilir.
) akıllı sözleşmeler veri yapısı değiştirildi
Eğer veri yapısı değiştirilirse, doğrudan yeniden dağıtım yeni ve eski veri yapılarının eşleşmemesine ve verilerin düzgün bir şekilde okunamamasına yol açacaktır. Bu durumda, yükseltme için Migrate yönteminin kullanılması gerekir:
Yeni akıllı sözleşmede migrate yöntemini ekleyin:
pas
#(
#[init)ignore_state###]
Self {
let old_state: OldStatusMessage = env::state_read###[private].expect('failed');
Kendisi {
taglines: old_state.records,
bios: LookupMap::new(b'b'.to_vec)(),
}
}
Dağıtım sırasında migrate yöntemini çağırın:
yakın dağıtım
--wasmFile hedef/wasm32-bilinmeyen-bilinmeyen/release/status_message.wasm
--initFunction 'migrate' \
--initArgs '{}' \
--accountId durum mesajı.example.testnet
Bu şekilde eski veriler yeni veri yapısına taşınabilir.
Sözleşme Yükseltme Güvenlik Değerlendirmesi
Yetki kontrolü uygulayın, yalnızca geliştiricilerin veya DAO'nun sözleşmeyi güncellemesine izin verin.
Sözleşmenin sahibi olarak DAO'yu ayarlamanızı öneririm, öneri ve oylama yoluyla ortak yönetim sağlamak için.
migrate fonksiyonundan önce #[init(ignore_state(] ekleyin.
Göç tamamlandıktan sonra migrate fonksiyonunu silin, sadece bir kez çağrıldığından emin olun.
Yeni veri yapıları taşınma sırasında başlatılır.
Yukarıdaki yöntemle, Rust akıllı sözleşmelerinin yükseltmesi güvenli ve verimli bir şekilde tamamlanabilir.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
10 Likes
Reward
10
7
Share
Comment
0/400
CryptoNomics
· 5h ago
*sigh* Şimdi yükseltilebilirliğin güvenlik ile eşit olmadığını açıklamak için stokastik olasılık matrislerini kullanayım.
View OriginalReply0
HodlBeliever
· 17h ago
Sözleşme risk katsayısı ne kadar düşük olursa olsun, bahis yapılamaz.
View OriginalReply0
SnapshotLaborer
· 17h ago
Yine akıllı sözleşmelerde döngüye girdim. Cüzdan bakiyeme sessizce bir göz attım.
View OriginalReply0
MEV_Whisperer
· 18h ago
Sözleşme güncellemesi de böyle oldu. Ne var ki büyük bir şey?
View OriginalReply0
GateUser-beba108d
· 18h ago
Bu tür bir yükseltmeyi herkes yapabilir!
View OriginalReply0
MemeCurator
· 18h ago
Çok yakın, sözleşme yazmaktan korkuyorum... Soyulma korkusu.
View OriginalReply0
WalletDivorcer
· 18h ago
Köpek gibi kaybettim, yükseltme bile beni kurtaramaz.
Rust akıllı sözleşmeler yükseltme ipuçları: NEAR sözleşmesinin güvenli güncelleme yöntemleri
Rust akıllı sözleşmeler yükseltme teknikleri
Akıllı sözleşmeler bir program kodu türü olduğundan, kusurları ve açıkları barındırması kaçınılmazdır. Çok sayıda test ve denetimden geçse bile, güvenlik sorunları ortaya çıkabilir. Bir kez sözleşme açığı saldırganlar tarafından kullanıldığında, kullanıcı varlıklarının kaybı gibi ciddi sonuçlar doğurabilir. Bu nedenle, sözleşme güncellemeleri açıkları düzeltmek ve yeni işlevler eklemek için hayati öneme sahiptir. Bu makalede Rust akıllı sözleşmelerinin güncelleme yöntemleri tanıtılacaktır.
NEAR akıllı sözleşmeler güncelleme yaygın yöntemleri
StatusMessage projesini örnek alarak, NEAR akıllı sözleşmelerinin yaygın güncelleme yöntemlerini tanıtma:
pas #[near_bindgen] #[derive(BorshDeserialize, BorshSerialize)] pub struct DurumMesajı { kayıtlar: LookupMap<string, string="">, }
impl Default for StatusMessage { Self { Kendisi { kayıtlar: LookupMap::new(b'r'.to_vec)((, } } }
#[near_bindgen] impl StatusMessage { pub fn set_status)&mut self, message: String) { let account_id = env::signer_account_id(); self.records.insert(&account_id, &message); }
Option { return self.records.get(&account_id); } }
( akıllı sözleşmeler veri yapısı değiştirilmedi
Eğer sadece yeni fonksiyonlar ekleniyorsa, veri yapısı değişiklikleri söz konusu değilse, doğrudan near deploy komutunu kullanarak yeni kodu yeniden dağıtabilirsiniz. Mevcut veriler normal bir şekilde okunabilir.
) akıllı sözleşmeler veri yapısı değiştirildi
Eğer veri yapısı değiştirilirse, doğrudan yeniden dağıtım yeni ve eski veri yapılarının eşleşmemesine ve verilerin düzgün bir şekilde okunamamasına yol açacaktır. Bu durumda, yükseltme için Migrate yönteminin kullanılması gerekir:
pas #( #[init)ignore_state###] Self { let old_state: OldStatusMessage = env::state_read###[private].expect('failed'); Kendisi { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)(), } }
yakın dağıtım
--wasmFile hedef/wasm32-bilinmeyen-bilinmeyen/release/status_message.wasm
--initFunction 'migrate' \ --initArgs '{}' \ --accountId durum mesajı.example.testnet
Bu şekilde eski veriler yeni veri yapısına taşınabilir.
Sözleşme Yükseltme Güvenlik Değerlendirmesi
Yetki kontrolü uygulayın, yalnızca geliştiricilerin veya DAO'nun sözleşmeyi güncellemesine izin verin.
Sözleşmenin sahibi olarak DAO'yu ayarlamanızı öneririm, öneri ve oylama yoluyla ortak yönetim sağlamak için.
migrate fonksiyonundan önce #[init(ignore_state(] ekleyin.
Göç tamamlandıktan sonra migrate fonksiyonunu silin, sadece bir kez çağrıldığından emin olun.
Yeni veri yapıları taşınma sırasında başlatılır.
Yukarıdaki yöntemle, Rust akıllı sözleşmelerinin yükseltmesi güvenli ve verimli bir şekilde tamamlanabilir.
![])https://img-cdn.gateio.im/webp-social/moments-af3fe22c1999da5db0e2853b8a271276.webp)</string,>