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

更新 發佈閱讀 6 分鐘

前面幾篇我們講了從一個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看看:

raw-image

Deploy只要佈署Counter和MyContract就可以了,interface是不需要佈署的。

raw-image

實現從MyContract經由接口去調用Counter的increment

raw-image

由於我們剛剛按了兩個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兩個幣目前的流動狀況:

raw-image

換到狐狸錢包的ETH主網上,沒錢沒關係,我也沒ETH幣,Contract選擇UniswapV2Factory調用Uniswap的Interface,查詢DAI和ETH的Pair地址

raw-image

得到Pair address後,把CONTRACT切換到UniswapV2Pair,調用uniswap的另外一個interface來查看兩幣的數量:

raw-image

可以到Uniswap查一下數字是否一樣:https://v2.info.uniswap.org/pair/0xa478c2975ab1ea89e8196811f51a7b7ade33eb11

這是調用Uniswap的Interface來查詢Uniswap上面兩個幣的流動性,各位可以試試,以上就是針對Interface的介紹,謝謝。

有什麼想要了解或是不清楚的部份,歡迎留言和我分享。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。

留言
avatar-img
宅D嘉的開發人生
22會員
53內容數
加密貨幣很有趣,遊戲開發也很有趣,AI也有點意思,身為一個跨多領域的軟體工程師,喜歡研究新鮮的事物,歡迎來到我的世界,一起坐上這艘開往未來探索新奇的列車。
宅D嘉的開發人生的其他內容
2025/03/28
    每個程式開發的開始都是從Hello World開始的,當然我也不免淑的來個Hello World。
2025/03/28
    每個程式開發的開始都是從Hello World開始的,當然我也不免淑的來個Hello World。
2025/03/22
 Cocos Creator 2D實戰(一) 環境設定 第二步先做環境設定:環境設定、VS Code 正常來說跟著做就可以完成環境設定了,由於是開發2D,所以右上角先選擇2.4版(目前最高版本)會比較好,比較不容易錯亂,畢竟3.x和2.x的差異很大。
Thumbnail
2025/03/22
 Cocos Creator 2D實戰(一) 環境設定 第二步先做環境設定:環境設定、VS Code 正常來說跟著做就可以完成環境設定了,由於是開發2D,所以右上角先選擇2.4版(目前最高版本)會比較好,比較不容易錯亂,畢竟3.x和2.x的差異很大。
Thumbnail
2025/03/21
Cocos Creator 實戰     Cocos Creator是個用來開發2D或是3D遊戲的整合開發環境(IDE),程式語言是使用Javascript或TypeScript,Unity是用C#,但如果是Cocos Creator 3D的話是只能用TypeScript,所以建議還是用TypeS
Thumbnail
2025/03/21
Cocos Creator 實戰     Cocos Creator是個用來開發2D或是3D遊戲的整合開發環境(IDE),程式語言是使用Javascript或TypeScript,Unity是用C#,但如果是Cocos Creator 3D的話是只能用TypeScript,所以建議還是用TypeS
Thumbnail
看更多
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
資料型態在合約當中扮演著什麼角色呢? 我們在「【開發智能合約 — Solidity系列】實作篇Ep.2 — 合約中的基本組成元素」有介紹過狀態變數可以儲存一些變化值,而儲存什麼類型的值就是所謂的資料型態,不同的資料型態可以處理的事物也有所不同,因此我們也需要了解一些基本的資料型態以及特性之後,未來開
Thumbnail
資料型態在合約當中扮演著什麼角色呢? 我們在「【開發智能合約 — Solidity系列】實作篇Ep.2 — 合約中的基本組成元素」有介紹過狀態變數可以儲存一些變化值,而儲存什麼類型的值就是所謂的資料型態,不同的資料型態可以處理的事物也有所不同,因此我們也需要了解一些基本的資料型態以及特性之後,未來開
Thumbnail
本篇章會以實際的程式碼來說明開發Solidity的組成脈絡與重要的區塊,讓我們不再害怕閱讀艱澀難懂的程式碼,並且具備基礎知識以後也能看懂外面的合約。 開源程式碼常常會面臨到法律的問題,因此License的宣告就變得非常重要,而Solidity也考慮到這一塊,因此特別規劃了一塊License宣告的區塊
Thumbnail
本篇章會以實際的程式碼來說明開發Solidity的組成脈絡與重要的區塊,讓我們不再害怕閱讀艱澀難懂的程式碼,並且具備基礎知識以後也能看懂外面的合約。 開源程式碼常常會面臨到法律的問題,因此License的宣告就變得非常重要,而Solidity也考慮到這一塊,因此特別規劃了一塊License宣告的區塊
Thumbnail
上一篇我們介紹了智能合約的基本概念,而在開發智能合約之前, 建議先對智能合約具備基礎的概念, 往後進行開發時較容易融會貫通, 還沒閱讀的朋友可以參閱此篇「【開發智能合約 — Solidity系列】 淺談智能合約」。 理解完「智能合約」之後,相信大家已經開始手癢了吧! 應該很想開始動手完成第一個自己專
Thumbnail
上一篇我們介紹了智能合約的基本概念,而在開發智能合約之前, 建議先對智能合約具備基礎的概念, 往後進行開發時較容易融會貫通, 還沒閱讀的朋友可以參閱此篇「【開發智能合約 — Solidity系列】 淺談智能合約」。 理解完「智能合約」之後,相信大家已經開始手癢了吧! 應該很想開始動手完成第一個自己專
Thumbnail
學了這麼多的Solidity後,該來完整的寫一個ERC20的token,順便也了解一下發幣的邏輯。 然後只要符合下面這些標準的就可以是ERC20: 我們就把上面的這些寫入程式碼中: 有什麼想要了解或是不清楚的部份,歡迎留言和我分享。 如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
Thumbnail
學了這麼多的Solidity後,該來完整的寫一個ERC20的token,順便也了解一下發幣的邏輯。 然後只要符合下面這些標準的就可以是ERC20: 我們就把上面的這些寫入程式碼中: 有什麼想要了解或是不清楚的部份,歡迎留言和我分享。 如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
Thumbnail
下面來Deploy看看: Deploy只要佈署Counter和MyContract就可以了,interface是不需要佈署的。 實現從MyContract經由接口去調用Counter的increment 可以藉由調用Uniswap的Interface來查看Uniswap兩個幣目前的流動狀況:
Thumbnail
下面來Deploy看看: Deploy只要佈署Counter和MyContract就可以了,interface是不需要佈署的。 實現從MyContract經由接口去調用Counter的increment 可以藉由調用Uniswap的Interface來查看Uniswap兩個幣目前的流動狀況:
Thumbnail
下面我們就來講解Import該怎麼使用及可以調用外部在GitHub上面寫好的合約,比如說OpenZeppelin的ERC20合約。
Thumbnail
下面我們就來講解Import該怎麼使用及可以調用外部在GitHub上面寫好的合約,比如說OpenZeppelin的ERC20合約。
Thumbnail
此篇文是在練習並熟悉solidity與remix的操作
Thumbnail
此篇文是在練習並熟悉solidity與remix的操作
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News