- implemented partially by certain clients, such as [Aleth], [geth], [Parity] and [ethereumjs]
- allowed by certain test cases in the [Ethereum testing suite]
- and implicitly also allowed by certain assumptions, such as due to gas limits some of these values cannot grow past a certain limit
Most of the limits proposed in this document have been previously explored and tested in [EVMC].
Using the `2**63 - 1` constant to limit some of the ranges:
- allows using signed 64-bit integer type to represent it,
what helps programming languages not having unsigned types,
- makes arithmetic simpler (e.g. checking out-of-gas conditions is simple as `gas_counter < 0`).
### Timestamp
The [Yellow Paper] defines the timestamp in block as "A scalar value equal to the reasonable output of Unix’s time() at this block’s inception".
IEEE Std 1003.1-2001 (POSIX.1) leaves that definition implementation defined.
### Addresses
The size of addresses is specified in the [Yellow Paper] as 20 bytes.
E.g. the `COINBASE` instruction is specified to return *H*<sub>c</sub> ∈ 𝔹<sub>20</sub> which has 20 bytes.
### Comparing current implementations
- Timestamp is implemented as a 64-bit value in [Aleth], [geth] and [Parity]
- Block gas limit is implemented as a 64-bit in [Aleth] and [geth]
## Backwards Compatibility
All of these limits are already enforced mostly through the block gas limit. Since the out of range case results in a transaction failure, there should not be a change in behaviour.
## Test Cases
TBA
## Implementation
TBA
## References
[EIP-106](https://github.com/ethereum/EIPs/issues/106) proposed the block gas limit to be limited at `2**63 - 1`.
## TODO
1. Does the gas limit apply to the gas argument for call instructions?
## Copyright
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).