Rust akıllı sözleşmeler yükseltme planı ayrıntıları
Akıllı sözleşmeler esasen bir programdır ve kusurlar barındırması kaçınılmazdır. Çok sayıda test ve denetimden geçse bile, hala güvenlik açıkları ortaya çıkabilir. Bir saldırgan tarafından istismar edildiğinde, kullanıcı varlık kaybına yol açabilir ve sonuçları ciddi olabilir. Bu nedenle, sözleşmenin yükseltilebilirliği oldukça gereklidir, esas olarak güvenlik açıklarının giderilmesi ve yeni özelliklerin eklenmesi için kullanılır. Bu yazıda Rust sözleşmelerinin yaygın yükseltme yöntemleri tanıtılacaktır.
Ethereum akıllı sözleşmeler yükseltme planı
Ethereum akıllı sözleşmeleri değişmezdir, dağıtıldıktan sonra değiştirilemez. Açıkları gidermek veya yeni işlevler eklemek için yaygın bir uygulama, yeni bir sözleşme dağıtmaktır. Ancak bu, sözleşme adresinin değişmesine neden olur ve bu sözleşmeyi kullanan tüm DApp'lerin güncellenmesi gerekir. Ayrıca, eski sözleşmedeki durum verilerinin taşınması da gereklidir, bu da büyük bir iş yükü ve hata yapma olasılığı taşır.
Bunun için genellikle veri ile mantığın ayrıldığı bir yapı kullanılır: veriler durum sözleşmesinde saklanır, tüm mantık başka bir mantık sözleşmesinde gerçekleştirilir. Güncelleme sırasında sadece mantık sözleşmesi güncellenir, durum verilerinin taşınmasına gerek yoktur.
Spesifik uygulamada, (Proxy Contract) adlı bir proxy sözleşmesi kullanılabilir. Proxy sözleşmesi verileri depolar ve deleGatecall ile mantık sözleşmesi A'yı çağırır. Güncellemelerde, yalnızca yeni mantık sözleşmesi B'yi dağıtmak ve ardından proxy sözleşmesinin B'ye yönlendirilmesi yeterlidir.
NEAR akıllı sözleşmeler güncelleme planı
StatusMessage projesini örnek alarak, NEAR akıllı sözleşmelerinin yaygın güncelleme yöntemlerini tanıtacağım.
akıllı sözleşmeler veri yapısı değiştirilmedi
Eğer yalnızca sözleşme mantığını değiştiriyorsanız, veri yapısı değişikliği olmaksızın, yeni kodu yeniden dağıtmak için doğrudan near deploy kullanabilirsiniz. Mevcut verilere hala normal şekilde erişilebilir.
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 eski ve yeni veri yapılarının uyumsuz olmasına ve veriye normal şekilde erişilememesine neden olacaktır.
Migrate yöntemini kullanarak yükseltme
NEAR, sözleşmeleri yükseltmeye yardımcı olmak için Migrate yöntemini sunar. Yeni sözleşmeye migrate yöntemini ekleyin:
pas
#[private]
#[init(ignore_state)]
Self {
let old_state: OldStatusMessage = env::state_read().expect('failed');
Kendisi {
taglines: old_state.records,
bios: LookupMap::new(b'b'.to_vec)((,
}
}
Akıllı sözleşmeler yükseltme güvenlik değerlendirmesi
Yetki kontrolü: Yükseltme fonksiyonu yalnızca sahip fonksiyonu olmalı, yalnızca sahip tarafından çağrılabilir.
Owner'ı DAO olarak ayarlamanızı öneririz, sözleşmeyi öneri ve oylama ile yönetin.
Göç fonksiyonundan önce #[init(ignore_state)] ekleyin, böylece yürütmeden önce durum yüklenmez.
Göç tamamlandıktan sonra göç fonksiyonunu silin, yalnızca bir kez çağrıldığından emin olun.
Yeni veri yapıları, taşınma sırasında başlatılacaktır.
Bu yükseltme çözümlerinin makul kullanımı, güvenliğin sağlanmasıyla birlikte akıllı sözleşmeleri esnek bir şekilde yükseltip bakımını yapmayı mümkün kılar.
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.
20 Likes
Reward
20
7
Share
Comment
0/400
NFTArtisanHQ
· 07-24 20:20
ilginç bir bakış açısı... ama proxy deseni tam olarak duchamp'ın kod biçimindeki hazır yapıtı değil açıkçası
View OriginalReply0
rugdoc.eth
· 07-24 10:17
Ryst sadece biraz sorunlu.
View OriginalReply0
Hash_Bandit
· 07-23 14:51
btc'nin dizüstü bilgisayarlarda çıkarıldığı zaman oradaydım... güncellenebilirlik anahtar ama çok riskli açıkçası
View OriginalReply0
AllTalkLongTrader
· 07-21 20:52
Yine güncelleme hakkında konuşuyorlar. Bence en güvenlisi geçici olarak çevrimdışı kalmak ve yeniden açmaktır.
View OriginalReply0
TestnetFreeloader
· 07-21 20:51
Açıklar geliyorsa, erken gelsin! Bir dalga koparabiliriz.
View OriginalReply0
ApeEscapeArtist
· 07-21 20:50
Açıkları onarmak hiç bitmiyor, bu yüzden çok fazla umut beslemeyin.
View OriginalReply0
GasWhisperer
· 07-21 20:24
açıkçası akıllı sözleşmeler sadece başınıza gelecek hatalar için bekleyen hatalar... eşleştirme seni istismarların önünden kurtaramaz lmao
Rust akıllı sözleşmeler yükseltme stratejisi: güvenlik ve bakımın sağlanması
Rust akıllı sözleşmeler yükseltme planı ayrıntıları
Akıllı sözleşmeler esasen bir programdır ve kusurlar barındırması kaçınılmazdır. Çok sayıda test ve denetimden geçse bile, hala güvenlik açıkları ortaya çıkabilir. Bir saldırgan tarafından istismar edildiğinde, kullanıcı varlık kaybına yol açabilir ve sonuçları ciddi olabilir. Bu nedenle, sözleşmenin yükseltilebilirliği oldukça gereklidir, esas olarak güvenlik açıklarının giderilmesi ve yeni özelliklerin eklenmesi için kullanılır. Bu yazıda Rust sözleşmelerinin yaygın yükseltme yöntemleri tanıtılacaktır.
Ethereum akıllı sözleşmeler yükseltme planı
Ethereum akıllı sözleşmeleri değişmezdir, dağıtıldıktan sonra değiştirilemez. Açıkları gidermek veya yeni işlevler eklemek için yaygın bir uygulama, yeni bir sözleşme dağıtmaktır. Ancak bu, sözleşme adresinin değişmesine neden olur ve bu sözleşmeyi kullanan tüm DApp'lerin güncellenmesi gerekir. Ayrıca, eski sözleşmedeki durum verilerinin taşınması da gereklidir, bu da büyük bir iş yükü ve hata yapma olasılığı taşır.
Bunun için genellikle veri ile mantığın ayrıldığı bir yapı kullanılır: veriler durum sözleşmesinde saklanır, tüm mantık başka bir mantık sözleşmesinde gerçekleştirilir. Güncelleme sırasında sadece mantık sözleşmesi güncellenir, durum verilerinin taşınmasına gerek yoktur.
Spesifik uygulamada, (Proxy Contract) adlı bir proxy sözleşmesi kullanılabilir. Proxy sözleşmesi verileri depolar ve deleGatecall ile mantık sözleşmesi A'yı çağırır. Güncellemelerde, yalnızca yeni mantık sözleşmesi B'yi dağıtmak ve ardından proxy sözleşmesinin B'ye yönlendirilmesi yeterlidir.
NEAR akıllı sözleşmeler güncelleme planı
StatusMessage projesini örnek alarak, NEAR akıllı sözleşmelerinin yaygın güncelleme yöntemlerini tanıtacağım.
akıllı sözleşmeler veri yapısı değiştirilmedi
Eğer yalnızca sözleşme mantığını değiştiriyorsanız, veri yapısı değişikliği olmaksızın, yeni kodu yeniden dağıtmak için doğrudan near deploy kullanabilirsiniz. Mevcut verilere hala normal şekilde erişilebilir.
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 eski ve yeni veri yapılarının uyumsuz olmasına ve veriye normal şekilde erişilememesine neden olacaktır.
Migrate yöntemini kullanarak yükseltme
NEAR, sözleşmeleri yükseltmeye yardımcı olmak için Migrate yöntemini sunar. Yeni sözleşmeye migrate yöntemini ekleyin:
pas #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); Kendisi { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }
Dağıtım sırasında migrate yöntemini çağırın:
yakın konuşlandır \ --wasmDosyası hedef/wasm32-bilinmeyen-bilinmeyen/salınım/durum_mesajı.wasm
--initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.blocksec_upgrade.testnet
Bu, eski sözleşme verilerini yeni yapıya başarıyla taşıyabilir.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Akıllı sözleşmeler yükseltme güvenlik değerlendirmesi
Yetki kontrolü: Yükseltme fonksiyonu yalnızca sahip fonksiyonu olmalı, yalnızca sahip tarafından çağrılabilir.
Owner'ı DAO olarak ayarlamanızı öneririz, sözleşmeyi öneri ve oylama ile yönetin.
Göç fonksiyonundan önce #[init(ignore_state)] ekleyin, böylece yürütmeden önce durum yüklenmez.
Göç tamamlandıktan sonra göç fonksiyonunu silin, yalnızca bir kez çağrıldığından emin olun.
Yeni veri yapıları, taşınma sırasında başlatılacaktır.
Bu yükseltme çözümlerinin makul kullanımı, güvenliğin sağlanmasıyla birlikte akıllı sözleşmeleri esnek bir şekilde yükseltip bakımını yapmayı mümkün kılar.