Temporal EVM Precompile

Read committed ROKO nanosecond timestamps from Solidity.

Read ROKO time from Solidity

Runtime spec 285 introduced committed temporal state at the native EVM precompile below. It remains available in the active configured-testnet runtime spec 286:

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.