Как создать свою криптовалюту в 2024 (Ethereum подобные сети)
Ваш токен можно увидеть в кошельке, добавив его по адресу. Либо посмотрев в сканере.
Что из себя представляет токен. Для тех кто хочет углубиться.
Если нажать через 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% случаев вы можете обратиться в наше сообщество (https://t.me/FM_Edu_Chat)
Итог
Как видите, создать свою криптовалюту (токен) достаточно просто и быстро. Если вы хотите узнать больше о создание web3 проектов и о продвижение, подписывайтесь на наши каналы:
Telegram-канал https://t.me/fmweb3
YouTube https://www.youtube.com/@futuremarkt
Telegram-чат https://t.me/FM_Edu_Chat