【源码解读】以太坊新标准EIP-4907是怎样实现NFT租赁的?

这篇具有很好参考价值的文章主要介绍了【源码解读】以太坊新标准EIP-4907是怎样实现NFT租赁的?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前菜

内容概要

在这周,NFT 租赁市场 Double Protocol 提交的可租赁 NFT 标准“EIP-4907”通过了以太坊开发团队的最终审核,成为第 30 个 ERC 标准“Final”的状态。

让我们一起来阅读这极简的源代码,来缕清其他是如何实现NFT租赁的?

目录大纲

1. 为什么需要租赁?
2. 源码解读
    2.1 实现原理&数据结构
    2.2 设置用户
    2.3 查询用户&过期时间
    2.4 租赁关系的强制性设计
3. 总结


为什么需要租赁?

NFT 的爆发毋庸置疑,而伴随普及引发了对其资产实用性的需求,尤其是在元宇宙和边玩边赚 (P2E) 的场景下,仅仅单纯的资产所有权并不足以支撑更多的应用玩法的诞生。

一直的痛点是供给不平衡,导致的好项目少,浮于金融玩法的韭菜项目多,既然如今web3有大量web2行业精英在涌入,也必然需要快速的新标准推出,来将创造力的供给释放。

NFT流动性的紧缺,使得他风风火火的同时也备受诟病,他之前产权一体化的金融化操作,市场各类安全问题欺诈、剽窃、钓鱼、跑路、资产被盗层出不穷。

而Eip-4907,想要解决的就是分离NFT的资产价值和使用价值,释放出NFT的市场流动性

源码解读

由于Eip4907极其简单,因此对代码的解读无论是否技术同学均可来尝试理解其细节设计。

2.1 、实现原理:

他作为 ERC-721 的扩展, EIP-4907 增加了一个变量UserInfo,让应用可以查询此NFT当前被租出去的目标地址“user”和出租时间”expires"。如果发现已经超出出租时间,则租赁关系宣告失效。

代码极为简单仅有72行,使用这个标准,就是在原来的ERC721之上新增

  • 1个事件(用于通知链下应用称为事件)

  • 3个方法(用于实现链上数据管理功能)

分别是

  • UpdateUser 事件:当NFT转移,租赁校色设置时,发出租赁用户改变的通知

  • setUser 方法:NFT所有者授权者可用,设置此NFTID的出租用户和过期时间

  • userOf 方法:任何人可用,查询此NFTID的出租用户

  • userExpires 方法:任何人可用,查询此NFTID的过期时间

2.1 、数据结构:

理解ERC标准协议的最佳方式就是理解他管理数据的最底层数据结构

例如:前文【源码解读】你买的NFT到底是什么?

其实NFT只是通过2个映射(_owners,_balances),即一种字典形式的key-value对应关系的存储结构去记录数据


mapping(uint256 => address)  _owners;// 记录每一个NFTID当前对应的所有者地址
mapping(address => uint256)  _balances; //记录了当前所有者总计持有的NFT数量

而Eip-4907则是新增了一个数据对象UserInfo 在所有权的概念之外增加“用户”的维度


struct UserInfo     {
        address user;   // 用户地址
        uint64 expires; //用户到期时间
    }

数据结构简单,就意味着管理的方法实现也非常简单

2.2、设置用户setUser 方法

设置用户仅有3个步骤

  • 【审计】此交易的发起者其是否持有此NFTid或是有Approved自动扣款权利
  • 【设置】设置UserInfo中用户的用户地址和到期时间
  • 【通知】发出设置成功的UpdateUser事件

function setUser(uint256 tokenId, address user, uint64 expires) public virtual{
  require(_isApprovedOrOwner(msg.sender, tokenId),"ERC721: transfer caller is not owner nor approved");
  UserInfo storage info =  _users[tokenId];//新增存储登记信息
  info.user = user;   
  info.expires = expires;
  emit UpdateUser(tokenId,user,expires); //发出事件通知链下应用
}

2.3、查询NFTid的用户信息

媒体处处宣传的超时自动失效,而无需二次链上交易登记失效节约gas的逻辑就在这了。

查询的逻辑很简单,按指定的NFTID查询 _users的user信息即可,但他增加了,if判断,当前块的时间block.timestamp 是否会超过设置的过期时间expires,所以此查询仅在时间内有效。


function userOf(uint256 tokenId)public view virtual returns(address){
  if( uint256(_users[tokenId].expires) >=  block.timestamp){
      return  _users[tokenId].user; 
  };//执行此函数,在未到期的情况下,返回此ID的当前用户地址
  else{return address(0);
  }//到期情况下,则返回0地址,意未占用
}

2.3、查询NFTid的用户过期时间信息

此处无需类似user查询时候判断是否过期,因为得知上一次过期时间,也是加快NFT用户使用率的一种方式。


function userExpires(uint256 tokenId) public view virtual returns(uint256){
        return _users[tokenId].expires;//执行此函数,返回此ID的用户过期时间
    }

2.4、租赁关系的强制性设计

此eip4907的协议,对标准交易方法Transfer 增加了一部分内容,通过_beforeTokenTransfer 实现,就是强制在进行Transfer交易转移后就删除掉这部分对用户的信息,并且发出事件通知已经用户失效了。


function _beforeTokenTransfer(address from,address to,uint256 tokenId
) internal virtual override{
        super._beforeTokenTransfer(from, to, tokenId);
        //当交易不是自己转自己的情况下,如果有设置“用户”则删除他
        if (from != to && _users[tokenId].user != address(0)) {
            delete _users[tokenId];// 删除用户信息
            emit UpdateUser(tokenId, address(0), 0);// 发出事件通知已删除
        }
    }

总结

没想到吧,这么快就代码讲完了,因为确实他写完了,对的,不像是之前的通过限制转移权的方法EIP-5058,见前文【EIP-5058 能否防止NFT项目方提桶跑路?】

其实他EIP-4907只是多了个变量,并称之为租赁用户而已,可以声明,但是其他应用认不认就是另一码事了,毕竟其强制性有限,转移就能强行终止出租授权

当然你或许会问,为什么这么简单反而火速成为了难得一见,且每次都能掀起一番波浪的Final标准呢?

这也就是web3的哲学:越简单,越优雅,剩下的交给共识。

我个人认可这样的哲学与趋势

web3过去爆发或是得益于金融操作,但是好的生态不能只是金融价值,还需要更有商业价值,需要更广大的用户融入于生活生产形成价值闭环,货币终究只是手段而不是目的本身

引用:

https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4907.md

写在最后:

前文回顾

【解密】OpenSea免费创造的NFT都没上链竟能出现在我的钱包里?

【源码解读】你买的NFT到底是什么?

EIP-5058 能否防止NFT项目方提桶跑路?

当我们在看Etherscan的时候,到底在看什么?

当奈飞的NFT忘记了web2的业务安全

欢迎各位同学从后台提交有趣的合约或交易哈希。

关注十四,用技术的眼光发现价值。

看到这里,帅气的你不点个赞吗?

 文章来源地址https://www.toymoban.com/news/detail-812135.html

到了这里,关于【源码解读】以太坊新标准EIP-4907是怎样实现NFT租赁的?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PLX31-EIP-MBTCP 以太网/IP到Modbus TCP/IP

    ProSoft Technology的EtherNet/IP to Modbus TCP/IP通信网关允许在支持EtherNet/IP的控制器或设备与Modbus TCP/IP控制器或设备之间进行高速双向数据传输。 我们的Modbus TCP/IP驱动程序具有多种客户端和服务器功能,可实现更快的数据传输。此外,该网关还包括几个功能,包括数据优先级,可以

    2024年02月06日
    浏览(49)
  • 以太坊区块链ERC-721协议的实现(NFT代币标准)

    ERC-721是以太坊区块链上用于NFT(非同质化代币)的一个标准,是一种其他开发人员都遵守的模板或者格式,用于创建代表数字资产的独特代币,并且每个ERC-721代币都是独一无二的。使用统一的标准可以使合约代码变得更简单,复用性更强。ERC-721的出现促进了NFT的创建,并在

    2024年02月04日
    浏览(56)
  • xilinx rdma实现100G以太网开发笔记,支持标准ROCE V2协议,与PC大带宽通信,支持麦乐斯全系列网卡

    背景 随着现代存储需求越来越快,对数据的传输要求也越来越高,万兆网还未普及,100G以太网需求就已经出现了,实现这种方案主要还是通过FPGA或者ASIC的方式。 RDMA作为100G以太网解决方案的一个重要选择,关于RDMA的概念可参考博客https://blog.csdn.net/bandaoyu/article/details/11285

    2024年02月12日
    浏览(49)
  • 以太坊数字资产的发行和流通:以太坊上的数字资产定义、ERC 20代币合约标准、ERC 20标准接口、ERC 721代币合约标准、

    以太坊设计的目标就是让各种数字资产能以智能合约的形式运行在以太坊虚拟机上。目前,众多智能合约中最广泛应用的是代币合约(Token Contract)。是负责管理账户以及其拥有的代币的智能合约,实质可以理解为一张账户地址和对应账户代币余额的映射表。 即:代币可以被

    2023年04月11日
    浏览(54)
  • 以太坊中nonce深入解读

    目录 前言 用户事务nonce 从一个集群的AB节点试验说起。 总结 区块nonce 参考 以太坊中的主要有2类nonce,一类是和矿工比较密切的区块nonce,即挖矿时使用;另一类和普通使用提交提交的关系比较密切的用户事务nonce。 为了防⽌交易重播,ETH节点要求每笔交易必须有⼀个nonce数

    2024年02月10日
    浏览(46)
  • 一文解读无人配送标准进展 | 标准解读系列之十二

    关注公号回复“221123”可提供相关标准原文下载 文 | 吴冬升 全文 5 4 00 ,预计阅读 14 分钟 (一)无人配送标准整体情况  无人配送服务类标准方面 ,2020年3月10日,中国贸促会商业行业委员会发布了 《T/CCPITCSC 042-2020 无接触配送服务规范》 团体标准。2020年11月19日, 《GB/

    2024年02月05日
    浏览(40)
  • 【好书精读】网络是怎样连接的 —— IP 与以太网的包收发操作

     ( 该图由AI制作 ) 目录 包的基本知识 包收发操作概览 生成包含接收方 IP 地址的 IP 头部 生成以太网用的 MAC 头部 通过 ARP 查询目标路由器的 MAC 地址 以太网的基本知识 将 IP 包转换成电或光信号发送出去 给网络包再加 3 个控制数据 向集线器发送网络包 接收返回包 将服务

    2024年02月11日
    浏览(44)
  • go中读写锁(rwmutex)源码解读实现原理

    1、RWMutex读写锁的概念 读写锁也就是我们所使用的RWMutex,其实是对于go本身的mutex做的一个拓展,当一个goroutine获得了读锁后,其他goroutine同样可以获得读锁,但是不能获得写锁。相反,当一个goroutine获得了写锁,其他goroutine既不能读也不能写,互斥的概念。 2、使用场景 适

    2024年02月11日
    浏览(42)
  • 万字解读|怎样激活 TDengine 最高性价比?

    不知不觉间,TDengine 已经 6 岁多了。在这 6 年多的时间里,我们从零开始,在一行又一行代码的淬炼下,TDengine 从 1.6 走过 2.0,终于走到如今的 3.0 时代。 自 2022 年下旬发布以来,经过我们不断地打磨优化之后,TDengine 3.0 在性能、功能、稳定性各个方面均有大幅提升,已经

    2024年02月07日
    浏览(46)
  • 法规标准-EU 2021-646标准解读

    EU 2021-646全称为关于机动车紧急车道保持系统(ELKS)型式认证统一程序和技术规范,其中主要描述了对认证ELKS系统所需的功能要求及性能要求 1.应急车道保持系统(ELKS)应包括车道偏离警告系统(LDWS)和纠正方向控制功能(CDCF) 2.该系统的设计应尽量减少对驾驶员预期操作

    2023年04月27日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包