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 yönteminin erişim/çağrı görünürlüğü
  2. Ayrıcalıklı fonksiyonların erişim kontrolü/sorumlulukların belirlenmesi

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:

  • 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:

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:

  • Akıllı sözleşmeler çağrı zamanlaması kontrolü
  • Akıllı sözleşmeler fonksiyonlarının çoklu imza çağırma mekanizması
  • Yönetim (DAO)'in gerçekleştirilmesi

Bu içerikler sonraki makalelerde detaylı bir şekilde ele alınacaktır.

PUBLIC-2.76%
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.
  • Reward
  • Comment
  • Repost
  • Share
Comment
0/400
No comments
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate App
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)