В Solidity глобальная переменная относится к переменной, которая объявлена вне какой-либо функции и имеет глобальную область действия внутри контракта. Глобальные переменные могут быть доступны и изменены любой функцией в контракте. Вот несколько методов объявления и использования глобальных переменных в Solidity, а также примеры кода:
-
Переменные состояния:
Переменные состояния объявляются вне какой-либо функции и постоянно сохраняют данные в блокчейне. Они доступны для всех функций в рамках контракта.contract MyContract { uint256 public myVariable; // State variable function setMyVariable(uint256 newValue) public { myVariable = newValue; } } -
Постоянные переменные.
Постоянные переменные используются для хранения значений, которые нельзя изменить после инициализации. Они обычно используются для фиксированных значений или настроек конфигурации.contract MyContract { uint256 public constant myConstant = 100; function getMyConstant() public view returns (uint256) { return myConstant; } } -
Неизменяемые переменные.
Неизменяемые переменные аналогичны постоянным переменным, но во время развертывания контракта им могут быть присвоены разные значения. После присвоения их значения нельзя изменить.contract MyContract { uint256 immutable public myImmutable; constructor(uint256 initialValue) { myImmutable = initialValue; } } -
Внутренние переменные.
Внутренние переменные объявляются с использованием ключевого словаinternalи имеют глобальную область действия в рамках контракта и производных от него контрактов.contract MyBaseContract { uint256 internal myInternalVariable; } contract MyContract is MyBaseContract { function setMyInternalVariable(uint256 newValue) public { myInternalVariable = newValue; } } -
Частные переменные.
Частные переменные объявляются с использованием ключевого словаprivateи имеют глобальную область действия, ограниченную контрактом, в котором они определены. Доступ к ним невозможен с помощью производных контрактов.contract MyContract { uint256 private myPrivateVariable; function setMyPrivateVariable(uint256 newValue) public { myPrivateVariable = newValue; } }