今天要講一個蠻重要也蠻常用到的,那就是如何調用另外一個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,這是個蠻常用的方法,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。