menu-icon
anue logo
熱門時事鉅亨號鉅亨買幣
search icon

區塊鏈

Solidity極簡入門|第二十一講:調用其他合約

BlockBeats 律動財經 2022-08-19 17:01

cover image of news article
律動財經圖片

我最近在重新學 solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每周更新 1-3 講。

所有代碼和教程開源在 github:github.com/AmazingAng/WTFSolidity

調用已部署合約

開發者寫智能合約來調用其他合約,這讓以太坊網路上的程序可以復用,從而建立繁榮的生態。很多 web3 項目依賴於調用其他合約,比如收益農場(yield farming)。這一講,我們介紹如何在已知合約代碼(或接口)和地址情況下調用目標合約的函數。


目標合約

我們先寫一個簡單的合約 OtherContract 來調用。



這個合約包含一個狀態變量 x,一個事件 Log 在收到 ETH 時觸發,三個函數:

getBalance(): 返回合約 ETH 餘額。

setX(): external payable 函數,可以設置 x 的值,並向合約發送 ETH。

getX(): 讀取 x 的值。

調用 OtherContract 合約

我們可以利用合約的地址和合約代碼(或接口)來創建合約的引用:_Name(_Address),其中_Name 是合約名,_Address 是合約地址。然後用合約的引用來調用它的函數:_Name(_Address).f(),其中 f() 是要調用的函數。

下面我們介紹 4 個調用合約的例子:

1. 傳入合約地址

我們可以在函數裡傳入目標合約地址,生成目標合約的引用,然後調用目標函數。以調用 OtherContract 合約的 setX 函數為例,我們在新合約中寫一個 callSetX 函數,傳入已部署好的 OtherContract 合約地址_Address 和 setX 的參數 x:



2. 傳入合約變量

我們可以直接在函數裡傳入合約的引用,只需要把上面參數的 address 類型改為目標合約名,比 OtherContract。下面例子實現了調用目標合約的 getX() 函數。



3. 創建合約變量

我們可以創建合約變量,然後通過它來調用目標函數。下面例子,我們給變量 oc 儲存了 OtherContract 合約的引用:



4. 調用合約並發送 ETH

如果目標合約的函數是 payable 的,那麼我們可以通過調用它來給合約轉賬:_Name(_Address).f{value: _Value}(),其中_Name 是合約名,_Address 是合約地址,f 是目標函數名,_Value 是要轉的 ETH 數額(以 wei 為單位)。

OtherContract 合約的 setX 函數是 payable 的,在下面這個例子中我們通過調用 setX 來往目標合約轉賬。



轉賬後,我們可以通過 Log 事件和 getBalance() 函數觀察目標合約 ETH 餘額的變化。

總結

這一講,我們介紹如何在通過目標合約代碼(或接口)和地址來創建合約的引用,從而調用目標合約的函數。

原文連結

暢行幣圈交易全攻略,專家駐群實戰交流

▌立即加入鉅亨買幣實戰交流 LINE 社群(點此入群
不管是新手發問,還是老手交流,只要你想參與虛擬貨幣現貨交易、合約跟單、合約網格、量化交易、理財產品的投資,都歡迎入群討論學習!

前往鉅亨買幣找交易所優惠

文章標籤


Empty