Sözleşme fonksiyonlarının görünürlük kontrolü, kritik kısımların yanlış işlemlerden korunması için önemlidir. 18 Haziran 2020'deki Bancor Network borsa güvenlik olayı örneğinde olduğu gibi, kritik transfer fonksiyonunun public olarak ayarlanması nedeniyle kullanıcıların 590.000 dolarlık varlıkları risk altına girmiştir.
pub fn: public fonksiyonu, sözleşme dışından çağrılabilir
fn: varsayılan private, yalnızca sözleşme içinde çağrılabilir
pub(crate) fn: crate içinde çağrıyı kısıtla
Başka bir internal yöntem ayarlama şekli, #[near_bindgen] dekoratörü eklenmeden bağımsız bir impl Contract kod bloğu tanımlamaktır.
Geri çağırma fonksiyonu için, public olarak ayarlanmalı ancak yalnızca sözleşme kendisi tarafından çağrılmasına izin verilmelidir. #[private] makrosu kullanılabilir.
Rust varsayılan olarak tüm içeriklerin private olduğunu, sadece pub trait ve pub enum içindeki öğelerin açık olduğunu belirtir.
2. Ayrıcalıklı fonksiyonların erişim kontrolü
Fonksiyon görünürlüğünün yanı sıra, anlam katmanında tam bir erişim kontrol beyaz liste mekanizması oluşturulmalıdır. Solidity'nin Ownable sözleşmesine benzer şekilde, bazı ayrıcalıklı fonksiyonlar yalnızca owner tarafından çağrılabilir.
Bu, ayrıcalıklı işlevlere erişim kontrolü sağlamayı mümkün kılar. Buna dayanarak, çoklu kullanıcı beyaz listeleri veya birden fazla beyaz liste grubu da ayarlanabilir.
3. Daha Fazla Erişim Kontrol Yöntemi
Diğer erişim kontrol yöntemleri şunları içerir:
Akıllı sözleşmeler çağrısı zaman kontrolü
Akıllı sözleşmeler fonksiyon çoklu imza çağrı mekanizması
DAO yönetiminin gerçekleştirilmesi
Bu içerikler sonraki makalelerde detaylı bir şekilde ele alınacaktı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.
Rust akıllı sözleşmeler güvenliği: Fonksiyon görünürlüğü ve yetki kontrolü ayrıntılı incelemesi
Rust akıllı sözleşmeler yetiştirme günlüğü (7) Sözleşme güvenliği ve hesaplama hassasiyeti
Bu makale, Rust akıllı sözleşmelerindeki yetki kontrolünü iki açıdan ele alacaktır:
1. Sözleşme fonksiyonu görünürlüğü
Sözleşme fonksiyonlarının görünürlük kontrolü, kritik kısımların yanlış işlemlerden korunması için önemlidir. 18 Haziran 2020'deki Bancor Network borsa güvenlik olayı örneğinde olduğu gibi, kritik transfer fonksiyonunun public olarak ayarlanması nedeniyle kullanıcıların 590.000 dolarlık varlıkları risk altına girmiştir.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü esasen şunlardır:
Başka bir internal yöntem ayarlama şekli, #[near_bindgen] dekoratörü eklenmeden bağımsız bir impl Contract kod bloğu tanımlamaktır.
Geri çağırma fonksiyonu için, public olarak ayarlanmalı ancak yalnızca sözleşme kendisi tarafından çağrılmasına izin verilmelidir. #[private] makrosu kullanılabilir.
Rust varsayılan olarak tüm içeriklerin private olduğunu, sadece pub trait ve pub enum içindeki öğelerin açık olduğunu belirtir.
2. Ayrıcalıklı fonksiyonların erişim kontrolü
Fonksiyon görünürlüğünün yanı sıra, anlam katmanında tam bir erişim kontrol beyaz liste mekanizması oluşturulmalıdır. Solidity'nin Ownable sözleşmesine benzer şekilde, bazı ayrıcalıklı fonksiyonlar yalnızca owner tarafından çağrılabilir.
Rust sözleşmesinde, özel Trait'ler uygulanabilir:
pas pub trait Sahiplenilebilir { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Bu, ayrıcalıklı işlevlere erişim kontrolü sağlamayı mümkün kılar. Buna dayanarak, çoklu kullanıcı beyaz listeleri veya birden fazla beyaz liste grubu da ayarlanabilir.
3. Daha Fazla Erişim Kontrol Yöntemi
Diğer erişim kontrol yöntemleri şunları içerir:
Bu içerikler sonraki makalelerde detaylı bir şekilde ele alınacaktır.