Akıllı sözleşmeler bir program türü olarak, kusurlu olma ihtimali taşır. Çok sayıda test ve denetim yapılmış olsa bile, hala güvenlik açıkları bulunabilir. Eğer bu açıklar kötü niyetli kişiler tarafından kullanılırsa, kullanıcı varlıklarının kaybına neden olabilir ve sonuçları ciddi olabilir. 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. Bu makalede Rust sözleşmelerinin yükseltme yöntemleri tanıtılacaktır.
NEAR akıllı sözleşmeler güncelleme 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ığını değiştiriyorsanız ve veri yapısı değişikliği içermiyorsa, yeni kodu yeniden dağıtmak için doğrudan near deploy komutunu kullanabilirsiniz. Örneğin, yeni bir fonksiyon eklemek:
pas
#[near_bindgen]
impl StatusMessage {
Option {
let account_id = env::signer_account_id();
self.records.insert(&account_id, &message);
return self.records.get(&account_id);
}
}
Yeniden dağıtım sonrası, orijinal sözleşmedeki veriler hala başarıyla okunabilir.
( 2. Sözleşme veri yapısı değiştirildi
Eğer orijinal veri yapısını değiştirdiyseniz, örneğin:
Akıllı sözleşmelerin yükseltilmesi için güvenlik değerlendirmeleri
Yetki kontrolü: Yükseltme fonksiyonu yalnızca owner fonksiyonu olmalıdır, böylece yalnızca owner tarafından çağrılabilir.
Sözleşme sahibinin DAO olarak ayarlanması önerilir, öneri ve oylama yoluyla birlikte yönetim sağlanır.
Göç işlevinin önüne #[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ısı, taşınma sırasında başlatılacak.
Yukarıdaki ilkelere uyarak, akıllı sözleşmeleri güvenli bir şekilde yükseltebilir ve bakımını yapabilirsiniz.
</string,></string,>
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.
8 Likes
Reward
8
5
Repost
Share
Comment
0/400
GweiWatcher
· 08-12 18:54
Sözleşme oyuncusu gürleyerek bağırdı: İster yüksel, ister yükselme, sen bilirsin!
View OriginalReply0
ContractHunter
· 08-12 18:54
Ah ah ah, yine tanıdık rust güncelleme çukuruna düştüm.
View OriginalReply0
NFTRegretter
· 08-12 18:35
Lan yine güncelleme yapmak zorundayım, çok sinir bozucu.
View OriginalReply0
TokenVelocity
· 08-12 18:31
Bu kadar çok açık varken kim dokunur ki?
View OriginalReply0
DuskSurfer
· 08-12 18:31
Sözleşme açıkları her gün var, gerçekten insanı sinirlendiriyor.
Rust akıllı sözleşmeler güncelleme kılavuzu: NEAR sözleşmesinin güvenlik güncellemeleri ve veri taşıma
Rust akıllı sözleşmeler yükseltme kılavuzu
Akıllı sözleşmeler bir program türü olarak, kusurlu olma ihtimali taşır. Çok sayıda test ve denetim yapılmış olsa bile, hala güvenlik açıkları bulunabilir. Eğer bu açıklar kötü niyetli kişiler tarafından kullanılırsa, kullanıcı varlıklarının kaybına neden olabilir ve sonuçları ciddi olabilir. 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. Bu makalede Rust sözleşmelerinin yükseltme yöntemleri tanıtılacaktır.
NEAR akıllı sözleşmeler güncelleme 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ığını değiştiriyorsanız ve veri yapısı değişikliği içermiyorsa, yeni kodu yeniden dağıtmak için doğrudan near deploy komutunu kullanabilirsiniz. Örneğin, yeni bir fonksiyon eklemek:
pas #[near_bindgen] impl StatusMessage { Option { let account_id = env::signer_account_id(); self.records.insert(&account_id, &message); return self.records.get(&account_id); } }
Yeniden dağıtım sonrası, orijinal sözleşmedeki veriler hala başarıyla okunabilir.
( 2. Sözleşme veri yapısı değiştirildi
Eğer orijinal veri yapısını değiştirdiyseniz, örneğin:
pas #[near_bindgen] #[derive)BorshDeserialize, BorshSerialize###] pub struct DurumMesajı { etiketler: LookupMap<string, string="">, bios: LookupMap<string, string="">, }
Doğrudan yeniden dağıtım, sözleşme durumunu tersine serileştirememe hatasına yol açar.
( 3. Migrate yöntemini kullanarak yükseltme
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 #) #[init###ignore_state[private]] Self { let eski_durum: EskiDurumMesajı = env::state_read().expect('başarısız'); Kendisi { etiketler: eski_durum.kayıtlar, bios: LookupMap::new(b'b'.to_vec)(), } }
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 sözleşmeyi başarıyla yükseltebilir ve eski verileri taşıyabilirsiniz.
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ısı, taşınma sırasında başlatılacak.
Yukarıdaki ilkelere uyarak, akıllı sözleşmeleri güvenli bir şekilde yükseltebilir ve bakımını yapabilirsiniz.