Temporal EVM Precompile
Read committed ROKO nanosecond timestamps from Solidity.
Read ROKO time from Solidity
Runtime spec 285 exposes committed temporal state at the native EVM precompile:
0x0000000000000000000000000000000000000600
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface ITemporal {
function getConsensusTime() external view returns (uint128);
function getMyTimestamp() external view returns (uint128);
function getTransactionTimestamp(bytes32 substrateHash)
external view returns (uint128);
function getWatermark() external view returns (uint128);
function getBlockTimestamp(uint64 blockNumber)
external view returns (uint128);
}
Use `getMyTimestamp()` for the canonical timestamp of the currently executing transaction. It returns zero when that extrinsic has no temporal timestamp. `getTransactionTimestamp(bytes32)` is deliberately limited to the executing block's transient bundle and uses the Substrate extrinsic hash. Historical transaction lookup remains available through Temporal RPC rather than permanent consensus storage.
`getConsensusTime()` is committed block metadata, not a live node clock. `getWatermark()` describes included state and does not independently assert GRANDPA finality. Applications requiring irreversibility must wait for the containing block to finalize.
| Call | Selector |
|---|---|
| `getConsensusTime()` | `0x3937a0db` |
| `getMyTimestamp()` | `0x8726a64f` |
| `getTransactionTimestamp(bytes32)` | `0x2fbff520` |
| `getWatermark()` | `0xb819dedd` |
| `getBlockTimestamp(uint64)` | `0x931672b8` |
Calls are read-only, reject `msg.value`, and return each timestamp as one 32-byte ABI word. Decode nanoseconds as JavaScript `bigint`, not `number`. Download the machine-readable `ITemporal.json` from this site or from the immutable v1.0.22 release directory and verify it against that release's `SHA256SUMS`.