Praktik Keamanan Kontrak Pintar Rust: Kontrol Akses dan Manajemen Izin

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 metode kontrak
  2. Kontrol akses fungsi istimewa

1. Visibilitas Fungsi Kontrak

Visibilitas fungsi kontrak menentukan siapa yang dapat memanggil fungsi-fungsi tersebut. Mengatur visibilitas dengan benar sangat penting untuk melindungi bagian-bagian penting dari kontrak.

Dalam kontrak pintar Rust, visibilitas fungsi terutama terdiri dari beberapa jenis berikut:

  • pub fn: fungsi publik, dapat dipanggil dari luar kontrak
  • fn: Fungsi internal, hanya dapat dipanggil di dalam kontrak
  • pub(crate) fn: membatasi panggilan di dalam crate

Selain itu, Anda dapat menetapkannya sebagai metode internal dengan mendefinisikan metode dalam blok kode impl Contract yang terpisah:

karat #[near_bindgen] impl Kontrak { pub fn increment(&mut self) { self.internal_increment(); } }

impl Kontrak { pub fn internal_increment(&mut self) { self.counter += 1; } }

Untuk fungsi callback, perlu diatur sebagai pub dan menggunakan makro #[private] untuk membatasi hanya dapat dipanggil oleh kontrak itu sendiri:

karat #[near_bindgen] impl Kontrak { #[private] pub fn resolve_transfer(&mut self) { // Logika callback } }

2. Kontrol Akses Fungsi Privilege

Selain mengatur visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses untuk membatasi pemanggilan fungsi istimewa.

Dapat mewujudkan trait Ownable yang serupa dengan berikut:

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); }

Kemudian, dalam fungsi hak istimewa, panggil assert_owner() untuk memverifikasi identitas pemanggil:

karat impl Kontrak { pub fn privileged_function(&mut self) { self.assert_owner(); // Logika fungsi istimewa } }

Ini dapat mewujudkan kontrol hak akses dasar pemilik. Dapat diperluas lebih lanjut menjadi daftar putih multi-pengguna atau beberapa grup daftar putih untuk mencapai kontrol akses yang lebih rinci.

Selain itu, Anda juga dapat mempertimbangkan kontrol waktu panggilan, mekanisme multi-tanda tangan, dan skema kontrol akses lainnya yang lebih kompleks. Penetapan yang tepat terhadap visibilitas fungsi kontrak dan kontrol akses sangat penting untuk memastikan keamanan kontrak.

GET6.24%
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
  • 5
  • Posting ulang
  • Bagikan
Komentar
0/400
CryingOldWalletvip
· 07-28 07:37
Akhirnya melihat yang terkait dengan rust, catat baik-baik
Lihat AsliBalas0
PumpingCroissantvip
· 07-28 03:49
Sekali lagi tidak bisa belajar rust
Lihat AsliBalas0
CryptoGoldminevip
· 07-25 08:04
Teknik Kedalaman bagus, tetapi ROI yang sebenarnya harus dilihat dari optimasi penjadwalan Pool Penambangan.
Lihat AsliBalas0
SchrodingerAirdropvip
· 07-25 08:01
Tutorial pemula ini membuat saya pusing, rust selalu melakukan hal-hal yang dalam.
Lihat AsliBalas0
GateUser-2fce706cvip
· 07-25 08:01
Evolusi adalah kebenaran yang tak terbantahkan, rantai Rust kali ini muncul seperti ombak! Segera siapkan strategi!
Lihat AsliBalas0
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)