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:
// 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 и использовать Solidity для написания смарт-контрактов. Ниже приведен простой пример контракта токена ERC20, написанный на Solidity, который реализует основные интерфейсы стандарта ERC20:
// 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]
[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