Создайте свою первую криптовалюту менее чем за 10 строк кода!

В этом пошаговом руководстве вы узнаете, как создать и развернуть токен ERC-20 на Ethereum.

Для этого урока мы будем использовать Metamask и Remix IDE.

Предпочитаете видео?

Если вы предпочитаете учиться на видео, у нас есть запись этого урока на нашем YouTube. Посмотрите видео, нажав на скриншот ниже, или переходите к чтению учебника!

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

ERC расшифровывается как Ethereum Request for Comment. По сути, это стандарты, которые были одобрены сообществом и используются для передачи технических требований и спецификаций для определенных случаев использования.

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

Сменный токен — это токен, в котором все «части» токена одинаковы. Обмен 1 ETH на другой 1 ETH ничего не меняет. У вас все еще есть 1 ETH. Поэтому ETH — это взаимозаменяемый токен. Вся фиатная валюта также является взаимозаменяемой.

NFT являются примерами непеременных токенов (подробнее об этом позже), где каждый токен отличается от другого токена.

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

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

Предварительные условия

  • Убедитесь, что вы загрузили и установили Metamask.
  • Выберите сеть Rinkeby Testnet для работы с ней.
  • Запросите немного тестового эфира на Rinkeby через любой из следующих кранов:
    • Кран Метамаски
    • Кран цепной связи
    • Кран Парадигмы

Как только вы настроите все эти параметры, давайте приступим!

Написание кода

Для написания смарт-контракта мы используем Remix IDE.

В Remix создайте новый файл контракта, я назвал свой LW3Token.sol — вы можете назвать его как угодно!

В контракте напишите следующий код:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";

contract LW3Token is ERC20 {
    constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {
        _mint(msg.sender, 10 * 10 ** 18);
    }
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Давайте разберем это построчно и поймем, что происходит:

pragma solidity ^0.8.0;
Вход в полноэкранный режим Выйти из полноэкранного режима

В этой строке указывается версия компилятора Solidity, которая будет использоваться. ^0.8.0 означает любую версию больше, чем 0.8.0. Обычно вы хотите использовать последнюю версию компилятора Solidity, так как новая версия обычно подразумевает либо новые возможности, либо оптимизацию.


import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";
Вход в полноэкранный режим Выйти из полноэкранного режима

Эта строка импортирует стандарт токенов ERC-20 из OpenZeppelin (OZ). OZ — это компания, занимающаяся безопасностью Ethereum. Среди прочего, OZ разрабатывает эталонные контракты для популярных стандартов смарт-контрактов, которые тщательно протестированы и безопасны. При реализации смарт-контракта, который должен соответствовать какому-либо стандарту, постарайтесь найти эталонную реализацию OZ, а не переписывать весь стандарт с нуля.

Вы можете посмотреть на реализацию стандартного контракта ERC-20, если захотите, перейдя по ссылке — https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol.

Примечание: В курсе для второкурсников мы более глубоко погрузимся в стандартный контракт ERC-20, чтобы понять все, что происходит внутри этого контракта.


contract LW3Token is ERC20 {
    ...
}
Вход в полноэкранный режим Выход из полноэкранного режима

Это определяет новый контракт под названием LW3Token в нашем файле Solidity. Также здесь говорится, что этот контракт is является экземпляром ERC20. ERC20 в данном случае относится к стандартному контракту, который мы импортировали из OpenZeppelin.

По сути, мы расширяем стандартный контракт ERC20, который мы импортировали из OpenZeppelin. Таким образом, все функции и логика, встроенные в ERC20, доступны нам для использования, и мы можем добавить свою собственную логику поверх них.

Если вы знакомы с принципами объектно-ориентированного программирования, вы можете думать об этом как о классе, расширяющем другой класс.


constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {
     ...
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Этот фрагмент имеет немного странный синтаксис, который вы, возможно, не видели раньше. Kotlin на самом деле имеет похожий синтаксис, но я отвлекаюсь.

По сути, мы создали функцию constructor, которая вызывается при первом развертывании смарт-контракта. В конструкторе мы хотим получить от пользователя два аргумента — _name и _symbol, которые определяют название и символ нашей криптовалюты. Например, имя = Ethereum, символ = ETH.

То, что происходит после него, более интересно. Сразу после указания функции-конструктора мы вызываем ERC20(_name, _symbol).

Контракт ERC20, который мы импортировали из OpenZeppelin, имеет свой собственный конструктор, который требует параметров name и symbol. Поскольку мы расширяем контракт ERC20, нам необходимо инициализировать контракт ERC20 при развертывании нашего. Поэтому в рамках нашего конструктора нам также необходимо вызвать конструктор контракта ERC20.

Поэтому мы предоставляем нашему контракту переменные _name и _symbol, которые мы сразу же передаем конструктору ERC20, тем самым инициализируя смарт-контракт ERC20.


_mint(msg.sender, 10 * 10 ** 18);
Вход в полноэкранный режим Выход из полноэкранного режима

_mint — это внутренняя функция внутри стандартного контракта ERC20, что означает, что она может быть вызвана только самим контрактом. Внешние пользователи не могут вызывать эту функцию.

Поскольку вы, как разработчик, хотите получить некоторые токены при развертывании этого контракта, мы вызываем функцию _mint для отправки токенов в msg.sender.

_mint принимает два аргумента — адрес, на который нужно майнить, и количество токенов, которое нужно майнить.

msg.sender — это глобальная переменная, вводимая виртуальной машиной Ethereum, которая является адресом, совершившим эту транзакцию. Поскольку именно вы будете разворачивать этот контракт, ваш адрес будет присутствовать в msg.sender.

10 * 10 ** 18 указывает, что вы хотите, чтобы на ваш адрес было отчеканено 10 полных токенов.


Примечание: Вы можете задаться вопросом, почему мы просто не написали 10 в сумме, вместо 10 ** 18 (что на самом деле 10 ^ 18).

По сути, Solidity не поддерживает числа с плавающей запятой — то есть десятичные числа. Кроме того, поскольку токены ERC20 имеют дело с деньгами, использование чисел с плавающей точкой — плохая идея.

В качестве примера рассмотрим простое вычисление (1/3) * 3 на языке, который поддерживает числа с плавающей точкой. Как вы думаете, что оно вернет?

Если вы думаете, что вернется 1, то вы ошибаетесь.

Из-за неточностей в вычислениях с плавающей точкой, поскольку компьютеры не могут представить бесконечное количество цифр, (1/3) * 3 фактически дает что-то вроде 0.999999999.

Поэтому при представлении финансовых валют десятичные дроби не используются из-за ошибок вычислений. В качестве альтернативы, мы представляем каждую валюту как сумму относительно наименьшей неделимой части этой валюты. Например, 1 доллар США представляется как 100 центов, поскольку при работе с долларами США невозможно получить сумму меньше 1 цента. В этой системе счисления 1 цент — это просто 1, а не 0,01. 0,33 доллара представляется как 33, а не как (1/3).

Токены ERC20 по умолчанию работают с 18 десятичными знаками. Поэтому 1 полный LW3Token в данном случае фактически представлен как 10 ^ 18. Поэтому, чтобы получить 10 полных LW3Tokens, мы используем 10 * 10 ** 18.


Компиляция

Скомпилируйте ваш контракт, нажав Save (CTRL + S на Windows, Command + S на Mac) или перейдя на вкладку Compiler в Remix, выбрав LW3Token.sol и нажав Compile.

Развертывание

Перейдите на вкладку Deployer в Remix.

Выберите среду Injected Web3 (убедитесь, что вы находитесь в тестовой сети Rinkeby) и подключите свой кошелек Metamask.

Выберите контракт LW3Token.sol и введите значения для аргументов конструктора _name и _symbol.

Нажмите Transact и одобрите транзакцию от Metamask для развертывания вашего контракта!

После развертывания контракт должен появиться в разделе Deployed Contracts. Нажмите кнопку Copy Address, чтобы скопировать адрес контракта.

Зайдите в Rinkeby Etherscan и найдите адрес вашего контракта, и вы должны увидеть его там!

Сделайте его скриншот и поделитесь им в Discord, чтобы похвастаться своим только что созданным токеном 😀

Просмотр токенов в Metamask

Вы можете заметить, что даже если вы чеканили токены на свой адрес, они не отображаются в Metamask.

Это связано с тем, что Metamask не может определить случайные балансы токенов ERC20 (поскольку их буквально сотни тысяч). У них есть список наиболее известных токенов ERC20, которые они могут показывать автоматически, но кроме этого, для ваших собственных токенов, как правило, вам нужно сказать Metamask, чтобы он добавил их в ваш кошелек вручную.

Для этого:

  • Скопируйте адрес вашего контракта
  • Откройте Metamask и нажмите Import Tokens во вкладке Assets.
  • Введите адрес вашего контракта на токен, и он должен автоматически определить название и количество десятичных знаков
  • Нажмите Добавить, и вы увидите свой баланс в Метамаске!

Поделитесь скриншотом в Discord!


Поздравляем! Вы успешно развернули и добыли свой собственный токен ERC20! Дальше — вперед и вверх!


Эта статья предоставлена LearnWeb3 DAO. Бесплатная, всеобъемлющая программа обучения блокчейну от А до Я для разработчиков по всему миру.

Все от «Что такое блокчейн» до «Взлома смарт-контрактов» — и все, что между ними, а также многое другое!
Присоединяйтесь к нам сейчас, чтобы начать строить вместе с 25 000+ разработчиками.

Сайт
Discord
Twitter

Оцените статью
Procodings.ru
Добавить комментарий