BEP-20(全称 Binance Chain Evolution Proposal-20)是币安智能链(Binance Smart Chain, BSC)上的代币标准。只要你在币圈做过转账或提币,就一定见过「请选择网络:BEP-20 / ERC-20 / TRC-20」的提示。选错一次,资产就可能永远消失。由此可见,知道 BEP-20 的来龙去脉,对每一位用户都至关重要。
本文将带你从 token 定义、历史演化到技术细节、一键发币、再到避坑,全面解析 BEP-20 代币标准。关键信息都已抽丝剥茧,绝不过度技术化,读完即可把钱包用得明明白白。
目录
- 代币究竟是什么?
- BEP-20 的诞生故事
- 与 ERC-20 的关键差异
- 如何亲手创建 BEP-20 代币(附教程)
- 常见问题 FAQ
- 总结与避坑提醒
代币究竟是什么?——先搞清灵魂,再谈肉身
在区块链世界里,token(代币) 就像 detachable 的「股份」。同一套代码模板(即 代币标准)可以产生成千上万种不同的 token。无论是价值储值、DeFi 挖矿凭证、还是链游装备,全都依赖智能合约里的一套固定规则。
以太坊用「ERC-20」制定了第一套统一规则。其他链则依样画葫芦:
- BNB Chain 的 BEP-2(不含智能合约)
- 币安智能链的 BEP-20(含智能合约,生态最活跃)
一个经典例子是 STORJ,它原本是 ERC-20 代币,提供商用它来支付去中心化存储费用。后来许多项目直接把代码复制到 BSC 再发一个 BEP-20 版,立刻省下高额 gas,用户也能低门槛体验同类服务。
BEP-20 的诞生故事:速度与智能合约的双赢之路
2019 年,币安推出 Binance Chain(BC),主打 秒级出块 + 现货交易,但牺牲了智能合约。一年后,为迎战以太坊上的 DeFi 浪潮,币安新上线了 币安智能链 BSC,核心就是 兼容 EVM,因此使用了 BEP-20 新标准。
你可以把 BSC 想象成「高速 ETH 副链」:同一条街,新铺一条八车道高速路(低 gas),但红绿灯规则(EVM 兼容)保持不变。
如今哪些明星项目在用 BEP-20?
- PancakeSwap(CAKE)——DEX AMM 龙头
- BNB ——从 ERC-20 回迁至 BEP-20 的典范
- BurgerSwap(BURGER)——跨链聚合交易
与 ERC-20 的关键差异:一文看懂功能与 gas
对比维度 | ERC-20 | BEP-20 |
---|---|---|
主链 | 以太坊 | BNB Smart Chain |
平均 gas | 5–50 美元 | 0.2–0.5 美元 |
生态热度 | DeFi 鼻祖 | DeFi 新秀 |
基本函数 | totalSupply / balanceOf / transfer … | 全部兼容,并新增 getOwner |
进位位数 | 18 decimals(可选) | 18 decimals(必填) |
核心结论:如果你掌握 ERC-20 玩法,迁移到 BEP-20 可在 5 分钟内完成;反之亦然。
亲手创建 BEP-20 代币(三步极简教程)
无需写黑屏代码,以下流程只需准备 MetaMask + 少量 BNB 作 gas。
环境准备
- 安装 MetaMask,添加 BSC 主网(RPC 列表可从公开文档获取)。
- 充值 0.05 BNB 做部署费。
使用 Remix 部署模板
- 打开 Remix IDE
新建文件
MyToken.sol
,粘贴下方最小化模板:// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IBEP20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract MyToken is IBEP20 { uint256 private _totalSupply = 1000000 * 10**18; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; string public name = "MyToken"; string public symbol = "MYT"; uint8 public decimals = 18; constructor() { _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount); return true; } function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "BEP20: transfer from the zero address"); require(recipient != address(0), "BEP20: transfer to the zero address"); require(_balances[sender] >= amount, "BEP20: transfer amount exceeds balance"); _balances[sender] -= amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "BEP20: approve from the zero address"); require(spender != addr(0), "BEP20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } }
- 点击左侧「Solidity Compiler」勾选 Auto compile
- 点击「Deploy & run」切换环境为 Injected Web3(即 MetaMask)
- 点击「Deploy」→ MetaMask 确认 → 约 10 秒,合约上链成功
Token 收录 & 验证
- 复制交易哈希,浏览器打开 bscscan → 搜索 TX → 找到合约地址。
- 点击「Contract」→「Verify & Publish」,按提示一次即可开源,用户可在钱包直接搜到「MYT」。
想要加成总市值?后期可添加 质押挖矿、燃烧通缩 等模块——只需再部署一个合约交互即可。
常见问题 FAQ
Q1: BEP-20 地址与 BEP-2 地址能混用吗?
不能。 BEP-2 地址前缀是 bnb
,多链钱包会自动识别;而 BEP-20 基本以 0x
开头。任何错链转账都可能导致资产永久丢失。
Q2: 我在交易所提币时看到「BSC BEP-20」,是不是选它就一定最便宜?
多数情况下是,但得确认目标地址属于 BSC 网络。部分交易所内部通道会折算手续费,还要检查最小提币额差异,当心「看似便宜实则门槛高」。
Q3: 可以一键把 ERC-20 转成 BEP-20 吗?
可以,通过 Binance Bridge 或去中心化桥(AnySwap、cBridge)。步骤:
1)连接钱包 → 2)选择 ERC-20 → BEP-20 → 3)输入数量 → 4)签名。整个跨链桥费用包含 ETH gas + BSC gas,高峰期仍低于纯 ETH 单网转帐。
Q4: 自己发币有法律风险吗?
中国大陆对于 首次公开发售、二级市场撮合 均有严格限制。仅供技术学习、内部测试或小范围空投,避免公开募资。发文前应咨询当地律师。
Q5: 为什么我的代币市值在 PancakeSwap 无法显示?
图标、流通量、官网等信息需要提交至 BSC TokenList Github 或通过币安官方 K 线上币计划。不达标前,可由项目方自行上传 Logo 解决 UI 问题。
总结与避坑提醒
- 主网对应:BEP-20 ↔ BSC,ERC-20 ↔ Ethereum。千万别在交易所「一刀切」地看到便宜就选。
- 钱包感知:MetaMask 只要「网络」选对了,地址与前缀自适配,勿手动改链 ID。
- 成本优先级:BEP-20 的手续费均值 < 0.3 美元,适合做高频交互;大额交易仍可套娃跨回 ETH 参与蓝筹 DeFi。
把本文加入浏览器书签,下次转账前快速扫一眼,彻底告别“发错网络烧掉存款”的风险。祝你在 BEP-20 生态一路顺风,挖出低成本的高收益!