BSEX交易所繫統開發(開發方案)丨BSEX交易所開發(原始碼詳情)

xiaofufu發表於2023-04-10

  什麼是DAp,pDApp應用需要滿足那些條件


  什麼是Dapp?


  DApp是Decentralized Application的縮寫,譯為:分散式的應用程式。App我們都知道,我們在智慧手機上安裝的應用程式也就是App。而DApp比App多了一個‘D’,‘D’的意思是分散式的。所以,它的意思是分散式的應用程式/去中心化的應用程式。


  關於區塊鏈專案技術開發唯:MrsFu123,代幣發行、dapp智慧合約開發、鏈遊開發、單雙幣質押、多鏈錢包開發、NFT盲盒遊戲、公鏈、鏈上游戲開發


  Uniswap博餅、交易所開發、量化合約開發、合約對沖、互助遊戲開發、Nft數字藏品開發、眾籌互助開發、元宇宙開發、swap開發、DAO智慧合約、


  夾子合約、鏈上合約開發、ido開發、商城開發等,開發過各種各樣的系統模式,更有多種模式、制度、案例、後臺等,成熟技術團隊,歡迎實體參考。


  DApp是一種網際網路應用程式,與傳統的App最大的區別是:DApp執行在去中心化的網路上,也就是區塊鏈網路中。網路中不存在中心化的節點可以完整的控制DApp。


  Dapp(去中心化應用程式)是一種開源的應用程式,自動執行,將其資料儲存在區塊鏈上,以密碼令牌的形式激勵,並以顯示有價值證明的協議進行操作。


  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


  }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69956839/viewspace-2944842/,如需轉載,請註明出處,否則將追究法律責任。

相關文章