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

简介:  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]);

目录
打赏
0
0
0
0
36
分享
相关文章
如何巧用索引优化SQL语句性能?
本文从索引角度探讨了如何优化MySQL中的SQL语句性能。首先介绍了如何通过查看执行时间和执行计划定位慢SQL,并详细解析了EXPLAIN命令的各个字段含义。接着讲解了索引优化的关键点,包括聚簇索引、索引覆盖、联合索引及最左前缀原则等。最后,通过具体示例展示了索引如何提升查询速度,并提供了三层B+树的存储容量计算方法。通过这些技巧,可以帮助开发者有效提升数据库查询效率。
949 2
基于SpringBoot+Vue+uniapp微信小程序的在线考试系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的在线考试系统的详细设计和实现
167 2
拥抱Knative, 合思加速Serverless化演进实践
合思信息基于阿里云容器服务Knative, 实现Serverless化演进的最佳实践。
拥抱Knative, 合思加速Serverless化演进实践
NFT数字藏品平台的基本原理和开发过程
NFT 数字藏品平台是一个数字化的收藏品交易平台,使收藏品的交易和管理更加方便和透明。为了实现数字藏品平台的功能,需要有一个稳定、可靠、高效的技术架构。本文将介绍数字藏品平台开发的技术架构,以便了解 NFT数字藏品平台的基本原理和开发过程。
数字藏品开发原理丨鲸探幻核数字藏品系统开发功能分析
数字藏品借助区块链技术推动文化产业创新,实现传统文化的活化与商业价值提升。中国在NFT领域展现出合规、自主研发、大规模用户、合作传承和低碳环保的优势。NFT核心价值在于数字内容资产化、确权保障及去中心化交易,提升创作者权益。区块链技术确保数字藏品的唯一性、真实性和交易效率,促进版权保护和市场流通,打造活跃的创作交流平台。
NGINX环境下实现Web网站访问控制的实战指南
在NGINX中设置基于IP的访问控制可提升网站安全性。步骤包括安装NGINX、备份配置文件、编辑`/etc/nginx/sites-available/default`,添加`allow`和`deny`指令限制特定IP访问,如`allow 192.168.1.100; deny all;`,然后测试配置并重启服务。成功后,仅允许的IP能访问网站,否则会收到403错误。这为Web安全提供基础保障,还可扩展实现更多高级控制策略。【6月更文挑战第20天】
1050 3
js 排序—— sort() 对普通数组、对象数组(单属性/多属性)排序
js 排序—— sort() 对普通数组、对象数组(单属性/多属性)排序
139 0
阿里云服务器价格表(2023新版报价)
阿里云服务器1核1G1M优惠价17.49元3个月,251.86元一年、2核4G1M带宽40.98元3个月,590.11元一年、4核8G服务器73.38元3个月,1056.67元一年、8核16G配置138.18元3个月,1989.79元一年、8核32G服务器1M带宽214.50元3个月,3088.80元一年
12120 1
阿里云服务器价格表(2023新版报价)

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问