Source snapshots and refreshes
External reads are explicit source effects, not hidden script access.
EVM snapshot
Section titled “EVM snapshot”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.
HTTP snapshot
Section titled “HTTP snapshot”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.
Immutable consumption
Section titled “Immutable consumption”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.
Manual refresh
Section titled “Manual refresh”A seated member or a scoped agent may request a refresh after an EVM or HTTP snapshot completes. The refresh:
- appends a new immutable observation;
- updates the dashboard’s selected observation after success;
- 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.