Как создать свою криптовалюту в 2024 (Ethereum подобные сети)

Ваш токен можно увидеть в кошельке, добавив его по адресу. Либо посмотрев в сканере.

Untitled

Что из себя представляет токен. Для тех кто хочет углубиться.

Если нажать через 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

Как видите, ничего сложного.

Потенциальные проблемы

  1. Указали недостаточное количество GasLimit. GasLimit отвечает за максимальное количество газа, которое вы готовы использовать.

  2. Указали недостсточную стоимость Gas-а.

  3. Как следствие, вроде банальная, но частая ошибка — недостаточно баланса на кошельке.

  4. Разница версий OpenZepplin. Проблема в том, что используя конструкторы они могут использовать новейшую версию стандарта, а в Remix-е еще не обновили данную версию.

  5. Название смарт-контракта должно соответствовать названию файла.

  6. Сложная ошибка связанная с PUSH01. Связана она с разницей настроек компилятора и версией EVM. Просто попробуйте поменять EVM на более старую версию, например на Paris.

    Скриншот-23-01-2024 17_50_18.png
  7. Ошибки на все случаи жизни подсвечиваются в Remix. Берем и переводим, в 98% случаев вы сами сможете их решить, в 2% случаев вы можете обратиться в наше сообщество (https://t.me/FM_Edu_Chat)

    Untitled

Итог

Как видите, создать свою криптовалюту (токен) достаточно просто и быстро. Если вы хотите узнать больше о создание web3 проектов и о продвижение, подписывайтесь на наши каналы:

  1. Telegram-канал https://t.me/fmweb3

  2. YouTube https://www.youtube.com/@futuremarkt

  3. Telegram-чат https://t.me/FM_Edu_Chat

© Habrahabr.ru