Expression and Control Structures

Supported keywords

There is: if, else, while, do, for, break, continue, return, try/catch with the usual semantics known from C or JavaScript.

Function Calls

We can call function of 1 contract from another contract. We have an example below with 2 contracts Caller and Callee.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract Callee {
    uint public x;
    uint public value;

    function setX(uint _x) public returns (uint) {
        x = _x;
        return x;
    }

    function setXandSendEther(uint _x) public payable returns (uint, uint) {
        x = _x;
        value = msg.value;

        return (x, value);
    }
}

contract Caller {
    function setX(Callee _callee, uint _x) public returns (uint) {
        uint x = _callee.setX(_x);
        return x;
    }

    function setXFromAddress(address _addr, uint _x) public {
        Callee callee = Callee(_addr);
        callee.setX(_x);
    }

    function setXandSendEther(Callee _callee, uint _x) public payable returns (uint, uint) {
        (uint x, uint value) = _callee.setXandSendEther{value: msg.value}(_x);
        return (x, value);
    }
}

Create new contract with keyword new

We can use keyword new to create a new contract. AdvancedStorage.sol example will explain this in more details.

Last updated