欢迎光临散文网 会员登陆 & 注册

BSEX交易所开发稳定版丨BSEX交易所系统开发实现技术方案及详情丨源码功能

2023-04-10 18:07 作者:bili_80700014930  | 我要投稿

  什么是DAp,pDApp应用需要满足那些条件


  什么是Dapp?


  DApp是Decentralized Application的缩写,译为:分散式的应用程序。App我们都知道,我们在智能手机上安装的应用程序也就是App。而DApp比App多了一个‘D’,‘D’的意思是分散式的。所以,它的意思是分散式的应用程序/去中心化的应用程序。


  DApp是一种互联网应用程序,与传统的App最大的区别是:DApp运行在去中心化的网络上,也就是区块链网络中。网络中不存在中心化的节点可以完整的控制DApp。


  Dapp(去中心化应用程序)是一种开源的应用程序,开发流程:I35需求7O98开发O7I8,自动运行,将其数据存储在区块链上,以密码令牌的形式激励,并以显示有价值证明的协议进行操作。


  function addLiquidityETH(//添加流动性,其中一个币种是eth


  address token,


  uint amountTokenDesired,


  uint amountTokenMin,


  uint amountETHMin,//eth最小输入量;对应的Desired在msg.value


  address to,


  uint deadline


  )external virtual override payable ensure(deadline)returns(uint amountToken,uint amountETH,uint liquidity){


  //调用内部方法_addLiquidity获取到两个币实际所需要的数量


  //eth使用weth代币替代


  (amountToken,amountETH)=_addLiquidity(


  token,


  WETH,


  amountTokenDesired,


  msg.value,//ethDesired


  amountTokenMin,


  amountETHMin


  );


  address pair=UniswapV2Library.pairFor(factory,token,WETH);//获取到pair地址


  TransferHelper.safeTransferFrom(token,msg.sender,pair,amountToken);//给pair转代币数量


  IWETH(WETH).deposit{value:amountETH}();//调用weth的兑换方法,通过eth换weth


  assert(IWETH(WETH).transfer(pair,amountETH));//给pair转weth数量


  liquidity=IUniswapV2Pair(pair).mint(to);//调用pair的mint方法,会有添加的lp数量返回


  //refund dust eth,if any


  //如果传入的eth数量,大于实际所需的eth数量,将剩余的eth返还给用户


  if(msg.value>amountETH)TransferHelper.safeTransferETH(msg.sender,msg.value-amountETH);


  }


  //****REMOVE LIQUIDITY****


  function removeLiquidity(//移除流动性,该方法需要先将lp代币授权给路由合约,才能代扣lp


  address tokenA,


  address tokenB,


  uint liquidity,//移除lp的数量,转入lp得另外两个币


  uint amountAMin,//A的最小输出量


  uint amountBMin,//B的最小输出量


  address to,//接收两个币的地址


  uint deadline


  )public virtual override ensure(deadline)returns(uint amountA,uint amountB){


  address pair=UniswapV2Library.pairFor(factory,tokenA,tokenB);//获取pair地址


  IUniswapV2Pair(pair).transferFrom(msg.sender,pair,liquidity);//将lp转到pair地址


  //send liquidity to pair


  (uint amount0,uint amount1)=IUniswapV2Pair(pair).burn(to);//调用pair的burn方法,内部会将两个币的数量转给to,返回值就是两个代币的输出数量


  (address token0,)=UniswapV2Library.sortTokens(tokenA,tokenB);//通过排序确认两个amountA/B


  (amountA,amountB)=tokenA==token0?(amount0,amount1):(amount1,amount0);


  //校验A/B的输出量需要小于参数中要求的最小量,否则交易失败


  require(amountA>=amountAMin,'UniswapV2Router:INSUFFICIENT_A_AMOUNT');


  require(amountB>=amountBMin,'UniswapV2Router:INSUFFICIENT_B_AMOUNT');


  }


  function removeLiquidityETH(//移除流动性(其中一个返还币是ETH),该方法需要先将lp代币授权给路由合约,才能代扣lp


  address token,


  uint liquidity,


  uint amountTokenMin,


  uint amountETHMin,//eth最小输出量


  address to,


  uint deadline


  )public virtual override ensure(deadline)returns(uint amountToken,uint amountETH){


  //调用上面的removeLiquidity方法,传入的是WETH


  (amountToken,amountETH)=removeLiquidity(


  token,


  WETH,


  liquidity,


  amountTokenMin,


  amountETHMin,


  address(this),//注意!接收币的地址是路由


  deadline


  );


  //将代币转给to


  TransferHelper.safeTransfer(token,to,amountToken);


  IWETH(WETH).withdraw(amountETH);//将weth转换成eth


  TransferHelper.safeTransferETH(to,amountETH);//将eth转给to


  }


BSEX交易所开发稳定版丨BSEX交易所系统开发实现技术方案及详情丨源码功能的评论 (共 条)

分享到微博请遵守国家法律