Rust akıllı sözleşmeler yükseltme ipuçları: NEAR sözleşmesinin güvenli güncelleme yöntemleri

robot
Abstract generation in progress

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:

  1. 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)(), } }

  1. 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

  1. Yetki kontrolü uygulayın, yalnızca geliştiricilerin veya DAO'nun sözleşmeyi güncellemesine izin verin.

  2. Sözleşmenin sahibi olarak DAO'yu ayarlamanızı öneririm, öneri ve oylama yoluyla ortak yönetim sağlamak için.

  3. migrate fonksiyonundan önce #[init(ignore_state(] ekleyin.

  4. Göç tamamlandıktan sonra migrate fonksiyonunu silin, sadece bir kez çağrıldığından emin olun.

  5. 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,>

View Original
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.
  • Reward
  • 7
  • Share
Comment
0/400
CryptoNomicsvip
· 21h 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
HodlBelievervip
· 08-01 07:16
Sözleşme risk katsayısı ne kadar düşük olursa olsun, bahis yapılamaz.
View OriginalReply0
SnapshotLaborervip
· 08-01 07:16
Yine akıllı sözleşmelerde döngüye girdim. Cüzdan bakiyeme sessizce bir göz attım.
View OriginalReply0
MEV_Whisperervip
· 08-01 07:11
Sözleşme güncellemesi de böyle oldu. Ne var ki büyük bir şey?
View OriginalReply0
GateUser-beba108dvip
· 08-01 07:09
Bu tür bir yükseltmeyi herkes yapabilir!
View OriginalReply0
MemeCuratorvip
· 08-01 07:07
Çok yakın, sözleşme yazmaktan korkuyorum... Soyulma korkusu.
View OriginalReply0
WalletDivorcervip
· 08-01 06:54
Köpek gibi kaybettim, yükseltme bile beni kurtaramaz.
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)