Sözleşme fonksiyonlarının görünürlük kontrolü, kritik bölümlerin kazara erişimden veya manipülasyondan korunması için hayati öneme sahiptir. 18 Haziran 2020'deki Bancor Network borsası güvenlik olayı buna örnek olarak verilebilir; bu olay, sözleşmenin kritik fonksiyonlarının erişim izinlerinin yanlış ayarlanması nedeniyle meydana gelmiştir.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü aşağıdaki gibidir:
pub fn: Bu metodun kamuya açık olduğunu, sözleşme arayüzünün bir parçası olduğunu ve sözleşme dışından çağrılabileceğini gösterir.
fn: Eğer pub açıkça belirtilmemişse, bu fonksiyonun sözleşme dışından doğrudan çağrılamayacağı, yalnızca sözleşme içinde çağrılabileceği anlamına gelir.
pub(crate) fn: Yöntemi crate içindeki alanla sınırlamak için çağrılır.
Başka bir yöntem, #[near_bindgen] ile süslenmemiş impl Contract kod bloğunda metodu içe almak için tanımlamaktır.
Geri çağırma işlevleri için, genel bir özellik olarak ayarlanmalıdır, ancak yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlamak gerekir. Bunu gerçekleştirmek için #[private] makrosu kullanılabilir.
2. Ayrıcalıklı fonksiyonların erişim kontrolü( beyaz liste mekanizması)
Fonksiyon görünürlüğünün yanı sıra, anlamsal düzeyde tam bir erişim kontrol beyaz liste mekanizması oluşturmak da gerekmektedir. Bazı ayrıcalıklı fonksiyonlar (, sözleşme başlatma, açma/durdurma gibi işlemler ) yalnızca sözleşme sahibi tarafından çağrılabilir.
Özelleştirilmiş Trait'ler kullanarak erişim kontrolü sağlanabilir, çağrıyı yapanın sözleşmenin sahibi olup olmadığını kontrol edebilirsiniz:
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.
13 Likes
Reward
13
2
Repost
Share
Comment
0/400
PumpBeforeRug
· 08-09 06:44
Bancor o sefer de izinler düzgün ayarlanmadığı için mi oldu?
View OriginalReply0
OffchainOracle
· 08-09 06:32
Bancor bu kazası ders kitabı gibi bir uyarı olmalı.
Rust akıllı sözleşmeler güvenliği: Erişim kontrolü ve izin yönetimini derinlemesine anlama
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şmelerindeki yetki kontrolünü iki açıdan ele alacaktır:
1. Sözleşme fonksiyonu (metodu) görünürlüğü
Sözleşme fonksiyonlarının görünürlük kontrolü, kritik bölümlerin kazara erişimden veya manipülasyondan korunması için hayati öneme sahiptir. 18 Haziran 2020'deki Bancor Network borsası güvenlik olayı buna örnek olarak verilebilir; bu olay, sözleşmenin kritik fonksiyonlarının erişim izinlerinin yanlış ayarlanması nedeniyle meydana gelmiştir.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü aşağıdaki gibidir:
Başka bir yöntem, #[near_bindgen] ile süslenmemiş impl Contract kod bloğunda metodu içe almak için tanımlamaktır.
Geri çağırma işlevleri için, genel bir özellik olarak ayarlanmalıdır, ancak yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlamak gerekir. Bunu gerçekleştirmek için #[private] makrosu kullanılabilir.
2. Ayrıcalıklı fonksiyonların erişim kontrolü( beyaz liste mekanizması)
Fonksiyon görünürlüğünün yanı sıra, anlamsal düzeyde tam bir erişim kontrol beyaz liste mekanizması oluşturmak da gerekmektedir. Bazı ayrıcalıklı fonksiyonlar (, sözleşme başlatma, açma/durdurma gibi işlemler ) yalnızca sözleşme sahibi tarafından çağrılabilir.
Özelleştirilmiş Trait'ler kullanarak erişim kontrolü sağlanabilir, çağrıyı yapanın sözleşmenin sahibi olup olmadığını kontrol edebilirsiniz:
pas pub trait Sahiplenebilir { fn assert_owner(&self) { assert_eq!(env::önceki_hesap_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Bu ilkeye dayanarak, birden fazla kullanıcı veya birden fazla beyaz liste ayarlanabilir ve daha hassas grup erişim kontrolü sağlanabilir.
3. Daha Fazla Erişim Kontrol Yöntemi
Diğer Rust akıllı sözleşmelerdeki erişim kontrol yöntemleri şunları içerir:
Bu içerikler sonraki makalelerde detaylı olarak ele alınacaktır.