Rust smart contract pengembangan jurnal (7) Keamanan kontrak dalam presisi perhitungan
Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua perspektif:
Visibilitas akses/panggilan metode kontrak
Kontrol akses fungsi istimewa/pemisahan tanggung jawab
1. Visibilitas Fungsi Kontrak
Pengaturan visibilitas fungsi kontrak yang wajar sangat penting untuk melindungi bagian kunci dari akses atau manipulasi yang tidak disengaja. Sebagai contoh, pada insiden keamanan di bursa Bancor Network pada Juni 2020, karena secara keliru mengatur fungsi transfer kunci sebagai public, aset pengguna menghadapi risiko.
Dalam smart contract Rust, visibilitas fungsi terutama terdiri dari beberapa jenis berikut:
pub fn: fungsi publik, dapat dipanggil dari luar kontrak
fn: Tidak dapat dipanggil langsung dari luar, hanya dapat dipanggil di dalam kontrak.
pub(crate) fn: batasi panggilan dalam cakupan crate
Cara lain untuk mengatur metode internal adalah dengan mendefinisikan blok kode impl Contract yang terpisah, tanpa menggunakan modifikasi #[near_bindgen].
Fungsi callback harus diatur sebagai publik, tetapi harus memastikan hanya dapat dipanggil oleh kontrak itu sendiri. Anda dapat menggunakan makro #[private] untuk mencapai fungsi ini.
Perlu dicatat bahwa Rust secara default menganggap semua konten sebagai private, tetapi item dalam trait dan enum adalah pengecualian.
2. Kontrol Akses Fungsi Privilege
Selain visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses yang lengkap dari sudut pandang semantik. Mirip dengan onlyOwner dalam Solidity, beberapa fungsi istimewa hanya dapat dipanggil oleh pemilik kontrak.
Di kontrak pintar Rust, Anda dapat mengimplementasikan Trait kustom untuk mengontrol akses fungsi berhak.
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.
Praktik Keamanan Smart Contract Rust: Visibilitas Fungsi dan Kontrol Akses Privilese
Rust smart contract pengembangan jurnal (7) Keamanan kontrak dalam presisi perhitungan
Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua perspektif:
1. Visibilitas Fungsi Kontrak
Pengaturan visibilitas fungsi kontrak yang wajar sangat penting untuk melindungi bagian kunci dari akses atau manipulasi yang tidak disengaja. Sebagai contoh, pada insiden keamanan di bursa Bancor Network pada Juni 2020, karena secara keliru mengatur fungsi transfer kunci sebagai public, aset pengguna menghadapi risiko.
Dalam smart contract Rust, visibilitas fungsi terutama terdiri dari beberapa jenis berikut:
Cara lain untuk mengatur metode internal adalah dengan mendefinisikan blok kode impl Contract yang terpisah, tanpa menggunakan modifikasi #[near_bindgen].
Fungsi callback harus diatur sebagai publik, tetapi harus memastikan hanya dapat dipanggil oleh kontrak itu sendiri. Anda dapat menggunakan makro #[private] untuk mencapai fungsi ini.
Perlu dicatat bahwa Rust secara default menganggap semua konten sebagai private, tetapi item dalam trait dan enum adalah pengecualian.
2. Kontrol Akses Fungsi Privilege
Selain visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses yang lengkap dari sudut pandang semantik. Mirip dengan onlyOwner dalam Solidity, beberapa fungsi istimewa hanya dapat dipanggil oleh pemilik kontrak.
Di kontrak pintar Rust, Anda dapat mengimplementasikan Trait kustom untuk mengontrol akses fungsi berhak.
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 hal ini, mekanisme daftar putih yang lebih kompleks dapat diimplementasikan untuk mencapai kontrol akses grup yang lebih rinci.
3. Metode kontrol akses lainnya
Ada beberapa metode kontrol akses lainnya, seperti:
Konten ini akan dijelaskan secara rinci dalam artikel selanjutnya.