Rust akıllı sözleşmeler yükseltme pratiği: NEAR ekosisteminde üç yöntem ve güvenlik değerlendirmeleri

Rust akıllı sözleşmeler geliştirme serisi: Sözleşme yükseltme yöntemleri

Akıllı sözleşmeler bir program kodu olarak, kaçınılmaz olarak eksiklikler ve geliştirilmesi gereken yerler barındırmaktadır. Çok sayıda test ve denetimden geçirilmiş olmasına rağmen, sözleşmelerde hala açıklar bulunabilir. Bir kez açıklar saldırganlar tarafından kullanıldığında, kullanıcı varlıklarının kaybı gibi ciddi sonuçlara yol açabilir. Bu nedenle, sözleşmelerin yükseltilebilirliği son derece önemlidir; hem açıkları düzeltmek hem de yeni özellikler eklemek için kullanılabilir. Bu yazıda Rust akıllı sözleşmelerinin birkaç yükseltme yöntemini tanıtacağız.

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

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

StatusMessage akıllı sözleşmeler kod örneği:

pas #[near_bindgen] #[derive(BorshDeserialize, BorshSerialize)] pub struct StatusMessage { kayıtlar: LookupMap<string, string="">, }

impl Default for StatusMessage { Self { Kendin { 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); } }

( 1. Sözleşme veri yapısında değişiklik yapılmamış güncelleme

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.

Örneğin yeni bir fonksiyon eklemek:

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

Yeniden dağıtıldıktan sonra, mevcut veriler normal olarak okunabilir.

( 2. Akıllı sözleşmeler veri yapısı değişikliği yükseltmesi

Eğer sözleşmenin veri yapısı değiştirilirse, doğrudan yeniden dağıtım durumu tersine serileştirme hatasına yol açar.

Örneğin veri yapısını değiştirme:

rust pub struct DurumMesajı { sloganlar: LookupMap<string, string="">, bios: LookupMap<string, string="">, }

Bu durumda yükseltme işlemi için Migrate yönteminin kullanılması gerekir.

) 3. Migrate yöntemini kullanarak yükseltme

Yeni sözleşmeye migrate yöntemi ekleyin:

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

Dağıtım sırasında aynı anda migrate yöntemini çağırın:

yakın dağıtım
--wasmDosyası hedef/wasm32-bilinmeyen-bilinmeyen/salı/status_message.wasm
--initFunction 'migrate'
--initArgs '{}' \ --accountId durum mesajı.blocksec_upgrade.testnet

Bu şekilde eski veriler yeni veri yapısına başarıyla taşınabilir.

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

  1. Yetki kontrolü - Yükseltme fonksiyonu owner'a özel olmalıdır, owner'ı DAO olarak ayarlamanız önerilir.

  2. Göç fonksiyonundan önce #[init(ignore_state)] ekleyin

  3. Göç tamamlandıktan sonra göç işlevini silin

  4. Yeni veri yapıları göç sırasında başlatılır.

Rasyonel bir şekilde tasarlanmış bir yükseltme mekanizması ile, güvenliği sağlarken sözleşmelerin yükseltilebilirliğini gerçekleştirmek, uzun vadeli bakım ve optimizasyon için bir temel oluşturabilir.

![](https://img-cdn.gateio.im/webp-social/moments-af3fe22c1999da5db0e2853b8a271276.webp(</string,></string,></string,>

GET-1.58%
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
  • 4
  • Share
Comment
0/400
PretendingToReadDocsvip
· 07-23 12:26
Temsilci sözleşmesi daha güvenli.
View OriginalReply0
ArbitrageBotvip
· 07-23 12:19
Yükseltmek, emiciler tarafından oyuna getirilmekten korkmak
View OriginalReply0
LiquidityNinjavip
· 07-23 12:10
Sözleşme yükseltmesi zor.
View OriginalReply0
EthMaximalistvip
· 07-23 12:04
Yükseltmelerin de açıkları olabilir.
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)