Canary Time Oracle

Purpose

Most chains expose time only once per block via block.timestamp. On Rise, blocks arrive every one second, which limits applications that need sub-second awareness. Rise’s shreds introduce pre-confirmations in as little as 5 ms, but without a reliable time oracle you still don’t know where you are inside the block. The Canary Time Oracle fills that gap by providing a real-time, verifiable time feed.

How it works

  • A timer inside the TEE emits a timestamp every 5 ms.

  • The feeder is co-located near the Rise RPC node, yielding ~3 ms end-to-end latency to contracts on Rise.

  • Each timestamp flows through the same pipeline as prices and is posted on-chain with a TEE attestation.

  • In the video build, Canary Nest runs in AWS Nitro Enclaves and uses AWS’s timestamp service (nanosecond precision) as the time source.

  • Contracts can query the oracle to know how far into the current block they are and how close to the next block boundary, with a verifiable, high-granularity reference.

Security properties

  • TEE-sourced time. The key security property is that time is taken directly from the TEE and attested; there is no additional transformation.

  • Attested updates. Each emitted timestamp carries the enclave attestation, proving origin and integrity.

  • Same validations as prices. The de-duplication and outlier rejection logic used for price updates also applies to time updates.

Operational notes (Rise Testnet)

  • Observed latency: ~3 ms when co-located with the Rise RPC.

  • Update cadence: 5 ms tick from the TEE timer.

  • Network feedback: When previously deployed, Rise infrastructure appeared to interpret the high-frequency posts as spam. The service is currently paused but can likely be restarted.

Why it matters

  • Trading, auctions, payments: Enables millisecond-aware logic instead of waiting for the next second-long block.

  • Gaming and interactive apps: Real-time mechanics aligned to a verifiable clock.

  • Predictable execution: Contracts act on precise timing within the block rather than only at block boundaries.

Check out our 3 min video explaining how it works: https://x.com/canary_proto/status/1975924117455917372arrow-up-right

Last updated