July 3, 2023

Створюємо свій токен у WhiteBIT Network

Переходимо на сайт https://remix.ethereum.org

Натискаємо на папку contracts (1) і на позначку створити файл (2)

Створюємо файл IWRC20.sol

У файл 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);

}

Повинно виглядати ось так:

Створюємо файл VolkovWBT.sol. Можна назвати ВашаНазваToken.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) {}

}

змінюємо на назву токена, наприклад: VolkovWBT Token

змінюємо на тікер токену, наприклад: VOLKOV

змінюємо на бажану максимальну кількість токенів у оберті, наприклад: 10000000

Переходимо до вкладки Deploy & Run transactions (1). У пункті ENVIRONMENT (2) має бути обрано Injected Provider - Metamask (2), у пункті ACCOUNT (3) повинен підтягнутися ваш гаманець Metamask у мережі WB Network

Якщо все вірно зробили, то повинно показати нашу адресу

Переходимо до вкладки Solidity compiler (4) та компілюємо (5) файл VolkovWBT.sol. Важливо! Щоб скомпілювати цей файл, він повинен бути обраним у вкладці файлів (6)

Якщо файл скомпілювався, то ви побачите наступне (7)

Переходимо до вкладки Deploy & Run transactions (8). У пункті CONTRACT (9) має бути вказан наш токен. У пункті 10 вставляємо адресу нашого гаманця Metamask, натискаємо Deploy (11) та підтверджуємо транзакцію в гаманці

Якщо все правильно зробили, то побачите зелену галочку (12)

Переходимо до вкладки Deployed Contracts та копіюємо адресу контракту (13)

Переходимо в Metamask та натискаємо Import tokens (14)

Вставляємо нашу скопійовану адресу контракту у поле (15), інші поля у нас підтягнуться та натискаємо Add custom token (16)

Натискаємо Import tokens (17)/

Вітаю! Наш кастомний токен додано до Metamask