Network: testnet. snarkOS-only point release. No consensus change, no new activation height, and no snarkVM change: this build still uses snarkVM 4.10.0. Validators do not need to upgrade. A mainnet release with the same change will follow once it has been validated on testnet.
Who needs to act
Only operators who built snarkOS with --features history and serve the /history/ or /staking/rewards REST routes, typically RPC providers. That cargo feature is gone in this release, and cargo install --features history no longer builds. To keep serving those routes, start the node with --history-compat-mode.
If you don't serve those routes, nothing changes for you.
Why the history feature was removed
The feature answered historical mapping queries from tables the node maintained itself. Those tables never recorded deletions and mixed incompatible height encodings (snarkVM#3418, snarkVM#3408). The visible symptom: once an unbond is claimed, credits.aleo/unbonding kept reporting it as pending at every later height. Rather than patch the tables, this release removes them and serves the routes from a source that is correct in exactly that case.
--history-compat-mode snarkOS#4458
With the flag set, the node registers the same routes and returns the same response bodies as before, but answers them from the Provable historical staking API. That service stores a full snapshot of five credits.aleo staking mappings at every block since genesis, so a deleted key is simply absent at later heights.
snarkos start --client --history-compat-mode
snarkos start --client --history-compat-mode https://your-mirror.example.com
- With no URL, the node uses the instance for its own network:
https://{network}.historical-staking.provable.com. Instances exist for mainnet and testnet; there is none for canary. - A
--devnetwork has no upstream and requires an explicit URL. - The flag needs the REST server and cannot be combined with
--norest.
What it serves:
| Route | Behaviour |
|---|---|
GET /program/{id}/mapping/{name}/{key}/history/{height}
| Same body as before: the value as a plaintext string, or null if the key is absent at that height. Only credits.aleo and the mappings bonded, delegated, metadata, unbonding, withdraw. Anything else returns 404 naming what is supported.
|
GET /program/{id}/mapping/{name}/history/{height}?keys=…
| Same, for several keys in one upstream request. |
GET /staking/rewards/{address}/{height}
| [validator, reward, new_stake], as the history-staking-rewards feature returned it. new_stake comes from the bonded snapshot at that height.
|
POST /program/{id}/view/{function}/{height}
| Always 404 with an explanation. Staking snapshots are not enough state to evaluate a view function at a past height. The route is kept so older clients get an answer instead of a routing miss. |
A height the upstream has no snapshot for returns 404. Snapshots are cached per height and fetched once per height even when many requests for that height arrive together, so an indexer fanning out across addresses costs one upstream request. Upstream calls are limited to 8 in flight, 20 seconds each, and 64 MiB per response.
The history-staking-rewards cargo feature still exists. Its own handler is registered only when compat mode is off.
Know before you rely on it
This is a stop-gap until a proper archival-node mode exists. A node on this flag depends on Provable's hosted historical API being up, and it serves five staking mappings of credits.aleo, not arbitrary program state. If you need historical values of other mappings, or view functions at past heights, this release does not provide them.
Also in this release
rustlsis upgraded past RUSTSEC-2026-0285, and the yankedwnaf0.14.0 is replaced by 0.14.1.