Bu makale, Rust akıllı sözleşmelerindeki yetki kontrolünü iki açıdan tanıtacaktır:
Sözleşme yönteminin görünürlüğü
Ayrıcalıklı fonksiyonların erişim kontrolü
1. Sözleşme fonksiyonu görünürlüğü
Akıllı sözleşmeler geliştirme sürecinde, fonksiyon görünürlüğünü doğru bir şekilde ayarlamak son derece önemlidir. Bancor Network borsasının 18 Haziran 2020'deki güvenlik olayını örnek olarak ele alırsak, kritik transfer fonksiyonunun public olarak ayarlanması nedeniyle kullanıcı varlıkları riske girmiştir.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü kontrolü de önemlidir. NEAR SDK'sındaki #[near_bindgen] makrosu aşağıdaki görünürlük türlerini tanımlar:
pub fn: public fonksiyonu, sözleşme dışından çağrılabilir.
fn: Sadece akıllı sözleşmeler içinde çağrılabilir
pub(crate) fn: crate içinde çağrılmasını sınırla
Başka bir internal yöntem ayarlama yolu, #[near_bindgen] dekoratörü kullanılmadan ayrı bir impl Contract kod bloğu tanımlamaktır.
Geri çağırma fonksiyonu için, public olarak ayarlanması gerekir ancak yalnızca sözleşmenin kendisi tarafından çağrılmasına izin verilmelidir. Bu amaçla #[private] makrosu kullanılabilir.
Dikkat edilmesi gereken husus, Rust'ta varsayılan olarak tüm içeriklerin private olduğu, yalnızca pub Trait ve pub Enum içindeki öğelerin açık olduğudur.
2. Ayrıcalıklı Fonksiyonların Erişim Kontrolü
Fonksiyon görünürlüğünün yanı sıra, tam bir erişim kontrol beyaz liste mekanizması da kurulmalıdır. Solidity'deki onlyOwner modifikatörüne benzer şekilde, Rust akıllı sözleşmelerinde de ayrıcalıklı fonksiyonların erişimini kontrol etmek için özel Trait'ler oluşturulabilir:
Bu şekilde yalnızca owner'ın bazı ayrıcalıklı fonksiyonları çağırması kısıtlanabilir. Bu prensibe dayanarak, daha karmaşık beyaz listeler ve grup erişim kontrolü ayarlanabilir.
3. Diğer Erişim Kontrol Yöntemleri
Başka bazı erişim kontrol yöntemleri, akıllı sözleşmelerin çağrılma zaman kontrolü, çoklu imza çağrı mekanizması, DAO uygulamaları vb. gelecekteki makalelerde ayrıntılı olarak ele alınacaktır.
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.
17 Likes
Reward
17
4
Repost
Share
Comment
0/400
MetaNomad
· 08-04 05:07
rust acemi soruyor, hangisi daha güvenli?
View OriginalReply0
NftPhilanthropist
· 08-04 05:02
*sigh* yine bir güvenlik karmaşası çünkü biri temel izinleri unuttu... geliştiriciler ne zaman dikkatli bir şekilde mint yapmayı öğrenecek acaba smh
View OriginalReply0
BearMarketGardener
· 08-04 04:57
Yetki yönetimi başarısız olursa iş biter.
View OriginalReply0
RuntimeError
· 08-04 04:45
Yetki kontrolü standart dışı, diz çökerek Debug yap
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ünü iki açıdan tanıtacaktır:
1. Sözleşme fonksiyonu görünürlüğü
Akıllı sözleşmeler geliştirme sürecinde, fonksiyon görünürlüğünü doğru bir şekilde ayarlamak son derece önemlidir. Bancor Network borsasının 18 Haziran 2020'deki güvenlik olayını örnek olarak ele alırsak, kritik transfer fonksiyonunun public olarak ayarlanması nedeniyle kullanıcı varlıkları riske girmiştir.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü kontrolü de önemlidir. NEAR SDK'sındaki #[near_bindgen] makrosu aşağıdaki görünürlük türlerini tanımlar:
Başka bir internal yöntem ayarlama yolu, #[near_bindgen] dekoratörü kullanılmadan ayrı bir impl Contract kod bloğu tanımlamaktır.
Geri çağırma fonksiyonu için, public olarak ayarlanması gerekir ancak yalnızca sözleşmenin kendisi tarafından çağrılmasına izin verilmelidir. Bu amaçla #[private] makrosu kullanılabilir.
Dikkat edilmesi gereken husus, Rust'ta varsayılan olarak tüm içeriklerin private olduğu, yalnızca pub Trait ve pub Enum içindeki öğelerin açık olduğudur.
2. Ayrıcalıklı Fonksiyonların Erişim Kontrolü
Fonksiyon görünürlüğünün yanı sıra, tam bir erişim kontrol beyaz liste mekanizması da kurulmalıdır. Solidity'deki onlyOwner modifikatörüne benzer şekilde, Rust akıllı sözleşmelerinde de ayrıcalıklı fonksiyonların erişimini kontrol etmek için özel Trait'ler oluşturulabilir:
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 şekilde yalnızca owner'ın bazı ayrıcalıklı fonksiyonları çağırması kısıtlanabilir. Bu prensibe dayanarak, daha karmaşık beyaz listeler ve grup erişim kontrolü ayarlanabilir.
3. Diğer Erişim Kontrol Yöntemleri
Başka bazı erişim kontrol yöntemleri, akıllı sözleşmelerin çağrılma zaman kontrolü, çoklu imza çağrı mekanizması, DAO uygulamaları vb. gelecekteki makalelerde ayrıntılı olarak ele alınacaktır.