智能合約開發實戰(15) - 調用另外一個smart contract

更新 發佈閱讀 4 分鐘

今天要講一個蠻重要也蠻常用到的,那就是如何調用另外一個smart contract,由於把所有的程式碼都寫在同一個contract裡面這樣這個contract太龐大了,而且也不利於維護,所以是有必要把它寫成二個或是三個smart contract,那麼就來看看該怎麼調用另外一個smart contract,下面直接上程式碼:

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

//智能合約A
contract ContractA {
  uint public x;
  uint public value;

  //設定X
  function setX(uint _x) public returns (uint) {
    x = _x;
    return x;
  }

  //設定X和傳送ETH幣
  function setXandSendEther(uint _x) public payable returns (uint, uint) {
    x = _x;
    value = msg.value;
    return (x, value);
  }

  //查詢餘額
  function getBalance() public view returns (uint) {
    return address(this).balance;
  }
}

// ContractB -> ContractA
//智能合約B
contract ContractB {
  //Call A的第一種型式
  function callSetX(ContractA _contractA, uint _x) public {
    _contractA.setX(_x);
  }

  //Call A的第二種型式
  function callSetXFromAddress(address _contractAddress, uint _x) public {
    ContractA _contractA =  ContractA(_contractAddress);
    _contractA.setX(_x);
  }

  //調用合約A的設定X和傳送ETH幣
  function callSetXandSendEther(ContractA _contractA, uint _x) public payable {
    _contractA.setXandSendEther{value: msg.value}(_x);
  }
}

創建兩個合約A和B,由合約B去調用合約A

raw-image

使用ContractB的callSetX來設定ContractA的x

raw-image

使用Call A的第二種型式來設定ContractA的x

raw-image

最後使用ContractB的callSetXandSendEther調用ContractA的setXandSendEther來設定x及傳送ETH幣

raw-image

查看ContractA的value和x是否有寫入想要的資料(value=2 ETH、x=30)

raw-image

我們從上面的應用可以看出,當Contract A已經發佈,在Contract B靠傳入Contract A的address就可以調用Contract A的相關function,設定資料,以上是介紹怎麼調用另外一個smart contract,這是個蠻常用的方法,謝謝。

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

留言
avatar-img
留言分享你的想法!
avatar-img
宅D嘉的開發人生
21會員
50內容數
加密貨幣很有趣,遊戲開發也很有趣,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
想開始學塔羅卻不知道要準備哪些工具?這篇整理塔羅新手必備好物清單,從塔羅牌、塔羅布到收納袋與香氛噴霧一次入手。趁蝦皮雙11優惠打造專屬占卜空間,還能加入蝦皮分潤計畫,用分享創造收入。
Thumbnail
想開始學塔羅卻不知道要準備哪些工具?這篇整理塔羅新手必備好物清單,從塔羅牌、塔羅布到收納袋與香氛噴霧一次入手。趁蝦皮雙11優惠打造專屬占卜空間,還能加入蝦皮分潤計畫,用分享創造收入。
Thumbnail
今天不只要分享蝦皮分潤計畫,也想分享最近到貨的魔法少年賈修扭蛋開箱,還有我的雙11購物清單,漫畫、文具、Switch2、後背包......雙11優惠真的超多,如果有什麼一直想買卻遲遲還沒下手的東西,最適合趁這個購物季趕緊下單!
Thumbnail
今天不只要分享蝦皮分潤計畫,也想分享最近到貨的魔法少年賈修扭蛋開箱,還有我的雙11購物清單,漫畫、文具、Switch2、後背包......雙11優惠真的超多,如果有什麼一直想買卻遲遲還沒下手的東西,最適合趁這個購物季趕緊下單!
Thumbnail
一個功能越趨完善且複雜的合約,勢必會拆成許多合約共同組成,而其實這些組成的合約之中許多的方法、元素都是重複的,因此我們可以使用Inheritance(繼承)的技巧,將共同的屬性、方法抽到某個上級合約,而其餘的合約只要繼承自上級合約,就能減少重複開發的狀況,我們都知道軟體開發的過程,只要開發的原始碼越
Thumbnail
一個功能越趨完善且複雜的合約,勢必會拆成許多合約共同組成,而其實這些組成的合約之中許多的方法、元素都是重複的,因此我們可以使用Inheritance(繼承)的技巧,將共同的屬性、方法抽到某個上級合約,而其餘的合約只要繼承自上級合約,就能減少重複開發的狀況,我們都知道軟體開發的過程,只要開發的原始碼越
Thumbnail
資料型態在合約當中扮演著什麼角色呢? 我們在「【開發智能合約 — Solidity系列】實作篇Ep.2 — 合約中的基本組成元素」有介紹過狀態變數可以儲存一些變化值,而儲存什麼類型的值就是所謂的資料型態,不同的資料型態可以處理的事物也有所不同,因此我們也需要了解一些基本的資料型態以及特性之後,未來開
Thumbnail
資料型態在合約當中扮演著什麼角色呢? 我們在「【開發智能合約 — Solidity系列】實作篇Ep.2 — 合約中的基本組成元素」有介紹過狀態變數可以儲存一些變化值,而儲存什麼類型的值就是所謂的資料型態,不同的資料型態可以處理的事物也有所不同,因此我們也需要了解一些基本的資料型態以及特性之後,未來開
Thumbnail
上一篇我們談到「【開發智能合約 — Solidity系列】實作篇Ep.1 — 看懂智能合約的脈絡」,大致上理解每個檔案的每份合約都是一個個的區塊,而這一個篇章主要著重於合約中的每個區塊的組成元素進行分項說明。 今天的範例會以簡單的銀行存款與提款流程進行示範,過程中將一步步的使用上述7種元素完成功能,
Thumbnail
上一篇我們談到「【開發智能合約 — Solidity系列】實作篇Ep.1 — 看懂智能合約的脈絡」,大致上理解每個檔案的每份合約都是一個個的區塊,而這一個篇章主要著重於合約中的每個區塊的組成元素進行分項說明。 今天的範例會以簡單的銀行存款與提款流程進行示範,過程中將一步步的使用上述7種元素完成功能,
Thumbnail
本篇章會以實際的程式碼來說明開發Solidity的組成脈絡與重要的區塊,讓我們不再害怕閱讀艱澀難懂的程式碼,並且具備基礎知識以後也能看懂外面的合約。 開源程式碼常常會面臨到法律的問題,因此License的宣告就變得非常重要,而Solidity也考慮到這一塊,因此特別規劃了一塊License宣告的區塊
Thumbnail
本篇章會以實際的程式碼來說明開發Solidity的組成脈絡與重要的區塊,讓我們不再害怕閱讀艱澀難懂的程式碼,並且具備基礎知識以後也能看懂外面的合約。 開源程式碼常常會面臨到法律的問題,因此License的宣告就變得非常重要,而Solidity也考慮到這一塊,因此特別規劃了一塊License宣告的區塊
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的操作
Thumbnail
介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable。
Thumbnail
介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable。
Thumbnail
本文延續上一次的程式碼,並增加錢包餘額查詢以及轉帳功能,完成後將會嘗試轉帳,若測試與查詢的結果都沒有問題的話,恭喜你完成一個可以被轉帳交易的加密貨幣,今年過年就靠它讓你在親戚朋友之間成為被眾人討論的紅人了!
Thumbnail
本文延續上一次的程式碼,並增加錢包餘額查詢以及轉帳功能,完成後將會嘗試轉帳,若測試與查詢的結果都沒有問題的話,恭喜你完成一個可以被轉帳交易的加密貨幣,今年過年就靠它讓你在親戚朋友之間成為被眾人討論的紅人了!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News