Akıllı sözleşmeler esasen bir programdır ve kaçınılmaz olarak kusurlar içerir. Çok sayıda test ve denetimden geçmesine rağmen, hala açıklar olabilir. Sözleşme açıkları saldırıya uğradığında, kullanıcı varlıklarının kaybına neden olabilir ve bu ciddi sonuçlar doğurur. Açıkları düzeltmek ve yeni özellikler eklemek, sözleşmenin yükseltilmesini gerektirir. Bu nedenle, sözleşmenin yükseltilebilirliği son derece gereklidir. Bu yazıda Rust sözleşmelerinin yükseltme yöntemleri tanıtılacaktır.
NEAR akıllı sözleşmeler yükseltme 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ığı değiştirilirse ve veri yapısında bir değişiklik yoksa, yeni kodu yeniden dağıtmak için near deploy kullanabilirsiniz. Eski sözleşmedeki veriler normal şekilde okunabilir.
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 ve yeni veri yapısının uyuşmamasına neden olur ve mevcut veriyi okuyamazsınız.
3. Migrate ile akıllı sözleşmeleri güncelleme
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
#[private]
#[init(ignore_state)]
Self {
let old_state: OldStatusMessage = env::state_read().expect('failed');
Kendi {
taglines: old_state.records,
bios: LookupMap::new(b'b'.to_vec)((,
}
}
Yeniden dağıtım sırasında migrate yöntemini çağırın:
Yükseltme fonksiyonu yalnızca owner fonksiyonu olmalıdır, böylece sadece owner tarafından çağrılabilir.
Sözleşme sahibini DAO olarak ayarlamanızı öneririz, öneri ve oylama ile birlikte yönetmek için.
Göç fonksiyonundan önce #[init(ignore_state)] ekleyin
Göç tamamlandıktan sonra göç fonksiyonunu silin.
Yeni veri yapısı, göç sırasında başlatıldı.
Sözleşme yükseltmeleri, sözleşme güvenliğini sağlamak için önemli bir yöntemdir; geliştiricilerin bu durumu dikkatle ele alması ve yükseltme sürecinin güvenliğini garanti etmesi gerekmektedir.
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.
10 Likes
Reward
10
2
Repost
Share
Comment
0/400
SandwichVictim
· 08-13 22:24
Bu kadar çok açık varken endişeliyim.
View OriginalReply0
BlockImposter
· 08-13 22:24
Yükseltme yapsan da yapmasan da delikten çıkamazsın işte~
Rust akıllı sözleşmeler yükseltme tam kılavuzu: NEAR'dan güvenlik değerlendirmelerine
Rust akıllı sözleşmeler yükseltme pratiği
Akıllı sözleşmeler esasen bir programdır ve kaçınılmaz olarak kusurlar içerir. Çok sayıda test ve denetimden geçmesine rağmen, hala açıklar olabilir. Sözleşme açıkları saldırıya uğradığında, kullanıcı varlıklarının kaybına neden olabilir ve bu ciddi sonuçlar doğurur. Açıkları düzeltmek ve yeni özellikler eklemek, sözleşmenin yükseltilmesini gerektirir. Bu nedenle, sözleşmenin yükseltilebilirliği son derece gereklidir. Bu yazıda Rust sözleşmelerinin yükseltme yöntemleri tanıtılacaktır.
NEAR akıllı sözleşmeler yükseltme 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ığı değiştirilirse ve veri yapısında bir değişiklik yoksa, yeni kodu yeniden dağıtmak için near deploy kullanabilirsiniz. Eski sözleşmedeki veriler normal şekilde okunabilir.
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 ve yeni veri yapısının uyuşmamasına neden olur ve mevcut veriyi okuyamazsınız.
3. Migrate ile akıllı sözleşmeleri güncelleme
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 #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); Kendi { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }
Yeniden dağıtım sırasında migrate yöntemini çağırın:
yakın dağıtım
--wasmFile hedef/wasm32-bilinmeyen-bilinmeyen/salı/status_message.wasm
--initFunction 'migrate' \ --initArgs '{}' \ --accountId statusmessage.blocksec_upgrade.testnet
Bu şekilde eski sözleşme verileri yeni sözleşmeye başarıyla taşınabilir.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Sözleşme Güncellemesinin Güvenlik Değerlendirmesi
Yükseltme fonksiyonu yalnızca owner fonksiyonu olmalıdır, böylece sadece owner tarafından çağrılabilir.
Sözleşme sahibini DAO olarak ayarlamanızı öneririz, öneri ve oylama ile birlikte yönetmek için.
Göç fonksiyonundan önce #[init(ignore_state)] ekleyin
Göç tamamlandıktan sonra göç fonksiyonunu silin.
Yeni veri yapısı, göç sırasında başlatıldı.
Sözleşme yükseltmeleri, sözleşme güvenliğini sağlamak için önemli bir yöntemdir; geliştiricilerin bu durumu dikkatle ele alması ve yükseltme sürecinin güvenliğini garanti etmesi gerekmektedir.