了解interface,结合Uniswap分析(附源码)

  • darren
  • 更新于 2022-03-19 12:49
  • 阅读 3432

interface的方法签必须跟实现方法一模一样,interface的方法不用实现,类似java 编程语言.下面根据具体实例了解一下用法.

interface的方法签必须跟实现方法一模一样,interface的方法不用实现,类似java编程语言.下面根据具体实例了解一下用法.

Demo

我在remix平台进行部署,演示

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

contract Counter{
        uint public count;
        function increment() external{
            count++;
        }
}

interface ICounter{
     function increment() external;
}

contract MyContract{
    function incrementCounter(address _counter) external {

        ICounter(_counter).increment();
    }

}

我们先部署Counter合约,得到合约地址,然后部署MyContract.将之前得到的合约地址传入incrementCounter方法内,调用一次此方法,count+1,我们可以从Counter合约得到count值.

image.png

以此类比,我看一下Uniswap的设计,如何调用Uniswap的接口.

Uniswap接口实现

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface UniswapV2Factory{
    function getPair(address tokenA,address tokenB) external view returns(address pair);
}

interface UniswapV2Pair{
    function getReserves() external view returns(uint112 reserve0,uint112 reserve1,uint32 blockTimestampLast);
}

contract UniswapExample{

     address private factory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
     address private wbtc = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599;
     address private weth=  0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

     function getTokenReserves() external view returns(uint,uint){
         address pair =UniswapV2Factory(factory).getPair(wbtc,weth);
         (uint reserve0,uint reserve1,) = UniswapV2Pair(pair).getReserves();
         return (reserve0,reserve1);
     }
}

https://docs.uniswap.org/protocol/V2/reference/smart-contracts/factory 获取factory的合约地址:0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f

https://etherscan.io/ 从这里获取weth与wbtc的合约地址

  • weth: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
  • wbtc: 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599

remix部署到主网,要想不花费gas部署,通过At address部署,切换至factory合约

image.png

通过wbtc与weth的合约地址,调用gatpair方法得到pair合约地址:0xBb2b8038a1640196FbE3e38816F3e67Cba72D940

image.png

复制pair地址,切换到pair合约,通过at address部署,输入之前的pair合约地址,得到新的合约,调用getReserves方法,得到配对币的储备量.

image.png

可以到https://etherscan.io/address/0xBb2b8038a1640196FbE3e38816F3e67Cba72D940进行比对.

image.png

点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
darren
darren
江湖只有他的大名,没有他的介绍。