Rust akıllı sözleşmeler yükseltme tam kılavuzu: NEAR'dan güvenlik değerlendirmelerine

Rust akıllı sözleşmeler yükseltme pratiği

Akıllı sözleşmeler esasen bir programdır ve kaçınılmaz olarak kusurlar içerir. Çok sayıda test ve denetimden geçmesine rağmen, hala açıklar olabilir. Sözleşme açıkları saldırıya uğradığında, kullanıcı varlıklarının kaybına neden olabilir ve bu ciddi sonuçlar doğurur. Açıkları düzeltmek ve yeni özellikler eklemek, sözleşmenin yükseltilmesini gerektirir. Bu nedenle, sözleşmenin yükseltilebilirliği son derece gereklidir. Bu yazıda Rust sözleşmelerinin yükseltme yöntemleri tanıtılacaktır.

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.

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

Eğer yalnızca sözleşme mantığı değiştirilirse ve veri yapısında bir değişiklik yoksa, yeni kodu yeniden dağıtmak için near deploy kullanabilirsiniz. Eski sözleşmedeki veriler normal şekilde okunabilir.

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 ve yeni veri yapısının uyuşmamasına neden olur ve mevcut veriyi okuyamazsınız.

3. Migrate ile akıllı sözleşmeleri güncelleme

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 #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); Kendi { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }

Yeniden dağıtım sırasında migrate yöntemini çağırın:

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

Bu şekilde eski sözleşme verileri yeni sözleşmeye başarıyla taşınabilir.

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

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

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

  2. Sözleşme sahibini DAO olarak ayarlamanızı öneririz, öneri ve oylama ile birlikte yönetmek için.

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

  4. Göç tamamlandıktan sonra göç fonksiyonunu silin.

  5. Yeni veri yapısı, göç sırasında başlatıldı.

Sözleşme yükseltmeleri, sözleşme güvenliğini sağlamak için önemli bir yöntemdir; geliştiricilerin bu durumu dikkatle ele alması ve yükseltme sürecinin güvenliğini garanti etmesi gerekmektedir.

INIT-2.9%
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
  • 2
  • Repost
  • Share
Comment
0/400
SandwichVictimvip
· 08-13 22:24
Bu kadar çok açık varken endişeliyim.
View OriginalReply0
BlockImpostervip
· 08-13 22:24
Yükseltme yapsan da yapmasan da delikten çıkamazsın işte~
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)