本节摘要:NFT 不是凭空存在,它跑在具体的技术标准上。本节讲清楚两大主流标准 ERC-721 和 ERC-1155 的区别、元数据怎么存储、链上 vs 链下的权衡。读完你能理解为什么同一个 NFT 在不同链上不通用、为什么图片不直接存链上。
ERC-721 是以太坊上第一个 NFT 标准,2018 年由 CryptoKitties 团队推动确立。它定义了 NFT 合约必须实现的接口。
// 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; // ... 事件和其它方法 }
关键点:每个 NFT 有唯一的 tokenId,ownerOf(tokenId) 返回当前持有者地址。转账时整个 NFT 转让,不能转半个。
ERC-721 的局限:每个 NFT 是独立的合约调用,批量操作贵。你要转 100 个同款 NFT,要发 100 笔交易或一个复杂交易调 100 次合约,Gas 费高。
为解决 ERC-721 批量操作贵的问题,Enjin 团队推出 ERC-1155 标准,支持"半同质化"——同一个合约里可以有多种代币,每种可以是 NFT(发行量 1)也可以是 FT(发行量多)。
// 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; }
ERC-1155 的优势:
游戏类 NFT 多用 ERC-1155,因为道具种类多、批量交易频繁。纯艺术 NFT 多用 ERC-721,因为每件独一无二。
| 标准 | 每个代币 | 批量操作 | 适用场景 |
|---|---|---|---|
| ERC-721 | 独立合约调用 | 贵 | 独一无二艺术品 |
| ERC-1155 | 同合约多代币 | 便宜 | 游戏道具/批量发行 |
NFT 合约本身只存 token ID 和所有者地址的映射,不存图片、名字、属性这些"内容"。这些内容叫元数据,存在哪是个关键设计。

元数据存储三种方案:
1. 链上存储:把图片/属性直接编码写进合约存储。最去中心化——只要以太坊在,NFT 内容就在。但极贵,一张图片可能要几千美金 Gas。只适合小文本或像素艺术。
2. IPFS 存储:图片存 IPFS(去中心化文件系统),合约只存 IPFS 哈希。IPFS 哈希指向文件内容,内容变了哈希就变,所以不可篡改。但 IPFS 文件需要节点 pin(持续托管)才不丢,pin 服务要付费。这是多数 NFT 的方案。
3. 中心化服务器:图片存项目方自己的服务器,合约存 URL。最便宜灵活,但项目方跑路或关服务器,NFT 就只剩个空 URL。这种方案最不 Web3,但早期很多项目图省事用了。
判断一个 NFT 的去中心化程度,看它的元数据存哪——链上最硬核,IPFS 次之,中心化服务器最不可靠。
为了让不同平台的 NFT 能互相识别,社区定了元数据 JSON 标准:
{ "name": "Bored Ape #1234", "description": "一只无聊的猿", "image": "ipfs://QmXYZ.../image.png", "attributes": [ {"trait_type": "背景", "value": "蓝色"}, {"trait_type": "衣服", "value": "西装"}, {"trait_type": "眼睛", "value": "困倦"} ] }
这个 JSON 通过 tokenURI(tokenId) 返回。OpenSea 等市场读这个 JSON 来展示 NFT 的图片、名字、属性。attributes 是 NFT 的"属性",不同属性组合决定 NFT 的稀有度,进而影响价格。
很多 NFT 项目发行时用"盲盒"机制——铸造时随机分配属性,铸造者事先不知道自己拿到什么。这就需要链上随机数。
但前面讲过 EVM 不能产生真随机数。常见做法:
不安全的随机数会导致项目方或矿工操纵铸造结果,把稀有 NFT 留给自己。这是 NFT 公平性的关键技术点。
NFT 在以太坊上铸造,能不能转到 Solana?理论上可以,但实际复杂:
所以多数 NFT 还是在单链生态内流通。跨链 NFT 是技术前沿,但体验和安全性都还不够成熟。
传统 NFT 元数据铸造后不变。动态 NFT 的元数据可按规则变化——游戏角色升级后属性 NFT 更新、球队赢了比赛球迷 NFT 加徽章、时间推移 NFT 图像演化。
实现靠合约在特定条件下更新元数据 URI,或预言机喂外部事件触发更新。这让 NFT 从静态收藏品变成动态状态载体,应用空间更大。
⚠️ 检查元数据:买 NFT 前查它的
tokenURI指向哪。指向 IPFS 哈希的去中心化可靠,指向项目方域名的项目方跑路就没了。Etherscan 上能直接查。
💡 关键直觉:NFT 技术核心是标准(ERC-721 唯一/ERC-1155 批量)+ 元数据存储(链上贵但永久/IPFS 去中心化/中心化便宜但不可靠)。判断 NFT 去中心化程度看元数据存哪。动态 NFT 是新方向,让 NFT 从静态变动态。
tokenURI 返回,市场读它展示。