原文发布在 https://github.com/33357/smartcontract-apps这是一个面向中文社区,分析市面上智能合约应用的架构与实现的仓库。欢迎关注开源知识项目!
Uniswap-v2 Factory合约分析Factory 合约是 Uniswap-v2 用来创建资金池的合约,通过分析它可以深入了解 Uniswap-v2 的运行逻辑。
演示代码仓库:https://github.com/33357/uniswap-v2-contract。
合约初始化- 公共函数(合约内外部都可以调用)
- constructor
-
代码速浏览
constructor(address _feeToSetter) public { feeToSetter = _feeToSetter; }
-
参数分析
函数
constructor
的入参有1个,出参有0个,对应的解释如下:constructor( address _feeToSetter // 手续费管理员地址 ) public { ... }
在合约初始化时,需要在函数
constructor
中传入_feeToSetter
,该参数设置了手续费管理员地址。 -
实现分析
... { // 设置手续费管理员地址 feeToSetter = _feeToSetter; }
-
总结
Factory 合约初始化时,需要传入手续费管理员地址。
-
- constructor
- 外部函数(仅合约外部可以调用)
- allPairsLength
-
代码速浏览
function allPairsLength() external view returns (uint) { return allPairs.length; }
-
参数分析
函数
allPairsLength
的入参有0个,出参有1个,对应的解释如下:function allPairsLength() external view returns ( uint // 资金池的数量 ) { ... }
函数
allPairsLength
返回了allPairs
的长度,也就是当前资金池的数量。 -
实现分析
... { // 返回资金池数组的长度 return allPairs.length; }
-
总结
获取 allPairs 需要输入 index,因此需要获取资金池数组。
-
- createPair
-
代码速浏览
function createPair(address tokenA, address tokenB) external returns (address pair) { require(tokenA != tokenB, 'UniswapV2: IDENTICAL_ADDRESSES'); (address token0, address token1) = tokenA
关注打赏
-
- allPairsLength