Rust akıllı sözleşmeler yetiştirme günlüğü (7) Sözleşme güvenliği ve erişim kontrolü
Bu makale, Rust akıllı sözleşmelerinde izin 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üğü
Sözleşme işlevlerinin görünürlüğünü doğru bir şekilde ayarlamak, sözleşmenizi güvende tutmak için çok önemlidir. Haziran 2020'deki Bancor Network borsa olayını örnek alırsak, anahtar aktarım işlevinin yanlışlıkla halka açık olarak ayarlanması nedeniyle kullanıcıların varlıkları risk altındaydı.
Rust akıllı sözleşmelerinde, birkaç ana işlev görünürlüğü türü vardır:
Pub FN: Sözleşme dışından çağrılabilen kamu işlevi
fn: Yalnızca sözleşme içinde çağrılabilen varsayılan dahili işlev
pub(crate) fn: Sandık içinden gelen çağrıları kısıtla
Ayrıca, #[near_bindgen] ile süslenmemiş impl bloklarında tanımlanan yöntemler içseldir.
Geri çağırma fonksiyonu için public olarak ayarlanması gerekir, ancak aynı zamanda çağrıcı kontrolü de yapılmalıdır, bu #[private] makrosu kullanılarak gerçekleştirilebilir.
Dikkate değer bir nokta, Rust'ın varsayılan olarak tüm içeriği private olarak ayarladığıdır, yalnızca pub trait ve pub enum içindeki öğeler hariç.
!
2. Ayrıcalık fonksiyonlarının erişim kontrolü
Fonksiyon görünürlüğünü ayarlamanın yanı sıra, erişim kontrol beyaz liste mekanizması da oluşturulmalıdır. Solidity'deki onlyOwner modifikatörü gibi, yalnızca sahibinin çağırabileceği ayrıcalıklı fonksiyonlar tanımlanabilir.
Rust'ta bu, özel özelliklerle elde edilebilir:
pas
pub özelliği Sahip Olunabilir {
fn assert_owner(&self) {
assert_eq!(env::predecessor_account_id(), self.get_owner());
}
AccountId;
FN set_owner(&mut Öz, Sahibi: AccountId);
}
Bu, temel sahip izin kontrolüne izin verir. Daha ayrıntılı erişim kontrolü için çok kullanıcılı bir beyaz listeye veya çok gruplu bir beyaz listeye daha da genişletilebilir.
!
!
!
!
!
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.
12 Likes
Reward
12
5
Share
Comment
0/400
NFT_Therapy
· 14h ago
Yetki kontrolü olmalı! Aksi takdirde sözleşme ele geçirilirse GG olur.
View OriginalReply0
PonziDetector
· 14h ago
Rust yyds en sağlam
View OriginalReply0
MetaMuskRat
· 14h ago
Yine bir yönetim yetkisi, kaçtım kaçtım
View OriginalReply0
ser_we_are_early
· 14h ago
Basit ve sert bir şekilde, sadece bir yetki kontrolü eklemektir.
Rust akıllı sözleşmeler güvenliği: Erişim kontrolü ve fonksiyon görünürlüğü detayları
Rust akıllı sözleşmeler yetiştirme günlüğü (7) Sözleşme güvenliği ve erişim kontrolü
Bu makale, Rust akıllı sözleşmelerinde izin kontrolünü iki açıdan tanıtacaktır:
1. Sözleşme fonksiyonu görünürlüğü
Sözleşme işlevlerinin görünürlüğünü doğru bir şekilde ayarlamak, sözleşmenizi güvende tutmak için çok önemlidir. Haziran 2020'deki Bancor Network borsa olayını örnek alırsak, anahtar aktarım işlevinin yanlışlıkla halka açık olarak ayarlanması nedeniyle kullanıcıların varlıkları risk altındaydı.
Rust akıllı sözleşmelerinde, birkaç ana işlev görünürlüğü türü vardır:
Ayrıca, #[near_bindgen] ile süslenmemiş impl bloklarında tanımlanan yöntemler içseldir.
Geri çağırma fonksiyonu için public olarak ayarlanması gerekir, ancak aynı zamanda çağrıcı kontrolü de yapılmalıdır, bu #[private] makrosu kullanılarak gerçekleştirilebilir.
Dikkate değer bir nokta, Rust'ın varsayılan olarak tüm içeriği private olarak ayarladığıdır, yalnızca pub trait ve pub enum içindeki öğeler hariç.
!
2. Ayrıcalık fonksiyonlarının erişim kontrolü
Fonksiyon görünürlüğünü ayarlamanın yanı sıra, erişim kontrol beyaz liste mekanizması da oluşturulmalıdır. Solidity'deki onlyOwner modifikatörü gibi, yalnızca sahibinin çağırabileceği ayrıcalıklı fonksiyonlar tanımlanabilir.
Rust'ta bu, özel özelliklerle elde edilebilir:
pas pub özelliği Sahip Olunabilir { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; FN set_owner(&mut Öz, Sahibi: AccountId); }
Bu, temel sahip izin kontrolüne izin verir. Daha ayrıntılı erişim kontrolü için çok kullanıcılı bir beyaz listeye veya çok gruplu bir beyaz listeye daha da genişletilebilir.
!
!
!
!
!