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

本文介紹如何在Solidity中通過目標合約的代碼(或接口)和地址來創建合約的引用,從而調用目標合約的函數。以下是文章的核心內容:

  • 調用已部署合約:開發者可以通過智能合約調用其他合約,實現程序復用,這是以太坊生態繁榮的關鍵。文章以一個簡單的合約OtherContract為例,說明如何調用其函數。

  • 目標合約OtherContract:該合約包含一個狀態變量x、一個事件Log(在收到ETH時觸發),以及三個函數:

    • getBalance():返回合約的ETH餘額。
    • setX():external payable函數,可設置x的值並向合約發送ETH。
    • getX():讀取x的值。
  • 調用OtherContract的四種方法

    1. 傳入合約地址:在函數中傳入目標合約地址,生成引用後調用目標函數(如setX)。
    2. 傳入合約變量:直接在函數中傳入合約的引用(類型為目標合約名),調用目標函數(如getX)。
    3. 創建合約變量:通過創建合約變量(如oc)存儲目標合約的引用,再調用其函數。
    4. 調用合約並發送ETH:若目標函數是payable,可通過調用該函數向合約轉賬(如setX{value: _Value}())。
  • 總結:通過合約代碼(或接口)和地址創建引用,可以靈活調用目標合約的函數,並實現ETH轉賬等功能。所有代碼和教程已開源於GitHub。

總結

原文: 《Solidity 極簡入門: 21. 調用其他合約》

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

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

調用已部署合約

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

目標合約

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

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

這個合約包含一個狀態變量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:

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

2. 傳入合約變量

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

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

3. 創建合約變量

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

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

4. 調用合約並發送ETH

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

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

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

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

總結

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

推特: @0xAA_Science

社區: Discord微信群官網wtf.academy

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

分享至:

作者:0xAA

本文為PANews入駐專欄作者的觀點,不代表PANews立場,不承擔法律責任。

文章及觀點也不構成投資意見

圖片來源:0xAA如有侵權,請聯絡作者刪除。

關注PANews官方賬號,一起穿越牛熊
推薦閱讀
41分鐘前
2小時前
4小時前
5小時前
6小時前
2025-12-13 09:23

熱門文章

行業要聞
市場熱點
精選讀物

精選專題

App内阅读