记得朋友圈看到过一句话,如果Defi是以太坊的皇冠,那么Uniswap就是这顶皇冠中的明珠。Uniswap目前已经是V2版本,相对V1,它的功能更加全面优化,然而其合约源码却并不复杂。本文为个人学习UniswapV2源码的系列记录文章。
一、Migrator合约介绍在上一次学习完了Router
合约后,UniswapV2核心合约及周边合约的主要部分就已经学习完了,目前就只剩下一些应用示例了。Migrator
合约用来将某个交易对的流动性从V1版本迁移到V2版本。其实它也可以算为应用示例的一部分,但作为一种官方实现,并没有放在examples
目录。
因为UniswapV1版本的交易对为ETH/ERC20交易对,所以迁移到V2版本必然为WETH/ERC20交易对。在上一次学习中提到,Router
合约有一个addLiquidityETH
方法就是用来处理提供流动性时一种资产为ETH的。
因此,这个迁移的过程就很清晰了:从V1版本移除流动性,得到ETH和WETH;再调用Router
合约的addLiquidityETH
方法向V2版本添加流动性(注意,如果V2版本的交易对不存在,会自动创建哟)。最后,如果其中有一种资产有多余(最多一种多余),则退还给流动性提供者(调用者)。
pragma solidity