Rust akıllı sözleşmeler yetiştirme günlüğü (9): Sözleşme güvenliği için sözleşme yükseltme
Akıllı sözleşmeler, bir program kodu biçimi olarak, kusurlar ve açıklar barındırma olasılığından kaçınılmazdır. Yeterince test edilen ve denetlenen sözleşmeler bile, keşfedilmemiş sorunlar barındırabilir. Bu potansiyel sorunlar bir kez kullanıldığında, kullanıcı varlık kaybı gibi ciddi sonuçlara yol açabilir. Bu nedenle, sözleşme yükseltme yeteneği, açıkların onarılması ve yeni işlevlerin eklenmesi açısından son derece önemlidir. Bu makalede, NEAR platformundaki Rust sözleşmelerinin yükseltme yöntemleri tanıtılacaktır.
1. Sözleşme yükseltmenin gerekliliği
Akıllı sözleşmeler esasen program kodudur ve kaçınılmaz olarak hatalar içerebilir. Çok sayıda test ve denetimden geçmesine rağmen, hala güvenlik açıkları olabilir. Bu güvenlik açıkları, saldırganlar tarafından kullanıldığında, kullanıcı varlıklarının kaybı gibi ciddi sonuçlara yol açabilir. 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.
2. Ethereum akıllı sözleşmelerinin yaygın yükseltme yöntemleri
Ethereum üzerindeki akıllı sözleşmeler değişmezlik özelliğine sahiptir, bir kez dağıtıldığında değiştirilemez. Bu sorunu çözmek için genellikle (Proxy Contract) şeklinde bir proxy sözleşme kullanılır:
Vekil sözleşmeler, verileri depolamak için kullanılır ve mantık sözleşmesini çağırmak için deleGatecall kullanır.
Mantık sözleşmeleri belirli iş mantığını içerir.
Güncellemelerde sadece yeni bir mantık sözleşmesi dağıtılmalı ve proxy sözleşmesi güncellenmelidir.
Bu yöntem, mevcut verileri koruyarak yalnızca mantık kısmını güncelleyebilir.
3. NEAR akıllı sözleşmelerin güncelleme yöntemleri
Aşağıda StatusMessage projesi örneği ile NEAR akıllı sözleşmelerinin güncellenme yöntemleri tanıtılacaktır:
3.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 yoksa, yeni kodu yeniden dağıtmak için doğrudan near deploy komutunu kullanabilirsiniz. Mevcut veriler korunacaktır.
3.2 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, yeni ve eski veri yapılarının uyumsuz olmasına neden olur ve mevcut veriler düzgün bir şekilde okunamaz.
3.3 Migrate yöntemini kullanarak yükseltme
NEAR, sözleşme güncellemeleri için Migrate yöntemini sağlar. Yeni sözleşmede migrate fonksiyonunu ekleyin:
pas
#[private]
#[init(ignore_state)]
Self {
let old_state: OldStatusMessage = env::state_read().expect("başarısız");
Kendisi {
etiketler: old_state.records,
bios: LookupMap::new(b"b".to_vec)((,
}
}
Dağıtım sırasında migrate yöntemini çağırın:
yakın dağıtım
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId durum mesajı.blocksec_yükseltme.testnet
Bu şekilde veri taşınması tamamlanabilir, eski ve yeni sözleşme veri yapıları uyumsuz olsa bile normal bir şekilde güncellenebilir.
4. Akıllı sözleşmelerin güncellenmesinin güvenlik değerlendirmesi
Sözleşme yükseltmeleri aşağıdaki güvenlik faktörlerini dikkate almalıdır:
Yükseltme yetkilerini sıkı bir şekilde kontrol edin, yalnızca geliştiricilerin veya DAO'nun yükseltmesine izin verin.
Sözleşme sahibini DAO olarak ayarlamanızı öneririz, öneri ve oylama ile yönetim.
migrate fonksiyonundan önce #[init)ignore_state)] ekleyin
Taşındıktan sonra migrate fonksiyonunu sil, yalnızca bir kez çağrıldığından emin ol.
Taşınma sırasında yeni veri yapısı başlatıldı.
Bu önlemler sayesinde, sözleşme yükseltmelerinin güvenliği sağlanabilir ve yükseltme sürecindeki riskler azaltılabilir.
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.
11 Likes
Reward
11
5
Share
Comment
0/400
liquiditea_sipper
· 07-13 07:37
Böyle güçlü geliyor ama yine de denemeye cesaret edemiyorum.
View OriginalReply0
NeverVoteOnDAO
· 07-13 07:37
Yükseltmek mantıklı mı? Hiçbir zaman tam olarak temizlenemediğini hissediyorum.
View OriginalReply0
BrokenDAO
· 07-13 07:24
Yetki arka kapı ile eşdeğerdir, güvenlikten nasıl bahsedebiliriz?
View OriginalReply0
LayerZeroHero
· 07-13 07:24
Yükseltme tamamlandığında, artık bir şey kontrol edemez.
Rust akıllı sözleşmeler yükseltme ipuçları: Ethereum'dan NEAR'a en iyi uygulamalar
Rust akıllı sözleşmeler yetiştirme günlüğü (9): Sözleşme güvenliği için sözleşme yükseltme
Akıllı sözleşmeler, bir program kodu biçimi olarak, kusurlar ve açıklar barındırma olasılığından kaçınılmazdır. Yeterince test edilen ve denetlenen sözleşmeler bile, keşfedilmemiş sorunlar barındırabilir. Bu potansiyel sorunlar bir kez kullanıldığında, kullanıcı varlık kaybı gibi ciddi sonuçlara yol açabilir. Bu nedenle, sözleşme yükseltme yeteneği, açıkların onarılması ve yeni işlevlerin eklenmesi açısından son derece önemlidir. Bu makalede, NEAR platformundaki Rust sözleşmelerinin yükseltme yöntemleri tanıtılacaktır.
1. Sözleşme yükseltmenin gerekliliği
Akıllı sözleşmeler esasen program kodudur ve kaçınılmaz olarak hatalar içerebilir. Çok sayıda test ve denetimden geçmesine rağmen, hala güvenlik açıkları olabilir. Bu güvenlik açıkları, saldırganlar tarafından kullanıldığında, kullanıcı varlıklarının kaybı gibi ciddi sonuçlara yol açabilir. 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.
2. Ethereum akıllı sözleşmelerinin yaygın yükseltme yöntemleri
Ethereum üzerindeki akıllı sözleşmeler değişmezlik özelliğine sahiptir, bir kez dağıtıldığında değiştirilemez. Bu sorunu çözmek için genellikle (Proxy Contract) şeklinde bir proxy sözleşme kullanılır:
Bu yöntem, mevcut verileri koruyarak yalnızca mantık kısmını güncelleyebilir.
3. NEAR akıllı sözleşmelerin güncelleme yöntemleri
Aşağıda StatusMessage projesi örneği ile NEAR akıllı sözleşmelerinin güncellenme yöntemleri tanıtılacaktır:
3.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 yoksa, yeni kodu yeniden dağıtmak için doğrudan near deploy komutunu kullanabilirsiniz. Mevcut veriler korunacaktır.
3.2 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, yeni ve eski veri yapılarının uyumsuz olmasına neden olur ve mevcut veriler düzgün bir şekilde okunamaz.
3.3 Migrate yöntemini kullanarak yükseltme
NEAR, sözleşme güncellemeleri için Migrate yöntemini sağlar. Yeni sözleşmede migrate fonksiyonunu ekleyin:
pas #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect("başarısız"); Kendisi { etiketler: old_state.records, bios: LookupMap::new(b"b".to_vec)((, } }
Dağıtım sırasında migrate yöntemini çağırın:
yakın dağıtım
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId durum mesajı.blocksec_yükseltme.testnet
Bu şekilde veri taşınması tamamlanabilir, eski ve yeni sözleşme veri yapıları uyumsuz olsa bile normal bir şekilde güncellenebilir.
4. Akıllı sözleşmelerin güncellenmesinin güvenlik değerlendirmesi
Sözleşme yükseltmeleri aşağıdaki güvenlik faktörlerini dikkate almalıdır:
Bu önlemler sayesinde, sözleşme yükseltmelerinin güvenliği sağlanabilir ve yükseltme sürecindeki riskler azaltılabilir.