Asas Pembangunan Web3 & DApp · Pelajaran

Kawalan Capaian

Ownable dan Roles

Pelajaran 2 daripada 413 langkah

Kawalan Capaian ialah pelajaran Asas Pembangunan Web3 & DApp percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Asas Pembangunan Web3 & DApp, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.

Mengapa Kawalan Akses

Banyak fungsi kontrak sepatutnya hanya boleh dipanggil oleh akaun tertentu — mencetak token, menjeda sistem dan mengeluarkan dana. Kawalan akses menguatkuasakan pihak yang boleh melakukan setiap tindakan.

OpenZeppelin menawarkan dua corak utama: Ownable dan AccessControl.

Corak Ownable

Ownable memberikan kontrak satu owner yang mempunyai keistimewaan. Import dan warisinya:

import "@openzeppelin/contracts/access/Ownable.sol"; contract Vault is Ownable { constructor() Ownable(msg.sender) {} }

Pihak yang menggunakan kontrak menjadi pemilik awal.

import "@openzeppelin/contracts/access/Ownable.sol";

contract Vault is Ownable {
    constructor() Ownable(msg.sender) {}
}

Pengubah onlyOwner

Hadkan fungsi kepada pemilik dengan pengubah onlyOwner:

function withdraw() public onlyOwner { payable(owner()).transfer(address(this).balance); }

Jika pihak lain memanggilnya, transaksi akan dibatalkan secara automatik.

function withdraw() public onlyOwner {
    payable(owner()).transfer(address(this).balance);
}

Memindahkan Pemilikan

Ownable membolehkan Anda menyerahkan kawalan kepada alamat lain:

// Give ownership to a new account vault.transferOwnership(newOwner); // Or give it up forever vault.renounceOwnership();

Melepaskan pemilikan menjadikan fungsi onlyOwner tidak boleh dipanggil selama-lamanya — gunakannya dengan berhati-hati.

// Give ownership to a new account
vault.transferOwnership(newOwner);

// Or give it up forever
vault.renounceOwnership();

Had Pemilik Tunggal

Seorang pemilik memang ringkas tetapi mempunyai batasan:

  • Tiada cara untuk memberikan kebenaran berbeza kepada orang yang berbeza.
  • Satu kunci ialah satu titik kegagalan.

Untuk persediaan yang lebih kaya, gunakan kawalan akses berasaskan peranan.

Corak AccessControl

AccessControl menyokong banyak peranan bernama. Warisinya dan takrifkan peranan Anda:

import "@openzeppelin/contracts/access/AccessControl.sol"; contract Token is AccessControl { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); }

Peranan dikenal pasti melalui nama yang dicincang.

import "@openzeppelin/contracts/access/AccessControl.sol";

contract Token is AccessControl {
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
}

Memberikan Peranan

Pihak yang menggunakan kontrak biasanya menerima peranan pentadbir, kemudian memberikan peranan kepada pihak lain:

constructor() { _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantRole(MINTER_ROLE, msg.sender); }

DEFAULT_ADMIN_ROLE boleh memberikan dan menarik balik semua peranan lain.

constructor() {
    _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
    _grantRole(MINTER_ROLE, msg.sender);
}

Pengubah onlyRole

Hadkan fungsi kepada pemegang sesuatu peranan:

function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) { _mint(to, amount); }

Hanya akaun yang diberikan MINTER_ROLE boleh mencetak token; akaun lain akan menyebabkan transaksi dibatalkan.

function mint(address to, uint256 amount)
    public onlyRole(MINTER_ROLE) {
    _mint(to, amount);
}

Mengurus Peranan Semasa Pelaksanaan

Pentadbir boleh memberikan dan menarik balik peranan selepas penggunaan:

token.grantRole(MINTER_ROLE, alice); token.revokeRole(MINTER_ROLE, alice); // Check membership bool canMint = await token.hasRole(MINTER_ROLE, alice);

Sesuatu akaun juga boleh melepaskan peranannya sendiri.

token.grantRole(MINTER_ROLE, alice);
token.revokeRole(MINTER_ROLE, alice);

// Check membership
bool canMint = await token.hasRole(MINTER_ROLE, alice);

Memilih Corak

Yang manakah patut digunakan?

  • Ownable — tugas pentadbiran yang ringkas, seorang pengendali yang dipercayai.
  • AccessControl — banyak peranan, pengasingan tugas dan organisasi autonomi teragih.

Untuk pengeluaran, pertimbangkan untuk memberikan peranan pemilik atau pentadbir kepada multisig dan bukannya satu kunci.

Setiap Peranan Mempunyai Pentadbir

Dalam AccessControl, setiap peranan mempunyai peranan pentadbir yang mengawal pihak yang boleh memberikan atau menarik baliknya. Secara lalai, peranan itu ialah DEFAULT_ADMIN_ROLE, tetapi Anda boleh mengubahnya:

// Make MANAGER_ROLE the admin of MINTER_ROLE _setRoleAdmin(MINTER_ROLE, MANAGER_ROLE);

Ini membolehkan Anda membina hierarki kebenaran.

// Make MANAGER_ROLE the admin of MINTER_ROLE
_setRoleAdmin(MINTER_ROLE, MANAGER_ROLE);

Semakan Pantas

Uji pemahaman Anda tentang kawalan akses.

Rumusan

Anda telah belajar corak kawalan akses OpenZeppelin.

  • Ownable memberikan satu owner; hadkan dengan onlyOwner dan pindahkan atau lepaskan pemilikan.
  • AccessControl menyokong banyak peranan yang dikenal pasti melalui nama yang dicincang.
  • Berikan peranan pentadbir semasa penggunaan; lindungi fungsi dengan onlyRole.
  • Pentadbir memberikan atau menarik balik peranan semasa pelaksanaan; akaun boleh melepaskan peranan.
  • Gunakan Ownable untuk kes ringkas dan AccessControl (sebaik-baiknya di sebalik multisig) untuk kes kompleks.
Percuma untuk bermula

Pelajari Asas Pembangunan Web3 & DApp dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
29
Pelajaran
105

Soalan Lazim

Adakah pelajaran “Kawalan Capaian” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Asas Pembangunan Web3 & DApp, termasuk “Kawalan Capaian”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Kawalan Capaian”?

Ownable dan Roles Anda berlatih Asas Pembangunan Web3 & DApp menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Asas Pembangunan Web3 & DApp?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Asas Pembangunan Web3 & DApp di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Kawalan Capaian” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Asas Pembangunan Web3 & DApp ini?

Ya. Setiap pelajaran Asas Pembangunan Web3 & DApp menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mengapa OpenZeppelin
  2. Kawalan Capaian
  3. Sambungan Token
  4. Kontrak Boleh Dinaik Taraf
← Kembali ke Asas Pembangunan Web3 & DApp