Rust akıllı sözleşmeler geliştirme günlüğü (7) Sözleşme güvenliği ve yetki kontrolü
Bu makalede, Rust akıllı sözleşmelerindeki yetki kontrolünü iki açıdan ele alacağız:
Sözleşme yönteminin görünürlüğü
Ayrıcalık fonksiyonu erişim kontrolü
1. Sözleşme fonksiyonu görünürlüğü
Sözleşme fonksiyonlarının görünürlük kontrolü, kritik işlevleri korumak için çok önemlidir. Örneğin, Bancor Network borsa 2020 Haziran'daki güvenlik olayı, kritik transfer fonksiyonunun yanlışlıkla public olarak ayarlanması nedeniyle kullanıcı varlıklarının risk altına girmesine neden olmuştur.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü aşağıdaki gibidir:
pub fn: kamu fonksiyonu, dışarıdan çağrılabilir
fn: Dahili fonksiyon, yalnızca sözleşme içinde çağrılabilir
pub(crate) fn: crate içinde çağırma kısıtlaması
Ayrıca, fonksiyonu #[near_bindgen] ile süslenmemiş bir impl bloğunda tanımlamak, onun bir iç fonksiyon olmasını da sağlayabilir.
Geri çağırma fonksiyonları için, public olarak ayarlanmalı ancak yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlanmalıdır. Bu işlevselliği #[private] makrosu ile gerçekleştirebilirsiniz.
Rust'ta varsayılan görünürlük private'tir, bu bazı Solidity sürümlerinin varsayılan public'inden farklıdır. İstisna olarak pub trait ve pub enum içindeki öğeler varsayılan olarak public'tir.
2. Ayrıcalık Fonksiyonlarının Erişim Kontrolü
Fonksiyon görünürlüğünün yanı sıra, ayrıcalıklı fonksiyonların erişimini kontrol etmek için bir beyaz liste mekanizması oluşturulması gerekir. Solidity'deki onlyOwner modifier'ına benzer şekilde, bir Ownable trait'i uygulanabilir:
Bu trait'i kullanarak yalnızca owner'ın belirli ayrıcalıklı fonksiyonları çağırmasını kısıtlayabilirsiniz. Bu ilkeye dayanarak, daha karmaşık bir beyaz liste ayarlayarak ayrıntılı erişim kontrolü sağlanabilir.
3. Diğer Erişim Kontrol Yöntemleri
Sözleşme çağrısı zamanlaması kontrolü, çoklu imza çağrı mekanizması, DAO yönetimi gibi daha fazla erişim kontrol yöntemleri de dikkate alınabilir, bunlar sonraki makalelerde ayrıntılı olarak açıklanacaktır.
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.
7 Likes
Reward
7
7
Share
Comment
0/400
LootboxPhobia
· 11h ago
Kaldım kaldım, akıllı sözleşmeleri öğrenemiyorum.
View OriginalReply0
GasOptimizer
· 11h ago
Görselleştirme ile çoklu imza gas tüketimi başka bir büyük konu.
View OriginalReply0
BridgeJumper
· 11h ago
Kodlar güvende mi? Yine de enjekte ediliyor.
View OriginalReply0
UncleLiquidation
· 11h ago
Multi-signature güvenliği fena değil.
View OriginalReply0
UncleWhale
· 11h ago
Güvenlik hala ciddiyetle ele alınmalı.
View OriginalReply0
BankruptcyArtist
· 11h ago
Multi-signature ne işe yarar, açıklar olsa bile aynı şekilde sömürülebilir.
Rust akıllı sözleşmeler güvenliği ilerisi: Yetki kontrolü ve erişim yönetimi pratiği
Rust akıllı sözleşmeler geliştirme günlüğü (7) Sözleşme güvenliği ve yetki kontrolü
Bu makalede, Rust akıllı sözleşmelerindeki yetki kontrolünü iki açıdan ele alacağız:
1. Sözleşme fonksiyonu görünürlüğü
Sözleşme fonksiyonlarının görünürlük kontrolü, kritik işlevleri korumak için çok önemlidir. Örneğin, Bancor Network borsa 2020 Haziran'daki güvenlik olayı, kritik transfer fonksiyonunun yanlışlıkla public olarak ayarlanması nedeniyle kullanıcı varlıklarının risk altına girmesine neden olmuştur.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü aşağıdaki gibidir:
Ayrıca, fonksiyonu #[near_bindgen] ile süslenmemiş bir impl bloğunda tanımlamak, onun bir iç fonksiyon olmasını da sağlayabilir.
Geri çağırma fonksiyonları için, public olarak ayarlanmalı ancak yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlanmalıdır. Bu işlevselliği #[private] makrosu ile gerçekleştirebilirsiniz.
Rust'ta varsayılan görünürlük private'tir, bu bazı Solidity sürümlerinin varsayılan public'inden farklıdır. İstisna olarak pub trait ve pub enum içindeki öğeler varsayılan olarak public'tir.
2. Ayrıcalık Fonksiyonlarının Erişim Kontrolü
Fonksiyon görünürlüğünün yanı sıra, ayrıcalıklı fonksiyonların erişimini kontrol etmek için bir beyaz liste mekanizması oluşturulması gerekir. Solidity'deki onlyOwner modifier'ına benzer şekilde, bir Ownable trait'i uygulanabilir:
pas pub trait Sahiplenebilir { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Bu trait'i kullanarak yalnızca owner'ın belirli ayrıcalıklı fonksiyonları çağırmasını kısıtlayabilirsiniz. Bu ilkeye dayanarak, daha karmaşık bir beyaz liste ayarlayarak ayrıntılı erişim kontrolü sağlanabilir.
3. Diğer Erişim Kontrol Yöntemleri
Sözleşme çağrısı zamanlaması kontrolü, çoklu imza çağrı mekanizması, DAO yönetimi gibi daha fazla erişim kontrol yöntemleri de dikkate alınabilir, bunlar sonraki makalelerde ayrıntılı olarak açıklanacaktır.