Bu makale, Rust akıllı sözleşmelerindeki yetki kontrolü sorununu iki açıdan ele alacaktır:
Sözleşme yönteminin görünürlüğü
Ayrıcalıklı fonksiyonların erişim kontrolü
Sözleşme Fonksiyonu Görünürlüğü
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğünün kontrolü son derece önemlidir. 2020 yılında Bancor Network borsasında meydana gelen güvenlik olayını örnek olarak ele alırsak, kritik transfer fonksiyonunun yanlışlıkla public olarak ayarlanması, kullanıcı varlıklarını riske atmıştır.
NEAR'ın Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü başlıca şu şekildedir:
pub fn: kamu fonksiyonu, sözleşme dışından çağrılabilir
fn: Sadece sözleşme içinde çağrılabilir
pub(crate) fn: crate içinde çağrılmayı kısıtla
Ayrıca, işlevi #[near_bindgen] ile işaretlenmemiş bir impl bloğunda tanımlamak, onu iç işlev olarak ayarlamanızı da sağlar.
Geri çağırma işlevi için, kamu olarak ayarlanması gerekir ancak aynı zamanda yalnızca sözleşmenin kendisi tarafından çağrılmasını sınırlamak gerekir. Bunu gerçekleştirmek için #[private] makrosunu kullanabilirsiniz.
Dikkat edilmesi gereken bir nokta, Rust'ta varsayılan olarak tüm içeriğin özel olduğudur, yalnızca pub Trait ve pub Enum içindeki öğeler hariç.
Ayrıcalıklı Fonksiyonların Erişim Kontrolü
Fonksiyon görünürlüğünün yanı sıra, anlamsal düzeyde tam bir erişim kontrol mekanizması oluşturulması gerekmektedir. Solidity'deki onlyOwner modifier'ına benzer şekilde, Rust'ta benzer bir trait tanımlayabiliriz:
Böyle bir trait kullanarak, ayrıcalıklı fonksiyonlara erişim kontrolü sağlanabilir ve yalnızca sözleşme sahibinin bu fonksiyonları çağırmasına izin verilir.
Bu ilkeye dayanarak, daha karmaşık bir trait özelleştirerek çoklu kullanıcı beyaz listesi veya birden fazla beyaz liste grubunun ince erişim kontrolünü sağlayabiliriz.
Bunun yanı sıra, farklı senaryoların güvenlik ihtiyaçlarını karşılamak için çağrı zaman kontrolü, çoklu imza mekanizması gibi daha fazla erişim kontrol yöntemi de uygulanabilir.
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 yetki kontrolü: fonksiyon görünürlüğü ve ayrıcalıklı erişim yönetimi
Rust akıllı sözleşmelerdeki yetki kontrolü
Bu makale, Rust akıllı sözleşmelerindeki yetki kontrolü sorununu iki açıdan ele alacaktır:
Sözleşme Fonksiyonu Görünürlüğü
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğünün kontrolü son derece önemlidir. 2020 yılında Bancor Network borsasında meydana gelen güvenlik olayını örnek olarak ele alırsak, kritik transfer fonksiyonunun yanlışlıkla public olarak ayarlanması, kullanıcı varlıklarını riske atmıştır.
NEAR'ın Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü başlıca şu şekildedir:
Ayrıca, işlevi #[near_bindgen] ile işaretlenmemiş bir impl bloğunda tanımlamak, onu iç işlev olarak ayarlamanızı da sağlar.
Geri çağırma işlevi için, kamu olarak ayarlanması gerekir ancak aynı zamanda yalnızca sözleşmenin kendisi tarafından çağrılmasını sınırlamak gerekir. Bunu gerçekleştirmek için #[private] makrosunu kullanabilirsiniz.
Dikkat edilmesi gereken bir nokta, Rust'ta varsayılan olarak tüm içeriğin özel olduğudur, yalnızca pub Trait ve pub Enum içindeki öğeler hariç.
Ayrıcalıklı Fonksiyonların Erişim Kontrolü
Fonksiyon görünürlüğünün yanı sıra, anlamsal düzeyde tam bir erişim kontrol mekanizması oluşturulması gerekmektedir. Solidity'deki onlyOwner modifier'ına benzer şekilde, Rust'ta benzer bir trait tanımlayabiliriz:
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); }
Böyle bir trait kullanarak, ayrıcalıklı fonksiyonlara erişim kontrolü sağlanabilir ve yalnızca sözleşme sahibinin bu fonksiyonları çağırmasına izin verilir.
Bu ilkeye dayanarak, daha karmaşık bir trait özelleştirerek çoklu kullanıcı beyaz listesi veya birden fazla beyaz liste grubunun ince erişim kontrolünü sağlayabiliriz.
Bunun yanı sıra, farklı senaryoların güvenlik ihtiyaçlarını karşılamak için çağrı zaman kontrolü, çoklu imza mekanizması gibi daha fazla erişim kontrol yöntemi de uygulanabilir.