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

2022/04/23閱讀時間約 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,這是個蠻常用的方法,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
宅D嘉
宅D嘉
有著十年以上的軟體開發經驗,喜歡投資理財,目前喜歡研究區塊鏈相關,了解虛擬貨幣投資或者是區塊鏈開發,喜歡把複雜的東西簡單化,樂於分享我的理財投資生活。
留言0
查看全部
發表第一個留言支持創作者!