Вступление
Создать токен гораздо проще, чем вы себе представляете. На самом деле достаточно 10 минут, минимум теоретических знаний и пошаговый план действий.
В этой статье:
- Вы получите пошаговый план создания токена.
- Пройдемся по этапам от начала до конца.
- Затронем устройство токена.
- Расскажем про основные подводные камни.
Разбор принципа создания смарт-контракта
- Первым шагом является написание кода смарт-контракта для вашего токена. Смарт-контракт — это программа, которая загружается в блокчейн и обладает собственным кодом и памятью. Код пишется на языке Solidity, верхнеуровневом языке (т.е. языке понятном для программиста). На этом этапе мы задаем свойства токена: Название, символ, выпускаемое количество и другое.
- Следующий этап — это компиляция кода Solidity в ByteCode. Дело в том, что компьютеры в блокчейне не понимают слов, написанных на Solidity; они понимают только нули и единицы. Процесс компиляции превращает код из Solidity в ByteCode, чтобы компьютеры в сети блокчейна могли интерпретировать и выполнять смарт-контракт.
- Для того чтобы разместить смарт-контракт в блокчейне, подключаемся через кошелек к любой ноде, компьютеру в сети блокчейна**.** Кошелек на рисунке помечен как «ММ» от Meta Mask. Немного больше информации: Транзакция в блокчейне подписывается с помощью связки приватного и публичного криптографических ключей, которые находятся в вашем кошельке. Приватный ключ обычно представлен в виде seed-фразы (никогда не делитесь им), а публичный ключ — это номер вашего кошелька. Кошельки имеют доступ к нодам блокчейна, что позволяет легко совершать транзакций.
- Деплоим смарт контракт в блокчейн. Подписываем транзакцию с нашим смарт-контрактом
- Этот пункт выполняют пользователи вашего токена. Пользователь через кошелек обращаемся к блокчейну, чтобы взаимодействовать со смарт-контрактом.
Кстати, если вы хотите создать или развиваете свой Web3 проект, то мы с командой подготовили подробный план развития блокчейн проекта и сформировали из него документ.
Там мы подробно описываем все этапы от создания идеи, привлечения инвестиций до технической реализации — https://clck.ru/38ZFYi
Создание Смарт-Контракта
- Заходим в конструктор — https://constructor.futuremarkt.com/
- Выбираем необходимые настройки:
- Name - отвечает за название токена.
- Symbol - Символ токена.
- Premint. Сколько токенов будет создано на адрес создателя смарт-контракта. Если не добавить функцию mint (создание новых токенов), то данный параметр будет показателем максимального.
- Mintable. Если необходимо добавить функцию создания новых токенов. (Может только создатель, при выделенном флажке Ownable)
- Burnable. Если мы хотим иметь возможность сжигать токены. (Может только создатель, при выделенном флажке Ownable)
- Копируем код.
- Заходим в remix — https://remix.ethereum.org/
- Создаем новый файл в папке “contracts”, с расширением .sol
- Вставляем код.
- Компилируем код
- Выбираем подключение через MetaMask. Проверяем, чтобы был выбран верный смарт-контракт. Нажимаем «Deploy» и подтверждаем транзакцию.
- Ваш токен можно увидеть в кошельке, добавив его по адресу. Либо посмотрев в сканере
Что из себя представляет токен. Для тех кто хочет углубиться.
Если нажать через ctrl / cmd на строку import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; то вы переместитесь в файл непосредственно с кодом токена.
ВАЖНО! Мы заведомо упрощаем код, чтобы вам было легче разобраться. Более подробно мы рассказываем про разработку токена вот в этих видео:
ERC-20 Чать I
ERC-20 Часть II
Ключевые моменты
Токен представляет собой по факту таблицу (или леджер), где напротив каждого пользователя пишется баланс человека. Когда мы деплоим смарт-контракт мы просто создаем переменную, в которой соодержится список пользователей, переменную с названием и несколько функций, которые позволяет дописывать и вычитать баланс у каждого пользователя
string private _name; — переменная отвечающая за название токене;
string private _symbol; — переменная отвечающая за символ токен;
mapping(address => uint256) private _balances; — ключевая переменная отвечающая за балансы. Каждому адресу присваивается какое-то число.
Конструктор
constructor() функция, которая запускается при деплое смарт-контракта.
constructor() ERC20("MyToken1", "MTK1") ERC20Permit("MyToken1") {
_mint(msg.sender, 1000 * 10 ** decimals());
}
В данном случае вызовется функция _mint() которая положет на баланс пользователя 1000 токенов.
Функция отвечающая за перевод
Мы специально убрали все лишнее (в OpenZepplin вы увидите дополнительный код, который отвечает за безопасность)
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
uint256 fromBalance = _balances[from];
unchecked {
_balances[from] = fromBalance - amount;
_balances[to] += amount;
}
}Объяснять
Как вы видите мы просто вычитаем из баланса пользователя значение amount (сколько хотим перевести), а адресату добавляем это значение.
Создание новых токенов
function _mint(address account, uint256 amount) internal virtual {
_totalSupply += amount;
unchecked {
_balances[account] += amount;
}
}Объяснять
Функция минт просто добаляет какому-то пользователю заданное значение amount
Как видите, ничего сложного.
Потенциальные проблемы
- Указали недостаточное количество GasLimit. GasLimit отвечает за максимальное количество газа, которое вы готовы использовать.
- Указали недостсточную стоимость Gas-а.
- Как следствие, вроде банальная, но частая ошибка - недостаточно баланса на кошельке.
- Разница версий OpenZepplin. Проблема в том, что используя конструкторы они могут использовать новейшую версию стандарта, а в Remix-е еще не обновили данную версию.
- Название смарт-контракта должно соответствовать названию файла.
- Сложная ошибка связанная с PUSH01. Связана она с разницей настроек компилятора и версией EVM. Просто попробуйте поменять EVM на более старую версию, например на Paris.
- Ошибки на все случаи жизни подсвечиваются в Remix. Берем и переводим, в 98% случаев вы сами сможете их решить, в 2% случаев вы можете обратиться в наше сообщество.
Итог
Как видите, создать свою криптовалюту (токен) достаточно просто и быстро. Если вы хотите узнать больше о создание web3 проектов и о продвижение, подписывайтесь на наши каналы: