Alert Source Discuss
📢 Last Call Standards Track: ERC

ERC-5008: ERC-721 Nonce 扩展

向 ERC-721 添加 `nonce` 函数。

Authors Anders (@0xanders), Lance (@LanceSnow), Shrug <shrug@emojidao.org>
Created 2022-04-10
Last Call Deadline 2023-08-15
Requires EIP-165, EIP-721

摘要

本标准是 ERC-721 的扩展。它提议向 ERC-721 代币添加一个 nonce 函数。

动机

一些 NFT 市场的订单受到了攻击,NFT 以低于当前市场底价的价格售出。当用户将 NFT 转移到另一个钱包,然后又转回原始钱包时,可能会发生这种情况。这会重新激活订单,这可能会以远低于所有者意愿的价格列出代币。

此 EIP 提议向 ERC-721 代币添加一个 nonce 属性,并且 nonce 将在代币被转移时更改。如果将 nonce 添加到订单,则可以检查该订单以避免攻击。

规范

本文档中使用的关键词“必须(MUST)”,“禁止(MUST NOT)”,“需要(REQUIRED)”,“应该(SHALL)”,“不应该(SHALL NOT)”,“推荐(RECOMMENDED)”,“可以(MAY)”和“可选(OPTIONAL)”按照 RFC 2119 中的描述进行解释。


/// @dev 此接口的 ERC-165 标识符是 0xce03fdab。
interface IERC5008 /* is IERC165 */ {
    /// @notice 当 NFT 的 `nonce` 更改时发出
    event NonceChanged(uint256 tokenId, uint256 nonce);

    /// @notice 获取 NFT 的 nonce
    /// 如果 `tokenId` 不是有效的 NFT,则抛出
    /// @param tokenId NFT 的 id
    /// @return NFT 的 nonce
    function nonce(uint256 tokenId) external view returns(uint256);
}

nonce(uint256 tokenId) 函数必须实现为 view

当使用 0xce03fdab 调用时,supportsInterface 方法必须返回 true

理由

起初,transferCount 被认为是函数名,但是除了转移之外,可能还有一些情况会更改 nonce,例如重要的属性发生了更改,然后我们将 transferCount 更改为 nonce

向后兼容性

此标准与 ERC-721 兼容。

测试用例

测试用例包含在 test.js 中。

运行:

cd ../assets/eip-5008
npm install
npm run test

参考实现

请参阅 ERC5008.sol

安全考虑

未发现安全问题。

版权

通过 CC0 放弃版权和相关权利。

Citation

Please cite this document as:

Anders (@0xanders), Lance (@LanceSnow), Shrug <shrug@emojidao.org>, "ERC-5008: ERC-721 Nonce 扩展 [DRAFT]," Ethereum Improvement Proposals, no. 5008, April 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5008.