2022-05-14|閱讀時間 ‧ 約 6 分鐘

智能合約開發實戰(18) - Interface

前面幾篇我們講了從一個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成功。
接下來我們來看看藉由Uniswap的interface,我們可以來看一下DAI和ETH在Uniswap的流動性:
// 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來查看兩幣的數量:
https://v2.info.uniswap.org/pair/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11
可以到Uniswap查一下數字是否一樣:https://v2.info.uniswap.org/pair/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11
這是調用Uniswap的Interface來查詢Uniswap上面兩個幣的流動性,各位可以試試,以上就是針對Interface的介紹,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。 如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.