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.