前面幾篇我們講了從一個smart contract去調用另外一個smart contract,也有使用import的方式來調用的,今天來講更為常用的是調用smart contract的interface,下面就是講一下什麼是
interface:Interface顧名思義就是一個接口,可以給任何smart contract調用的接口,且interface有一些限制,就是interface不能繼承、不能定義參數、不能定義型別,下面就直接上個簡單的程式碼,最後來看一下Uniswap的
調用實例:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
//建一個contract,需先佈署到區塊鏈上面,後面interface才能調用
contract Counter {
uint public count;
function increment() external {
count ++;//每次調用就+1
}
}
//實現function接口
interface ICounter {
function increment() external;
}
contract MyContract {
//從接口去調用另外一個smart contract
function incrementCounter(address _counter) external {
ICounter(_counter).increment();
}
}
下面來Deploy看看:
Deploy只要佈署Counter和MyContract就可以了,interface是不需要佈署的。
實現從MyContract經由接口去調用Counter的increment
由於我們剛剛按了兩個transact,所以count=2,也代表我們經由interface調用Counter的increment成功。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
//Uniswap example
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 blockTimestampLost);
}
contract UniswapExample {
address private factory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
address private dai = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
address private weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
function getTokenReserves() external view returns (uint, uint) {
address pair = UniswapV2Factory(factory).getPair(dai, weth);
(uint reserve0, uint reserve1, ) = UniswapV2Pair(pair).getReserves();
return (reserve0, reserve1);
}
}
可以藉由調用Uniswap的Interface來查看Uniswap兩個幣目前的流動狀況:
換到狐狸錢包的ETH主網上,沒錢沒關係,我也沒ETH幣,Contract選擇UniswapV2Factory調用Uniswap的Interface,查詢DAI和ETH的Pair地址
得到Pair address後,把CONTRACT切換到UniswapV2Pair,調用uniswap的另外一個interface來查看兩幣的數量:
可以到Uniswap查一下數字是否一樣:https://v2.info.uniswap.org/pair/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11
這是調用Uniswap的Interface來查詢Uniswap上面兩個幣的流動性,各位可以試試,以上就是針對Interface的介紹,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。