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

更新於 發佈於 閱讀時間約 1 分鐘
今天要講一個蠻重要也蠻常用到的,那就是如何調用另外一個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
使用ContractB的callSetX來設定ContractA的x
使用Call A的第二種型式來設定ContractA的x
最後使用ContractB的callSetXandSendEther調用ContractA的setXandSendEther來設定x及傳送ETH幣
查看ContractA的value和x是否有寫入想要的資料(value=2 ETH、x=30)
我們從上面的應用可以看出,當Contract A已經發佈,在Contract B靠傳入Contract A的address就可以調用Contract A的相關function,設定資料,以上是介紹怎麼調用另外一個smart contract,這是個蠻常用的方法,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
avatar-img
20會員
38內容數
目前加密貨幣的市場上幣種非常的多 讓你看得眼花撩亂了嗎? 可以藉由這一系列的加密貨幣分析 能夠幫忙您了解每一個加密貨幣它的價值所在 每一集都會介紹一種幣 是一個很實用的專題,歡迎大家訂閱~
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
宅D嘉的沙龍 的其他內容
介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable。
在智能合約的函數裡面,最常用的就是檢查使用者是不是合約的Owner: 這樣寫的話,每個需要檢查是否為Owner的函數就必須都要這樣寫入,為了程式碼的簡潔和提高重覆利用,我們來使用modifier看看: 上面我們是看到了檢查的部份,那為什麼叫修改器呢?下面讓我們來看看:
這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
此篇我們也來介紹另外一個也是蠻常用又蠻重要的Mapping,它和陣列有點像,但比較不同的是:它不能用迴圈的方式取出裡面所有的資料,但陣列可以,Mapping比較像是一個查詢系統,用key值可以取出裡面的value值。
這篇我們來看一個在程式開發很常見也很常用的一個東西:Array 陣列 Array在所有的程式開發中還蠻常見的,也一定會出現,因為有很多的資料都會是一長串的,需要有一個物件來去做集中管理。
由上篇看起來已經沒問題,我也一直用這樣的方式在上班看著幣價(噓~),後來發現了一點問題,我們看一下圖片: 加入Excel常用的函數:VLOOKUP VLOOKUP(搜尋準則, 範圍, 索引, 已排序)
介紹了這麼多Solidity的函數和方法,今天來寫一個簡單的錢包,順便介紹一下payable。
在智能合約的函數裡面,最常用的就是檢查使用者是不是合約的Owner: 這樣寫的話,每個需要檢查是否為Owner的函數就必須都要這樣寫入,為了程式碼的簡潔和提高重覆利用,我們來使用modifier看看: 上面我們是看到了檢查的部份,那為什麼叫修改器呢?下面讓我們來看看:
這篇我們來講一下還蠻重要也蠻常用到的一個自定義型別,叫:struct struct是來自於C/C++的結構,目的是把不同資料型態的參數串在一起,成為一個自定義的資料型態,我們也稱它是一個自定義的結構體。
此篇我們也來介紹另外一個也是蠻常用又蠻重要的Mapping,它和陣列有點像,但比較不同的是:它不能用迴圈的方式取出裡面所有的資料,但陣列可以,Mapping比較像是一個查詢系統,用key值可以取出裡面的value值。
這篇我們來看一個在程式開發很常見也很常用的一個東西:Array 陣列 Array在所有的程式開發中還蠻常見的,也一定會出現,因為有很多的資料都會是一長串的,需要有一個物件來去做集中管理。
由上篇看起來已經沒問題,我也一直用這樣的方式在上班看著幣價(噓~),後來發現了一點問題,我們看一下圖片: 加入Excel常用的函數:VLOOKUP VLOOKUP(搜尋準則, 範圍, 索引, 已排序)
你可能也想看
Google News 追蹤
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
智能合约和区块链是当今社会最热门的话题之一,智能合约钱包是指用合约账户作为地址的钱包,是基于智能合约而不是外部账户的钱包,那么,智能合约钱包和区块链的关系是什么?一样安全吗?本文将为大家详细介绍 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
Overview 1. Request Wallet Connection from Metamask get account function get account function 2. Set your smart contract address injected provide
msg.sender 定義:msg.sender 是 Solidity 中的一個全局變量,表示當前調用合約函數的外部地址。這個地址可以是普通用戶賬戶(EOA)或另一個智能合約。 用途:用於識別誰在調用當前函數。在每次函數調用期間,msg.sender 都會動態地更新為當前調用該函數的賬戶地址。
Thumbnail
●智能合約 : 區塊2.0的產物   智能合約(Smart Contracts)最早是在1994年由Nick Szabo提出的概念,但一直到2015年,以太坊的創辦人Vitalik Buterin推出了智能合約,並運行於以太坊上,至今以太坊仍是最多人使用的智能合約區塊鏈。   ●智能
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
智能合约和区块链是当今社会最热门的话题之一,智能合约钱包是指用合约账户作为地址的钱包,是基于智能合约而不是外部账户的钱包,那么,智能合约钱包和区块链的关系是什么?一样安全吗?本文将为大家详细介绍 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣
0. 大綱Outline 以太坊交易 發起交易 與智能合約互動 receive & fallback function 1. 舊以太坊交易 Ethereum Gas Tracker - 7 Gwei - Etherscan //交易技術, 表示特定帳戶的交易數量,是計數器, 每發一筆交
Overview 1. Request Wallet Connection from Metamask get account function get account function 2. Set your smart contract address injected provide
msg.sender 定義:msg.sender 是 Solidity 中的一個全局變量,表示當前調用合約函數的外部地址。這個地址可以是普通用戶賬戶(EOA)或另一個智能合約。 用途:用於識別誰在調用當前函數。在每次函數調用期間,msg.sender 都會動態地更新為當前調用該函數的賬戶地址。
Thumbnail
●智能合約 : 區塊2.0的產物   智能合約(Smart Contracts)最早是在1994年由Nick Szabo提出的概念,但一直到2015年,以太坊的創辦人Vitalik Buterin推出了智能合約,並運行於以太坊上,至今以太坊仍是最多人使用的智能合約區塊鏈。   ●智能