索拉迪SolaRoad/質押挖礦/算力挖礦分紅/合約開發/玩法規則/詳細邏輯/原始碼案例

xiaofufu發表於2023-05-19

  簡單說,智慧合約是一種用計算機語言取代法律語言去記錄條款的合約。智慧合約可以由一個計算系統自動執行。可以理解為智慧合約就是傳統合約的數字化版本。


  什麼是DAPP?DAPP是Decentralized Application的縮寫,中文叫分散式應用/去中心化應用。通常來說,不同的DAPP會採用不同的底層技術開發平臺和共識機制,或者自行釋出代幣。


  在網際網路模式下,I35合約7O98開閥O7I8,資料讀取、寫入、編輯和刪除一般都伴隨著身份認證操作,只有特定的人才能對資料進行修改,


  而在區塊鏈模式下,尤其是公有鏈體系下,任何人都可以參與對資料的讀寫,V+MrSFU123 並且以分散式賬本的方式構建了一個去信任的系統,參與讀寫的各個組織或個體可以互不信任,但能對系統儲存資料的最終狀態達成共識。


  liquidity是抽取的流動性的量。amountMin是抽取代幣的最小的個數。to是抽取代幣的目標地址。deadline是個有意思的設計:抽取的操作有時效性。超過了一定的deadline(區塊高度),這次抽取操作看成無效。


  先收回需要抽取的Token,並且銷燬:


  IUniswapV2Pair(pair).transferFrom(msg.sender,pair,liquidity);//send liquidity to pair


  (uint amount0,uint amount1)=IUniswapV2Pair(pair).burn(to);


  3.swap


  swap是普通使用者進行代幣交易的操作。普通使用者透過swap操作實現兩種token之間的交易。


  function swapExactTokensForTokens(


  uint amountIn,


  uint amountOutMin,


  address[]calldata path,


  address to,


  uint deadline


  )external virtual override ensure(deadline)returns(uint[]memory amounts){


  Uniswap支援多種代幣的交換。具體的含義是,Uniswap提供了多級交易池的路由功能。舉個例子,已有兩個交易對TokenA-TokenB,以及TokenB-TokenC,透過swap介面,可以實現TokenA-TokenC的交換,其中經過的TokenA-TokenB,TokenB-TokenC,稱為路徑(path)。amountIn是路徑中的第一個代幣的數量,amountOutMin是期望的交換後的最少的數量。


  amounts=UniswapV2Library.getAmountsOut(factory,amountIn,path);


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


  amounts是每個路徑上的交換後的數量。amounts[amounts.length-1]也就是最後一條路徑的輸出數量。注意,UniswapV2Library.getAmountsOut的實現(在獲取每個交易對的reserve資訊後,呼叫getAmountOut函式):


  function getAmountOut(uint amountIn,uint reserveIn,uint reserveOut)internal pure returns(uint amountOut){


  require(amountIn>0,'UniswapV2Library:INSUFFICIENT_INPUT_AMOUNT');


  require(reserveIn>0&&reserveOut>0,'UniswapV2Library:INSUFFICIENT_LIQUIDITY');


  uint amountInWithFee=amountIn.mul(997);


  uint numerator=amountInWithFee.mul(reserveOut);


  uint denominator=reserveIn.mul(1000).add(amountInWithFee);


  amountOut=numerator/denominator;


  }


  注意,其中的997/1000的係數。在進入每個交易池之前,進入的金額先扣除了0.3%的本金。這個就是交易費。注意的是,路徑上的交易池,每個池子都收。有點像高速收費站,一段段的收。


  TransferHelper.safeTransferFrom(


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


  );


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

相關文章