Чтобы запустить свой токен на стандарте ERC-20 на блокчейне Ethereum, вам понадобятся следующие компоненты:
- Язык программирования Solidity — для написания кода смарт-контракта токена.
- Разработанный смарт-контракт токена — он должен соответствовать стандарту ERC-20 и содержать необходимые функции для управления токенами.
- Кошелек Ethereum — для создания аккаунта, который будет использоваться для управления токенами.
- Ether (ETH) — для оплаты газа при развертывании смарт-контракта токена на блокчейне.
- Платформа для развертывания смарт-контрактов — например, Remix, Truffle или Hardhat.
Когда вы будете готовы к развертыванию своего токена на блокчейне Ethereum, вам нужно будет выполнить следующие шаги:
- Скомпилировать код смарт-контракта на Solidity.
- Развернуть смарт-контракт на блокчейне Ethereum, используя платформу для развертывания.
- Получить адрес вашего смарт-контракта и добавить его в список токенов вашего кошелька Ethereum.
- Настроить параметры токена, такие как общее количество токенов, цену токена, количество токенов, доступных для продажи и т.д.
- Разместить информацию о своем токене на различных форумах, блогах, в социальных сетях и т.д., чтобы привлечь потенциальных пользователей и инвесторов.
Пример смарт-контракта, который реализует базовую функциональность токена ERC-20:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// определяем контракт с именем MyToken contract MyToken { 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) public { 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(value <= balanceOf[from], "Insufficient balance"); require(value <= allowance[from][msg.sender], "Insufficient allowance"); balanceOf[from] -= value; balanceOf[to] += value; allowance[from][msg.sender] -= value; emit Transfer(from, to, value); return true; } } |
Пример смарт-контракта токена, который соответствует стандарту ERC-20 и содержит необходимые функции для управления токенами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
// Определяем контракт с именем MyToken contract MyToken { string public name = "My Token"; string public symbol = "MYT"; uint8 public decimals = 18; 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(uint256 initialSupply) public { totalSupply = initialSupply; balanceOf[msg.sender] = initialSupply; } function transfer(address to, uint256 value) public returns (bool success) { require(value <= balanceOf[msg.sender]); require(to != address(0)); 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) { require(spender != address(0)); 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(value <= balanceOf[from]); require(value <= allowance[from][msg.sender]); require(to != address(0)); balanceOf[from] -= value; balanceOf[to] += value; allowance[from][msg.sender] -= value; emit Transfer(from, to, value); return true; } } |
Этот контракт соответствует стандарту ERC-20 и содержит функции transfer, approve и transferFrom для управления токенами. Он также хранит информацию о балансах пользователей и о разрешениях на использование токенов (в переменных balanceOf и allowance), а также регистрирует события Transfer и Approval.
Обратите внимание, что в конструкторе контракта мы инициализируем общее количество токенов и присваиваем их балансу создателя контракта. Также мы задаем имя токена, символ и количество десятичных знаков, используемых для представления токенов.
В функциях transfer, approve и transferFrom мы проверяем условия, которые должны быть выполнены для перевода токенов (достаточный баланс отправителя, наличие разрешения на использование токенов и наличие адреса получателя). Если все условия выполнены, мы изменяем балансы отправителя и получателя и регистрируем событие Transfer. Функция approve позволяет установить разрешение на использование токенов для другого адреса, а функция transferFrom используется для передачи токенов от имени другого адреса.
Компиляции кода смарт-контракта на Solidity
Для компиляции кода смарт-контракта на Solidity вам понадобится установить Solidity Compiler. Вот как это сделать:
- Откройте терминал и установите компилятор Solidity, используя npm (Node.js Package Manager):
1 |
npm install -g solc |
- Создайте файл с кодом смарт-контракта с расширением «.sol».
- Откройте терминал и перейдите в директорию, где находится файл с кодом смарт-контракта.
- Компилируйте файл с помощью Solidity Compiler:
1 |
solc --bin --abi MyContract.sol -o build/ |
Здесь «MyContract.sol» — это имя вашего файла смарт-контракта. Флаг «—bin» указывает, что нужно скомпилировать байт-код смарт-контракта, а флаг «—abi» указывает, что нужно сгенерировать файл с аби-интерфейсом смарт-контракта. Параметр «-o» указывает директорию, куда будут сохранены скомпилированные файлы.
- После успешной компиляции, в директории «build/» появятся файлы «MyContract.bin» и «MyContract.abi». Файл «MyContract.bin» содержит байт-код смарт-контракта, который можно развернуть на блокчейне, а файл «MyContract.abi» содержит описание интерфейса контракта, который может быть использован для взаимодействия с контрактом через веб-интерфейс или другое приложение.