Rust akıllı sözleşmeler güncelleme kılavuzu: NEAR sözleşmesinin güvenlik güncellemeleri ve veri taşıma

Rust akıllı sözleşmeler yükseltme kılavuzu

Akıllı sözleşmeler bir program türü olarak, kusurlu olma ihtimali taşır. Çok sayıda test ve denetim yapılmış olsa bile, hala güvenlik açıkları bulunabilir. Eğer bu açıklar kötü niyetli kişiler tarafından kullanılırsa, kullanıcı varlıklarının kaybına neden olabilir ve sonuçları ciddi olabilir. Açıkları düzeltmek genellikle sözleşmenin yükseltilmesi yoluyla gerçekleştirilir. Bunun yanı sıra, yeni işlevlerin eklenmesi de sözleşmenin yükseltilmesini gerektirir. Bu nedenle sözleşmenin yükseltilebilirliği son derece gereklidir. Bu makalede Rust sözleşmelerinin yükseltme yöntemleri tanıtılacaktır.

NEAR akıllı sözleşmeler güncelleme yöntemi

StatusMessage projesini örnek alarak, NEAR akıllı sözleşmelerinin yaygın güncelleme yöntemlerini tanıtın.

1. Sözleşme veri yapısı değiştirilmedi

Eğer yalnızca sözleşme mantığını değiştiriyorsanız ve veri yapısı değişikliği içermiyorsa, yeni kodu yeniden dağıtmak için doğrudan near deploy komutunu kullanabilirsiniz. Örneğin, yeni bir fonksiyon eklemek:

pas #[near_bindgen] impl StatusMessage { Option { let account_id = env::signer_account_id(); self.records.insert(&account_id, &message); return self.records.get(&account_id); } }

Yeniden dağıtım sonrası, orijinal sözleşmedeki veriler hala başarıyla okunabilir.

( 2. Sözleşme veri yapısı değiştirildi

Eğer orijinal veri yapısını değiştirdiyseniz, örneğin:

pas #[near_bindgen] #[derive)BorshDeserialize, BorshSerialize###] pub struct DurumMesajı { etiketler: LookupMap<string, string="">, bios: LookupMap<string, string="">, }

Doğrudan yeniden dağıtım, sözleşme durumunu tersine serileştirememe hatasına yol açar.

( 3. Migrate yöntemini kullanarak yükseltme

NEAR, sözleşme güncellemelerine yardımcı olmak için Migrate yöntemini sağlar. Yeni sözleşmeye migrate yöntemini ekleyin:

pas #) #[init###ignore_state[private]] Self { let eski_durum: EskiDurumMesajı = env::state_read().expect('başarısız'); Kendisi { etiketler: eski_durum.kayıtlar, bios: LookupMap::new(b'b'.to_vec)(), } }

Dağıtım sırasında migrate metodunu çağırın:

yakın dağıtım
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate' \ --initArgs '{}' \ --accountId statusmessage.blocksec_upgrade.testnet

Bu şekilde sözleşmeyi başarıyla yükseltebilir ve eski verileri taşıyabilirsiniz.

![](https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp(

Akıllı sözleşmelerin yükseltilmesi için güvenlik değerlendirmeleri

  1. Yetki kontrolü: Yükseltme fonksiyonu yalnızca owner fonksiyonu olmalıdır, böylece yalnızca owner tarafından çağrılabilir.

  2. Sözleşme sahibinin DAO olarak ayarlanması önerilir, öneri ve oylama yoluyla birlikte yönetim sağlanır.

  3. Göç işlevinin önüne #[init)ignore_state)] ekleyin, böylece yürütmeden önce durum yüklenmez.

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

  5. Yeni veri yapısı, taşınma sırasında başlatılacak.

Yukarıdaki ilkelere uyarak, akıllı sözleşmeleri güvenli bir şekilde yükseltebilir ve bakımını yapabilirsiniz.

</string,></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
  • 5
  • Repost
  • Share
Comment
0/400
GweiWatchervip
· 08-12 18:54
Sözleşme oyuncusu gürleyerek bağırdı: İster yüksel, ister yükselme, sen bilirsin!
View OriginalReply0
ContractHuntervip
· 08-12 18:54
Ah ah ah, yine tanıdık rust güncelleme çukuruna düştüm.
View OriginalReply0
NFTRegrettervip
· 08-12 18:35
Lan yine güncelleme yapmak zorundayım, çok sinir bozucu.
View OriginalReply0
TokenVelocityvip
· 08-12 18:31
Bu kadar çok açık varken kim dokunur ki?
View OriginalReply0
DuskSurfervip
· 08-12 18:31
Sözleşme açıkları her gün var, gerçekten insanı sinirlendiriyor.
View OriginalReply0
  • Pin
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)