Розробка токена BEP-20 (BNB Chain)
BEP-20 — це версія ERC-20 для BNB Chain. Інтерфейс ідентичний, ABI сумісний, інструментарій той же — Hardhat або Foundry з невеликими змінами конфігурації мережі. Якщо ви вже розробляли токени ERC-20 — BEP-20 займе мінімум часу на адаптацію.
Фундаментальна відмінність: BNB Smart Chain (BSC) використовує Proof of Staked Authority (PoSA) з 21 валідатором замість тисяч вузлів Ethereum. Це забезпечує швидкі блоки (3 секунди) і дешеві транзакції ($0.01–0.05 за звичайний transfer), але ціною більш централізованої мережі.
Що вам насправді потрібно в токені BEP-20
Базовий токен — це 30 рядків поверх OpenZeppelin ERC20. Питання не в тому «як написати токен», а «яка функціональність потрібна вашому проекту». Типовий список:
Мінтинг та burn — управлювана емісія через AccessControl:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
contract MyBEP20Token is ERC20, AccessControl, ERC20Permit, ERC20Votes {
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
uint256 public constant MAX_SUPPLY = 1_000_000_000 * 10**18; // 1B токенів
constructor(address initialAdmin)
ERC20("MyToken", "MTK")
ERC20Permit("MyToken")
{
_grantRole(DEFAULT_ADMIN_ROLE, initialAdmin);
_grantRole(MINTER_ROLE, initialAdmin);
}
function mint(address to, uint256 amount) external onlyRole(MINTER_ROLE) {
require(totalSupply() + amount <= MAX_SUPPLY, "Exceeds max supply");
_mint(to, amount);
}
function burn(uint256 amount) external {
_burn(msg.sender, amount);
}
// Потрібно для сумісності ERC20Votes + ERC20Permit
function _afterTokenTransfer(address from, address to, uint256 amount)
internal override(ERC20, ERC20Votes) {
super._afterTokenTransfer(from, to, amount);
}
function _mint(address to, uint256 amount)
internal override(ERC20, ERC20Votes) {
super._mint(to, amount);
}
function _burn(address account, uint256 amount)
internal override(ERC20, ERC20Votes) {
super._burn(account, amount);
}
}
ERC20Permit додає gasless approvals через підписи (EIP-2612) — важливо для UX. ERC20Votes — якщо токен планується використовувати в governance.
Розгортання на BSC
// hardhat.config.js
module.exports = {
networks: {
bsc: {
url: "https://bsc-dataseed1.binance.org",
chainId: 56,
accounts: [process.env.PRIVATE_KEY],
},
bscTestnet: {
url: "https://data-seed-prebsc-1-s1.binance.org:8545",
chainId: 97,
accounts: [process.env.PRIVATE_KEY],
}
},
etherscan: {
apiKey: {
bsc: process.env.BSCSCAN_API_KEY,
bscTestnet: process.env.BSCSCAN_API_KEY,
}
}
}
Верифікація контракту на BscScan обов'язкова — користувачі будуть перевіряти код перед покупкою.
Що входить у роботу
Розробка, тести (100% покриття ключових функцій), розгортання на testnet та mainnet, верифікація на BscScan, базова документація по функціях контракту. Терміни: 3–5 днів для стандартного токена без екзотичної логіки.







