Rust smart contract pengembangan jurnal (7) Keamanan kontrak dan kontrol akses
Artikel ini akan memperkenalkan pengendalian akses dalam smart contract Rust dari dua sudut pandang:
Visibilitas akses/panggilan metode kontrak
Kontrol akses fungsi hak istimewa/pembagian tanggung jawab
1. Visibilitas fungsi kontrak
Pengaturan visibilitas fungsi kontrak sangat penting untuk melindungi bagian-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 memiliki beberapa jenis 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
Cara lain untuk mengatur metode internal adalah dengan mendefinisikan blok kode impl Contract yang terpisah, tanpa menggunakan modifikasi #[near_bindgen].
Untuk fungsi callback, harus diatur sebagai publik tetapi juga memastikan hanya dapat dipanggil oleh kontrak itu sendiri. Anda dapat menggunakan makro #[private] untuk mengimplementasikan fungsi ini.
Perlu diperhatikan bahwa secara default semua konten di Rust adalah private, kecuali item dalam pub Trait dan pub Enum.
2. Kontrol Akses Fungsi Istimewa
Selain visibilitas fungsi, perlu juga untuk membangun mekanisme daftar putih kontrol akses yang lengkap dari sudut pandang semantik. Mirip dengan fungsi "onlyOwner" dalam Solidity, beberapa fungsi kunci hanya dapat dipanggil oleh pemilik kontrak.
Dalam kontrak Rust, dapat diimplementasikan Trait kustom yang serupa:
Dengan cara ini, akses kontrol terhadap fungsi-fungsi istimewa dapat dicapai, memastikan hanya pemilik kontrak yang dapat memanggil. Berdasarkan prinsip ini, juga dapat diatur daftar putih multi-pengguna yang lebih kompleks atau beberapa daftar putih, untuk mencapai kontrol akses yang lebih rinci.
3. Metode kontrol akses lainnya
Ada beberapa metode kontrol akses lainnya, seperti:
Kontrol waktu pemanggilan kontrak
Mekanisme panggilan multi-tanda tangan untuk fungsi kontrak
Tata Kelola ( DAO ) yang diimplementasikan
Konten ini akan diperkenalkan dalam jurnal pengembangan smart contract di masa mendatang.
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.
17 Suka
Hadiah
17
5
Posting ulang
Bagikan
Komentar
0/400
TheMemefather
· 08-18 14:36
Ah, peristiwa Bancor ini terlalu konyol.
Lihat AsliBalas0
PancakeFlippa
· 08-18 11:42
Sudah bermain Bancor? Rekt...
Lihat AsliBalas0
ReverseFOMOguy
· 08-16 02:20
bug bancor benar-benar tidak bisa ditahan
Lihat AsliBalas0
BoredApeResistance
· 08-16 02:05
Ah, ini kan bug yang pernah membuat bancor gagal.
Lihat AsliBalas0
rekt_but_not_broke
· 08-16 02:01
Kasus serangan ini cukup baru, membuat saya berkeringat dingin.
Jalan Keamanan Kontrak Pintar Rust: Penjelasan Kontrol Akses dan Visibilitas Fungsi
Rust smart contract pengembangan jurnal (7) Keamanan kontrak dan kontrol akses
Artikel ini akan memperkenalkan pengendalian akses dalam smart contract Rust dari dua sudut pandang:
1. Visibilitas fungsi kontrak
Pengaturan visibilitas fungsi kontrak sangat penting untuk melindungi bagian-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 memiliki beberapa jenis berikut:
Cara lain untuk mengatur metode internal adalah dengan mendefinisikan blok kode impl Contract yang terpisah, tanpa menggunakan modifikasi #[near_bindgen].
Untuk fungsi callback, harus diatur sebagai publik tetapi juga memastikan hanya dapat dipanggil oleh kontrak itu sendiri. Anda dapat menggunakan makro #[private] untuk mengimplementasikan fungsi ini.
Perlu diperhatikan bahwa secara default semua konten di Rust adalah private, kecuali item dalam pub Trait dan pub Enum.
2. Kontrol Akses Fungsi Istimewa
Selain visibilitas fungsi, perlu juga untuk membangun mekanisme daftar putih kontrol akses yang lengkap dari sudut pandang semantik. Mirip dengan fungsi "onlyOwner" dalam Solidity, beberapa fungsi kunci hanya dapat dipanggil oleh pemilik kontrak.
Dalam kontrak Rust, dapat diimplementasikan Trait kustom yang serupa:
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, akses kontrol terhadap fungsi-fungsi istimewa dapat dicapai, memastikan hanya pemilik kontrak yang dapat memanggil. Berdasarkan prinsip ini, juga dapat diatur daftar putih multi-pengguna yang lebih kompleks atau beberapa daftar putih, untuk mencapai kontrol akses yang lebih rinci.
3. Metode kontrol akses lainnya
Ada beberapa metode kontrol akses lainnya, seperti:
Konten ini akan diperkenalkan dalam jurnal pengembangan smart contract di masa mendatang.