Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua aspek:
Visibilitas metode kontrak
Kontrol akses fungsi hak istimewa
1. Visibilitas Fungsi Kontrak
Dalam kontrak cerdas Rust, kontrol visibilitas fungsi sangat penting. Sebagai contoh, peristiwa keamanan di bursa Bancor Network pada Juni 2020, karena secara keliru menetapkan fungsi transfer kunci sebagai public, yang mengakibatkan risiko bagi aset pengguna.
Dalam kontrak pintar Rust, ada beberapa jenis visibilitas fungsi:
pub fn: fungsi publik, dapat dipanggil dari luar kontrak
fn: hanya dapat dipanggil di dalam kontrak
pub(crate) fn: hanya dapat dipanggil dari dalam crate
Anda juga dapat mengimplementasikan fungsi internal dengan mendefinisikan metode di dalam blok impl yang tidak diberi tanda #[near_bindgen].
Untuk fungsi callback, harus diatur sebagai public tetapi juga harus dipastikan hanya dapat dipanggil oleh kontrak itu sendiri. Anda dapat menggunakan makro #[private] untuk mencapai hal ini.
Perlu dicatat bahwa di Rust, semua konten secara default bersifat private, ini berbeda dengan public default pada beberapa versi lama Solidity.
2. Kontrol Akses Fungsi Privilege
Selain visibilitas fungsi, juga perlu membangun mekanisme daftar putih kontrol akses yang lengkap dari perspektif semantik.
Mirip dengan modifier onlyOwner dalam Solidity, kita dapat mengimplementasikan Trait kustom di Rust:
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.
10 Suka
Hadiah
10
5
Posting ulang
Bagikan
Komentar
0/400
Rugman_Walking
· 12jam yang lalu
Ini adalah lagi-lagi jebakan lama Bancor, hampir kehilangan semua uang.
Lihat AsliBalas0
TokenToaster
· 08-07 12:36
bancor benar-benar contoh yang bodoh
Lihat AsliBalas0
MevTears
· 08-06 06:28
bancor itu saya pernah lihat, benar-benar jelek
Lihat AsliBalas0
OnlyOnMainnet
· 08-06 06:26
Tsk tsk, kejadian bancor masih membuatku ketakutan hingga sekarang.
Lihat AsliBalas0
0xLuckbox
· 08-06 06:18
Mengapa selalu ada orang yang salah mengatur izin?
Kontrol akses dalam smart contract Rust: visibilitas fungsi kontrak dan akses istimewa
Kontrol Akses dalam Smart Contract Rust
Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua aspek:
1. Visibilitas Fungsi Kontrak
Dalam kontrak cerdas Rust, kontrol visibilitas fungsi sangat penting. Sebagai contoh, peristiwa keamanan di bursa Bancor Network pada Juni 2020, karena secara keliru menetapkan fungsi transfer kunci sebagai public, yang mengakibatkan risiko bagi aset pengguna.
Dalam kontrak pintar Rust, ada beberapa jenis visibilitas fungsi:
Anda juga dapat mengimplementasikan fungsi internal dengan mendefinisikan metode di dalam blok impl yang tidak diberi tanda #[near_bindgen].
Untuk fungsi callback, harus diatur sebagai public tetapi juga harus dipastikan hanya dapat dipanggil oleh kontrak itu sendiri. Anda dapat menggunakan makro #[private] untuk mencapai hal ini.
Perlu dicatat bahwa di Rust, semua konten secara default bersifat private, ini berbeda dengan public default pada beberapa versi lama Solidity.
2. Kontrol Akses Fungsi Privilege
Selain visibilitas fungsi, juga perlu membangun mekanisme daftar putih kontrol akses yang lengkap dari perspektif semantik.
Mirip dengan modifier onlyOwner dalam Solidity, kita dapat mengimplementasikan Trait kustom di Rust:
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); }
Dengan cara ini, hanya pemilik yang dapat memanggil fungsi-fungsi istimewa tertentu.
Berdasarkan prinsip ini, whitelist yang lebih kompleks dapat diatur untuk mencapai kontrol akses grup yang lebih rinci.
Metode kontrol akses lainnya seperti kontrol waktu pemanggilan, mekanisme multi-tanda tangan, dll, akan diperkenalkan dalam artikel berikutnya.