Урок 4

Khám phá hợp đồng LearnCoin

Đến cuối bài học này, bạn sẽ có thể: 1.Hiểu được các phần và chức năng chính của hợp đồng LearnCoin. 2.Hiểu rõ vai trò của các hợp đồng và thư viện OpenZeppelin trong hợp đồng mã thông báo của chúng tôi.

Giới thiệu loại coin

Trong bài học trước, chúng tôi đã triển khai hợp đồng LearnCoin của mình trên Mạng thử nghiệm Goerli. Trong bài học này, chúng ta sẽ khám phá chi tiết các chức năng của hợp đồng LearnCoin và giải thích chức năng của từng phần.

Cấu trúc hợp đồng

Đây là hợp đồng đầy đủ của LearnCoin của chúng tôi

Python 
 // SPDX-Lilicense-Identifier: Không có 
 độ vững chắc pragma ^0.8.9; 

 nhập "@openzeppelin/contracts/token/ERC20/ERC20.sol";
nhập "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
nhập "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol";
nhập "@openzeppelin/contracts/access/AccessControl.sol";
nhập "@openzeppelin/contracts/security/Pausable.sol";
nhập "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";
nhập "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
nhập "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";

hợp đồng LearnCoin là ERC20, ERC20Burnable, ERC20Snapshot, AccessControl, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint { 
 bytes32 hằng số công khai SNAPSHOT_ROLE = keccak256("SNAPSHOT_ROLE"); Hằng số công khai 
 byte32 PAUSER_ROLE = keccak256("PAUSER_ROLE"); 

 constructor() ERC20("Tìm hiểu về Coin", "LC") ERC20Permit("Tìm hiểu về Coin") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(SNAPSHOT_ROLE, msg.sender);
        _grantRole(PAUSER_ROLE, msg.sender);
        _mint(msg.sender, 21000000 * 10 ** decimals());
    }

    hàm snapshot() public onlyRole(SNAPSHOT_ROLE) {
        _snapshot();
    }

    hàm tạm dừng() public onlyRole(PAUSER_ROLE) {
        _pause();
    }

    hàm unpause() public onlyRole(PAUSER_ROLE) {
        _unpause();
    }

    hàm _trướcTokenTransfer(địa chỉ từ, địa chỉ đến, số tiền uint256) 
 nội bộ 
 whenNotPaused 
 ghi đè(ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    // Các chức năng sau đây được ghi đè được yêu cầu bởi Solidity.

    function _afterTokenTransfer(địa chỉ từ, địa chỉ đến, số tiền uint256) 
 nội bộ 
 ghi đè(ERC20, ERC20Votes)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    chức năng _mint(địa chỉ tới, số tiền uint256) 
 nội bộ 
 ghi đè(ERC20, ERC20Votes)
    {
        super._mint(to, amount);
    }

    chức năng _burn(địa chỉ tài khoản, số tiền uint256) 
 nội bộ 
 ghi đè(ERC20, ERC20Votes)
    {
        super._burn(account, amount);
    }
}

Hợp đồng bạn đã triển khai là hợp đồng mã thông báo ERC20 có tên LearnCoin. Nó bao gồm một số tính năng từ thư viện hợp đồng của OpenZeppelin, chẳng hạn như mã thông báo có thể ghi, ảnh chụp nhanh, kiểm soát truy cập, mã thông báo có thể tạm dừng, chức năng cấp phép, phiếu bầu và flash mint.

Báo cáo nhập khẩu hợp đồng

Báo cáo nhập ở đầu hợp đồng lấy mã từ thư viện hợp đồng của OpenZeppelin:

  • ERC20.sol là hợp đồng cơ sở cho mã thông báo ERC20.
  • ERC20Burnable.sol bổ sung thêm khả năng cho chủ sở hữu mã thông báo hủy mã thông báo của riêng họ.
  • ERC20Snapshot.sol cho phép tạo ảnh chụp nhanh số dư mã thông báo.
  • AccessControl.sol là một mô-đun hợp đồng để quản lý quyền truy cập vào một số chức năng nhất định.
  • Pausable.sol bổ sung khả năng tạm dừng và hủy tạm dừng chuyển mã thông báo.
  • ERC20Permit.sol cho phép chủ sở hữu chi tiêu mã thông báo của người dùng thông qua giấy phép.
  • ERC20Votes.sol bổ sung khả năng biểu quyết cho mã thông báo.
  • ERC20FlashMint.sol cho phép đúc token nhanh chóng.

Tuyên bố hợp đồng LearnCoin

Hợp đồng LearnCoin kế thừa từ các hợp đồng OpenZeppelin đã nhập. Điều này có nghĩa là nó sẽ có tất cả các phương thức và thuộc tính từ các hợp đồng đó.

Tuyên bố vai trò

SNAPSHOT_ROLEPAUSER_ROLE là các giá trị không đổi (được tạo bằng hàm băm keccak256 ) thể hiện các vai trò cụ thể để kiểm soát truy cập trong hợp đồng.

Hàm xây dựng

Khi hợp đồng LearnCoin được triển khai, hàm xây dựng sẽ được gọi. Nó đặt tên và ký hiệu của mã thông báo, cấp cho tài khoản triển khai (msg.sender) vai trò quản trị viên, ảnh chụp nhanh và người tạm dừng, đồng thời tạo ra nguồn cung cấp mã thông báo ban đầu cho tài khoản triển khai.

Chức năng bổ sung

snapshot, pauseunpause là các chức năng cho phép các tài khoản có vai trò tương ứng thực hiện một số hành động nhất định. snapshot cho phép tạo ảnh chụp nhanh, pauseunpause cho phép dừng và khởi động lại quá trình chuyển mã thông báo.

Ghi đè

Các _beforeTokenTransfer, _afterTokenTransfer, _mint_burn là các hàm nội bộ được ghi đè từ các hợp đồng gốc. Họ triển khai logic tùy chỉnh cho hợp đồng LearnCoin.

  • _beforeTokenTransfer: Hàm này được gọi trước khi chuyển mã thông báo. Nó đảm bảo rằng việc chuyển mã thông báo không bị tạm dừng.
  • _afterTokenTransfer: Hàm này được gọi sau bất kỳ lần chuyển mã thông báo nào. Ở đây đây là một hàm trống nhưng có thể được sử dụng cho logic tùy chỉnh sẽ diễn ra ngay sau khi chuyển.
  • _mint: Chức năng này tạo mã thông báo mới và gán chúng cho một tài khoản nhất định.
  • _burn: Chức năng này hủy mã thông báo từ một tài khoản nhất định.

Phần kết luận

Đây là tổng quan nhanh về hợp đồng LearnCoin của bạn. Khi hợp đồng được triển khai, giờ đây bạn đã sẵn sàng tương tác với hợp đồng đó, điều này chúng ta sẽ đề cập đến trong bài học tiếp theo.

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
Каталог
Урок 4

Khám phá hợp đồng LearnCoin

Đến cuối bài học này, bạn sẽ có thể: 1.Hiểu được các phần và chức năng chính của hợp đồng LearnCoin. 2.Hiểu rõ vai trò của các hợp đồng và thư viện OpenZeppelin trong hợp đồng mã thông báo của chúng tôi.

Giới thiệu loại coin

Trong bài học trước, chúng tôi đã triển khai hợp đồng LearnCoin của mình trên Mạng thử nghiệm Goerli. Trong bài học này, chúng ta sẽ khám phá chi tiết các chức năng của hợp đồng LearnCoin và giải thích chức năng của từng phần.

Cấu trúc hợp đồng

Đây là hợp đồng đầy đủ của LearnCoin của chúng tôi

Python 
 // SPDX-Lilicense-Identifier: Không có 
 độ vững chắc pragma ^0.8.9; 

 nhập "@openzeppelin/contracts/token/ERC20/ERC20.sol";
nhập "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
nhập "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol";
nhập "@openzeppelin/contracts/access/AccessControl.sol";
nhập "@openzeppelin/contracts/security/Pausable.sol";
nhập "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";
nhập "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
nhập "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";

hợp đồng LearnCoin là ERC20, ERC20Burnable, ERC20Snapshot, AccessControl, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint { 
 bytes32 hằng số công khai SNAPSHOT_ROLE = keccak256("SNAPSHOT_ROLE"); Hằng số công khai 
 byte32 PAUSER_ROLE = keccak256("PAUSER_ROLE"); 

 constructor() ERC20("Tìm hiểu về Coin", "LC") ERC20Permit("Tìm hiểu về Coin") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(SNAPSHOT_ROLE, msg.sender);
        _grantRole(PAUSER_ROLE, msg.sender);
        _mint(msg.sender, 21000000 * 10 ** decimals());
    }

    hàm snapshot() public onlyRole(SNAPSHOT_ROLE) {
        _snapshot();
    }

    hàm tạm dừng() public onlyRole(PAUSER_ROLE) {
        _pause();
    }

    hàm unpause() public onlyRole(PAUSER_ROLE) {
        _unpause();
    }

    hàm _trướcTokenTransfer(địa chỉ từ, địa chỉ đến, số tiền uint256) 
 nội bộ 
 whenNotPaused 
 ghi đè(ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    // Các chức năng sau đây được ghi đè được yêu cầu bởi Solidity.

    function _afterTokenTransfer(địa chỉ từ, địa chỉ đến, số tiền uint256) 
 nội bộ 
 ghi đè(ERC20, ERC20Votes)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    chức năng _mint(địa chỉ tới, số tiền uint256) 
 nội bộ 
 ghi đè(ERC20, ERC20Votes)
    {
        super._mint(to, amount);
    }

    chức năng _burn(địa chỉ tài khoản, số tiền uint256) 
 nội bộ 
 ghi đè(ERC20, ERC20Votes)
    {
        super._burn(account, amount);
    }
}

Hợp đồng bạn đã triển khai là hợp đồng mã thông báo ERC20 có tên LearnCoin. Nó bao gồm một số tính năng từ thư viện hợp đồng của OpenZeppelin, chẳng hạn như mã thông báo có thể ghi, ảnh chụp nhanh, kiểm soát truy cập, mã thông báo có thể tạm dừng, chức năng cấp phép, phiếu bầu và flash mint.

Báo cáo nhập khẩu hợp đồng

Báo cáo nhập ở đầu hợp đồng lấy mã từ thư viện hợp đồng của OpenZeppelin:

  • ERC20.sol là hợp đồng cơ sở cho mã thông báo ERC20.
  • ERC20Burnable.sol bổ sung thêm khả năng cho chủ sở hữu mã thông báo hủy mã thông báo của riêng họ.
  • ERC20Snapshot.sol cho phép tạo ảnh chụp nhanh số dư mã thông báo.
  • AccessControl.sol là một mô-đun hợp đồng để quản lý quyền truy cập vào một số chức năng nhất định.
  • Pausable.sol bổ sung khả năng tạm dừng và hủy tạm dừng chuyển mã thông báo.
  • ERC20Permit.sol cho phép chủ sở hữu chi tiêu mã thông báo của người dùng thông qua giấy phép.
  • ERC20Votes.sol bổ sung khả năng biểu quyết cho mã thông báo.
  • ERC20FlashMint.sol cho phép đúc token nhanh chóng.

Tuyên bố hợp đồng LearnCoin

Hợp đồng LearnCoin kế thừa từ các hợp đồng OpenZeppelin đã nhập. Điều này có nghĩa là nó sẽ có tất cả các phương thức và thuộc tính từ các hợp đồng đó.

Tuyên bố vai trò

SNAPSHOT_ROLEPAUSER_ROLE là các giá trị không đổi (được tạo bằng hàm băm keccak256 ) thể hiện các vai trò cụ thể để kiểm soát truy cập trong hợp đồng.

Hàm xây dựng

Khi hợp đồng LearnCoin được triển khai, hàm xây dựng sẽ được gọi. Nó đặt tên và ký hiệu của mã thông báo, cấp cho tài khoản triển khai (msg.sender) vai trò quản trị viên, ảnh chụp nhanh và người tạm dừng, đồng thời tạo ra nguồn cung cấp mã thông báo ban đầu cho tài khoản triển khai.

Chức năng bổ sung

snapshot, pauseunpause là các chức năng cho phép các tài khoản có vai trò tương ứng thực hiện một số hành động nhất định. snapshot cho phép tạo ảnh chụp nhanh, pauseunpause cho phép dừng và khởi động lại quá trình chuyển mã thông báo.

Ghi đè

Các _beforeTokenTransfer, _afterTokenTransfer, _mint_burn là các hàm nội bộ được ghi đè từ các hợp đồng gốc. Họ triển khai logic tùy chỉnh cho hợp đồng LearnCoin.

  • _beforeTokenTransfer: Hàm này được gọi trước khi chuyển mã thông báo. Nó đảm bảo rằng việc chuyển mã thông báo không bị tạm dừng.
  • _afterTokenTransfer: Hàm này được gọi sau bất kỳ lần chuyển mã thông báo nào. Ở đây đây là một hàm trống nhưng có thể được sử dụng cho logic tùy chỉnh sẽ diễn ra ngay sau khi chuyển.
  • _mint: Chức năng này tạo mã thông báo mới và gán chúng cho một tài khoản nhất định.
  • _burn: Chức năng này hủy mã thông báo từ một tài khoản nhất định.

Phần kết luận

Đây là tổng quan nhanh về hợp đồng LearnCoin của bạn. Khi hợp đồng được triển khai, giờ đây bạn đã sẵn sàng tương tác với hợp đồng đó, điều này chúng ta sẽ đề cập đến trong bài học tiếp theo.

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.