Вот пример того, как создать контракт ERC20 в Solidity — языке программирования, используемом для смарт-контрактов Ethereum:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract ERC20 {
string public name;
string public symbol;
uint8 public decimals;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
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 _totalSupply
) {
name = _name;
symbol = _symbol;
decimals = _decimals;
totalSupply = _totalSupply;
balanceOf[msg.sender] = _totalSupply;
}
function transfer(address _to, uint256 _value) public returns (bool success) {
require(balanceOf[msg.sender] >= _value, "Insufficient balance");
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
emit Transfer(msg.sender, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) public returns (bool success) {
allowance[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function transferFrom(
address _from,
address _to,
uint256 _value
) public returns (bool success) {
require(balanceOf[_from] >= _value, "Insufficient balance");
require(allowance[_from][msg.sender] >= _value, "Not allowed to transfer");
balanceOf[_from] -= _value;
balanceOf[_to] += _value;
allowance[_from][msg.sender] -= _value;
emit Transfer(_from, _to, _value);
return true;
}
}
Это базовая реализация контракта ERC20, которая включает в себя основные функции для обработки передачи токенов. Контракт включает переменные name, symbol, decimalsи totalSupply, представляющие основные свойства токена. Он также включает сопоставление balanceOfдля отслеживания баланса каждого адреса и сопоставление allowanceдля отслеживания утвержденных сумм перевода.
Контракт обеспечивает три основные функции:
перенос: позволяет пользователям передавать токены со своего адреса на другой адрес.approve: позволяет пользователям одобрить другой адрес для траты токенов от их имени.transferFrom: позволяет утвержденному адресу передавать токены от имени владельца токена.
Эти функции создают события (Transferи Approval) для уведомления внешних приложений о передаче и утверждении токенов.