无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網 會員登陸 & 注冊

阿凡達Avatar泰山眾籌開發(fā)需求丨阿凡達Avatar泰山眾籌系統(tǒng)開發(fā)(開發(fā)方案及邏輯)

2023-03-01 10:48 作者:bili_16249894763  | 我要投稿

  New retail refers to a new retail model in which individuals and enterprises,relying on the Internet,upgrade and transform the production,circulation and sales process of goods by using advanced technical means such as big data,artificial intelligence and psychological knowledge,thereby reshaping the business structure and ecosystem,and deeply integrate online services,offline experience and modern logistics.


  企業(yè)以互聯(lián)網為依托,通過運用大數據、人工智能等先進技術手段,對商品的生產、流通與銷售過程進行升級改造,進而重塑業(yè)態(tài)結構與生態(tài)圈,并對線上服務、線下體驗以及現代物流進行深度融合的零售新模式。


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


  function removeLiquidity(//移除流動性,該方法需要先將lp代幣授權給路由合約,才能代扣lp


  address tokenA,


  address tokenB,


  uint liquidity,//移除lp的數量,轉入lp得另外兩個幣


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


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


  address to,//接收兩個幣的地址


  uint deadline 開發(fā)需求I35邏輯7O98設計O7I8


  )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');


  }案例及設計:MrsFu123


  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


  }


  //WithPermit的方法可以先了解下approveAndCall鏈接https://blog.csdn.net/weixin_34235105/article/details/88761932


  /*


  實際使用EIP-712


  鏈接https://soliditydeveloper.com/erc20-permit


  https://learnblockchain.cn/article/1790


  https://eips.ethereum.org/EIPS/eip-2612


  permit在前端的使用場景,就是移除流動性的時候,有個授權實際沒有發(fā)送交易,只是要求簽名,簽名會得到參數中的v/r/s


  在實際調用該移除的方法傳進來,內部驗簽,確認是該用戶,就將移除的lp的數量,授權給路由,可以代扣lp


  */


  function removeLiquidityWithPermit(//移除流動性,approve+transferFrom


  address tokenA,


  address tokenB,


  uint liquidity,


  uint amountAMin,


  uint amountBMin,


  address to,


  uint deadline,


  bool approveMax,uint8 v,bytes32 r,bytes32 s//v,r,s驗簽,通過就授權給路由


  )external virtual override returns(uint amountA,uint amountB){


  /*


  獲取到pair,調用pair的permit(內部實際就是授權給路由),


  */


  address pair=UniswapV2Library.pairFor(factory,tokenA,tokenB);


  uint value=approveMax?uint(-1):liquidity;


  IUniswapV2Pair(pair).permit(msg.sender,address(this),value,deadline,v,r,s);


  //最終還是調用上面的removeLiquidity方法!


  (amountA,amountB)=removeLiquidity(tokenA,tokenB,liquidity,amountAMin,amountBMin,to,deadline);


  }


阿凡達Avatar泰山眾籌開發(fā)需求丨阿凡達Avatar泰山眾籌系統(tǒng)開發(fā)(開發(fā)方案及邏輯)的評論 (共 條)

分享到微博請遵守國家法律
定陶县| 疏勒县| 上饶市| 阿拉善左旗| 喀喇沁旗| 汨罗市| 同仁县| 中西区| 台安县| 突泉县| 嘉兴市| 荃湾区| 张家口市| 永定县| 绍兴市| 措美县| 淳安县| 盘山县| 日喀则市| 垣曲县| 子长县| 大余县| 义马市| 朝阳市| 金堂县| 剑川县| 景洪市| 台江县| 万宁市| 望都县| 湄潭县| 修文县| 白朗县| 宜春市| 通许县| 安塞县| 二手房| 定陶县| 鄂州市| 靖远县| 五河县|