diff options
author | Chris Ward <chris.ward@ethereum.org> | 2019-01-07 21:14:26 +0800 |
---|---|---|
committer | Chris Ward <chris.ward@ethereum.org> | 2019-01-07 21:14:26 +0800 |
commit | 1da2c1f7e4a11f44a1a106088e2e99696658849a (patch) | |
tree | a5125fd1399d0e0328d758da9c641d612ab9d330 /docs/contracts | |
parent | aca9e581454585fab494a87febb7da3278e3aa7b (diff) | |
download | dexon-solidity-1da2c1f7e4a11f44a1a106088e2e99696658849a.tar.gz dexon-solidity-1da2c1f7e4a11f44a1a106088e2e99696658849a.tar.zst dexon-solidity-1da2c1f7e4a11f44a1a106088e2e99696658849a.zip |
Split Constant State Variables doc
Diffstat (limited to 'docs/contracts')
-rw-r--r-- | docs/contracts/constant-state-variables.rst | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/docs/contracts/constant-state-variables.rst b/docs/contracts/constant-state-variables.rst new file mode 100644 index 00000000..3e615ed0 --- /dev/null +++ b/docs/contracts/constant-state-variables.rst @@ -0,0 +1,35 @@ +.. index:: ! constant + +************************ +Constant State Variables +************************ + +State variables can be declared as ``constant``. In this case, they have to be +assigned from an expression which is a constant at compile time. Any expression +that accesses storage, blockchain data (e.g. ``now``, ``address(this).balance`` or +``block.number``) or +execution data (``msg.value`` or ``gasleft()``) or makes calls to external contracts is disallowed. Expressions +that might have a side-effect on memory allocation are allowed, but those that +might have a side-effect on other memory objects are not. The built-in functions +``keccak256``, ``sha256``, ``ripemd160``, ``ecrecover``, ``addmod`` and ``mulmod`` +are allowed (even though, with the exception of ``keccak256``, they do call external contracts). + +The reason behind allowing side-effects on the memory allocator is that it +should be possible to construct complex objects like e.g. lookup-tables. +This feature is not yet fully usable. + +The compiler does not reserve a storage slot for these variables, and every occurrence is +replaced by the respective constant expression (which might be computed to a single value by the optimizer). + +Not all types for constants are implemented at this time. The only supported types are +value types and strings. + +:: + + pragma solidity >=0.4.0 <0.6.0; + + contract C { + uint constant x = 32**22 + 8; + string constant text = "abc"; + bytes32 constant myHash = keccak256("abc"); + } |