Skip to main content Link Search Menu Expand Document (external link)

Scope in solidity

private: can only be accessed from inside.

public: : can be accessed from inside and outside

external: can only be accessed from outside

internal: can be accessed from inside and outside provided it is inherited using 'is' keyword.

Example:

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract C {
    uint256 private data; // available only inside
    uint256 public info; // available inside and outside

    constructor() {
        info = 10;
    }

    function duplicateData(uint256 a) public {
        data = a;
    }

    function getData() public view returns (uint256) {
        return data;
    }

    function campute(uint256 a, uint256 b) internal pure returns (uint256) { // available inside and ouside only if inherited using 'in' keyword
         return a + b;
    }
}

contract E is C { // inherited directly
    uint256 internal result;
    C c; // inherited using new instance

    constructor() {
        c = new C();
    }

    function getComputedResult() public pure {
        campute(23, 5); // note c.campute is not available since the campute function is 'internal'
                        // but since I inherited 'C' using 'is' operator we can access it directly
    }

    function getResult() public pure returns (uint256) {
        return 1;
    }

    function getInfo() public view returns (uint256) {
        return c.info();
    }
}