3.2 NFT 技术标准与协议


3.2 NFT 技术标准与协议

本节摘要:NFT 不是凭空存在,它跑在具体的技术标准上。本节讲清楚两大主流标准 ERC-721 和 ERC-1155 的区别、元数据怎么存储、链上 vs 链下的权衡。读完你能理解为什么同一个 NFT 在不同链上不通用、为什么图片不直接存链上。

一、ERC-721:第一个 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 有唯一的 tokenIdownerOf(tokenId) 返回当前持有者地址。转账时整个 NFT 转让,不能转半个。

ERC-721 的局限:每个 NFT 是独立的合约调用,批量操作贵。你要转 100 个同款 NFT,要发 100 笔交易或一个复杂交易调 100 次合约,Gas 费高。

二、ERC-1155:半同质化标准

为解决 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 的优势:

  • 批量操作:一次交易转多种代币,Gas 省。
  • 同合约多代币:一个游戏的所有道具(剑、盾、药水)可以在一个合约里,不用每个道具部署一个合约。
  • 灵活:同一个标准既能做 NFT(amount=1)又能做 FT(amount>1)。

游戏类 NFT 多用 ERC-1155,因为道具种类多、批量交易频繁。纯艺术 NFT 多用 ERC-721,因为每件独一无二。

标准 每个代币 批量操作 适用场景
ERC-721 独立合约调用 独一无二艺术品
ERC-1155 同合约多代币 便宜 游戏道具/批量发行

三、元数据:NFT 的"内容"存哪

NFT 合约本身只存 token ID 和所有者地址的映射,不存图片、名字、属性这些"内容"。这些内容叫元数据,存在哪是个关键设计。

图 3-2 NFT 元数据存储

图 3-2 NFT 元数据存储

元数据存储三种方案:

1. 链上存储:把图片/属性直接编码写进合约存储。最去中心化——只要以太坊在,NFT 内容就在。但极贵,一张图片可能要几千美金 Gas。只适合小文本或像素艺术。

2. IPFS 存储:图片存 IPFS(去中心化文件系统),合约只存 IPFS 哈希。IPFS 哈希指向文件内容,内容变了哈希就变,所以不可篡改。但 IPFS 文件需要节点 pin(持续托管)才不丢,pin 服务要付费。这是多数 NFT 的方案。

3. 中心化服务器:图片存项目方自己的服务器,合约存 URL。最便宜灵活,但项目方跑路或关服务器,NFT 就只剩个空 URL。这种方案最不 Web3,但早期很多项目图省事用了。

判断一个 NFT 的去中心化程度,看它的元数据存哪——链上最硬核,IPFS 次之,中心化服务器最不可靠。

四、元数据标准:ERC-721 Metadata

为了让不同平台的 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 不能产生真随机数。常见做法:

  • Chainlink VRF:可验证随机数,最安全但贵。
  • commit-reveal:铸造时提交哈希,揭晓时揭示,两阶段防作弊。
  • 区块哈希:用未来某个区块的哈希做随机源,简单但矿工理论可操纵。

不安全的随机数会导致项目方或矿工操纵铸造结果,把稀有 NFT 留给自己。这是 NFT 公平性的关键技术点。

六、跨链 NFT 的难题

NFT 在以太坊上铸造,能不能转到 Solana?理论上可以,但实际复杂:

  • 每条链有自己的 NFT 标准(以太坊 ERC-721、Solana 的 Metaplex 标准不同)。
  • 跨链要"锁源链 NFT + 目标链铸造副本",靠跨链桥实现。
  • 桥出问题,源链 NFT 锁着但目标链副本可能多铸。

所以多数 NFT 还是在单链生态内流通。跨链 NFT 是技术前沿,但体验和安全性都还不够成熟。

七、动态 NFT

传统 NFT 元数据铸造后不变。动态 NFT 的元数据可按规则变化——游戏角色升级后属性 NFT 更新、球队赢了比赛球迷 NFT 加徽章、时间推移 NFT 图像演化。

实现靠合约在特定条件下更新元数据 URI,或预言机喂外部事件触发更新。这让 NFT 从静态收藏品变成动态状态载体,应用空间更大。

⚠️ 检查元数据:买 NFT 前查它的 tokenURI 指向哪。指向 IPFS 哈希的去中心化可靠,指向项目方域名的项目方跑路就没了。Etherscan 上能直接查。

💡 关键直觉:NFT 技术核心是标准(ERC-721 唯一/ERC-1155 批量)+ 元数据存储(链上贵但永久/IPFS 去中心化/中心化便宜但不可靠)。判断 NFT 去中心化程度看元数据存哪。动态 NFT 是新方向,让 NFT 从静态变动态。

重点提炼

  • ERC-721:第一个 NFT 标准,每个 NFT 独立,批量操作贵,适合独一无二艺术品。
  • ERC-1155:半同质化,同合约多代币,批量便宜,适合游戏道具。
  • 元数据存储:链上(贵但永久)、IPFS(去中心化需 pin)、中心化服务器(便宜但项目方跑路就没)。
  • 元数据标准:JSON 含 name/image/attributes,tokenURI 返回,市场读它展示。
  • 链上随机:Chainlink VRF 最安全,commit-reveal 防作弊,区块哈希简单可被操纵。
  • 跨链 NFT:标准不统一,靠桥锁+铸,桥出问题副本可能多铸,目前不成熟。
  • 动态 NFT:元数据可按规则变化,靠合约更新或预言机触发,应用空间大。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U