ERC-7548: 基于 NFT 构建的开放 IP 协议
一种协议,使用户能够重组 NFT 并生成新的 NFT 衍生作品,同时它们的关系可以在链上追溯。
Authors | Combo <combo@1combo.io>, Saitama (@saitama2009), CT29 <CT29@1combo.io>, Luigi <luigi@1combo.io> |
---|---|
Created | 2023-10-31 |
Discussion Link | https://ethereum-magicians.org/t/draft-open-ip-protocol/16373 |
Requires | EIP-165, EIP-721 |
摘要
本提案旨在建立一种标准化的方法,通过以去中心化的方式重组多个现有 IP(知识产权) 来创建新的 IP。
该协议建立在 NFT(非同质化代币)的基础上。在此协议中,每个知识产权都表示为一个 NFT。它扩展了 ERC-721 标准,使用户能够通过重组多个现有 NFT 来生成新的 NFT。为了确保创建过程的透明性和可追溯性,新 NFT 和原始 NFT 之间的关系被记录在区块链上并公开访问。
此外,为了提高 IP 的流动性,用户不仅可以重组自己拥有的 NFT,还可以授权他人使用自己的 NFT 参与新 NFT 的创建。
动机
互联网每天都充斥着新鲜内容,但对于传统的 IP 基础设施而言,IP 注册和许可对于数字创作者来说是一个令人头疼的问题。内容的快速创建已经超越了 IP 注册的较慢速度,导致大量内容未受保护。这意味着数字创作者无法从其作品的传播中公平地获利。
传统 IP 基础设施 | 开放 IP 基础设施 | |
---|---|---|
IP 注册 | 漫长的等待、大量的文书工作和繁琐的来回沟通。 | NFT 代表知识产权;NFT 的所有者拥有 IP 的权利。 |
IP 许可 | 冗长的讨论、法律术语和个案协议。 | 一站式全球 IP 许可市场,支持各种许可协议。 |
在此背景下,我们热衷于为当今的数字创作者构建一个量身定制的开放 IP 生态系统。在这里,只需点击几下,创作者就可以在全球范围内注册、许可和通过其内容获利,而没有地域或语言障碍。
规范
本文档中的关键词“必须 (MUST)”,“禁止 (MUST NOT)”,“需要 (REQUIRED)”,“应该 (SHALL)”,“不应该 (SHALL NOT)”,“推荐 (SHOULD)”,“不推荐 (SHOULD NOT)”,“可以 (MAY)”和“可选 (OPTIONAL)”应按照 RFC 2119 中的描述进行解释。
接口
该协议标准化了如何重组多个现有 NFT 并创建新的 NFT 衍生作品(称为 combo),同时可以在区块链上追溯它们的关系。它包含三个核心模块:重组模块、网络模块和许可模块。
重组模块
该模块扩展了 ERC-721 标准,使用户能够通过重组多个现有 NFT(无论是 ERC-721 还是 ERC-1155)来创建新的 NFT。
// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.10;
interface IERC721X {
// Events
/// @dev 当组合被铸造时发出。
/// @param owner 新铸造的组合的所有者地址
/// @param comboId 新铸造的组合标识符
event ComboMinted(address indexed owner, uint256 indexed comboId);
// Structs
/// @param tokenAddress NFT 的集合地址
/// @param tokenId NFT 标识符
struct Token {
address tokenAddress;
uint256 tokenId;
}
/// @param amount 使用的 NFT 数量
/// @param licenseId 用于验证此组件的许可
struct Component {
Token token;
uint256 amount;
uint256 licenseId;
}
// Functions
/// @dev 通过重组多个现有 NFT 来铸造 NFT。
/// @param components 重组以铸造组合的 NFT
/// @param hash 表示关于如何在重组多个现有 NFT 时生成组合元数据的算法的哈希。
function mint(
Component[] calldata components,
string calldata hash
) external;
/// @dev 检索组合的组件。
function getComponents(
uint256 comboId
) external view returns (Component[] memory);
}
许可模块
默认情况下,用户只能重组自己拥有的多个 NFT,以创建新的 NFT 衍生作品。该模块使 NFT 持有者可以授权其他人使用他们的 NFT 参与重组过程。
// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.10;
import "./IERC721X.sol";
interface ILicense {
/// @dev 验证铸造组合时的权限
/// @param user 铸造者
/// @param combo 通过重组多个现有 NFT 铸造的新 NFT
/// @return components 用于铸造新组合的多个现有 NFT
function verify(
address user,
IERC721X.Token calldata combo,
IERC721X.Component[] calldata components
) external returns (bool);
}
网络模块
该模块遵循单例模式,用于跟踪原始 NFT 和其 NFT 衍生作品之间的所有关系。
// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.10;
import "./IERC721X.sol";
interface INFTNetIndexer {
/// @dev 验证 `child` 是否是通过将 `parent` 与其他 NFT 重组而创建的。
/// @param parent 任何 NFT
/// @param child 任何 NFT
function isParent(
IERC721X.Token calldata parent,
IERC721X.Token calldata child
) external view returns (bool);
/// @dev 验证 `a` 和 `b` 是否有共同的 `parent`
/// @param a 任何 NFT
/// @param b 任何 NFT
function isSibling(
IERC721X.Token calldata a,
IERC721X.Token calldata b
) external view returns (bool, IERC721X.Token[] memory commonParents);
/// @dev 返回 `token` 的所有父级
/// @param token 任何 NFT
/// @return parents 用于铸造 `token` 的所有 NFT
function getParents(
IERC721X.Token calldata token
) external view returns (IERC721X.Token[] memory parents);
}
原理
开放 IP 协议建立在 “1 个前提、2 个扩展、1 个常量” 原则之上。
“1 个前提” 是指在开放 IP 生态系统中的任何 IP,NFT 代表该 IP。因此,如果您拥有 NFT,则您拥有该 IP。这就是为什么开放 IP 协议被设计为与 ERC-721 兼容的扩展协议。
“2 个扩展” 是指 IP 许可和重组的多样化。
-
IP 许可方法是多种多样的。例如,将 NFT 委托给其他人是一种许可类型,为使用权数量设定价格是另一种许可类型,甚至基于拍卖、AMM 或其他定价机制的定价都可以开发不同的许可方法。因此,许可模块的设计允许各种自定义许可方法。
-
IP 重组规则也多种多样。在重组多个现有 NFT 时,是否支持 ERC-1155,是否限制 NFT 选择范围,以及 NFT 在重组后是否被消耗,没有标准。因此,重组模块被设计为支持自定义重组规则。
“1 个常量” 是指 IP 许可的可追溯信息始终是公开且不可更改的。无论用户如何许可或重组 IP,原始 IP 和新 IP 之间的关系都保持一致。此外,如果所有 IP 关系都记录在同一个数据库中,它将创建一个庞大的 IP 网络。如果其他社交或游戏 dApp 利用这个网络,它可以带来全新的用户体验。因此,此协议的网络模块被设计为单例。
向后兼容性
该提案与现有的 ERC-721 标准完全向后兼容,通过不影响核心功能的新功能扩展了该标准。
安全考虑
此标准强调了几个需要关注的安全问题:
-
所有权和权限:只有 NFT 所有者或由他们授权的人员才能将 NFT 重组为 NFT 衍生作品。至关重要的是要有严格的访问控制,以防止未经授权的创作。
-
重入风险:创建衍生作品可能需要与多个外部合约交互,例如重组、许可和网络模块。这可能会打开重入攻击的大门,因此有必要采取保护措施。
-
Gas 使用量:重组 NFT 可能是计算密集型的,并且涉及许多合约交互,这可能会导致高 gas 费用。重要的是要优化这些流程以降低成本并保持用户友好性。
版权
通过 CC0 放弃版权和相关权利。
Citation
Please cite this document as:
Combo <combo@1combo.io>, Saitama (@saitama2009), CT29 <CT29@1combo.io>, Luigi <luigi@1combo.io>, "ERC-7548: 基于 NFT 构建的开放 IP 协议 [DRAFT]," Ethereum Improvement Proposals, no. 7548, October 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7548.