Rust smart contract pengembangan jurnal (7) Keamanan kontrak dalam akurasi perhitungan
Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua aspek:
Visibilitas akses/panggilan metode kontrak
Kontrol akses fungsi privilese/pembagian tanggung jawab
1. Visibilitas Fungsi Kontrak
Mengatur visibilitas fungsi kontrak dapat mengontrol hak akses fungsi, melindungi bagian penting dari akses sembarangan. Contoh dari bursa Bancor Network, pada bulan Juni 2020, terjadi insiden keamanan aset akibat kesalahan pengaturan visibilitas fungsi kunci.
Dalam kontrak pintar Rust, visibilitas fungsi dikendalikan dengan cara berikut:
pub fn: fungsi publik, dapat dipanggil dari luar kontrak
fn: fungsi internal, 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 independen, tanpa menggunakan modifikasi #[near_bindgen].
Fungsi callback harus diatur sebagai pub, tetapi harus dipastikan hanya dapat dipanggil oleh kontrak itu sendiri. Dapat menggunakan makro #[private] untuk mencapainya.
Secara default, Rust membuat semua konten bersifat private, tetapi item-item dalam trait dan enum secara default bersifat public.
2. Kontrol Akses Fungsi Privilege
Selain mengatur visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses. Mirip dengan modifier onlyOwner dalam Solidity, dapat didefinisikan fungsi hak istimewa yang hanya dapat dipanggil oleh pemilik.
Di Rust, Anda dapat mengimplementasikan trait Ownable yang serupa:
Dengan cara ini, kontrol akses untuk fungsi istimewa dapat diterapkan. Ini dapat diperluas lebih lanjut untuk mengatur daftar putih multi-pengguna atau beberapa kelompok daftar putih.
3. Metode kontrol akses lainnya
Dapat juga diimplementasikan:
Kontrol waktu pemanggilan kontrak
Mekanisme panggilan multi-tanda tangan fungsi kontrak
Mekanisme DAO (
Silakan ikuti pengiriman selanjutnya untuk informasi lebih lanjut.
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.
20 Suka
Hadiah
20
4
Posting ulang
Bagikan
Komentar
0/400
EthMaximalist
· 08-14 01:11
Ah, bukankah ini adalah celah yang membuat bancor gagal di tahun itu?
Lihat AsliBalas0
HalfBuddhaMoney
· 08-12 19:17
Wuhu, saatnya menulis bug lagi.
Lihat AsliBalas0
GhostAddressMiner
· 08-12 19:17
Kontrak ini memiliki celah yang sangat dasar, saya dengan mudah mengikut 276 Dompet hacker, sudah lama menyadari bahwa aliran dana bancor ada yang mencurigakan.
Lihat AsliBalas0
CoconutWaterBoy
· 08-12 18:50
Sudah beberapa tahun mengerjakan kontrak, pub fn juga pernah gagal berkali-kali.
Praktik Keamanan Kontrak Pintar Rust: Penjelasan Detail tentang Visibilitas Fungsi dan Kontrol Akses
Rust smart contract pengembangan jurnal (7) Keamanan kontrak dalam akurasi perhitungan
Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua aspek:
1. Visibilitas Fungsi Kontrak
Mengatur visibilitas fungsi kontrak dapat mengontrol hak akses fungsi, melindungi bagian penting dari akses sembarangan. Contoh dari bursa Bancor Network, pada bulan Juni 2020, terjadi insiden keamanan aset akibat kesalahan pengaturan visibilitas fungsi kunci.
Dalam kontrak pintar Rust, visibilitas fungsi dikendalikan dengan cara berikut:
Cara lain untuk mengatur metode internal adalah dengan mendefinisikan blok kode impl Contract yang independen, tanpa menggunakan modifikasi #[near_bindgen].
Fungsi callback harus diatur sebagai pub, tetapi harus dipastikan hanya dapat dipanggil oleh kontrak itu sendiri. Dapat menggunakan makro #[private] untuk mencapainya.
Secara default, Rust membuat semua konten bersifat private, tetapi item-item dalam trait dan enum secara default bersifat public.
2. Kontrol Akses Fungsi Privilege
Selain mengatur visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses. Mirip dengan modifier onlyOwner dalam Solidity, dapat didefinisikan fungsi hak istimewa yang hanya dapat dipanggil oleh pemilik.
Di Rust, Anda dapat mengimplementasikan trait Ownable 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, kontrol akses untuk fungsi istimewa dapat diterapkan. Ini dapat diperluas lebih lanjut untuk mengatur daftar putih multi-pengguna atau beberapa kelompok daftar putih.
3. Metode kontrol akses lainnya
Dapat juga diimplementasikan:
Silakan ikuti pengiriman selanjutnya untuk informasi lebih lanjut.
![])https://img-cdn.gateio.im/webp-social/moments-4c9e1911156dc6134b40fab37dd6c539.webp(
![])https://img-cdn.gateio.im/webp-social/moments-b465966b93b04b1f687c676e62c39bc2.webp(
![])https://img-cdn.gateio.im/webp-social/moments-6211a037604bd45f9d638f6f0a7ce5c2.webp(
![])https://img-cdn.gateio.im/webp-social/moments-7f9b5788662e38094194172212155bb5.webp(
![])https://img-cdn.gateio.im/webp-social/moments-2c64fb18a6182ccc014ef4c949213e7e.webp(
![])https://img-cdn.gateio.im/webp-social/moments-5b7fd87c1bbe1b57c40c5349716f6d7c.webp(
![])https://img-cdn.gateio.im/webp-social/moments-5c3bdf877fa7e468268992229d94bebc.webp(
![])https://img-cdn.gateio.im/webp-social/moments-54c0aed04624592c740791245f01325a.webp(