首页 > 区块链 > 区块链 > Avatar阿凡达模式系统开发技术流程方案(成熟技术)
新零售指的就是新型零售商业模式,将线上与线下进行融合,消费者可以从线上进行选物,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/ ,如需转载,请注明出处,否则将追究法律责任。