量化合約/合約量化/合約跟單/交易所繫統開發實現技術原理及案例原始碼

xiaofufu發表於2023-02-24

  單個池的交易過程


  單個池的交易在exactInputSingle函式中:


  function exactInputSingle(


  uint256 amountIn,


  address recipient,


  SwapData memory data


  )private returns(uint256 amountOut){


  //將path解碼,獲取頭部的tokenIn,tokenOut,fee


  (address tokenIn,address tokenOut,uint24 fee)=data.path.decodeFirstPool();


  //因為交易池只儲存了token x的價格,這裡我們需要知道輸入的token是交易池x token還是y token


  bool zeroForOne=tokenIn<tokenOut;


  //完成交易


  (int256 amount0,int256 amount1)=


  getPool(tokenIn,tokenOut,fee).swap(


  recipient,


  zeroForOne,


  amountIn.toInt256(),


  zeroForOne?MIN_SQRT_RATIO:MAX_SQRT_RATIO,


  //給回撥函式用的引數


  abi.encode(data)


  );


  return uint256(-(zeroForOne?amount1:amount0));


  }


  交易過程就是先獲取交易池,然後需要確定本次交易輸入的是交易池的x token,還是y token,這是因為交易池中只儲存了x的價格P−−√=yx−−√P=yx,x token和y token的計價公式是不一樣的。最後呼叫UniswapV3Pool的swap函式完成交易。


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

相關文章