Akıllı sözleşmelerin fonksiyon görünürlüğünü uygun şekilde ayarlamak, kritik bölümlerin kazara erişim veya manipülasyondan korunması açısından son derece önemlidir. 2020 Haziran ayında Bancor Network borsa güvenlik olayı örneğinde olduğu gibi, kritik transfer fonksiyonunun public olarak ayarlanması, kullanıcı varlıklarının riske girmesine neden olmuştur.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü temel olarak aşağıdaki birkaç tür vardır:
pub fn: public fonksiyonu, sözleşme dışından çağrılabilir
fn: Dışarıdan doğrudan çağrılamaz, yalnızca sözleşme içinde çağrılabilir.
pub(crate) fn: crate içinde çağrılma kısıtlaması
Diğer bir internal yöntem ayarlama yolu, bağımsız bir impl Contract kod bloğu tanımlamak ve #[near_bindgen] işaretlemesini kullanmamaktır.
Geri çağırma fonksiyonu public olarak ayarlanmalı, ancak yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlamalıdır. Bu işlevi gerçekleştirmek için #[private] makrosu kullanılabilir.
Rust'un varsayılan olarak tüm içeriğin özel olduğunu, ancak trait ve enum içindeki öğelerin istisna olduğunu unutmamak gerekir.
2. Ayrıcalıklı fonksiyonların erişim kontrolü
Fonksiyon görünürlüğünün yanı sıra, anlamsal düzeyde tam bir erişim kontrol beyaz liste mekanizması oluşturulması gerekmektedir. Solidity'deki onlyOwner gibi, bazı ayrıcalıklı fonksiyonlar yalnızca sözleşme sahibinin çağırabileceği şekilde tasarlanmıştır.
Rust akıllı sözleşmelerinde, ayrıcalıklı fonksiyon erişimini kontrol etmek için özel Trait'ler oluşturulabilir:
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.
Rust akıllı sözleşmeler güvenlik uygulamaları: Fonksiyon görünürlüğü ve ayrıcalıklı erişim kontrolü
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 tanıtacaktır:
1. Sözleşme Fonksiyonu Görünürlüğü
Akıllı sözleşmelerin fonksiyon görünürlüğünü uygun şekilde ayarlamak, kritik bölümlerin kazara erişim veya manipülasyondan korunması açısından son derece önemlidir. 2020 Haziran ayında Bancor Network borsa güvenlik olayı örneğinde olduğu gibi, kritik transfer fonksiyonunun public olarak ayarlanması, kullanıcı varlıklarının riske girmesine neden olmuştur.
Rust akıllı sözleşmelerinde, fonksiyon görünürlüğü temel olarak aşağıdaki birkaç tür vardır:
Diğer bir internal yöntem ayarlama yolu, bağımsız bir impl Contract kod bloğu tanımlamak ve #[near_bindgen] işaretlemesini kullanmamaktır.
Geri çağırma fonksiyonu public olarak ayarlanmalı, ancak yalnızca sözleşmenin kendisi tarafından çağrılmasını sağlamalıdır. Bu işlevi gerçekleştirmek için #[private] makrosu kullanılabilir.
Rust'un varsayılan olarak tüm içeriğin özel olduğunu, ancak trait ve enum içindeki öğelerin istisna olduğunu unutmamak gerekir.
2. Ayrıcalıklı fonksiyonların erişim kontrolü
Fonksiyon görünürlüğünün yanı sıra, anlamsal düzeyde tam bir erişim kontrol beyaz liste mekanizması oluşturulması gerekmektedir. Solidity'deki onlyOwner gibi, bazı ayrıcalıklı fonksiyonlar yalnızca sözleşme sahibinin çağırabileceği şekilde tasarlanmıştır.
Rust akıllı sözleşmelerinde, ayrıcalıklı fonksiyon 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); }
Buna dayanarak daha karmaşık bir beyaz liste mekanizması uygulanabilir, ayrıntılı grup erişim kontrolü sağlanabilir.
3. Diğer Erişim Kontrol Yöntemleri
Başka bazı erişim kontrol yöntemleri de var, örneğin:
Bu içerikler sonraki makalelerde detaylı bir şekilde ele alınacaktır.