Solidity:ERC20
Solidity:ERC20

Введение

ERC20 — это стандарт блокчейна Ethereum для создания и выпуска смарт-контрактов для реализации токенизированных приложений. Он определяет общий набор интерфейсов, которые позволяют разработчикам создавать и использовать токены, не зная деталей базовой технологии блокчейна. Ниже приведены основные интерфейсы стандарта ERC20 и их значение:

1.name(): Вернуться к названию токена。2.symbol(): Вернуться к Символу токена,Обычно это сокращение имени токена。3.decimals(): возвращаться Количество десятичных знаков для токена,Точность, используемая для представления токена。4.totalSupply(): возвращаться Общий запас токенов。5.balanceOf(address _owner): Возвращает баланс токена указанного адреса。6.transfer(address _to, uint256 _value): Отправляет указанное количество токенов с адреса вызывающего абонента на другой адрес.。7.transferFrom(address _from, address _to, uint256 _value): Отправка определенного количества токенов с одного адреса на другой требует, чтобы отправитель разрешил вызывающей стороне выполнить перевод.。8.approve(address _spender, uint256 _value): Позволяет указанному адресу передавать указанное количество токенов с адреса вызывающего абонента.。9.allowance(address _owner, address _spender): Запросите количество токенов, которые указанному адресу разрешено передавать с другого адреса.

Ниже приведен простой пример контракта токена ERC20, написанный с использованием Solidity:

Язык кода:javascript
копировать
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor(uint256 initialSupply) ERC20("MyToken", "MTK") {
        _mint(msg.sender, initialSupply);
    }
}

В этом примере,Мы использовали контракт ERC20 из библиотеки OpenZeppelin.,наследует его функциональность。Мы определяем файл с именемMyTokenдоговор,он принимаетinitialSupplyпараметр,Представляет первоначальную поставку токена. в конструкторе,Мы позвонили_mintфункция,Отправьте первоначальный запас токенов на адрес развертывания. Этот контракт также определяет Название токен - "MyToken",Символ «МТК».

Чтобы использовать этот контракт, вам необходимо установить компилятор Solidity и соответствующие инструменты разработки, такие как Truffle или Hardhat, и выполнить развертывание в сети Ethereum. После развертывания вы можете использовать этот контракт для создания и выпуска собственных токенов.

Пользовательский контракт ERC20

Чтобы самостоятельно реализовать интерфейсы, связанные с ERC20, вам необходимо следовать стандарту ERC20 и использовать Solidity для написания смарт-контрактов. Ниже приведен простой пример контракта токена ERC20, написанный на Solidity, который реализует основные интерфейсы стандарта ERC20:

Язык кода:javascript
копировать
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

contract MyToken {
    // Хранит баланс токенов каждого адреса
    mapping(address => uint256) private _balances;

    // Хранит количество токенов, которые отправителю разрешено перевести с адреса владельца.
    mapping(address => mapping(address => uint256)) private _allowances;

    // Название токена
    string private _name;

    // Символ токена
    string private _symbol;

    // Количество десятичных знаков для токена
    uint8 private _decimals;

    // Общий запас токенов
    uint256 private _totalSupply;

    // трансферное событие
    event Transfer(address indexed from, address indexed to, uint256 value);

    // событие авторизации
    event Approval(address indexed owner, address indexed spender, uint256 value);

    // структурафункция,Настройки Название токены, символы и десятичные знаки,и Отправьте первоначальный запас токенов наразвертыватьадрес автора
    constructor(string memory name_, string memory symbol_, uint8 decimals_, uint256 initialSupply) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
        _totalSupply = initialSupply;
        _balances[msg.sender] = initialSupply;
        emit Transfer(address(0), msg.sender, initialSupply);
    }

    // Вернуться к названию токена
    function name() public view returns (string memory) {
        return _name;
    }

    // Вернуться к Символу токена
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    // возвращаться Количество десятичных знаков для токена
    function decimals() public view returns (uint8) {
        return _decimals;
    }

    // возвращаться Общий запас токенов
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    // Возвращает баланс токена указанного адреса
    function balanceOf(address owner) public view returns (uint256) {
        return _balances[owner];
    }

    // Отправляет указанное количество токенов с адреса вызывающего абонента на другой адрес.
    function transfer(address to, uint256 value) public returns (bool) {
        require(_balances[msg.sender] >= value, "Insufficient balance");
        _balances[msg.sender] -= value;
        _balances[to] += value;
        emit Transfer(msg.sender, to, value);
        return true;
    }

    // Отправка определенного количества токенов с одного адреса на другой требует, чтобы отправитель разрешил вызывающей стороне выполнить перевод.
    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        require(_balances[from] >= value, "Insufficient balance");
        require(_allowances[from][msg.sender] >= value, "Insufficient allowance");
        _balances[from] -= value;
        _balances[to] += value;
        _allowances[from][msg.sender] -= value;
        emit Transfer(from, to, value);
        return true;
    }

    // Позволяет указанному адресу передавать указанное количество токенов с адреса вызывающего абонента.
    function approve(address spender, uint256 value) public returns (bool) {
        _allowances[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    // Запросить количество токенов, которые указанному адресу разрешено передавать с другого адреса.
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }
}

В этом примере,Мы определяем файл с именемMyTokenдоговор,Реализован основной интерфейс в стандарте ERC20. в реальном использовании,Вы можете изменить этот договор в соответствии со своими потребностями.,Например, добавление дополнительных функций или ограничений.

Отказ от ответственности: эта работа распространяется под лицензией Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)[1]. Пожалуйста, укажите источник при ее использовании. Автор: мэнбин[2] блог: мэнбин[3] Гитхаб: mengbin92[4] cnblogs: Непреднамеренно полюбила воду[5] Сообщество разработчиков облачных технологий Tencent: Мюнстер[6]

References

[1] С указанием авторства-Некоммерческая-ShareAlike 4.0 интернациональность (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh [2] mengbin: mengbin1992@outlook.com [3] mengbin: https://mengbin.top [4] mengbin92: https://mengbin92.github.io/ [5] Влюбляюсь в воду нечаянно: https://www.cnblogs.com/lianshuiwuyi/ [6] Мюнстер: https://cloud.tencent.com/developer/user/6649301

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.