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:
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.
Rust akıllı sözleşmeler yükseltme kılavuzu: NEAR platform güvenli geçiş uygulamaları
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
Güncelleme fonksiyonu yetki kontrolü yapılmalıdır, genellikle yalnızca geliştirici veya DAO tarafından çağrılabilir.
Sözleşme sahibinin DAO olarak ayarlanması önerilir, öneri ve oylama ile birlikte yönetilmesi.
Göç fonksiyonundan önce #[init(ignore_state)] ekleyin, böylece yürütmeden önce durum yüklenmez.
Göç tamamlandıktan sonra göç fonksiyonunu silin, sadece bir kez çağrıldığından emin olun.
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.