Создание собственных токенов стандарта BEP-20 в сети Binance Smart Chain (BSC) при помощи Remix IDE.

Дисклеймер. Вся информация на данной странице предоставлена исключительно для ознакомительных целей. Покупка, продажа и обмен криптовалют подвержены экономическим рискам и не рекомендуются в рамках этой статьи. Код не предназначен для использования в проектах и приведен только для понимания работы токенов.

Binance Smart Chain (BSC) — это одна из многих газоэффективных платформ, которые пользуются все большим спросом с ростом количества самых разных проектов, связанных с криптовалютами и блокчейном.

BSC — блокчейн похожий на Etherium, но также поддерживающий EVM и любые смарт-контракты, работающие на Etherium. 

BSC chart

В начале 2022-го года среднее количество транзакций равняется 6 миллионам в день, с максимумом в 16 миллионов.

BEP-20 — стандарт токена расширяющий возможности стандартов ERC-20 и BEP-2, сейчас он используется практически во всех DeFi-проектах. И именно с ним мы будем работать в рамках этой статьи, создав простой токен и развернув его в тестовой сети BSC используя Remix IDE и MetaMask.

Токен и код:

  • Имя: TestBEP20Token
  • Символ: STST
  • Объем: 1.000.000 STST
// SPDX-License-Identifier: UNLISCENSED

pragma solidity 0.8.4;

/*
@title TestBEP20Token
@dev Пример простого BEP-20 токена, в котором
все токены изначально назначены создателю.
Обратите внимание, что позже создатель может
распределять токены по своему усмотрению,
используя “transfer” и другие функции BEP-20
НЕОБХОДИМО МОДИФИЦИРОВАТЬ ПЕРЕД ВЫПУСКОМ.
ИСПОЛЬЗОВАТЬ ИСКЛЮЧИТЕЛЬНО В ОЗНАКОМИТЕЛЬНЫХ ЦЕЛЯХ.
*/

   contract TestBEP20Token {
   string public name = "TestBEP20Token";
   string public symbol = "STST";
   uint256 public totalSupply = 1000000000000000000000000;
   // 1 миллион
   uint8 public decimals = 18;
  
	/*
    @dev Генерируется, когда `value` токенов 
    передаются с одного аккаунта (`from`) на другой (`to`).
	Значение `value` может быть равно нулю.
    */
	
   event Transfer(address indexed _from, address indexed _to, uint256 _value);
   
    /*
    @dev Генерируется когда `spender` для `owner`
    устанавливается вызовом {approve}. `value` — новый резерв.
    */
	
   event Approval(
       address indexed _owner,
       address indexed _spender,
       uint256 _value
   );
   mapping(address => uint256) public balanceOf;
   mapping(address => mapping(address => uint256)) public allowance;
   
	/*
    @dev Конструктор дающий msg.sender все существующие токены.
	*/
	
   constructor() {
       balanceOf[msg.sender] = totalSupply;
   }
   
    /*
    @dev Передаёт `amount` токенов
    от вызывающего аккаунта к `recipient`.
    
    Возвращает булевое значение об успехе транзакции.
    
    Выдает событие {Transfer}.
    */
	
   function transfer(address _to, uint256 _value)
       public
       returns (bool success)
   {
       require(balanceOf[msg.sender] >= _value);
       balanceOf[msg.sender] -= _value;
       balanceOf[_to] += _value;
       emit Transfer(msg.sender, _to, _value);
       return true;
   }
  
    /*
    @dev Устанавливает `amount` как допуск `spender` к токенам вызывающего.
    
    Возвращает булевое значение об успехе транзакции.
    
    ВАЖНО: Имейте в виду, что изменение разрешения
    с помощью этого метода сопряжено с риском того, что
    кто-то может использовать как старое, так и новое
    разрешение из-за неудачного порядка транзакций.
    Одно из возможных решений для смягчения этого
    состояния гонки — сначала уменьшить допуск spender’a до 0,
    а затем установить желаемое значение.
    
    Выдает событие {Approval}.
    */
	
   function approve(address _spender, uint256 _value)
       public
       returns (bool success)
   {
       allowance[msg.sender][_spender] = _value;
       emit Approval(msg.sender, _spender, _value);
       return true;
   }
   
	/*
    @dev Передает `amount` токенов от `sender` к `recipient`
    используя механизм резерва. `amount` вычитается из резерва вызывающего.
    
	Возвращает булевое значение об успехе транзакции.
    
    Выдает событие {Transfer}.
    */
	
   function transferFrom(
       address _from,
       address _to,
       uint256 _value
   ) public returns (bool success) {
       require(_value <= balanceOf[_from]);
       require(_value <= allowance[_from][msg.sender]);
       balanceOf[_from] -= _value;
       balanceOf[_to] += _value;
       allowance[_from][msg.sender] -= _value;
       emit Transfer(_from, _to, _value);
       return true;
   }
}

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

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

А вот для подключения к тестовой сети BSC вам нужно найти в верхней части окна MetaMask выпадающее меню со списком сетей и в нём выбрать “Добавить сеть”/”Custom RPC”. После чего заполнить поля следующими значениями и сохранить изменения.

  • Network Name: BSC Testnet
  • New RPC URL: https://data-seed-prebsc-1-s1.binance.org:8545
  • ChainID: 97
  • Symbol: BNB
  • Block Explorer URL: https://explorer.binance.org/smart-testnet

Приступим к созданию.

1. Откройте https://remix.ethereum.org в своём браузере.

Remix IDE

2. Создайте новый файл с названием “TestBEP20Token.sol” и скопируйте туда код приведенный выше.

3. Перед развертыванием код необходимо скомпилировать. Нажмите вторую сверху кнопку на левой панели или сочетание клавиш Ctrl+S.

4. В исходном коде мы указали версию Solidity 0.8.4, в компиляторе нужно выбрать ту же.

Компиляция в Remix IDE

5. После компиляции, в случае успеха, перейдите к меню развертывания, щелкнув третью кнопку на панели Ремикса.

6. Выбираем “Injected Web3” в меню “ENVIRONMENT” и свой контракт в “CONTRACT”.

Развертывание контракта в Remix IDE

7. Для оплаты газа вам понадобится BNB, вы можете получить его из крана тестовой сети по адресу https://testnet.binance.org/faucet-smart

8. Нажмите кнопку “Deploy” и подтвердите развертывания в появившемся окне MetaMask.

9. После этого в разделе “Deployed Contracts” появятся лог и подробности контракта.

Развертывание контракта в Remix IDE

10. Нажмите “TestBEP20Token” под контрактами. Теперь вы видите все общедоступные методы и переменные, можно приступить к тестированию.

11. Попробуйте проверить баланс владельца контракта, вы должны увидеть значение равное всему объему токена.

12. Попробуйте перевести токены на другой кошелек при помощи метода “transfer”. Введите адрес получателя и количество токенов с точностью 18 и нажмите кнопку “transfer”. Снова появится окно MetaMask требующее подтверждения транзакции и отображающее сумму к отправке.

Токены в Remix IDE

13. Через несколько минут после подтверждения статус транзакции появится в логах Remix IDE и в обозревателе тестовой сети BSCScan. Проверив баланс еще раз вы увидите, что он уже меньше миллиона, а в кошелёк получателя уже зачислено то количество, которые вы отправили.

Развертывание токенов в основной сети BSC происходит аналогично, но не забывайте, что для этого вам понадобятся BNB для оплаты газа.

Добавим токены в кошелек.

Теперь перейдем к кошельку на который отправляли токены. В окне MetaMask нажмите “Import Tokens” и введите адрес развернутого контракта. Поля с именем и символом должны заполниться автоматически.

На следующем шаге вы уже можете видеть баланс созданных токенов. Щелкните “Add Tokens”, чтобы добавить их в эту учетную запись.

Теперь вы знаете, как создать свой токен!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *