读到double.one团队开发的EIP4907,实现了NFT的无抵押租赁,觉得挺有用的。EIP4907文档写的很好,认真读下面这两个链接,基本上就明白了它的原理。
https://medium.com/double-protocol/3-steps-of-making-nfts-rentable-1-8d8f82485706#576a
https://ethereum-magicians.org/t/eip4907-erc-721-user-and-expires-extension/8572
本文尝试为EIP4907补充一个科普式的场景描述,帮助读者理解NFT的所有权和使用权。
所有权和使用权
EIP4907是在ERC721的基础上做了一个扩展,核心是增加了一个“租户”角色。具体的代码实现如下:
使用EIP4907这个NFT合约模板发行NFT,除了有owner(拥有者)外,还可以设置User(使用者)。
owner角色就是持有该NFT的地址,只有使用该地址的私钥签名才能调用transfer函数将该NFT转让给其他地址。这就是所有权的具体含义。
User也是一个ETH地址,这个地址可以获得NFT的使用权,但不可以对NFT调用transfer函数,无法卖出这个NFT。
NFT具体的使用权是要配合具体的项目来完成,比如NFT的staking挖矿功能,是特定的项目方开发一个合约允许用户将NFT存进来(即staking),然后项目方将自己的代币陆续释放给staking过来的NFT。
而使用权转让,就是原本staking只能将代币释放给owner地址的,现在可以让释放给user地址了。
一个符合EIP4907的NFT,owner地址就可以设置一个user地址,以允许user地址使用该NFT的一块功能。当然也可以反过来,user地址主动发起租赁,owner地址批准即可。
对于利用NFT的项目来说,对EIP4907规范的NFT就要多一个识别owner还是user的动作。
wNFT兼容ERC721
现在的ERC721标准的NFT都是没有user角色的,但EIP4907可以兼容ERC721标准的NFT。
方式是和ETH和wETH类似。
wETH本质上是开发一个合约,允许任何用户存进ETH进这个合约,合约就增发一个wETH给用户;反过来呢,就是用户存入一个wETH进合约,合约则销毁该wETH,同时还给用户一个ETH。
wNFT也可以采用同样的策略,开发一个合约托管NFT,允许用户将NFT存进合约,合约生成一个符合EIP4907规范的wNFT。wNFT就是在原NFT的基础上增加一个设置user地址的接口,其他都一样;反过来,用户可以拿wNFT做为凭证去赎回自己原来的NFT。