ERC-2981:NFT 版税的定义与实施

要点总结
• ERC-2981提供了一个简洁的接口,用于查询NFT交易的版税信息。
• 该标准允许灵活的版税接收方设置,支持创作者多种需求。
• 交易平台的执行力度不一,创作者需关注平台政策以保障收益。
• 结合注册中心和可编程标准,创作者可以更好地维护其收入流。
NFT 版税最初只是创作者和交易平台之间的一种默契。随着交易的成熟和费用模式的演变,行业需要一种标准化的、链上可读的方式来描述版税信息,以便任何交易平台都能识别。ERC-2981 标准正是为此而生:它提供了一个简洁、可互操作的接口,用于查询任意给定 NFT 交易应支付的版税金额及接收方。本文将深入探讨 ERC-2981 是什么、其工作原理、实施注意事项,以及当前交易平台在执行和创作者盈利方面的现状。
ERC-2981 到底标准化了什么
ERC-2981 是一个以太坊标准,它为非同质化代币(NFT)定义了一个单一的函数:
royaltyInfo(tokenId, salePrice) → (receiver, royaltyAmount)
遵守版税规则的交易平台会在交易发生时调用 royaltyInfo 函数来计算应付的版税。需要注意的是,该标准本身并不强制执行支付——它只提供了一个接口描述。支付的执行与否,是交易平台政策层面的问题。
关键设计选择包括:
- 基于百分比:版税根据销售价格计算,通常使用百分比形式,例如以基点表示(如 500 代表 5%)。
 - 接收方灵活性:版税接收方可以是创作者的地址、多重签名钱包、拆分合约,或者一个可升级的支付地址。
 - 兼容 ERC-721 和 ERC-1155:ERC-2981 与主流的 NFT 标准兼容,并依赖 ERC-165 进行接口检测。
 
对于生产级别的实施,许多团队会基于 OpenZeppelin 的 ERC2981 进行开发。
为何现在如此重要
自 2023 年以来,多家主流交易平台开始转向可选的版税执行模式。其中最引人注目的是 OpenSea 宣布停止使用其 Operator Filter,该过滤器曾允许创作者限制交易只在遵守版税的平台进行。您可以在 OpenSea 的公告 中了解详情。因此,即使执行力度参差不齐,ERC-2981 等链上标准也成为了跨平台获取版税数据的默认方式。
此后,生态系统也做出了相应的响应,包括:
- 注册中心基础设施:允许交易平台以统一的方式解析版税逻辑,例如 Royalty Registry 及其相关的 规范。
 - 可编程标准:用于链上执行或限制,其中最突出的是 ERC-721C (Creator Token Standards)。
 - 替代性盈利模式:例如协议级奖励和创作者激励,如 Zora 的 Creator Rewards。
 
在 2024-2025 年,ERC-2981 在 L1 和 L2 网络上仍被广泛采用,并且选择遵守版税规则的交易平台通常会在结算交易时查询此接口。
接口工作原理(无惊喜)
在销售时,符合标准的交易平台会执行以下步骤:
- 通过 ERC-165(接口 ID 
0x2a55205a)检查代币是否支持IERC2981。 - 调用 
royaltyInfo(tokenId, salePrice)函数,获取:receiver:接收版税的地址。royaltyAmount:根据salePrice计算出的版税金额。
 
通常情况下,创作者或藏品所有者会设置一个「默认版税」,并可选择性地设置「单代币版税」。许多实现使用 10,000 作为基点的分母。交易平台的会计系统随后会将销售收入分配给卖家、协议费用和版税接收方。
实施建议:
- 避免 
royaltyInfo函数出现回滚:如果调用失败,交易平台可能会跳过支付。 - 保持版税接收方可升级:例如通过 
Ownable或管理员控制,以便轮换密钥或迁移到拆分合约。 - 设置合理的版税上限:许多项目将上限设在 10% 以下,以鼓励二级市场的流动性。
 
简化的 Solidity 示例
以下是使用 OpenZeppelin 的简化模式,展示了如何设置默认版税以及 ERC-165 的覆盖支持。在生产环境中,您应添加访问控制、初始化检查和稳健的铸造逻辑。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC721/ERC721.[sol](https://onekey.so/blog/zh-CN/ecosystem/best-sol-wallets-in-2025-ultimate-guide-to-software-hardware-options/)";
import "@openzeppelin/contracts/token/common/ERC2981.[sol](https://onekey.so/blog/zh-CN/ecosystem/best-sol-wallets-in-2025-ultimate-guide-to-software-hardware-options/)";
import "@openzeppelin/contracts/access/Ownable.[sol](https://onekey.so/blog/zh-CN/ecosystem/best-sol-wallets-in-2025-ultimate-guide-to-software-hardware-options/)";
[contract](https://onekey.so/blog/zh-CN/ecosystem/what-is-a-smart-contract/) MyNFT is ERC721, ERC2981, Ownable {
    uint256 private _nextTokenId;
    constructor([address](https://onekey.so/blog/zh-CN/ecosystem/what-is-a-crypto-wallet-address/) defaultReceiver, uint96 defaultBps)
        ERC721("MyNFT", "MYN")
    {
        // 设置默认版税 (例如, 500 = 5%)
        _setDefaultRoyalty(defaultReceiver, defaultBps);
    }
    function mint([address](https://onekey.so/blog/zh-CN/ecosystem/what-is-a-crypto-wallet-address/) to) external onlyOwner {
        _safeMint(to, _nextTokenId);
        _nextTokenId++;
    }
    // 可选:为特殊物品设置单代币版税
    function setTokenRoyalty(uint256 tokenId, [address](https://onekey.so/blog/zh-CN/ecosystem/what-is-a-crypto-wallet-address/) receiver, uint96 bps)
        external
        onlyOwner
    {
        _setTokenRoyalty(tokenId, receiver, bps);
    }
    // 必需:ERC-165 supportsInterface
    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC2981)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
}
有关更深入的文档,请参阅 OpenZeppelin 的 ERC2981 指南。
处理拆分、升级和边缘情况
实际的版税分配很少是单一接收方。请考虑以下几点:
- 拆分合约:使用经过充分测试的基础设施(如 0xSplits)以固定比例将收入路由给多个方。
 - 注册中心查询:一些交易平台会查询注册中心以获取最新的版税数据(如 Royalty Registry)。
 - 可升级的接收方:在密钥轮换或组织结构变更时,保持更新接收地址的能力。
 - 单代币覆盖:特殊版本可以相对于默认设置拥有独特的版税率。
 
技术说明:
- 保持分母一致:为方便链下集成,请坚持使用基点(10,000)。
 - 区分代币类型:ERC-1155 实现应根据每个代币的销售价格计算版税,而不是捆绑销售价格。
 - 优雅的后备方案:如果版税接收方未设置,请返回零,以避免交易平台调用失败。
 
交易平台的现实:信号与执行
ERC-2981 表达了创作者的意图,但不强制支付。不同的交易平台可能:
- 完全遵守 ERC-2981。
 - 在某些条件下限制或减少版税。
 - 完全忽略版税。
 
鉴于这种不确定性,许多创作者正在尝试混合模式:
- 通过 ERC-721C 进行链上限制,以约束交易者仅限于遵守版税的运营商。
 - 协议级奖励,如 Zora 的 Creator Rewards。
 - 围绕尊重创作者收入的社区规范和舆论压力。
 
OpenSea 在 2023 年决定取消运营商过滤,反映了市场偏好而非协议级强制执行的更广泛趋势,具体细节可参见其 公告。在 2024-2025 年,这种平衡仍在继续:ERC-2981 仍然是版税元数据的标准接口,但执行方式却日趋碎片化。
测试、验证和监控
为确保可靠的版税行为:
- 验证接口支持:根据 ERC-165,确认您的合约报告 
supportsInterface(0x2a55205a) == true。 - 模拟调用:测试不同极端销售价格和代币的 
royaltyInfo函数。 - 索引兼容性:如果您的交易平台合作伙伴依赖相关注册中心(如 Royalty Registry),请在此注册您的合约。
 - 清晰文档:发布您的版税政策、上限和接收方逻辑,以最大限度地减少对买家和交易平台的意外。
 - 学习标准:如果您是 ERC-2981 的新手,Alchemy 提供的这份概述是一个有用的入门指南:什么是 ERC-2981?。
 
创作者的安全和密钥管理
版税配置由管理员控制。如果攻击者获得了您的部署者或管理员密钥的访问权限,他们就可以重定向或禁用版税。最佳实践包括:
- 使用硬件钱包处理高权限操作,例如设置默认版税、更新接收方或部署拆分合约。
 - 对于团队管理的藏品,优先选择多重签名设置。
 - 保持签名流程的透明度和可审计性。
 
对于希望在不影响用户体验的前提下实现安全、可移植签名的创作者和工作室,OneKey 硬件钱包提供了:
- 离线私钥存储,配有开源固件和透明的安全实践。
 - 与常见的以太坊工具(用于合约部署和管理操作)的顺畅集成。
 - 跨链支持,这在您的 NFT 部署在 L2 或多个 EVM 网络上时非常有用。
 
使用硬件钱包管理版税设置,可以确保您的链上收入信号不会被受损设备或热钱包篡改。
结论
ERC-2981 是 NFT 版税的基础层:一个简单、通用的接口,交易平台可以读取它来确定创作者的收益。它不保证执行——执行由交易平台的政策决定——但它统一了信号。在一个执行可选且不断发展的世界里,将 ERC-2981 与注册中心、拆分合约以及 ERC-721C 等可编程限制相结合,为创作者提供了维持其创作活动的实用工具。
如果您负责管理 NFT 藏品或创作者基础设施,请务必干净地实施 ERC-2981,进行彻底的测试,并使用硬件钱包保护您的管理员密钥。这种组合可以最大限度地提高跨交易平台的互操作性,同时保护您的项目所依赖的收入流。






