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:

  • 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:

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:

  • Kontrol waktu pemanggilan kontrak
  • Mekanisme panggilan multi-tanda tangan fungsi kontrak
  • Mekanisme DAO (

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(

GET-0.16%
Lihat Asli
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.
  • Hadiah
  • 4
  • Posting ulang
  • Bagikan
Komentar
0/400
EthMaximalistvip
· 08-14 01:11
Ah, bukankah ini adalah celah yang membuat bancor gagal di tahun itu?
Lihat AsliBalas0
HalfBuddhaMoneyvip
· 08-12 19:17
Wuhu, saatnya menulis bug lagi.
Lihat AsliBalas0
GhostAddressMinervip
· 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
CoconutWaterBoyvip
· 08-12 18:50
Sudah beberapa tahun mengerjakan kontrak, pub fn juga pernah gagal berkali-kali.
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)