0x01 ERC4907 是什么
ERC4907 是近期以太坊社区刚刚通过的 NFT 租赁协议。他作为 ERC-721 的扩展, EIP-4907 增加了一个变量 UserInfo,让应用可以查询此 NFT 当前被租出去的目标地址 user 和出租时间 expires 。如果发现已经超出出租时间,则租赁关系宣告失效。
这个协议的接口非常简单,只有三个接口方法和一个事件,如下所示:
interface IERC4907 {
/// 给 NFT 分配新租户或租期到期时会触发该 UpdateUser 事件
/// Logged when the user of a token assigns a new user or updates expires
/// @notice Emitted when the `user` of an NFT or the `expires` of the `user` is changed
/// The zero address for user indicates that there is no user address
event UpdateUser(uint256 indexed tokenId, address indexed user, uint64 expires);
/// 给一个 NFT 设置租户和到期时间
/// @notice set the user and expires of a NFT
/// @dev The zero address indicates there is no user
/// Throws if `tokenId` is not valid NFT
/// @param user The new user of the NFT
/// @param expires UNIX timestamp, The new user could use the NFT before expires
function setUser(uint256 tokenId, address user, uint64 expires) external ;
/// 通过 id 获取某个 NFT 的租户
/// @notice Get the user address of an NFT
/// @dev The zero address indicates that there is no user or the user is expired
/// @param tokenId The NFT to get the user address for
/// @return The user address for this NFT
function userOf(uint256 tokenId) external view returns(address);
/// 通过 id 获取某个 NFT 的租约到期时间
/// @notice Get the user expires of an NFT
/// @dev The zero value indicates that there is no user
/// @param tokenId The NFT to get the user expires for
/// @return The user expires for this NFT
function userExpires(uint256 tokenId) external view returns(uint256);
}
0x02 协议之内与协议之外
协议之内定义了什么:
- 从此一个 NFT 资产可以有两类用户了,一个是产权所有者 Owner,一个是租户 User
- 协议从底层支持了对租赁关系的确定,在 Code is Law 的世界,相当于在法律层面确立了资产的租赁属性
- 协议对租期有了明确的规定,每份租赁关系都要有明确的结束时间
是不是有了这个东西,大家不需要做什么,直接用就好了呢?
想一下,如果你有套房子,你会随便找个路人给他说这房子租给你了么?从房子可以租到房子真正租出去,中间有个非常非常大的一个空白地带。
协议之外的留白:
- 协议没有确定租户是什么样的,比如出租房屋的时候很多时候都会限定租户有正当职业,无不良嗜好啥的
- 协议没有确定租户从哪里来
- 协议没确定如何付费
这些留白也许会催生出一个巨大的租赁中介市场。
网友评论