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
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
14 Suka
Hadiah
14
6
Bagikan
Komentar
0/400
CryptoTarotReader
· 07-16 04:56
Dapatkah itu ditahan?~
Lihat AsliBalas0
FloorSweeper
· 07-15 01:10
Tidak mungkin, harus belajar sebanyak ini?
Lihat AsliBalas0
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.