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.

CallSelector
`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`.