本文将带你从 0 到 1 完成 NFT 发行、铸造、转移 全链路操作:环境配置、合约编写、部署、交互与在钱包中查看。全程基于 BNB Smart Chain(BSC)测试网 与 Black IDE,不花 1 分钱真·实战。
关键词速览
BSC、NFT、Black IDE、ERC721、Solidity、MetaMask、测试网、铸造、转移、智能合约
1. 技术栈与环境准备
| 组件 | 版本提示 | 用途 |
|---|---|---|
| Black IDE | ≥ v0.15.4 | 集成开发环境,一键编译与部署 |
| Truffle | v5.5.19 | 默认内嵌,合约编译与迁移 |
| MetaMask | ≥ v10.16.1 | 浏览器钱包账号管理与签名 |
| Solidity | ≥ 0.8.4 | 智能合约语言 |
| Docker | ≥ v20.10.14 | Black IDE 部分的运行依赖 |
⚡ 极简开干:仅需安装 MetaMask + Black IDE,Truffle 与 Solc 全部内置。
2. 连接 BSC 测试网
2.1 在 MetaMask 添加网络
- 网络名称:BSC Testnet
- RPC URL:
https://data-seed-prebsc-1-s1.binance.org:8545/ - 链 ID:97
- 货币符号:BNB
- 区块浏览器:
https://testnet.bscscan.com
确认网络后,👉 先领 1 枚测试 BNB,方便后续交易 再跑流程。
2.2 在 Black IDE 新建项目并绑定网络
- 打开 Black IDE 桌面版(推荐,支持 OpenZeppelin)。
- 登录 GitHub 账号 → New → 项目类型:
Basics – ERC20, ERC721 & ERC1155 (v31+)。 - 命名项目:
BSC-NFT,保存路径随意。 - 在 config.json 中把
main改为BSC-NFT.sol,deploy改为BSCNFT.json。
3. 编写并编译 NFT 合约
删除合约目录默认文件,新建 BSC-NFT.sol,核心代码如下(已精简映射部分字段,便于入门):
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract BSCNFT is ERC721, Ownable {
uint256 public maxSupply = 1000;
uint256 public mintPrice = 0.05 ether;
constructor() ERC721("BSC-QuickNFT", "BQNFT") {}
function safeMint(address to) external payable {
require(msg.value >= mintPrice, "Insufficient BNB");
require(totalSupply() < maxSupply, "Sold out");
uint256 tokenId = totalSupply() + 1;
_safeMint(to, tokenId);
}
function totalSupply() public view returns (uint256) {
return _tokenIdCounter.current() - 1;
}
}- 右上角选择 Solc 0.8.4。
- 点击 Build 图标,生成
_build/contracts/→ 无误后进入下一步:部署。
4. 部署与日志检查
4.1 生成并领取测试代币
- Black IDE 左下角 Keypair Manager → Create → 命名:
BSC-Testnet-Key。 - 复制地址,前往 官方水龙头,领取 0.5 BNB。
- 返回 Keypair Manager,等 1-2 分钟即可显示余额。
4.2 一键部署
- 右上角 Network → 选
BNB Chain > Testnet。 - 点击 Deploy 图标 → 填写构造函数参数(已为 0)。
- Estimate & Deploy → Deploy;等待链上确认,状态由
pending变confirmed。 - 点击交易哈希可在 BscScan 查看,记下 合约地址。
5. 铸造(Mint)与转移(Transfer)
5.1 铸造 NFT
- 新建第二个 Keypair(接收方地址)。
在 Transactions → 合约地址 → Write Functions 里选
safeMint:- ETH to send:填
0.06BNB(涵盖手续费)。 - To 填入新地址,执行后确认状态为
success。
- ETH to send:填
- 同步在 Events tab 中查看
Transfer事件,即可确认铸造成功。
5.2 确认所有权
- 调用
ownerOf(1),会直接返回接收方地址;确认与预期一致即可。
6. 在手机 MetaMask 查看 NFT
MetaMask 浏览器插件暂不支持 NFT,切换到 手机端:
- 用 Keypair 的私钥导入 MetaMask Mobile。
- Settings > Networks 中添加 BSC Testnet(与桌面端参数相同)。
NFTs 选项卡 → Import NFT:
- Contract Address:刚部署的合约地址
- Token ID:
1
- 点击 Import,NFT 即刻出现在列表!
7. FAQ 高频问答
- Q:为什么我部署后合约地址为 0x0?
A:多数因私钥余额不足或 gas limit 估计失败;返回 领水环节 为账号补 BNB 后,重新 Estimate & Deploy 即可。 - Q:可以取消 OpenZeppelin 依赖吗?
A:可以,直接复刻ERC721.sol代码改成自研实现,但不建议;审计与安全成本远高于使用可靠库。 - Q:能否提前铸造给白名单?
A:在合约中加mapping(address => bool) private whitelist与modifiers即可实现提前或折扣铸造。 - Q:Mint 价格是否真的需要 0.05 BNB?
A:这里指测试网数值,主网需根据币价与运营成本自行调整。 - Q:如何给 NFT 添加可定制图像?
A:修改_baseURI()返回值指向你的元数据服务器,按 ERC721 标准 JSON 格式上传图像image字段即可。 - Q:可以直接在钱包内转移 NFT 吗?
A:MetaMask Mobile 已内置 NFT 卡片,点击即可 Send 填接收方地址(链上仍需支付 gas)。
8. 拓展与延伸
- 探索 ERC1155:使用同套 IDE 模板,仅需改一行继承即可实现 NFT+FT 混合标准。
- 引入 限时发售:Solidity 里加
block.timestamp判断即可实现铸造窗口。 - 测试完成后,记得在 主网部署 前跑 OpenZeppelin Defender 或 Slither 静态审计即可。
👉 即刻动手,你的第一款 BNB 链 NFT 将在 10 分钟内上线!
祝你创作愉快,链上见!