Skip to content

Source snapshots and refreshes

External reads are explicit source effects, not hidden script access.

ctx.evm.snapshot() executes one or more reads at one pinned block. It can read ABI functions, native balances, ERC-20 balances, or selected block fields. The result includes the block number/hash and an immutable observation identity.

Registry ABI calls freeze ABI-source provenance separately from the actual target. Inline ABI fragments are also supported.

ctx.http.snapshot() performs one bounded GET or HEAD to an allowed host and freezes status, final URL, sanitized headers, body, and observation identity. This is the right way to fetch a tokenURI result obtained from an EVM snapshot: first await the chain read, then issue a separate HTTP snapshot.

Authored code has no direct fetch, sockets, secrets, or ambient network access. Authenticated connectors and secret bindings are not part of v1.

Once a source result is consumed, it is permanent program history. A retry or resume returns the same logical result; it does not silently repeat the external read.

A seated member or a scoped agent may request a refresh after an EVM or HTTP snapshot completes. The refresh:

  1. appends a new immutable observation;
  2. updates the dashboard’s selected observation after success;
  3. leaves the logical effect result, run journal, and downstream program history unchanged.

A failed refresh preserves the previously selected observation. Refreshing is for current visibility, not rerunning past control flow.