Skip to main content

Missing State Variable Visibility

Description

When declaring state variables in Solidity, it is important to specify the visibility of the variable to ensure that it is accessed and modified correctly. If no visibility is specified, the default visibility is internal, which restricts access to the contract and its derived contracts. However, if the variable is intended to be accessed outside of the contract, it should be explicitly defined as public or external. Failure to specify the visibility of a state variable can lead to execution problems and potential security vulnerabilities.

For example, consider the following Solidity code:

contract MyContract {
mapping (address => uint) balances;
}

In this case, the balances mapping is declared without specifying any visibility. Since the default visibility is internal, the balances mapping can only be accessed and modified within the MyContract contract and its derived contracts. If the balances mapping is intended to be accessed outside of the contract, it should be explicitly defined as public or external:

contract MyContract {
mapping (address => uint) public balances;
}

This makes the balances mapping accessible outside of the contract, while still maintaining its functionality within the contract.

Recommendation

It is recommended to always explicitly specify the visibility of state variables in Solidity to ensure correct access and modification. If the state variable is intended to be accessed outside of the contract, it should be declared as public or external.