NFT数字藏品开发功能丨NFT数字藏品系统开发成熟技术丨NFT数字藏品系统源码详细

简介: 什么是dApp和Web3应用?  如果不提及dApp,关于Web3的讨论就不会完整。简而言之,dApp或去中心化应用程序是Web3革命的支柱。术语“Web3应用程序”、“Web3应用程序”、“去中心化应用程序”、“dApps”或“Web3 dApps”在很大程度上都是同义词。它们都指作为Web3一部分的分散的、通常基于区块链的应用程序。

  什么是dApp和Web3应用?

  如果不提及dApp,关于Web3的讨论就不会完整。简而言之,dApp或去中心化应用程序是Web3革命的支柱。术语“Web3应用程序”、“Web3应用程序”、“去中心化应用程序”、“dApps”或“Web3 dApps”在很大程度上都是同义词。它们都指作为Web3一部分的分散的、通常基于区块链的应用程序。

  那么,什么是Web3应用程序?许多dApp或Web3应用程序的一个组成部分是所谓的“智能合约”。有区块链技术经验的人可能熟悉智能合约的概念。智能合约本质上是自动执行的软件协议,是在以太坊区块链等区块链上运行的代码片段。这些会自动“运行”,或在满足一组相关条款时执行。因此,这些“合约”可以自动验证和执行不同方之间的交易。

  内部函数(仅供合约内部调用)

  _swapSupportingFeeOnTransferTokens

  代码速浏览

  function _swapSupportingFeeOnTransferTokens(address[]memory path,address _to)internal virtual{

  for(uint i;i<path.length-1;i++){
  (address input,address output)=(path<i>,path[i+1]);

  (address token0,)=UniswapV2Library.sortTokens(input,output);

  IUniswapV2Pair pair=IUniswapV2Pair(UniswapV2Library.pairFor(factory,input,output));

  uint amountInput;

  uint amountOutput;

  {

  (uint reserve0,uint reserve1,)=pair.getReserves();

  (uint reserveInput,uint reserveOutput)=input==token0?(reserve0,reserve1):(reserve1,reserve0);

  amountInput=IERC20(input).balanceOf(address(pair)).sub(reserveInput);

  amountOutput=UniswapV2Library.getAmountOut(amountInput,reserveInput,reserveOutput);

  }

  (uint amount0Out,uint amount1Out)=input==token0?(uint(0),amountOutput):(amountOutput,uint(0));

  address to=i<path.length-2?UniswapV2Library.pairFor(factory,output,path[i+2]):_to;

  pair.swap(amount0Out,amount1Out,to,new bytes(0));

  参数分析

  函数swapETHForExactTokens的入参有2个,出参有0个,对应的解释如下:

  function _swapSupportingFeeOnTransferTokens(

  address[]memory path,//交易路径列表

  address _to//交易获得的token发送到的地址

  )internal virtual{

  函数_swapSupportingFeeOnTransferTokens相比函数_swap为了支持path中有交易后可变数量的代币,不需要输入amounts,但需要额外做一些操作。

  实现分析

  ...

  {

  //循环交易路径列表

  for(uint i;i<path.length-1;i++){

  //从path中取出input和output

  (address input,address output)=(path<i>,path[i+1]);

  //从input和output中算出谁是token0

  (address token0,)=UniswapV2Library.sortTokens(input,output);

  //获得input,output的流动池

  IUniswapV2Pair pair=IUniswapV2Pair(UniswapV2Library.pairFor(factory,input,output));

  uint amountInput;

  uint amountOutput;

  {

  //获取流动池库存reserve0,reserve1

  (uint reserve0,uint reserve1,)=pair.getReserves();

  //如果input==token0,那么(reserveInput,reserveOutput)就是(reserve0,reserve1);反之则相反

  (uint reserveInput,uint reserveOutput)=input==token0?(reserve0,reserve1):(reserve1,reserve0);

  //amountInput等于流动池余额减去reserveInput

  amountInput=IERC20(input).balanceOf(address(pair)).sub(reserveInput);

  //获取amountOutput

  amountOutput=UniswapV2Library.getAmountOut(amountInput,reserveInput,reserveOutput);

  }

  //如果input==token0,那么amount0Out就是0,amount1Out就是amountOut;反之则相反

  (uint amount0Out,uint amount1Out)=input==token0?(uint(0),amountOutput):(amountOutput,uint(0));

  //如果这是最后的一笔交易,那么to地址就是_to,否则to地址是下一笔交易的流动池地址

  address to=i<path.length-2?UniswapV2Library.pairFor(factory,output,path[i+2]):_to;

  //执行input和output的交易

  pair.swap(amount0Out,amount1Out,to,new bytes(0));

  总结

  可以看到,因为没有amounts,需要使用流动池余额减去库存来计算amountInput。

  外部函数(仅供合约外部调用)

  swapExactTokensForTokensSupportingFeeOnTransferTokens

  代码速浏览

  function swapExactTokensForTokensSupportingFeeOnTransferTokens(

  uint amountIn,

  uint amountOutMin,

  address[]calldata path,

  address to,

  uint deadline

  )external virtual override ensure(deadline){

  TransferHelper.safeTransferFrom(

  path[0],msg.sender,UniswapV2Library.pairFor(factory,path[0],path[1]),amountIn

  );

  uint balanceBefore=IERC20(path[path.length-1]).balanceOf(to);

  _swapSupportingFeeOnTransferTokens(path,to);

  require(

  IERC20(path[path.length-1]).balanceOf(to).sub(balanceBefore)>=amountOutMin,

  'UniswapV2Router:INSUFFICIENT_OUTPUT_AMOUNT'

  参数分析

  函数swapExactTokensForTokensSupportingFeeOnTransferTokens的入参有5个,出参有0个,对应的解释如下:

  function swapExactTokensForTokensSupportingFeeOnTransferTokens(

  uint amountIn,//交易支付代币数量

  uint amountOutMin,//交易获得代币最小值

  address[]calldata path,//交易路径列表

  address to,//交易获得的token发送到的地址

  uint deadline//过期时间

  )external virtual override ensure(deadline){

  函数swapExactTokensForTokensSupportingFeeOnTransferTokens相比函数swapExactTokensForTokens,少了amounts,因为交易后可变数量的代币不能做amounts的预测。

  实现分析

  ...

  //检查交易是否过期

  ensure(deadline)

  {

  //将amountIn数量的path[0]代币从用户账户中转移到path[0],path[1]的流动池

  TransferHelper.safeTransferFrom(

  path[0],msg.sender,UniswapV2Library.pairFor(factory,path[0],path[1]),amountIn

  );

  //记录to地址path[path.length-1]代币的余额

  uint balanceBefore=IERC20(path[path.length-1]).balanceOf(to);

  //按path列表执行交易集合

  _swapSupportingFeeOnTransferTokens(path,to);

  //如果to地址获得的代币数量小于amountOutMin,交易失败

  require(

  IERC20(path[path.length-1]).balanceOf(to).sub(balanceBefore)>=amountOutMin,

  'UniswapV2Router:INSUFFICIENT_OUTPUT_AMOUNT'

  );

  }

  该函数适用于支付确定数量的代币,获得不定数量的代币,且在path路径列表中有交易后数量可变的代币。

相关文章
|
4月前
|
移动开发 小程序 UED
iBox系统系统开发iBox数字藏品电商平台开发之藏品交易部分源码
1.数字作品上传管理,2.数字作品发放规则3.作品共识版权唯一标识4.实名认证体系5.藏品品合成体系6.盲盒系统配置管理7.二级市场管理监督等系统功能8.藏品预约抢购机制等以下是iobx电商系统藏品交易的部分源码classPayextendsBaseApi{public$ibox_config;publicfunction__construct($params=[]){parent::__construct($params);$config=newConfigService();$this->shop_config=$confi
|
小程序 安全 物联网
nft数字藏品交易平台开发(nft数字艺术品交易平台搭建)
nft数字藏品交易平台开发(nft数字艺术品交易平台搭建)
|
算法 安全 区块链
NFT数字藏品系统开发技术方案详细
数字藏品,是NFT的一种应用形式,目前网络上所说的数字藏品、NFT、NFR,都是数字藏品的一种称呼方式。而NFR或者NFR数字藏品,则是国内对NFT本地化的一种新称呼,去除了NFT的代币属性。数字藏品是一种数字化资产。音乐、门票、潮玩、卡牌、画作、摄影作品、GIF动图、表情包等等都可以做数字藏品。
|
存储 编解码 人工智能
数字藏品APP开发 | 国内NFT交易平台搭建
数字藏品是利用区块链技术识别权益归属的数字作品、艺术品和商品。数字藏品可以在区块链网络中标记其拥有者并追溯其后续流通,包括但不限于数字图片、音乐、视频、电子门票、数字纪念品等形式。 而数字藏品App是一种基于移动端的应用软件,为用户提供数字化的收藏品展示、管理以及交流共享服务。 简单来说,数字藏品APP系统开发就是通过区块链技术确认权利,可以追溯和流通的数字作品或商品。数字藏品就技术特性而言,与流行的NFT没有区别。主要使用ERC-721标准。 二、我国数字藏品有哪些特点? 与国外NFT大多建立在公链上不同,在我国法律规则下,数字藏品需要基于联盟区块链技术生成和分发,其炒作属性要严格控
|
存储 JSON 算法
DAPP/NFT数字藏品拍卖系统开发详细逻辑,NFT/DAPP数字藏品拍卖系统开发案例项目及源码
  数据层我们可以理解成数据库,只不过对于区块链来讲,这个数据库是不可篡改的、分布式的数据库,也就是我们所谓的“分布式账本”在数据层上,也就是在这个“分布式账本”上,存放着区块链上的数据信息,封装着区块的块链式结构、非对称加密技术、哈希算法等技术手段,来保证数据在全网公开的情况下的安全性问题。
|
区块链
数字藏品系统开发(项目及详情)丨NFT数字藏品系统开发(成熟及案例)
  智能合约(Smart contract)是依托计算机在网络空间运行的合约,它以信息化方式传播、验证或执行合同,由计算机读取、执行,具备自助的特点。而区块链的去中心化,数据的防篡改,决定了智能合约更加适合于在区块链上来实现
|
边缘计算 人工智能 5G
NFT盲盒/数字藏品系统开发详细及分析,NFT数字藏品/盲盒系统开发案例及源码
  Web3.0通过将信息交互从屏幕转移到物理空间,改变了终端用户体验,因而也有称Web3.0为“空间网络(Spatial Web)”。该“空间网络”包括空间交互层(利用智能眼镜或语音等实现实时信息交互)、数字信息层(借助传感和数字映射为每一个对象创建数字孪生)和物理层(通过感观了解和体验的世界)。
|
监控 机器人 5G
NFT盲盒数字藏品系统开发(详细及逻辑)丨NFT数字藏品盲盒系统开发(方案及流程)
 5G技术可以为智能制造提供高速、可靠的通信和数据传输服务,实现智能化制造和远程控制。例如,在汽车生产中,使用5G技术可以实现对生产线上机器人的远程控制和监控,提高生产效率和安全性。
|
容器
数字藏品开发(源码版)丨NFT数字藏品系统开发(开发需求)丨NFT数字藏品开发方案
  Each digital collection platform generally defines digital collections as a kind of virtual cultural goods with limited distribution,including but not limited to digital paintings,pictures,music,videos,3D models,and other forms.It uses blockchain technology to record the process of rights confirma