Тестнет WhiteBIT

Сьогодні став доступний тестнет WhiteBIT і ось коротка інструкція:

 

Додаємо тестову мережу

1. Відкриваємо розширення MetaMask;

2. У списку мереж натискаємо «Add network‎»;

3. На сторінці додавання мережі натисни «‎Add network manually»;

Дані для заповнення:


Наступний крок – це отримання тестових токенів та здійснення транзакцій

  • Копіюємо адресу свого гаманця у MetaMask. Переходимо на сторінку Faucet | WB Explorer, вставляємо адресу гаманця у текстове поле, підтверджуємо та натискаємо «‎Claim» і отримуємо 10 тестових WBT. Отримати знову можна через 24 години.

Токени можна надсилати своїм друзям, які також виконують тестнет або зайти у чат і попросити у когось здійснити декілька тестових транзакцій.

Створюємо смарт контракт

  • Переходимо у remix.ethereum
  • Переходимо у розділ «Contracts» і створюємо два файли:
  • У файлі «IWRC20.sol» прописуємо наступний код:

    // SPDX-License-Identifier: MIT

    pragma solidity ^0.8.0;

    interface IWRC20 {

        function name() external view returns(string memory);

        function symbol() external view returns(string memory);

        function decimals() external pure returns(uint);

        function totalSupply() external view returns(uint);

        function balanceOf(address account) external view returns(uint);

        function transfer(address to, uint amount) external;

        function allowance(address _owner, address spender) external view returns(uint);

        function approve(address spender, uint amount) external;

        function transferFrom(address sender, address recipient, uint amount) external;

        event Transfer(address indexed from, address indexed to, uint amount);

        event Approve(address indexed owner, address indexed to, uint amount);

    }

  • У файлі «YournameToken.sol» прописуємо наступний код:

    // SPDX-License-Identifier: MIT

    pragma solidity ^0.8.0;

    import “./IWRC20.sol”;

    contract WRC20 is IWRC20 {

        uint totalTokens;

        address owner;

        mapping(address => uint) balances;

        mapping(address => mapping(address => uint)) allowances;

        string _name;

        string _symbol;

        function name() external view returns(string memory) {

            return _name;

        }

        function symbol() external view returns(string memory) {

            return _symbol;

        }

        function decimals() external pure returns(uint) {

            return 18;

        }

        function totalSupply() external view returns(uint) {

            return totalTokens;

        }

        modifier enoughTokens(address _from, uint _amount) {

            require(balanceOf(_from) >= _amount, “not enough tokens!”);

            _;

        }

        modifier onlyOwner() {

            require(msg.sender == owner, “not an owner!”);

            _;

        }

        constructor(string memory name_, string memory symbol_, uint initialSupply) {

            _name = name_;

            _symbol = symbol_;

            owner = msg.sender;

            mint(initialSupply, msg.sender);

        }

        function balanceOf(address account) public view returns(uint) {

            return balances[account];

        }

        function transfer(address to, uint amount) external enoughTokens(msg.sender, amount) {

            _beforeTokenTransfer(msg.sender, to, amount);

            balances[msg.sender] -= amount;

            balances[to] += amount;

            emit Transfer(msg.sender, to, amount);

        }

        function mint(uint amount, address mint_to) public onlyOwner {

            _beforeTokenTransfer(address(0), mint_to, amount);

            balances[mint_to] += amount;

            totalTokens += amount;

            emit Transfer(address(0), mint_to, amount);

        }

        function burn(address _from, uint amount) public onlyOwner {

            _beforeTokenTransfer(_from, address(0), amount);

            balances[_from] -= amount;

            totalTokens -= amount;

        }

        function allowance(address _owner, address spender) public view returns(uint) {

            return allowances[_owner][spender];

        }

        function approve(address spender, uint amount) public {

            _approve(msg.sender, spender, amount);

        }

        function _approve(address sender, address spender, uint amount) internal virtual {

            allowances[sender][spender] = amount;

            emit Approve(sender, spender, amount);

        }

        function transferFrom(address sender, address recipient, uint amount) public enoughTokens(sender, amount) {

            _beforeTokenTransfer(sender, recipient, amount);

            require(allowances[sender][msg.sender] >= amount, “check allowance!”);

            allowances[sender][msg.sender] -= amount;

            balances[sender] -= amount;

            balances[recipient] += amount;

            emit Transfer(sender, recipient, amount);

        }

        function _beforeTokenTransfer(

            address from,

            address to,

            uint amount

        ) internal virtual {}

    }

    contract TestToken is WRC20 {

        constructor(address owner) WRC20(“YOUR NAME”, “YOUR TICKER”, YOUR-TOTAL-SUPPLY*10**18) {}

    }

    «YOUR NAME» змінюємо на назву токена, наприклад: Nosov Token.

    «YOUR TICKER» змінюємо на тікер токену, напрклад: NSV.

    «YOUR-TOTAL-SUPPLY» змінюємо на бажану максимальну кількість токенів у оберті, наприклад: 100500.

  • Далі обираємо «Injected Provider Metamask» та підключаємося до сайту у мережі WB Network:

Далі робимо так:

Якщо все добре, то відобразиться ось так:

Розгортаємо смарт контракт

  1. Обираємо наш файл там, де показано стрілочкою;
  2. Вставляємо адресу нашого гаманця метамаск там, де показано стрілочкою;

Натискаємо «Deploy” та підтверджуємо транзакцію в MetaMask».

Вставляємо свою адресу і підписуємо транзакцію.

Якщо наш контракт успішно розгорнувcя, то буде показано наступне:

Додаємо «Deployed Contracts» сюди:

Готово. Тепер залишилося лишень верифікувати контракт за посиланням

Продовження у чаті телеграм каналу Євреї Знають.