Artikel ini akan membahas masalah kontrol akses dalam smart contract Rust dari dua aspek: visibilitas metode kontrak dan kontrol akses fungsi istimewa.
1. Visibilitas Fungsi Kontrak
Dalam menulis smart contract, dengan menentukan visibilitas fungsi, kita dapat mengontrol siapa yang dapat memanggil fungsi tertentu, sehingga melindungi bagian-bagian penting dalam kontrak.
Sebagai contoh, pada peristiwa keamanan yang terjadi di suatu bursa pada 18 Juni 2020. Karena kesalahan pengaturan kontrol akses fungsi kunci pada kontrak, aset pengguna terancam risiko. Kasus ini menyoroti pentingnya pengaturan visibilitas fungsi kontrak yang benar.
Dalam smart contract Rust, visibilitas fungsi terutama terdiri dari beberapa jenis berikut:
pub fn: Menunjukkan bahwa metode ini bersifat publik, merupakan bagian dari antarmuka kontrak, dan siapa pun dapat memanggilnya dari luar.
fn: Jika tidak secara eksplisit dinyatakan pub, maka fungsi tersebut hanya dapat dipanggil di dalam kontrak oleh fungsi lain.
pub(crate) fn: Batasi metode untuk dipanggil dalam ruang lingkup crate.
Cara lain untuk mengatur metode sebagai internal adalah dengan mendefinisikannya di dalam blok kode impl Contract yang tidak diberi modifikasi #[near_bindgen].
Untuk fungsi callback, harus diatur sebagai atribut publik agar dapat dipanggil melalui fungsi call. Selain itu, perlu memastikan bahwa fungsi callback tidak dapat dipanggil sembarangan, dapat menggunakan makro #[private] untuk mewujudkan hal ini.
Perlu dicatat bahwa di Rust, secara default semua konten bersifat privat, kecuali subproyek di pub Trait dan variabel di pub Enum yang secara default bersifat publik.
2. Kontrol Akses Fungsi Privilege
Selain visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses yang lengkap dari sisi semantik. Fungsi-fungsi tertentu yang memiliki hak istimewa (seperti inisialisasi kontrak, mengaktifkan/menghentikan, dll.) hanya dapat dipanggil oleh pemilik kontrak.
Dalam kontrak pintar Rust, Anda dapat mengimplementasikan fungsi yang mirip dengan modifier onlyOwner di Solidity:
Menggunakan metode ini dapat mencapai kontrol akses terhadap fungsi-fungsi istimewa, memastikan hanya pemilik kontrak yang dapat sepenuhnya menjalankan fungsi-fungsi tersebut. Berdasarkan prinsip ini, mekanisme daftar putih yang lebih kompleks dapat diatur untuk mencapai kontrol akses berbasis grup yang lebih rinci.
3. Metode kontrol akses lainnya
Selain metode yang disebutkan di atas, ada cara lain untuk mengontrol akses dalam smart contract Rust, seperti pengendalian waktu pemanggilan kontrak, mekanisme pemanggilan multi-tanda tangan, dan implementasi tata kelola (DAO) dan lain-lain. Konten ini akan dibahas secara rinci dalam artikel selanjutnya.
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
4
Bagikan
Komentar
0/400
ProxyCollector
· 4jam yang lalu
Ini adalah jebakan pengaturan izin, siapa yang terjebak siapa yang sial.
Lihat AsliBalas0
SelfRugger
· 17jam yang lalu
Ini adalah masalah izin lagi.
Lihat AsliBalas0
AllTalkLongTrader
· 17jam yang lalu
Hehe, saya melihat lubang yang sama dari pertukaran tahun lalu.
Kontrol Akses untuk Smart Contract Rust: Praktik Visibilitas Fungsi dan Akses Istimewa
Kontrol Akses dalam Kontrak Pintar Rust
Artikel ini akan membahas masalah kontrol akses dalam smart contract Rust dari dua aspek: visibilitas metode kontrak dan kontrol akses fungsi istimewa.
1. Visibilitas Fungsi Kontrak
Dalam menulis smart contract, dengan menentukan visibilitas fungsi, kita dapat mengontrol siapa yang dapat memanggil fungsi tertentu, sehingga melindungi bagian-bagian penting dalam kontrak.
Sebagai contoh, pada peristiwa keamanan yang terjadi di suatu bursa pada 18 Juni 2020. Karena kesalahan pengaturan kontrol akses fungsi kunci pada kontrak, aset pengguna terancam risiko. Kasus ini menyoroti pentingnya pengaturan visibilitas fungsi kontrak yang benar.
Dalam smart contract Rust, visibilitas fungsi terutama terdiri dari beberapa jenis berikut:
Cara lain untuk mengatur metode sebagai internal adalah dengan mendefinisikannya di dalam blok kode impl Contract yang tidak diberi modifikasi #[near_bindgen].
Untuk fungsi callback, harus diatur sebagai atribut publik agar dapat dipanggil melalui fungsi call. Selain itu, perlu memastikan bahwa fungsi callback tidak dapat dipanggil sembarangan, dapat menggunakan makro #[private] untuk mewujudkan hal ini.
Perlu dicatat bahwa di Rust, secara default semua konten bersifat privat, kecuali subproyek di pub Trait dan variabel di pub Enum yang secara default bersifat publik.
2. Kontrol Akses Fungsi Privilege
Selain visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses yang lengkap dari sisi semantik. Fungsi-fungsi tertentu yang memiliki hak istimewa (seperti inisialisasi kontrak, mengaktifkan/menghentikan, dll.) hanya dapat dipanggil oleh pemilik kontrak.
Dalam kontrak pintar Rust, Anda dapat mengimplementasikan fungsi yang mirip dengan modifier onlyOwner di Solidity:
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); }
Menggunakan metode ini dapat mencapai kontrol akses terhadap fungsi-fungsi istimewa, memastikan hanya pemilik kontrak yang dapat sepenuhnya menjalankan fungsi-fungsi tersebut. Berdasarkan prinsip ini, mekanisme daftar putih yang lebih kompleks dapat diatur untuk mencapai kontrol akses berbasis grup yang lebih rinci.
3. Metode kontrol akses lainnya
Selain metode yang disebutkan di atas, ada cara lain untuk mengontrol akses dalam smart contract Rust, seperti pengendalian waktu pemanggilan kontrak, mekanisme pemanggilan multi-tanda tangan, dan implementasi tata kelola (DAO) dan lain-lain. Konten ini akan dibahas secara rinci dalam artikel selanjutnya.