Как создать свой ERC-20 токен

Запуск сети Ethereum в 2015 году вызвал большой резонанс в сообществе разработчиков и в дальнейшем породил множество токенов в сети.

Изначально не было никаких шаблонов или руководств по разработке токенов. В результате появилось множество токенов, сильно отличающихся друг от друга. Чтобы упорядочить это разнообразие, сообщество придумало стандарт ERC-20, чтобы сделать все токены более или менее однородными.

Как создать свой ERC-20 токен

ERC расшифровывается как Ethereum Request for Comment, а 20 — это номер идентификатора. ERC-20 был разработан для улучшения сети ETH.

ERC-20 является одним из наиболее значимых ERC.Он стал техническим стандартом для написания смарт-контрактов в сети блокчейна Ethereum, используемых для реализации токенов. Также он содержит набор правил, которым должны следовать все токены на основе Ethereum.

Как создать свой ERC-20 токен

Помимо вышеперечисленного, ERC-20 определяет токены как активы на основе блокчейна, которые можно отправлять/получать и которые имеют ценность. Токены во многом похожи на BTC и LTC. Однако наиболее существенное отличие заключается в том, что токены ERC-20 работают не в своей собственной сети блокчейнов, а в сети блокчейна Ethereum и используют газ в качестве платы за транзакцию.

До появления стандарта ERC-20 всем, кто создавал токены, приходилось заново "изобретать велосипед", а значит, все токены отличались друг от друга. Например, если разработчик хотел работать с другим токеном, он должен был понимать весь код смарт-контракта этого токена из-за отсутствия какой-либо конкретной структуры или руководств по созданию новых токенов. Это было особенно болезненно для кошельков и обменных платформ — добавление различных типов токенов требовало от разработчиков изучения кода каждого токена и его понимания, чтобы обрабатывать эти токены на своих платформах.

Излишне говорить, что было довольно сложно добавлять новые токены в любое приложение.

Сегодня кошельки и биржи используют стандарт ERC-20 для интеграции различных стандартизированных токенов на свои платформы, а также для облегчения обмена между токенами ERC-20 и другими токенами.

Создание собственного ERC-20 токена

Теперь, когда мы знаем, что такое токены ERC-20, давайте приступим к тому, чтобы создать свой собственный токен.

Мы развернем наш смарт-контракт в тестовой сети Ropsten. Для начала вам понадобится браузерное расширение Metamask для создания ETH кошелька и немного тестового ETH, который вы можете получить, зайдя на Ropsten.

Вам нужно будет выбрать Ropsten Test Network в своем кошельке Metamask, скопировать и вставить адрес кошелька в текстовое поле, а затем нажать «Отправить мне тестовый эфир».

Как создать свой ERC-20 токен

Далее идем в IDE Ethereum Remix и создаем новый файл Solidity, например — token.sol , после чего вставляем следующий код в новый скрипт Solidity:

pragma solidity ^0.4.24; //Safe Math Interface contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } //ERC Token Standard #20 Interface contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } //Contract function to receive approval and execute function in one call contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } //Actual token contract contract QKCToken is ERC20Interface, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; constructor() public { symbol = "QKC"; name = "QuikNode Coin"; decimals = 2; _totalSupply = 100000; balances[YOUR_METAMASK_WALLET_ADDRESS] = _totalSupply; emit Transfer(address(0), YOUR_METAMASK_WALLET_ADDRESS, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } }

Замените символ и имя на свое:

62 symbol="VPT";

63 name = " Vasya Pupkin Token";

Теперь установите десятичное число (значение, на которое можно разделить токены, можно использовать десятичные единицы от 0 до 8) и установите общую стоимость предложения по своему усмотрению:

64 decimals = 2;

65 _totalSupply = 100000;

Измените YOUR_METAMASK_WALLET_ADDRESS на адрес собственного кошелька (тот же кошелек, который вы указали для получения тестовой валюты):

66 balances [YOUR_METAMASK_WALLET_ADDRESS] = _totalSupply;

67 emit Transfer(address(0), YOUR_METAMASK_WALLET_ADDRESS, _totalSupply);

Общее значение предложения должно иметь дополнительные нули в конце, как указано в поле десятичных знаков.

Например, значение десятичного знака в этом контракте равно 2, и нам нужно общее количество токенов 1000, поэтому нам нужно установить переменную total_supply на 100000.

Пояснение кода, который мы вставляли выше:

Как создать свой ERC-20 токен

Строка 1: Версия Solidity

Строка 3-4: вызов интерфейса Safe Math для использования математических функций в нашем контракте.

Строка 29-41: Вызов интерфейса ERC-20 для реализации его функций.

Строка 44-48: Функция контракта для получения утверждения и выполнения функции за один вызов.

Строка 52-56: запуск нашего контракта VasyaPupkinToken, создание переменного символа строкового типа для хранения символа нашего токена, имени переменной строкового типа для хранения имени нашего токена, переменной десятичного числа целочисленного типа без знака для хранения десятичного значения для деления токена .

Строка 58-59: Создание двух функций сопоставления, которые предоставят пользователям возможность тратить эти токены.

Строка 61-68: Инициализация конструктора, установка символа, имени, десятичных знаков и общего значения предложения для нашего токена. Объявление общего предложения токена равным балансу вашего кошелька для этого токена.

Строка 70-72: функция totalSupply, которая будет управлять общим предложением нашего токена.

Строка 74-76: Функция balanceOf, которая проверит баланс адреса кошелька.

Строка 78-83: Передача функции, которая будет выполнять передачу токенов из общего запаса пользователям.

Строка 85-89: функция одобряет, которая проверяет, имеет ли общее количество токенов токен, который должен быть выделен пользователю.

Строка 91-97: Функция transferFrom, которая облегчит передачу токена между пользователями.

Строка 99-101: Функциональный допуск, который будет проверять, достаточно ли у пользователя баланса для выполнения перевода другому пользователю.

Строка 103-108: Функция ApproAndCall, которая выполняет транзакции покупки и расходования токенов.

Строка 110-112: Резервная функция, предотвращающая прямую отправку ETH учетными записями в контракт, что предотвращает расход газа пользователями на транзакции, в которых они забывают упомянуть имя функции.

Продолжаем дальше

Скомпилируйте смарт-контракт и разверните его с помощью внедренного Web3 (не забудьте выбрать тестовую сеть Ropsten в Metamask перед компиляцией контракта). Подтвердите транзакцию в Metamask.

Как создать свой ERC-20 токен
Как создать свой ERC-20 токен

Если перед развертыванием вы получаете сообщение об ошибке «This contract may be abstract», обязательно выберите соответствующий контракт на вкладке «Contract». Подтвердите транзакцию в Metamask.

Вот и все! Теперь ваш токен развернут в тестовой сети Ethereum Ropsten!

Чтобы получить токен в Metamask, перейдите в раздел «Deployed Contracts» и скопируйте адрес развернутого контракта с помощью кнопки копирования рядом с названием контракта.

Откройте Metamask и нажмите кнопку «Add Token», выберите опцию «User Token» и вставьте адрес контракта в первое поле.

Как создать свой ERC-20 токен

Нажмите «Next», и ваш токен будет добавлен в кошелек, он будет доступен в разделе активов в Metamask.

Как создать свой ERC-20 токен

Готово :)

11
5 комментариев

А как теперь его купить на бинансе?

Хахах, это тестовый токен, чтобы создать реальный токен нужно не мало заплатить) Ну, а чтобы он добавился на рынок, он должен пройти проверку и листинг)

а зачем его покупать? вся эмиссия тестового токена окажется у вас на кошельке