Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua aspek:
Visibilitas akses/panggilan metode kontrak
Kontrol akses fungsi hak istimewa/pemisahan wewenang dan tanggung jawab
1. Visibilitas Fungsi Kontrak
Pengaturan visibilitas fungsi kontrak yang masuk akal sangat penting untuk melindungi bagian-bagian kunci. Sebagai contoh, insiden keamanan di bursa Bancor Network pada Juni 2020, karena salah mengatur fungsi transfer kunci sebagai public, menyebabkan risiko terhadap aset pengguna.
Dalam kontrak pintar Rust, visibilitas fungsi juga penting. Makro #[near_bindgen] dalam NEAR SDK mendefinisikan atribut visibilitas berikut:
pub fn: fungsi publik, dapat dipanggil dari luar kontrak
fn: hanya dapat dipanggil di dalam kontrak
pub(crate) fn: batasi panggilan di dalam crate
Anda juga dapat mendefinisikan metode internal melalui blok impl Contract yang tidak dihiasi dengan #[near_bindgen].
Untuk fungsi callback, harus diatur sebagai publik tetapi hanya diizinkan untuk dipanggil oleh kontrak itu sendiri. Fungsi ini dapat diimplementasikan menggunakan macro #[private].
Perlu dicatat bahwa visibilitas default di Rust adalah private, tetapi item dalam trait dan enum adalah pengecualian.
2. Kontrol Akses Fungsi Privilege
Selain visibilitas fungsi, perlu juga untuk membangun mekanisme daftar putih kontrol akses yang lengkap. Mirip dengan kontrak Ownable di Solidity, beberapa fungsi istimewa hanya dapat dipanggil oleh pemilik.
Dalam kontrak Rust, dapat diimplementasikan trait Ownable sebagai berikut:
Berdasarkan ini, whitelist untuk owner dapat diimplementasikan. Juga dapat mengatur whitelist multi-user atau kontrol akses grup yang lebih kompleks melalui pengaturan trait yang disesuaikan.
Lihat Asli
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.
10 Suka
Hadiah
10
4
Bagikan
Komentar
0/400
WhaleWatcher
· 07-13 07:29
Pertama kita bicarakan tentang Ownable
Lihat AsliBalas0
GateUser-e51e87c7
· 07-13 07:23
Cukup punya tangan, sesederhana itu.
Lihat AsliBalas0
DecentralizeMe
· 07-13 07:22
Woo woo logika dasar
Lihat AsliBalas0
ChainSpy
· 07-13 07:21
Kontrol akses begitu rumit, lebih baik semuanya terbuka.
Kontrol Akses pada Smart Contract Rust: Visibilitas Fungsi dan Manajemen Akses Istimewa
Rust smart contract养成日记(7)合约安全之权限控制
Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua aspek:
1. Visibilitas Fungsi Kontrak
Pengaturan visibilitas fungsi kontrak yang masuk akal sangat penting untuk melindungi bagian-bagian kunci. Sebagai contoh, insiden keamanan di bursa Bancor Network pada Juni 2020, karena salah mengatur fungsi transfer kunci sebagai public, menyebabkan risiko terhadap aset pengguna.
Dalam kontrak pintar Rust, visibilitas fungsi juga penting. Makro #[near_bindgen] dalam NEAR SDK mendefinisikan atribut visibilitas berikut:
Anda juga dapat mendefinisikan metode internal melalui blok impl Contract yang tidak dihiasi dengan #[near_bindgen].
Untuk fungsi callback, harus diatur sebagai publik tetapi hanya diizinkan untuk dipanggil oleh kontrak itu sendiri. Fungsi ini dapat diimplementasikan menggunakan macro #[private].
Perlu dicatat bahwa visibilitas default di Rust adalah private, tetapi item dalam trait dan enum adalah pengecualian.
2. Kontrol Akses Fungsi Privilege
Selain visibilitas fungsi, perlu juga untuk membangun mekanisme daftar putih kontrol akses yang lengkap. Mirip dengan kontrak Ownable di Solidity, beberapa fungsi istimewa hanya dapat dipanggil oleh pemilik.
Dalam kontrak Rust, dapat diimplementasikan trait Ownable sebagai berikut:
karat pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Berdasarkan ini, whitelist untuk owner dapat diimplementasikan. Juga dapat mengatur whitelist multi-user atau kontrol akses grup yang lebih kompleks melalui pengaturan trait yang disesuaikan.