Avatar阿凡達模式系統開發技術流程方案(成熟技術)

Tg_StPv888發表於2023-02-20

  新零售指的就是新型零售商業模式,將線上與線下進行融合,消費者可以從線上進行選物,I8O量化2857交易8624系統開發然後到線下門店進實際體驗,另外還可以透過大資料來了解消費者的消費習慣,從而提供更加完善的服務。


  Ecology


  The commercial ecology construction of"new retail"will cover online pages,physical stores,payment terminals,data systems,logistics platforms,marketing paths and many other aspects,and embed diversified functions such as shopping,entertainment,


  首先呼叫UniswapV3Factory.getPool方法檢視交易對是否已經建立,getPool函式是solidity自動為UniswapV3Factory合約中的狀態變數getPool生成的外部函式,getPool的資料型別為:


  contract UniswapV3Factory is IUniswapV3Factory,UniswapV3PoolDeployer,NoDelegateCall{


  ...


  mapping(address=>mapping(address=>mapping(uint24=>address)))public override getPool;


  ...


  }


  使用3個map說明了v3版本使用(tokenA,tokenB,fee)來作為一個交易對的鍵,即相同代幣,不同費率之間的流動池不一樣。另外對於給定的tokenA和tokenB,會先將其地址排序,將地址值更小的放在前,這樣方便後續交易池的查詢和計算。


  再來看UniswapV3Factory建立交易對的過程,實際上它是呼叫deploy函式完成交易對的建立:


  使用CREATE2的好處是:


  可以在鏈下計算出已經建立的交易池的地址


  其他合約不必透過UniswapV3Factory中的介面來查詢交易池的地址,可以節省gas


  合約地址不會因為reorg而改變


  不需要透過UniswapV3Factory的介面來計算交易池合約地址的方法,可以看這段程式碼。


  新交易對合約的建構函式中會反向查詢UniswapV3Factory中的parameters值來進行初始變數的賦值:


  constructor(){


  int24 _tickSpacing;


  (factory,token0,token1,fee,_tickSpacing)=IUniswapV3PoolDeployer(msg.sender).parameters();


  tickSpacing=_tickSpacing;


  maxLiquidityPerTick=Tick.tickSpacingToMaxLiquidityPerTick(_tickSpacing);


  }


  為什麼不直接使用引數傳遞來對新合約的狀態變數賦值呢。這是因為CREATE2會將合約的initcode和salt一起用來計算建立出的合約地址。而initcode是包含contructor code和其引數的,如果合約的constructor函式包含了引數,那麼其initcode將因為其傳入引數不同而不同。在off-chain計算合約地址時,也需要透過這些引數來查詢對應的initcode。為了讓合約地址的計算更簡單,這裡的constructor不包含引數(這樣合約的initcode將時唯一的),而是使用動態call的方式來獲取其建立引數。


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

相關文章