Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
April 25, 2022 02:32 pm GMT

How To Call Other Contracts In Solidity

This blog post will show how to call the functions of a smart contract from another smart contract. Assuming we have two smart contracts defined below:

// SPDX-License-Identifier: MITpragma solidity ^0.8.3;contract CallContractOne {  function setValueX() {  }}contract ContractOne {  uint public x; function setX() external {  //we will want to set the value of x from CallContractOne }}

The first thing to know is, we need to mark the visibility of any function we want to call from outside the contract as external .

To call the smart contract ContractOne from the smart contract CallContractOne. We can decided to initialize the contract we want to call. Let see how this is done :

// SPDX-License-Identifier: MITpragma solidity ^0.8.3;contract CallContractOne {function setValueXByInitializing( address _contractOneAddress, uint _x ) public {     ContractOne(_contractOneAddress).setX(_x);  }function setValueXByType(ContractOne _contract, uint _x ) public {     _contract.setX(_x);  }function setValueXByPassingValue(ContractOne _contract, uint _x ) public payable {     _contract.setXAndReceiveEther{value: msg.value }(_x);  }}contract ContractOne {  uint public x;  uint public value; function setX(uint _x ) external {  //we will want to set the value of x from CallContractOne  x = _x; }function setXAndReceiveEther(uint _x ) external payable {  //we will want to set the value of x from CallContractOne   x = _x;   value = msg.value; }}

Looking at the function above setValueXByInitializing we used the address that ContractOne is deployed to initialize the contract. Once we have initialize ContractOne, we can then call the external methods defined on it.

Another way we can also call external function of another contract is by using the contract we want to call as a type. Take a look at the function above setValueXByType. We are passing ContractOne as a type. This is the address in which ContractOne is deployed.

Passing value to an external contract call

We can pass ether when we call an external contract. Take a look at the function setValueXByPassingValue. This function calls the function setXAndReceiveEther inside ContractOne and forwards ether to it.

You can copy the code and try out on Remix. Deploy both of the contracts and copy the address of ContractOne to use inside the smart contract CallContractOne.

Thanks for reading.


Original Link: https://dev.to/jamiescript/how-to-call-other-contracts-in-solidity-16dh

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To