Rust akıllı sözleşmeler yükseltme ipuçları: Ethereum'dan NEAR'a en iyi uygulamalar

robot
Abstract generation in progress

Rust akıllı sözleşmeler yetiştirme günlüğü (9): Sözleşme güvenliği için sözleşme yükseltme

Akıllı sözleşmeler, bir program kodu biçimi olarak, kusurlar ve açıklar barındırma olasılığından kaçınılmazdır. Yeterince test edilen ve denetlenen sözleşmeler bile, keşfedilmemiş sorunlar barındırabilir. Bu potansiyel sorunlar bir kez kullanıldığında, kullanıcı varlık kaybı gibi ciddi sonuçlara yol açabilir. Bu nedenle, sözleşme yükseltme yeteneği, açıkların onarılması ve yeni işlevlerin eklenmesi açısından son derece önemlidir. Bu makalede, NEAR platformundaki Rust sözleşmelerinin yükseltme yöntemleri tanıtılacaktır.

1. Sözleşme yükseltmenin gerekliliği

Akıllı sözleşmeler esasen program kodudur ve kaçınılmaz olarak hatalar içerebilir. Çok sayıda test ve denetimden geçmesine rağmen, hala güvenlik açıkları olabilir. Bu güvenlik açıkları, saldırganlar tarafından kullanıldığında, kullanıcı varlıklarının kaybı gibi ciddi sonuçlara yol açabilir. 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.

2. Ethereum akıllı sözleşmelerinin yaygın yükseltme yöntemleri

Ethereum üzerindeki akıllı sözleşmeler değişmezlik özelliğine sahiptir, bir kez dağıtıldığında değiştirilemez. Bu sorunu çözmek için genellikle (Proxy Contract) şeklinde bir proxy sözleşme kullanılır:

  • Vekil sözleşmeler, verileri depolamak için kullanılır ve mantık sözleşmesini çağırmak için deleGatecall kullanır.
  • Mantık sözleşmeleri belirli iş mantığını içerir.
  • Güncellemelerde sadece yeni bir mantık sözleşmesi dağıtılmalı ve proxy sözleşmesi güncellenmelidir.

Bu yöntem, mevcut verileri koruyarak yalnızca mantık kısmını güncelleyebilir.

3. NEAR akıllı sözleşmelerin güncelleme yöntemleri

Aşağıda StatusMessage projesi örneği ile NEAR akıllı sözleşmelerinin güncellenme yöntemleri tanıtılacaktır:

3.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 yoksa, yeni kodu yeniden dağıtmak için doğrudan near deploy komutunu kullanabilirsiniz. Mevcut veriler korunacaktır.

3.2 Akıllı sözleşmeler veri yapısı değiştirildi

Eğer sözleşmenin veri yapısı değiştirilirse, doğrudan yeniden dağıtım, yeni ve eski veri yapılarının uyumsuz olmasına neden olur ve mevcut veriler düzgün bir şekilde okunamaz.

3.3 Migrate yöntemini kullanarak yükseltme

NEAR, sözleşme güncellemeleri için Migrate yöntemini sağlar. Yeni sözleşmede migrate fonksiyonunu ekleyin:

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

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

yakın dağıtım
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId durum mesajı.blocksec_yükseltme.testnet

Bu şekilde veri taşınması tamamlanabilir, eski ve yeni sözleşme veri yapıları uyumsuz olsa bile normal bir şekilde güncellenebilir.

4. Akıllı sözleşmelerin güncellenmesinin güvenlik değerlendirmesi

Sözleşme yükseltmeleri aşağıdaki güvenlik faktörlerini dikkate almalıdır:

  • Yükseltme yetkilerini sıkı bir şekilde kontrol edin, yalnızca geliştiricilerin veya DAO'nun yükseltmesine izin verin.
  • Sözleşme sahibini DAO olarak ayarlamanızı öneririz, öneri ve oylama ile yönetim.
  • migrate fonksiyonundan önce #[init)ignore_state)] ekleyin
  • Taşındıktan sonra migrate fonksiyonunu sil, yalnızca bir kez çağrıldığından emin ol.
  • Taşınma sırasında yeni veri yapısı başlatıldı.

Bu önlemler sayesinde, sözleşme yükseltmelerinin güvenliği sağlanabilir ve yükseltme sürecindeki riskler azaltılabilir.

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
liquiditea_sippervip
· 07-13 07:37
Böyle güçlü geliyor ama yine de denemeye cesaret edemiyorum.
View OriginalReply0
NeverVoteOnDAOvip
· 07-13 07:37
Yükseltmek mantıklı mı? Hiçbir zaman tam olarak temizlenemediğini hissediyorum.
View OriginalReply0
BrokenDAOvip
· 07-13 07:24
Yetki arka kapı ile eşdeğerdir, güvenlikten nasıl bahsedebiliriz?
View OriginalReply0
LayerZeroHerovip
· 07-13 07:24
Yükseltme tamamlandığında, artık bir şey kontrol edemez.
View OriginalReply0
ser_ngmivip
· 07-13 07:09
rug sözleşmesinin tavanı
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)