ERC-4950: 纠缠代币
ERC-721 扩展,铸造两个相互关联的代币
Authors | Víctor Muñoz (@victormunoz), Josep Lluis de la Rosa (@peplluis7), Easy Innova (@easyinnova) |
---|---|
Created | 2022-03-28 |
Discussion Link | https://ethereum-magicians.org/t/entangled-tokens/8702 |
Requires | EIP-20, EIP-721, EIP-1155 |
摘要
此 EIP 定义了一个接口,用于将智能合约钱包的控制权通过纠缠的 ERC-721 非同质化代币委托给用户对。
动机
动机是提供一种通过 NFT 共享钱包的简单方法,以便购买 NFT(在市场上)的行为赋予买方访问给定钱包的权限。该钱包可能拥有多种代币的预算,甚至可能拥有其他 NFT。
一个用例是保持艺术家与其 NFT 买家之间的联系。如果艺术家 T 创建了一个带有 NFT 的数字艺术作品 P,那么 T 创建 2 个纠缠代币 A 和 B,以便他保留 A 并将 B 转移到 P。通过纠缠代币的构造,它们只能进行一次转移,因此艺术家通过向 A 发送一笔交易来证明他是 P 的创建者,该交易可以从 B 中看到。否则,P 的所有者可以通过向 B 发送一笔交易来检查艺术家的真实性,以便艺术家可以通过展示 A 的结果来证明。
这个用例的一个版本是,当一个用户 U 直接以纠缠代币 A 的形式铸造他的艺术作品时;然后用户 U 出售/转移它,同时将纠缠代币 B 保留在 U 的钱包中。无论 A 的所有者是谁,艺术作品和艺术家都将纠缠在一起。
设想这些纠缠代币的应用对于以下方面是有用的:
- NFT 作者身份 / 艺术创作
- 创作者分配版税。
- 艺术品的真实性:创作仅限于作者(例如,如果该 NFT 中有 1000 个 1000 个纠缠代币,则仅限 1000 个副本)。
- Usowners(消费 NFT 的用户也成为 NFT 的部分所有者)
- 重塑产权:拥有该财产的人无需追随所有者的脚步即可获得该财产。
- 身份:只有那些与您拥有纠缠代币的凭证才与您相关。
- Vreservers(价值储备者)。
规范
纠缠代币合约实现了 ERC-721,但附加了一个限制,即它仅在合约部署时铸造正好两个代币:一个 tokenId
为 0
,另一个 tokenId
为 1
。 纠缠代币合约还实现了一个智能合约钱包,可以由这两个代币的所有者进行操作。
此外,还应添加一个 tokenTransfer
函数,以便允许代币所有者与合约/NFT 本身拥有的 ERC-20 代币进行交易。 函数签名如下:
function tokenTransfer(IERC20 token, address recipient, uint256 amount) public onlyOwners;
原理
我们决定扩展 ERC-721(ERC-1155 也有可能),因为这的主要目的是与当前的市场平台兼容。 这些纠缠的 NFT 将在市场上列出,购买它的用户将有可能与钱包属性(同质化和非同质化代币)进行交易。
向后兼容性
没有向后兼容性问题。
参考实现
在合约构造函数中铸造两个,并且只有两个代币,并将 minted
属性设置为 true:
bool private _minted;
constructor(string memory name, string memory symbol, string memory base_uri) ERC721(name, symbol) {
baseUri = base_uri;
_mint(msg.sender,0);
_mint(msg.sender,1);
_minted = true;
}
function _mint(address to, uint256 tokenId) internal virtual override {
require(!_minted, "ERC4950: already minted");
super._mint(to, tokenId);
}
添加额外的函数,以允许两个 NFT 用户所有者使用合约拥有的其他 ERC-20 代币进行操作:
modifier onlyOwners() {
require(balanceOf(msg.sender) > 0, "Caller does not own any of the tokens");
_;
}
function tokenTransfer(IERC20 token, address recipient, uint256 amount) public onlyOwners {
token.transfer(recipient, amount);
}
安全考虑
没有安全方面的考虑。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Víctor Muñoz (@victormunoz), Josep Lluis de la Rosa (@peplluis7), Easy Innova (@easyinnova), "ERC-4950: 纠缠代币 [DRAFT]," Ethereum Improvement Proposals, no. 4950, March 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-4950.