Sözleşme yükseltmesi, akıllı sözleşmeler geliştirme sürecinde önemli bir aşamadır. Blockchain'in değiştirilemezlik özelliği nedeniyle, bir kez zincire yerleştirilen akıllı sözleşmeler doğrudan değiştirilemez. Ancak pratik uygulamalarda, sözleşmeler genellikle güvenlik açıklarını düzeltmek veya yeni işlevler eklemek için yükseltme gerektirir. Bu yazıda, Rust akıllı sözleşmelerinin yaygın yükseltme yöntemleri tanıtılacaktır.
1. Sözleşme Yükseltmenin Gerekliliği
Akıllı sözleşmeler program kodu olarak, kaçınılmaz olarak açıklar içerebilir. Çok sayıda test ve denetimden geçmesine rağmen, hala keşfedilmemiş sorunlar olabilir. Bir kez açık kötü niyetli olarak kullanıldığında, ciddi varlık kayıplarına yol açabilir. Bu nedenle, akıllı sözleşmeler için yükseltilebilirlik çok önemlidir, esas olarak şunlar için kullanılır:
Bulunan güvenlik açıkları düzeltildi
Yeni fonksiyonlar ekleme
Akıllı sözleşmeler mantığını optimize et, performansı artır
2. NEAR akıllı sözleşmeler güncelleme yöntemi
Aşağıda StatusMessage projesi örneği ile NEAR akıllı sözleşmelerinin yükseltme yöntemleri tanıtılacaktır:
2.1 Sözleşme veri yapısı değiştirilmedi
Eğer sadece sözleşme mantığını değiştiriyorsanız, veri yapısı değişiklikleriyle ilgili değilse, doğrudan near deploy komutunu kullanarak yeni kodu yeniden dağıtabilirsiniz. Örnek:
bash
yakın dağıtım
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Bu durumda, mevcut sözleşmedeki veriler korunacaktır.
2.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 eski ve yeni veri yapısının uyumsuzluğu hatasına neden olur. Bu durumda, güncelleme yapmak için göç yönteminin kullanılması gerekir.
Yeni sözleşmeye migrate yöntemini ekle:
pas
#[private]
#[init(ignore_state)]
Self {
let old_state: OldStatusMessage = env::state_read().expect('failed');
Kendisi {
etiketler: old_state.records,
bios: LookupMap::new(b'b'.to_vec)((,
}
}
Sonra dağıtım sırasında migrate yöntemini çağırın:
3. Akıllı sözleşmelerin güncellenmesiyle ilgili güvenlik değerlendirmeleri
Kontrat yükseltmesi yapılırken, aşağıdaki noktalara dikkat edilmelidir:
Yükseltme izinlerini sıkı bir şekilde kontrol et, yalnızca sözleşme sahibi veya DAO'nun yükseltmesine izin ver.
Sözleşme sahibinin DAO olarak ayarlanmasını öneririz, yükseltmeleri yönetmek için öneri ve oylama yoluyla.
Göç işlevinden önce #[init(ignore_state)] ekleyin, böylece yürütmeden önce durum yüklenmez.
Göç tamamlandıktan sonra göç fonksiyonunu silin, tekrar çağrılmasını önleyin.
Göç sırasında yeni veri yapısının başlatılması tamamlandı.
Rasyonel bir şekilde tasarlanmış ve uygulanmış bir yükseltme planı, akıllı sözleşmelerin yükseltilebilirliğini garanti ederken, sözleşme ve kullanıcı varlıklarının güvenliğini de en üst düzeyde sağlayabilir.
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 yöntemleri ve güvenlik hususları
Rust akıllı sözleşmeler yükseltme yöntemleri tartışması
Sözleşme yükseltmesi, akıllı sözleşmeler geliştirme sürecinde önemli bir aşamadır. Blockchain'in değiştirilemezlik özelliği nedeniyle, bir kez zincire yerleştirilen akıllı sözleşmeler doğrudan değiştirilemez. Ancak pratik uygulamalarda, sözleşmeler genellikle güvenlik açıklarını düzeltmek veya yeni işlevler eklemek için yükseltme gerektirir. Bu yazıda, Rust akıllı sözleşmelerinin yaygın yükseltme yöntemleri tanıtılacaktır.
1. Sözleşme Yükseltmenin Gerekliliği
Akıllı sözleşmeler program kodu olarak, kaçınılmaz olarak açıklar içerebilir. Çok sayıda test ve denetimden geçmesine rağmen, hala keşfedilmemiş sorunlar olabilir. Bir kez açık kötü niyetli olarak kullanıldığında, ciddi varlık kayıplarına yol açabilir. Bu nedenle, akıllı sözleşmeler için yükseltilebilirlik çok önemlidir, esas olarak şunlar için kullanılır:
2. NEAR akıllı sözleşmeler güncelleme yöntemi
Aşağıda StatusMessage projesi örneği ile NEAR akıllı sözleşmelerinin yükseltme yöntemleri tanıtılacaktır:
2.1 Sözleşme veri yapısı değiştirilmedi
Eğer sadece sözleşme mantığını değiştiriyorsanız, veri yapısı değişiklikleriyle ilgili değilse, doğrudan near deploy komutunu kullanarak yeni kodu yeniden dağıtabilirsiniz. Örnek:
bash yakın dağıtım
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Bu durumda, mevcut sözleşmedeki veriler korunacaktır.
2.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 eski ve yeni veri yapısının uyumsuzluğu hatasına neden olur. Bu durumda, güncelleme yapmak için göç yönteminin kullanılması gerekir.
Yeni sözleşmeye migrate yöntemini ekle:
pas #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); Kendisi { etiketler: old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }
Sonra dağıtım sırasında migrate yöntemini çağırın:
bash yakın dağıtım
--wasmFile hedef/wasm32-bilinmeyen-bilinmeyen/sürüm/status_message.wasm
--initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.testnet
Bu, eski verilerin yeni veri yapısına taşınmasını sağlar.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
3. Akıllı sözleşmelerin güncellenmesiyle ilgili güvenlik değerlendirmeleri
Kontrat yükseltmesi yapılırken, aşağıdaki noktalara dikkat edilmelidir:
Rasyonel bir şekilde tasarlanmış ve uygulanmış bir yükseltme planı, akıllı sözleşmelerin yükseltilebilirliğini garanti ederken, sözleşme ve kullanıcı varlıklarının güvenliğini de en üst düzeyde sağlayabilir.