Содержание

Константы в Solidity

Глобальная переменная может быть объявлена как constant. В этом случае она должна быть присвоена из выражения, которое является константой на момент компиляции. Выражение не должно обращаться к хранилищу, блокчейн данным (например, now, this.balance или block.number) или данным выполнения (msg.gas), или вызывать внешний контракт. Разрешены выражения, которые могут оказывать побочный эффект на распределение памяти. Но те выражения, которые могут оказывать побочный эффект на другие объекты памяти запрещены. Встроенные функции keccak256, sha256, ripemd160, ecrecover, addmod и mulmod разрешены (несмотря на то, что они вызывают внешние контракты).

Причина устранения побочных эффектов в распределителе памяти в том, что должна быть возможность создавать сложные объекты, такие как, например, таблицы поиска. Эта особенность еще не используется полностью.

Компилятор не резервирует слот в хранилище для этих переменных, и в каждом случае заменяется соответствующим постоянным выражением (которое оптимизатором может быть вычислено в единственное значение).

На данный момент не все типы данных применимы к константам. Поддерживаются только типы значений и строки.

pragma solidity ^0.4.0;

contract C {
    uint constant x = 32**22 + 8;
    string constant text = "abc";
    bytes32 constant myHash = keccak256("abc");
}
Материал был полезен? Поделитесь в соц. сетях:
Логотип echain.ru

Добавить комментарий

Ваш e-mail не будет опубликован.