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:
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 fonksiyonlarının görünürlüğü, bu fonksiyonları kimin çağırabileceğini belirler. Görünürlüğün doğru bir şekilde ayarlanması, sözleşmenin kritik kısımlarını korumak için hayati öneme sahiptir.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü başlıca aşağıdaki gibidir:
pub fn: kamu fonksiyonu, sözleşme dışından çağrılabilir
fn: Dahili fonksiyon, yalnızca sözleşme içinde çağrılabilir
pub(crate) fn: crate içinde çağrıyı kısıtla
Ayrıca, bunu iç yöntem olarak ayarlamak için ayrı bir impl Contract kod bloğunda yöntemler tanımlayabilirsiniz:
pas
#[near_bindgen]
impl Sözleşme {
pub fn increment(&mut self) {
self.internal_increment();
}
}
Geri çağırma fonksiyonu için, sadece sözleşmenin kendisi tarafından çağrılmasını sınırlamak için pub olarak ayarlanmalı ve #[private] makrosu kullanılmalıdır:
pas
#[near_bindgen]
impl Sözleşme {
#[private]
pub fn resolve_transfer(&mut self) {
// Geri çağırma mantığı
}
}
2. Ayrıcalıklı fonksiyonların erişim kontrolü
Fonksiyon görünürlüğünü ayarlamanın yanı sıra, ayrıcalıklı fonksiyon çağrısını kısıtlamak için bir erişim kontrol beyaz liste mekanizması da oluşturulmalıdır.
Aşağıdaki gibi bir Ownable özelliği gerçekleştirebilir:
Sonra ayrıcalıklı işlevde çağrıyı yapanın kimliğini doğrulamak için assert_owner() çağrısını yapın:
pas
impl Sözleşme {
pub fn ayrıcalıklı_fonksiyon(&mut self) {
self.assert_owner();
// Ayrıcalık fonksiyonu mantığı
}
}
Bu, temel owner yetki kontrolünü gerçekleştirmeyi sağlar. Daha fazla kullanıcı beyaz listesi veya birden fazla beyaz liste grubu ile daha hassas erişim kontrolü sağlamak için daha da genişletilebilir.
Bunun yanı sıra, çağrı zamanlaması kontrolü, çoklu imza mekanizmaları gibi daha karmaşık erişim kontrol çözümleri de dikkate alınabilir. Sözleşme fonksiyonlarının görünürlüğünü ve erişim kontrolünü uygun şekilde ayarlamak, sözleşmenin güvenliğini sağlamak için kritik öneme sahiptir.
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.
23 Likes
Reward
23
5
Repost
Share
Comment
0/400
CryingOldWallet
· 07-28 07:37
Sonunda rust ile ilgili bir şey gördüm, kodlayalım kodlayalım
View OriginalReply0
PumpingCroissant
· 07-28 03:49
Yine öğrenemediğim rust
View OriginalReply0
CryptoGoldmine
· 07-25 08:04
Teknik derinlik iyi ama gerçek ROI madencilik havuzu dağıtım optimizasyonuna bağlı.
View OriginalReply0
SchrodingerAirdrop
· 07-25 08:01
Bu Çaylak kılavuzu beni çok bunaltıyor, rust sürekli derin konularla uğraşıyor.
View OriginalReply0
GateUser-2fce706c
· 07-25 08:01
Evrim gerçek bir zorunluluktur, Rust bu dalga ile ortaya çıkıyor! Hızla konum almaya başlayın!
Rust akıllı sözleşmeler güvenliği uygulamaları: Erişim kontrolü ve izin yönetimi
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üğü, bu fonksiyonları kimin çağırabileceğini belirler. Görünürlüğün doğru bir şekilde ayarlanması, sözleşmenin kritik kısımlarını korumak için hayati öneme sahiptir.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü başlıca aşağıdaki gibidir:
Ayrıca, bunu iç yöntem olarak ayarlamak için ayrı bir impl Contract kod bloğunda yöntemler tanımlayabilirsiniz:
pas #[near_bindgen] impl Sözleşme { pub fn increment(&mut self) { self.internal_increment(); } }
impl Sözleşme { pub fn internal_increment(&mut self) { self.counter += 1; } }
Geri çağırma fonksiyonu için, sadece sözleşmenin kendisi tarafından çağrılmasını sınırlamak için pub olarak ayarlanmalı ve #[private] makrosu kullanılmalıdır:
pas #[near_bindgen] impl Sözleşme { #[private] pub fn resolve_transfer(&mut self) { // Geri çağırma mantığı } }
2. Ayrıcalıklı fonksiyonların erişim kontrolü
Fonksiyon görünürlüğünü ayarlamanın yanı sıra, ayrıcalıklı fonksiyon çağrısını kısıtlamak için bir erişim kontrol beyaz liste mekanizması da oluşturulmalıdır.
Aşağıdaki gibi bir Ownable özelliği gerçekleştirebilir:
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); }
Sonra ayrıcalıklı işlevde çağrıyı yapanın kimliğini doğrulamak için assert_owner() çağrısını yapın:
pas impl Sözleşme { pub fn ayrıcalıklı_fonksiyon(&mut self) { self.assert_owner(); // Ayrıcalık fonksiyonu mantığı } }
Bu, temel owner yetki kontrolünü gerçekleştirmeyi sağlar. Daha fazla kullanıcı beyaz listesi veya birden fazla beyaz liste grubu ile daha hassas erişim kontrolü sağlamak için daha da genişletilebilir.
Bunun yanı sıra, çağrı zamanlaması kontrolü, çoklu imza mekanizmaları gibi daha karmaşık erişim kontrol çözümleri de dikkate alınabilir. Sözleşme fonksiyonlarının görünürlüğünü ve erişim kontrolünü uygun şekilde ayarlamak, sözleşmenin güvenliğini sağlamak için kritik öneme sahiptir.