interface的方法签必须跟实现方法一模一样,interface的方法不用实现,类似java 编程语言.下面根据具体实例了解一下用法.
interface的方法签必须跟实现方法一模一样,interface的方法不用实现,类似java编程语言.下面根据具体实例了解一下用法.
我在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值.
以此类比,我看一下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的合约地址
remix部署到主网,要想不花费gas部署,通过At address部署,切换至factory合约
通过wbtc与weth的合约地址,调用gatpair方法得到pair合约地址:0xBb2b8038a1640196FbE3e38816F3e67Cba72D940
复制pair地址,切换到pair合约,通过at address部署,输入之前的pair合约地址,得到新的合约,调用getReserves方法,得到配对币的储备量.
可以到https://etherscan.io/address/0xBb2b8038a1640196FbE3e38816F3e67Cba72D940进行比对.
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!