Alert Source Discuss
⚠️ Draft Standards Track: ERC

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.