Как создать и развернуть токен ERС-20

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

Что такое токен ERC-20?

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

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

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

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

Смарт-контракты токенов несут ответственность не только за создание токенов, но и за обработку транзакций и отслеживание балансов каждого держателя токенов. Чтобы получить несколько токенов, нужно отправить некоторое количество ETH в контракт токена в обмен на выделенные токены.

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

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

  • totalSupply : метод, который определяет общее количество ваших токенов. Когда этот предел будет достигнут, смарт-контракт откажется создавать новые токены.
  • balanceOf : метод, который возвращает количество токенов, имеющихся в адресе кошелька.
  • transfer : метод, который берет определенное количество токенов из общего количества и передает его пользователю.
  • transferFrom : Другой тип метода передачи, который используется для передачи токенов между пользователями.
  • approve : этот метод проверяет, разрешено ли смарт-контракту выделять определенное количество токенов пользователю с учетом общего предложения.
  • allowance : этот метод в точности совпадает с утвержденным методом, за исключением того, что он проверяет, достаточно ли у одного пользователя баланса для отправки определенного количества токенов другому.

Если вы что-то знаете об объектно-ориентированном программировании, вы можете сравнить ERC-20 с интерфейсом. Если вы хотите, чтобы ваш токен был токеном ERC-20, вам необходимо реализовать интерфейс ERC-20, и это заставит вас реализовать эти 6 методов.

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

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

Мы разместим наш контракт в тестовой сети Ropsten. Для начала вам понадобится расширение браузера Metamask для создания кошелька ETH и несколько тестовых ETH, которые вы можете получить, перейдя в кран Ropsten . Вам нужно будет выбрать Ropsten Test Network в своем кошельке Metamask и скопировать и вставить адрес кошелька в текстовое поле крана, затем щелкнуть Send me test Ether.
Зайдите к Эфириуму Remix IDE и сделать новый файл солидность, например - 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 = " QKC ";
63 name = " QuikNode Coin ";

установите десятичное число (значение, в котором токены могут быть разделены, можно использовать десятичные единицы от 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, поэтому нам придется установить переменную общего предложения на 100000 (просто потому, что десятичная точка не разрешена).

Пояснение к приведенному выше коду:

Строка 1: Объявление версии солидности

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Скомпилируйте смарт-контракт и разверните его, используя внедренный Web3 (не забудьте выбрать тестовую сеть Ropsten в Metamask перед компиляцией контракта). Подтвердите транзакцию из метамаска.
Примечание. Нам нужно развернуть контракт основного токена, выберите соответствующее имя контракта в разделе контрактов перед развертыванием контракта (здесь QKCToken).
Если перед развертыванием вы получаете сообщение об ошибке «Этот контракт может быть абстрактным», обязательно выберите соответствующий контракт на вкладке «Контракт».
Подтвердите транзакцию в Metamask

Вот и все! ваш токен-контракт теперь развернут в тестовой сети Ethereum Ropsten!
Чтобы получить токен в Metamask, перейдите в раздел «Развернутые контракты» в Remix и скопируйте адрес развернутого контракта, используя кнопку копирования рядом с названием контракта.
Откройте Metamask и нажмите кнопку «Добавить токен», выберите параметр «Пользовательский токен» и вставьте адрес контракта в первое поле. Metamask автоматически получит символ токена и десятичные дроби.
Нажмите «Далее», и ваш токен будет добавлен в кошелек, он будет доступен в разделе активов в Metamask.
Поздравляем с успешным созданием собственного токена / монеты в сети Ethereum!

Поддержите блог, перечислив небольшие чаевые

Если у вас нет кошелька MetaMask, вы можете получить его здесь
Made on
Tilda