Урок 4

Вивчення контракту LearnCoin

До кінця цього уроку ви зможете: 1. Розуміти ключові частини та функції контракту LearnCoin. 2. Зрозумійте роль контрактів і бібліотек OpenZeppelin у нашому контракті маркерів.

Вступ

На минулому уроці ми розгорнули наш контракт LearnCoin у Goerli Testnet. У цьому уроці ми детально розглянемо функції контракту LearnCoin і пояснимо, що робить кожна частина.

Структура контракту

Це повний контракт нашого LearnCoin

Python 
 // SPDX-License-Identifier: Немає 
 pragma solidity ^0.8.9; 

 імпорт "@openzeppelin/contracts/token/ERC20/ERC20.sol";
імпорт "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
імпорт "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol";
імпорт "@openzeppelin/contracts/access/AccessControl.sol";
імпорт "@openzeppelin/contracts/security/Pausable.sol";
імпорт "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";
імпорт "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
імпорт "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";

контракт LearnCoin — це ERC20, ERC20Burnable, ERC20Snapshot, AccessControl, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint { 
 bytes32 public constant SNAPSHOT_ROLE = keccak256("SNAPSHOT_ROLE"); 
 bytes32 публічна константа PAUSER_ROLE = keccak256("PAUSER_ROLE"); 

 constructor() ERC20("Learn Coin", "LC") ERC20Permit("Learn Coin") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(SNAPSHOT_ROLE, msg.sender);
        _grantRole(PAUSER_ROLE, msg.sender);
        _mint(msg.sender, 21000000 * 10 ** decimals());
    }

    функція snapshot() public onlyRole(SNAPSHOT_ROLE) {
        _snapshot();
    }

    функція pause() public onlyRole(PAUSER_ROLE) {
        _pause();
    }

    function unpause() public onlyRole(PAUSER_ROLE) {
        _unpause();
    }

    function _beforeTokenTransfer(address from, address to, uint256 сума) 
 internal 
 whenNotPaused 
 override(ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    // Наступні функції є замінами вимагає Solidity.

    функція _afterTokenTransfer(адреса від, адреса до, сума uint256) 
 внутрішня 
 перевизначення(ERC20, ERC20Votes)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    функція _mint(адреса до, сума uint256) 
 внутрішня 
 перевизначення(ERC20, ERC20Votes)
    {
        super._mint(to, amount);
    }

    функція _burn(адресний обліковий запис, сума uint256) 
 внутрішній 
 перевизначення(ERC20, ERC20Голосування)
    {
        super._burn(account, amount);
    }
}

Контракт, який ви розгорнули, є контрактом токена ERC20 під назвою LearnCoin. Він містить кілька функцій із бібліотеки контрактів OpenZeppelin, таких як записувані токени, знімки, контроль доступу, призупинені токени, функціональність дозволів, голоси та флеш-монетний двір.

Контрактні імпортні заяви

Оператори імпорту на початку контракту завантажують код із бібліотеки контрактів OpenZeppelin:

  • ERC20.sol є базовим контрактом для токенів ERC20.
  • ERC20Burnable.sol додає власникам жетонів можливість знищувати власні жетони.
  • ERC20Snapshot.sol дозволяє створювати знімки балансів токенів.
  • AccessControl.sol — контрактний модуль для керування доступом до певних функцій.
  • Pausable.sol додає можливість призупиняти та відновлювати передачу токенів.
  • ERC20Permit.sol дозволяє власникам витрачати токени користувачів за допомогою дозволів.
  • ERC20Votes.sol додає до токена можливості голосування.
  • ERC20FlashMint.sol дозволяє флеш-карбувати токени.

Контрактна декларація LearnCoin

Контракт LearnCoin успадковує імпортовані контракти OpenZeppelin. Це означає, що він матиме всі методи та властивості з цих контрактів.

Декларації ролей

SNAPSHOT_ROLE і PAUSER_ROLE є постійними значеннями (створеними за допомогою хеш-функції keccak256 ), які представляють конкретні ролі для контролю доступу в рамках контракту.

Функція-конструктор

Під час розгортання контракту LearnCoin викликається функція конструктора. Він встановлює назву та символ маркера, надає обліковому запису, що розгортає (msg.sender), ролі адміністратора, знімка та паузера, а також карбує початковий запас токенів для облікового запису, який розгортає.

Додаткові функції

snapshot, pause і unpause — це функції, які дозволяють обліковим записам із відповідними ролями виконувати певні дії. snapshot дозволяє зробити знімок, pause та unpause призупинити та перезапустити передачу токенів.

Перевизначення

Функції _beforeTokenTransfer, _afterTokenTransfer, _mint і _burn є внутрішніми функціями, які перевизначені з батьківських контрактів. Вони реалізують спеціальну логіку для контракту LearnCoin.

  • _beforeTokenTransfer: Ця функція викликається перед будь-якою передачею токенів. Це гарантує, що передача токенів не призупиняється.
  • _afterTokenTransfer: Ця функція викликається після будь-якої передачі маркерів. Тут це порожня функція, але її можна використовувати для спеціальної логіки, яка має відбуватися відразу після передачі.
  • _mint: ця функція створює нові токени та призначає їх певному обліковому запису.
  • _burn: ця функція знищує токени з даного облікового запису.

Висновок

Це був короткий огляд вашого контракту LearnCoin . Після розгортання контракту ви готові до взаємодії з ним, про що ми розглянемо в наступному уроці.

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

Вивчення контракту LearnCoin

До кінця цього уроку ви зможете: 1. Розуміти ключові частини та функції контракту LearnCoin. 2. Зрозумійте роль контрактів і бібліотек OpenZeppelin у нашому контракті маркерів.

Вступ

На минулому уроці ми розгорнули наш контракт LearnCoin у Goerli Testnet. У цьому уроці ми детально розглянемо функції контракту LearnCoin і пояснимо, що робить кожна частина.

Структура контракту

Це повний контракт нашого LearnCoin

Python 
 // SPDX-License-Identifier: Немає 
 pragma solidity ^0.8.9; 

 імпорт "@openzeppelin/contracts/token/ERC20/ERC20.sol";
імпорт "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
імпорт "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol";
імпорт "@openzeppelin/contracts/access/AccessControl.sol";
імпорт "@openzeppelin/contracts/security/Pausable.sol";
імпорт "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";
імпорт "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
імпорт "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";

контракт LearnCoin — це ERC20, ERC20Burnable, ERC20Snapshot, AccessControl, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint { 
 bytes32 public constant SNAPSHOT_ROLE = keccak256("SNAPSHOT_ROLE"); 
 bytes32 публічна константа PAUSER_ROLE = keccak256("PAUSER_ROLE"); 

 constructor() ERC20("Learn Coin", "LC") ERC20Permit("Learn Coin") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(SNAPSHOT_ROLE, msg.sender);
        _grantRole(PAUSER_ROLE, msg.sender);
        _mint(msg.sender, 21000000 * 10 ** decimals());
    }

    функція snapshot() public onlyRole(SNAPSHOT_ROLE) {
        _snapshot();
    }

    функція pause() public onlyRole(PAUSER_ROLE) {
        _pause();
    }

    function unpause() public onlyRole(PAUSER_ROLE) {
        _unpause();
    }

    function _beforeTokenTransfer(address from, address to, uint256 сума) 
 internal 
 whenNotPaused 
 override(ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    // Наступні функції є замінами вимагає Solidity.

    функція _afterTokenTransfer(адреса від, адреса до, сума uint256) 
 внутрішня 
 перевизначення(ERC20, ERC20Votes)
    {
        super._afterTokenTransfer(from, to, amount);
    }

    функція _mint(адреса до, сума uint256) 
 внутрішня 
 перевизначення(ERC20, ERC20Votes)
    {
        super._mint(to, amount);
    }

    функція _burn(адресний обліковий запис, сума uint256) 
 внутрішній 
 перевизначення(ERC20, ERC20Голосування)
    {
        super._burn(account, amount);
    }
}

Контракт, який ви розгорнули, є контрактом токена ERC20 під назвою LearnCoin. Він містить кілька функцій із бібліотеки контрактів OpenZeppelin, таких як записувані токени, знімки, контроль доступу, призупинені токени, функціональність дозволів, голоси та флеш-монетний двір.

Контрактні імпортні заяви

Оператори імпорту на початку контракту завантажують код із бібліотеки контрактів OpenZeppelin:

  • ERC20.sol є базовим контрактом для токенів ERC20.
  • ERC20Burnable.sol додає власникам жетонів можливість знищувати власні жетони.
  • ERC20Snapshot.sol дозволяє створювати знімки балансів токенів.
  • AccessControl.sol — контрактний модуль для керування доступом до певних функцій.
  • Pausable.sol додає можливість призупиняти та відновлювати передачу токенів.
  • ERC20Permit.sol дозволяє власникам витрачати токени користувачів за допомогою дозволів.
  • ERC20Votes.sol додає до токена можливості голосування.
  • ERC20FlashMint.sol дозволяє флеш-карбувати токени.

Контрактна декларація LearnCoin

Контракт LearnCoin успадковує імпортовані контракти OpenZeppelin. Це означає, що він матиме всі методи та властивості з цих контрактів.

Декларації ролей

SNAPSHOT_ROLE і PAUSER_ROLE є постійними значеннями (створеними за допомогою хеш-функції keccak256 ), які представляють конкретні ролі для контролю доступу в рамках контракту.

Функція-конструктор

Під час розгортання контракту LearnCoin викликається функція конструктора. Він встановлює назву та символ маркера, надає обліковому запису, що розгортає (msg.sender), ролі адміністратора, знімка та паузера, а також карбує початковий запас токенів для облікового запису, який розгортає.

Додаткові функції

snapshot, pause і unpause — це функції, які дозволяють обліковим записам із відповідними ролями виконувати певні дії. snapshot дозволяє зробити знімок, pause та unpause призупинити та перезапустити передачу токенів.

Перевизначення

Функції _beforeTokenTransfer, _afterTokenTransfer, _mint і _burn є внутрішніми функціями, які перевизначені з батьківських контрактів. Вони реалізують спеціальну логіку для контракту LearnCoin.

  • _beforeTokenTransfer: Ця функція викликається перед будь-якою передачею токенів. Це гарантує, що передача токенів не призупиняється.
  • _afterTokenTransfer: Ця функція викликається після будь-якої передачі маркерів. Тут це порожня функція, але її можна використовувати для спеціальної логіки, яка має відбуватися відразу після передачі.
  • _mint: ця функція створює нові токени та призначає їх певному обліковому запису.
  • _burn: ця функція знищує токени з даного облікового запису.

Висновок

Це був короткий огляд вашого контракту LearnCoin . Після розгортання контракту ви готові до взаємодії з ним, про що ми розглянемо в наступному уроці.

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.