Разработка BEP-20 токена (BNB Chain)
BEP-20 — это BNB Chain версия ERC-20. Интерфейс идентичен, ABI совместим, tooling тот же — 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. Вопрос не в том «как написать токен», а «какая функциональность нужна вашему проекту». Типичный список:
Минтинг и бёрн — управляемая эмиссия через 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% coverage ключевых функций), деплой на testnet и mainnet, верификация на BscScan, базовая документация по функциям контракта. Срок: 3–5 дней для стандартного токена без экзотической логики.







