Swap可分为两种场景:单池交易和跨池交易。在PoolManager合约里,要完成交易流程,会涉及到lock()、swap()、settle()、take()四个函数。
前一篇文章我们已经知道了创建新池子的流程,那接下来就要添加流动性了。而其实,在PoolManager合约里,添加和移除流动性都是在同一个函数里统一处理的。当然,要完成添加或移除流动性的全流程,会涉及到多个函数。接下来我们展开一一细说。
创建池子的底层函数是PoolManager合约的initialize函数,其代码实现并不复杂
前一篇文章已经对UniswapV4做了简单的概述,了解了其主要特性。从本篇开始,我们要深入合约实现了,先看看其合约结构。
UniswapV4与UniswapV3相比,算法上并没有什么改变,依然还是采用集中流动性模型,但架构上变化很大,包括功能架构,也包括技术架构。
SwapRouter合约封装了面向用户的交易接口,但不再像UniswapV2Router一样根据不同交易场景拆分为了那么多函数,UniswapV3的SwapRouter核心就只有4个交易函数
实现用户层面的流动性头寸管理的合约是NonfungiblePositionManager合约,其实现比较复杂,还继承了很多子合约,限于篇幅,我们无法全都一一讲解,就只能挑一些重点的来讲。
UniswapV3Pool合约则复杂很多了,其引用的库合约就达到了13个,通过using方式使用的也达到了9个
UniswapV3Factory合约主要用来创建不同代币对的流动性池子合约,其代码实现并不复杂
UniswapV3于2021年5月上线,相比UniswapV2,改动很大,也变得复杂很多。