您当前的位置: 首页 > 

33357

暂无认证

  • 1浏览

    0关注

    25博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Uniswap-v2 Factory合约分析

33357 发布时间:2022-02-25 17:15:10 ,浏览量:1

原文发布在 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 合约初始化时,需要传入手续费管理员地址。

资金池
  • 外部函数(仅合约外部可以调用)
    • 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             
关注
打赏
1654608207
查看更多评论
0.0350s