Rust akıllı sözleşmeler yetiştirme günlüğü (7) Sözleşme güvenliği ve yetki kontrolü
Bu makale, Rust akıllı sözleşmelerindeki yetki kontrolünü iki açıdan ele alacaktır:
Sözleşme yöntemi erişim/çağrı görünürlüğü
Ayrıcalıklı fonksiyonların erişim kontrolü/ yetki ve sorumluluk ayrımı
1. Sözleşme fonksiyonu görünürlüğü
Akıllı sözleşmelerde fonksiyon görünürlüğünün makul bir şekilde ayarlanması, kritik kısımların korunması açısından son derece önemlidir. Örneğin, Bancor Network borsa platformunda Haziran 2020'de meydana gelen güvenlik olayı, kritik transfer fonksiyonunun public olarak yanlış bir şekilde ayarlanması sonucunda kullanıcı varlıklarının risk altına girmesine neden olmuştur.
Rust'taki akıllı sözleşmelerde, fonksiyon görünürlüğü de aynı derecede önemlidir. NEAR SDK'sındaki #[near_bindgen] makrosu aşağıdaki görünürlük özelliklerini tanımlar:
pub fn: public fonksiyonu, sözleşme dışından çağrılabilir
fn: Yalnızca sözleşme içinde çağrılabilir
pub(crate) fn: crate içinde çağrılmayı sınırlama
Ayrıca, #[near_bindgen] ile işaretlenmemiş impl Contract bloğu aracılığıyla internal yöntemler tanımlanabilir.
Geri çağırma işlevi için public olarak ayarlanmalı, ancak yalnızca sözleşmenin kendisi tarafından çağrılmasına izin verilmelidir. Bu işlevi gerçekleştirmek için #[private] makrosu kullanılabilir.
Rust'ta varsayılan görünürlük özel olarak ayarlanmıştır, ancak trait ve enum içindeki öğeler istisnadır.
2. Ayrıcalıklı Fonksiyon Erişim Kontrolü
Fonksiyon görünürlüğü dışında, tam bir erişim kontrol beyaz liste mekanizması da 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 aşağıdaki Ownable trait'ini uygulayabilirsiniz:
Buna dayanarak, owner için bir beyaz liste oluşturulabilir. Ayrıca, daha karmaşık trait ayarları ile çoklu kullanıcı beyaz listeleri veya gruplara erişim kontrolü oluşturulabilir.
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.
10 Likes
Reward
10
4
Share
Comment
0/400
WhaleWatcher
· 07-13 07:29
Önce Ownable, sonra konuşalım.
View OriginalReply0
GateUser-e51e87c7
· 07-13 07:23
Ellerin varsa bu kadar basit
View OriginalReply0
DecentralizeMe
· 07-13 07:22
Üzgünüm, temel mantık
View OriginalReply0
ChainSpy
· 07-13 07:21
Erişim kontrolü bu kadar karmaşık, her şeyi açık yapmaktansa daha iyi.
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şmeler yetiştirme günlüğü (7) Sözleşme güvenliği ve yetki kontrolü
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üğü
Akıllı sözleşmelerde fonksiyon görünürlüğünün makul bir şekilde ayarlanması, kritik kısımların korunması açısından son derece önemlidir. Örneğin, Bancor Network borsa platformunda Haziran 2020'de meydana gelen güvenlik olayı, kritik transfer fonksiyonunun public olarak yanlış bir şekilde ayarlanması sonucunda kullanıcı varlıklarının risk altına girmesine neden olmuştur.
Rust'taki akıllı sözleşmelerde, fonksiyon görünürlüğü de aynı derecede önemlidir. NEAR SDK'sındaki #[near_bindgen] makrosu aşağıdaki görünürlük özelliklerini tanımlar:
Ayrıca, #[near_bindgen] ile işaretlenmemiş impl Contract bloğu aracılığıyla internal yöntemler tanımlanabilir.
Geri çağırma işlevi için public olarak ayarlanmalı, ancak yalnızca sözleşmenin kendisi tarafından çağrılmasına izin verilmelidir. Bu işlevi gerçekleştirmek için #[private] makrosu kullanılabilir.
Rust'ta varsayılan görünürlük özel olarak ayarlanmıştır, ancak trait ve enum içindeki öğeler istisnadır.
2. Ayrıcalıklı Fonksiyon Erişim Kontrolü
Fonksiyon görünürlüğü dışında, tam bir erişim kontrol beyaz liste mekanizması da 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 aşağıdaki Ownable trait'ini uygulayabilirsiniz:
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); }
Buna dayanarak, owner için bir beyaz liste oluşturulabilir. Ayrıca, daha karmaşık trait ayarları ile çoklu kullanıcı beyaz listeleri veya gruplara erişim kontrolü oluşturulabilir.