ITPub博客

首页 > 区块链 > 区块链 > Avatar阿凡达模式系统开发技术流程方案(成熟技术)

Avatar阿凡达模式系统开发技术流程方案(成熟技术)

原创 区块链 作者:Tg_StPv888 时间:2023-02-20 14:28:52 0 删除 编辑

  新零售指的就是新型零售商业模式,将线上与线下进行融合,消费者可以从线上进行选物,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博客 ” ,链接:https://blog.itpub.net/70016646/viewspace-2935979/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专业区块项目开发团队:18028578624微電

注册时间:2022-04-13

  • 博文量
    158
  • 访问量
    95690