NFT(Non-Fungible Token,非同质化代币) 是一种独特的数字资产,每个代币都有唯一的标识符和元数据,无法相互替换。
NFT vs FT(同质化代币)
shell同质化代币(FT): 非同质化代币(NFT): ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 1 ETH │ =│ 1 ETH │ │ CryptoPunk│ ≠│ Bored Ape│ │ │ │ │ │ #1234 │ │ #5678 │ │ 可互换 │ │ 价值相同 │ │ 唯一 │ │ 独特 │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ FT 例子:BTC、ETH、USDC NFT 例子:数字艺术、游戏道具、域名
| 特性 | FT | NFT |
|---|---|---|
| 可互换性 | 可互换 | 不可互换 |
| 唯一性 | 无区别 | 每个唯一 |
| 用途 | 货币、支付 | 收藏品、身份、凭证 |
| 标准 | ERC-20 | ERC-721、ERC-1155 |
NFT 技术标准
1. ERC-721(以太坊)
特点:每个代币唯一,适合独特资产。
solidity// ERC-721 核心接口 interface IERC721 { // 查询余额 function balanceOf(address owner) external view returns (uint256); // 查询所有者 function ownerOf(uint256 tokenId) external view returns (address); // 转账 function transferFrom(address from, address to, uint256 tokenId) external; // 授权 function approve(address to, uint256 tokenId) external; // 获取元数据 URI function tokenURI(uint256 tokenId) external view returns (string memory); }
数据结构:
soliditymapping(uint256 => address) private _owners; // tokenId → owner mapping(address => uint256) private _balances; // owner → balance mapping(uint256 => address) private _tokenApprovals; // tokenId → approved
2. ERC-1155(多代币标准)
特点:一个合约支持多种代币(FT + NFT)。
solidity// ERC-1155 核心接口 interface IERC1155 { // 查询余额(支持多类型) function balanceOf(address account, uint256 id) external view returns (uint256); // 批量转账 function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
适用场景:
- 游戏道具(多种装备)
- 票务系统
- 批量发行
3. 标准对比
| 标准 | 代币类型 | Gas 效率 | 适用场景 |
|---|---|---|---|
| ERC-20 | 同质化 | 高 | 货币、积分 |
| ERC-721 | 非同质化 | 中 | 独特艺术品 |
| ERC-1155 | 混合 | 高 | 游戏、批量发行 |
NFT 元数据存储
存储方案对比
shell链上存储(On-chain): ┌─────────────────────────────────────┐ │ 合约直接存储元数据 │ │ • 名称、描述、属性 │ │ • 图像 Base64 编码 │ │ │ │ 优点:永久保存、完全去中心化 │ │ 缺点:Gas 成本极高 │ └─────────────────────────────────────┘ 链下存储(Off-chain): ┌─────────────────────────────────────┐ │ 链上存储 URI 指向链下资源 │ │ │ │ 方案1:中心化服务器 │ │ https://example.com/nft/1.json │ │ ⚠️ 服务器宕机则 NFT 失效 │ │ │ │ 方案2:IPFS(推荐) │ │ ipfs://QmXxx.../1.json │ │ ✅ 去中心化、内容寻址 │ │ │ │ 方案3:Arweave │ │ 永久存储,一次性付费 │ └─────────────────────────────────────┘
元数据 JSON 格式
json{ "name": "CryptoPunk #1234", "description": "A unique CryptoPunk character", "image": "ipfs://QmXxx.../image.png", "attributes": [ { "trait_type": "Type", "value": "Female" }, { "trait_type": "Hair", "value": "Mohawk" }, { "trait_type": "Accessories", "value": "Earring" } ] }
NFT 铸造流程
shellNFT 铸造过程: 1. 准备元数据 创建图像 + JSON 元数据文件 ↓ 2. 上传到 IPFS 获得 content hash ↓ 3. 调用合约铸造函数 mint(address to, string memory uri) ↓ 4. 合约记录 • tokenId 自增 • 映射 owner • 存储 tokenURI ↓ 5. 触发 Transfer 事件 在区块链浏览器可查询
NFT 在元宇宙中的应用
1. 数字身份(Avatar)
shell元宇宙身份系统: ┌─────────────────────────────────────┐ │ 用户钱包地址 │ │ 0x1234...abcd │ └──────────────┬──────────────────────┘ │ ┌──────────┼──────────┐ ↓ ↓ ↓ ┌───────┐ ┌───────┐ ┌───────┐ │Avatar │ │ 徽章 │ │ 成就 │ │ NFT │ │ NFT │ │ NFT │ │ │ │ │ │ │ │ • 外观 │ │ • VIP │ │ • 等级 │ │ • 服装 │ │ • 身份 │ │ • 技能 │ └───────┘ └───────┘ └───────┘
2. 虚拟地产
代表项目:Decentraland、The Sandbox
shell虚拟地产特性: • 坐标唯一(x, y) • 可建造虚拟建筑 • 可举办虚拟活动 • 可出租或出售 • 价值取决于位置和流量
3. 游戏资产
Play-to-Earn 模式:
shell传统游戏: 区块链游戏: ┌─────────┐ ┌─────────┐ │ 购买皮肤 │ │ 购买 NFT │ │ 归游戏公司│ │ 真正拥有 │ │ 无法转让 │ │ 自由交易 │ │ 游戏关服 │ │ 跨游戏使用│ │ = 资产归零│ │ 永久保存 │ └─────────┘ └─────────┘
4. 社交代币与 DAO
shell社区 NFT 会员体系: Level 1: 普通会员 NFT ↓ 持有 30 天 Level 2: 活跃会员 NFT ↓ 参与治理 Level 3: 核心贡献者 NFT ↓ 创建提案 Level 4: 治理委员会 NFT
NFT 市场机制
交易模式
| 模式 | 说明 | 代表平台 |
|---|---|---|
| 挂单交易 | 卖家定价,买家购买 | OpenSea、Blur |
| 拍卖 | 英式拍卖、荷兰拍卖 | Foundation |
| 聚合器 | 多平台比价 | Gem、Genie |
| 版税 | 创作者持续收益 | 标准 2.5-10% |
版税机制
solidity// 版税实现示例 function transferFrom(address from, address to, uint256 tokenId) public { // 计算版税 uint256 royaltyAmount = salePrice * royaltyPercentage / 10000; // 转账给创作者 payable(creator).transfer(royaltyAmount); // 转账给卖家 payable(from).transfer(salePrice - royaltyAmount); // 转移 NFT 所有权 _transfer(from, to, tokenId); }
NFT 发展趋势
- 动态 NFT(dNFT):元数据可随条件变化
- 灵魂绑定代币(SBT):不可转让的身份凭证
- 碎片化 NFT:将高价值 NFT 拆分为小份
- 跨链 NFT:在不同区块链间转移
面试要点
- 理解 NFT 与 FT 的本质区别
- 掌握 ERC-721 和 ERC-1155 的区别
- 了解元数据存储的各种方案
- 熟悉 NFT 铸造流程
- 掌握 NFT 在元宇宙中的应用场景
- 理解版税机制的实现
- 了解 NFT 市场的发展趋势