Rust akıllı sözleşmeler yükseltme kılavuzu: NEAR platform güvenli geçiş uygulamaları

robot
Abstract generation in progress

Rust akıllı sözleşmeler güncelleme kılavuzu

Akıllı sözleşmeler bir program türü olarak, kusurlar barındırması kaçınılmazdır. Çok sayıda test ve denetimden geçirilmiş olsa bile, hâlâ açıklar bulunabilir. Bir kez açıklar kullanıldığında, kullanıcı varlık kaybı gibi ciddi sonuçlar doğurabilir. Bu nedenle, sözleşmelerin yükseltilebilirliği oldukça önemlidir, esas olarak açıkları düzeltmek ve yeni işlevler eklemek için kullanılır.

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

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

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

Eğer sadece sözleşme mantığını değiştiriyorsanız ve veri yapısında bir değişiklik yoksa, yeni kodu yeniden dağıtmak için doğrudan near deploy komutunu kullanabilirsiniz. Eski sözleşmedeki veriler normal bir şekilde okunmaya devam edebilir.

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

Eğer sözleşmenin veri yapısı değiştirilirse, doğrudan yeniden dağıtım yapmak eski durumla yeni veri yapısının uyuşmamasına neden olur ve bu da hatalara yol açar.

3. Migrate yöntemini kullanarak güncelleme

NEAR, sözleşmeleri yükseltmek için Migrate yöntemini sunmaktadır. Yeni sözleşmeye migrate yöntemini ekleyin:

pas #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); Kendim { sloganlar: eski_durum.kayıtlar, bios: LookupMap::new(b'b'.to_vec)((, } }

Yeniden 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 yeni akıllı sözleşmeler başarıyla dağıtılabilir ve eski veriler taşınabilir.

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

Sözleşme Güncellemesinin Güvenlik Değerlendirmesi

  1. Güncelleme fonksiyonu yetki kontrolü yapılmalıdır, genellikle yalnızca geliştirici veya DAO tarafından çağrılabilir.

  2. Sözleşme sahibinin DAO olarak ayarlanması önerilir, öneri ve oylama ile birlikte yönetilmesi.

  3. Göç fonksiyonundan önce #[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ıları, taşınma sırasında başlatılır.

Makul bir yükseltme mekanizması, güvenliği sağlarken sözleşmelere esneklik ve sürdürülebilirlik sağlayabilir.

INIT-1.96%
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
  • Share
Comment
0/400
DAOTruantvip
· 2h ago
Veri taşıyıp taşımamak ruh haline bağlı.
View OriginalReply0
0xSherlockvip
· 07-25 08:10
Baktıkça kafam büyüyor, çalışamıyorum.
View OriginalReply0
MEVHunterLuckyvip
· 07-25 08:10
Açıkçası kodlar bile yok, nasıl öğrenebilirim ki?
View OriginalReply0
blocksnarkvip
· 07-25 08:10
NEAR ustası ders vermeye geldi.
View OriginalReply0
rugpull_survivorvip
· 07-25 08:00
Sürekli near'e güveniyorum.
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)