什么是数字藏品系统开发方案丨数字藏品系统开发(成熟案例及源码)

简介:  function swapExactETHForTokens(uint amountOutMin,address[]calldata path,address to,uint deadline)

  基于区块链的数字藏品具备唯一性、不可分割、不可篡改、可验证、稀缺性等技术特性:

  (1)唯一性:每个数字藏品在特定链上都具备唯一标识,可以代表数字或现实世界中的某个资产对象。

  (2)不可分割:每个数字藏品自身都不可分割,可代表特定的数字藏品。

  (3)不可篡改:基于区块链不可篡改的特性,使得数字藏品本身属性及所有权信息、历史交易记录等信息在抗篡改的链式数据结构中存储记录。

  (4)可验证:区块链上信息公开透明,所有用户均可查询、验证数字藏品的所有权信息。

  (5)稀缺性:互联网时代,信息复制门槛低,价值难受到认可。而区块链数字藏品独一无二、权属明确,可永久保存,具备稀缺性,让基于区块链的数字藏品有更强的溢价能力。

  wapExactETHForTokens

  代码速浏览

  function swapExactETHForTokens(uint amountOutMin,address[]calldata path,address to,uint deadline)

  external

  virtual

  override

  payable

  ensure(deadline)

  returns(uint[]memory amounts)

  {

  require(path[0]==WETH,'UniswapV2Router:INVALID_PATH');

  amounts=UniswapV2Library.getAmountsOut(factory,msg.value,path);

  require(amounts[amounts.length-1]>=amountOutMin,'UniswapV2Router:INSUFFICIENT_OUTPUT_AMOUNT');

  IWETH(WETH).deposit{value:amounts[0]}();

  assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory,path[0],path[1]),amounts[0]));

  _swap(amounts,path,to);

  }

  参数分析

  函数swapExactETHForTokens的入参有4个,出参有1个,对应的解释如下:

  function swapExactETHForTokens(

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

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

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

  uint deadline//过期时间

  )external virtual override payable ensure(deadline)returns(

  uint[]memory amounts//交易期望数量列表

  ){

  函数swapExactETHForTokens和函数swapExactTokensForTokens的逻辑几乎一样,只是把支付精确数量的token换成了支付精确数量的ETH。因此多了一些和ETH相关的额外操作。

  实现分析

  ...

  //检查交易是否过期

  ensure(deadline)

  {

  //检查path[0]是否为WETH地址

  require(path[0]==WETH,'UniswapV2Router:INVALID_PATH');

  //获取path列表下,支付amountIn数量的path[0]代币,各个代币交易的预期数量

  amounts=UniswapV2Library.getAmountsOut(factory,msg.value,path);

  //如果最终获得的代币数量小于amountOutMin,则交易失败

  require(amounts[amounts.length-1]>=amountOutMin,'UniswapV2Router:INSUFFICIENT_OUTPUT_AMOUNT');

  //把用户支付的ETH换成WETH

  IWETH(WETH).deposit{value:amounts[0]}();

  //将amounts[0]数量的WETH代币从Router中转移到path[0],path[1]的流动池

  assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory,path[0],path[1]),amounts[0]));

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

  _swap(amounts,path,to);

  总结

  此函数一般用于出售确定数量的ETH,获得不确定数量代币。

  swapTokensForExactETH

  代码速浏览

  function swapTokensForExactETH(uint amountOut,uint amountInMax,address[]calldata path,address to,uint deadline)

  external

  virtual

  override

  ensure(deadline)

  returns(uint[]memory amounts)

  {

  require(path[path.length-1]==WETH,'UniswapV2Router:INVALID_PATH');

  amounts=UniswapV2Library.getAmountsIn(factory,amountOut,path);

  require(amounts[0]<=amountInMax,'UniswapV2Router:EXCESSIVE_INPUT_AMOUNT');

  TransferHelper.safeTransferFrom(

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

  );

  _swap(amounts,path,address(this));

  IWETH(WETH).withdraw(amounts[amounts.length-1]);

  TransferHelper.safeTransferETH(to,amounts[amounts.length-1]);

  参数分析

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

  function swapTokensForExactETH(

  uint amountOut,//交易获得的代币数量

  uint amountInMax,//交易支付代币的最多数量

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

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

  uint deadline//过期时间

  )external virtual override ensure(deadline)returns(

  uint[]memory amounts//交易期望数量列表

  ){

  函数swapTokensForExactETH和函数swapExactETHForTokens相比,仅交换了一下代币的交易顺序,执行逻辑还是差不多的。

  实现分析

  ...

  //检查交易是否过期

  ensure(deadline)

  {

  //检查path[path.length-1]是否为WETH地址

  require(path[path.length-1]==WETH,'UniswapV2Router:INVALID_PATH');

  //获取path列表下,获得amountOut数量的path[path.length-1]代币,各个代币交易的预期数量

  amounts=UniswapV2Library.getAmountsIn(factory,amountOut,path);

  //如果最终获得的代币数量小于amountOutMin,则交易失败

  require(amounts[0]<=amountInMax,'UniswapV2Router:EXCESSIVE_INPUT_AMOUNT');

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

  TransferHelper.safeTransferFrom(

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

  );

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

  _swap(amounts,path,address(this));

  //将WETH换成ETH

  IWETH(WETH).withdraw(amounts[amounts.length-1]);

  //把ETH发送给to地址

  TransferHelper.safeTransferETH(to,amounts[amounts.length-1]);

相关文章
|
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
|
6月前
|
区块链
数字藏品开发原理丨鲸探幻核数字藏品系统开发功能分析
数字藏品借助区块链技术推动文化产业创新,实现传统文化的活化与商业价值提升。中国在NFT领域展现出合规、自主研发、大规模用户、合作传承和低碳环保的优势。NFT核心价值在于数字内容资产化、确权保障及去中心化交易,提升创作者权益。区块链技术确保数字藏品的唯一性、真实性和交易效率,促进版权保护和市场流通,打造活跃的创作交流平台。
|
前端开发 安全 JavaScript
NFT数字藏品平台的基本原理和开发过程
NFT 数字藏品平台是一个数字化的收藏品交易平台,使收藏品的交易和管理更加方便和透明。为了实现数字藏品平台的功能,需要有一个稳定、可靠、高效的技术架构。本文将介绍数字藏品平台开发的技术架构,以便了解 NFT数字藏品平台的基本原理和开发过程。
|
存储 安全 物联网
浅谈分析数字藏品系统开发详细功能及案例
浅谈分析数字藏品系统开发详细功能及案例
|
存储 安全 区块链
数字藏品系统源码开发搭建价值讲解
数字藏品采用区块链技术生成,可用来收藏、社交和投资。但国内的数字藏品行业现象较乱,信息差直接影响着盈利的空间。数字藏品系统是用来展示、交易数字藏品的系统平台,源码开发有什么意义吗?
|
算法 安全 区块链
NFT数字藏品系统开发技术方案详细
数字藏品,是NFT的一种应用形式,目前网络上所说的数字藏品、NFT、NFR,都是数字藏品的一种称呼方式。而NFR或者NFR数字藏品,则是国内对NFT本地化的一种新称呼,去除了NFT的代币属性。数字藏品是一种数字化资产。音乐、门票、潮玩、卡牌、画作、摄影作品、GIF动图、表情包等等都可以做数字藏品。
iBox数字藏品系统开发案例需求分析
数字藏品系统是一个数字化的藏品管理系统,用于帮助用户和展示她们的藏品。
|
数据采集 测试技术 数据处理
数字藏品系统开发需求分析(源码部署)
数字藏品系统是一种基于数字技术的文化遗产保护和传承方式,它可以将文物、艺术品、历史文献等珍贵文化资源数字化,实现数字化保存、展示、研究和传播。数字藏品系统的开发需要以下步骤:
|
区块链
数字藏品系统开发(项目及详情)丨NFT数字藏品系统开发(成熟及案例)
  智能合约(Smart contract)是依托计算机在网络空间运行的合约,它以信息化方式传播、验证或执行合同,由计算机读取、执行,具备自助的特点。而区块链的去中心化,数据的防篡改,决定了智能合约更加适合于在区块链上来实现