Rust Smart Contract Diary (7) Kontrol Akses untuk Keamanan Kontrak
Artikel ini akan memperkenalkan kontrol izin dalam kontrak pintar Rust dari dua aspek:
Visibilitas metode kontrak
Kontrol akses fungsi istimewa
1. Visibilitas Fungsi Kontrak
Mengatur visibilitas fungsi kontrak dengan benar sangat penting untuk melindungi keamanan kontrak. Sebagai contoh, peristiwa di bursa Bancor Network pada Juni 2020, di mana fungsi transfer kunci secara keliru diatur sebagai public, yang menyebabkan risiko bagi aset pengguna.
Dalam kontrak pintar Rust, ada beberapa jenis utama visibilitas fungsi:
Pub FN: fungsi publik, yang dapat dipanggil dari luar kontrak
fn: fungsi internal default, hanya dapat dipanggil di dalam kontrak
pub(crate) fn: batasi pemanggilan di dalam crate
Selain itu, metode yang didefinisikan dalam blok impl yang tidak dihiasi dengan #[near_bindgen] bersifat internal.
Untuk fungsi callback, Anda perlu mengaturnya ke publik tetapi pada saat yang sama melakukan pemeriksaan pemanggil, yang dapat diimplementasikan menggunakan makro #[private].
Perlu dicatat bahwa Rust secara default menganggap semua konten sebagai private, kecuali item dalam pub trait dan pub enum.
2. Kontrol Akses Fungsi Privilege
Selain mengatur visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses. Mirip dengan modifier onlyOwner di Solidity, dapat didefinisikan fungsi-fungsi istimewa yang hanya dapat dipanggil oleh pemilik.
Dalam Rust, dapat diimplementasikan melalui trait khusus:
Hal ini memungkinkan kontrol izin pemilik dasar. Ini dapat diperluas lebih lanjut ke daftar putih multi-pengguna atau daftar putih multi-grup untuk kontrol akses yang lebih terperinci.
!
!
!
!
!
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.
18 Suka
Hadiah
18
6
Bagikan
Komentar
0/400
ser_we_are_ngmi
· 6jam yang lalu
Sangat sulit dimengerti, pergi pergi!
Lihat AsliBalas0
NFT_Therapy
· 07-17 01:06
Kontrol akses itu penting! Jika tidak, kontrak bisa saja diretas dan berakhir buruk.
Lihat AsliBalas0
PonziDetector
· 07-17 01:05
Rust yyds paling hardcore
Lihat AsliBalas0
MetaMuskRat
· 07-17 01:02
Lihat lagi satu yang mengelola izin, pergi pergi
Lihat AsliBalas0
ser_we_are_early
· 07-17 00:46
Sederhana dan langsung, yaitu menambahkan kontrol hak akses.
Lihat AsliBalas0
MemeEchoer
· 07-17 00:40
Melihatnya membuat mengantuk, apakah ada yang benar-benar belajar?
Keamanan smart contract Rust: Penjelasan mendetail tentang kontrol akses dan visibilitas fungsi
Rust Smart Contract Diary (7) Kontrol Akses untuk Keamanan Kontrak
Artikel ini akan memperkenalkan kontrol izin dalam kontrak pintar Rust dari dua aspek:
1. Visibilitas Fungsi Kontrak
Mengatur visibilitas fungsi kontrak dengan benar sangat penting untuk melindungi keamanan kontrak. Sebagai contoh, peristiwa di bursa Bancor Network pada Juni 2020, di mana fungsi transfer kunci secara keliru diatur sebagai public, yang menyebabkan risiko bagi aset pengguna.
Dalam kontrak pintar Rust, ada beberapa jenis utama visibilitas fungsi:
Selain itu, metode yang didefinisikan dalam blok impl yang tidak dihiasi dengan #[near_bindgen] bersifat internal.
Untuk fungsi callback, Anda perlu mengaturnya ke publik tetapi pada saat yang sama melakukan pemeriksaan pemanggil, yang dapat diimplementasikan menggunakan makro #[private].
Perlu dicatat bahwa Rust secara default menganggap semua konten sebagai private, kecuali item dalam pub trait dan pub enum.
2. Kontrol Akses Fungsi Privilege
Selain mengatur visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses. Mirip dengan modifier onlyOwner di Solidity, dapat didefinisikan fungsi-fungsi istimewa yang hanya dapat dipanggil oleh pemilik.
Dalam Rust, dapat diimplementasikan melalui trait khusus:
karat pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::p redecessor_account_id(), self.get_ owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Hal ini memungkinkan kontrol izin pemilik dasar. Ini dapat diperluas lebih lanjut ke daftar putih multi-pengguna atau daftar putih multi-grup untuk kontrol akses yang lebih terperinci.
!
!
!
!
!