WhiteBIT
July 2, 2023

Как сделать свой токен на WB Network 

Первым делом переходим по ссылочке на remix - https://remix.ethereum.org

Нажимаем слева на папку "contracts" и на метку создания файла

Кликаем сверху на Create New File и создаём файл под названием 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);

}

Создаём ещё один файл, как делали выше, но под названием TestToken.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 меняем на название токена, например: CryptoMark

YOUR TICKER меняем на тикер токена, например: CRPMK

YOUR-TOTAL-SUPPLY меняем на желаемое максимальное количество токенов в обороте, например: 100

Далее кликаем на Deploy & Run Transaction и во вкладке ENVIRONMENT сверху выбираем Injected Provider, вместо Remix VM

Если вы сделали всё правильно, сверху должно показать ваш адрес, как на фото ниже

Далее переходим в раздел выше, под названием Solidity Compiler и кликаем на кнопку Compile TestToken.sol, изначально там показывается кружочек со стрелочками, если всё будет верно, загорится галочка и снизу появятся новые кнопки, как у меня на фото

Теперь приступаем к Смарт контракту

Заходим обратно в раздел Deploy & Run Transaction (Выглядит как Эфир со стрелочкой) и в раздел Deploy - вписываем наш адрес кошелька и проверяем, чтобы сверху был Injected Provider и в разделе CONTRACT название нашего файла, как у меня на фото

После этого, нажимаем на кнопочку Deploy и подтверждаем транзакцию в MetaMask, если у вас еще нет токенов WBT, смотрите мой пост

Если всё прошло успешно, будет показываться как на скриншоте ниже

Сверху в TESTTOKEN AT, копируем наш адрес токена и идём добавлять токен в MetaMask

Вуаля, теперь у меня есть 100 своих токенов CRPMK

Если тебе понравился гайдик и он был для тебя полезен, буду рад, если подпишешься на мой канала - CryptoMark NFT