Repository navigation
Releases: sierpeproject/sierpe
Release list
v1.12.0
v1.12.0
Added — Movements carry txHash. New rows get it at derivation; rows
indexed before the migration are filled by the new idempotent
POST /v1/admin/movements/tx-hashes: local joins over rows the database
already trusts, then the remainder resolved from the public History
Archives in application order — no replay, no captive core, no retention
limit. Repeat the POST until done: true.
Additive release: nullable column, omitempty API field, cursors
untouched. Upgrade by bumping the image tag.
v1.11.0
v1.10.2
v1.10.1
v1.10.0
v1.9.0
v1.8.0
Changed
- New gaps are trimmed against the open ones below them, and a resolving gap hands its clamped registrations to the deepest gap still open. Registrations arrive in batches over days and every batch clamps at its own ever-rising retention wall; untrimmed gaps overlapped on everything below the previous wall, so the archive leg replayed the same deep history once per batch — for a staged mainnet backfill that tripled the captive-core replay. An open gap is a standing promise to heal its range, so the trim leaves the un-vouched set exactly as it was, and the handoff keeps a late batch's declared coverage descending with the deeper heal instead of freezing at the shared floor.
Fixed
- The events cursor now carries and enforces its kind. Every other endpoint stamped its cursors, but
/events— the oldest codec — never did, so a cursor minted by a different endpoint whose fields happened to unmarshal was accepted. New events cursors carrykind: events; a foreign kind is rejected with 400; cursors minted before the stamp carry no kind and remain valid, so nothing in the wild breaks.
Upgrade
Pull ghcr.io/zkcaleb-dev/sierpe:v1.8.0 (or v1.8.0-full). No migration. Recommended before registering additional contract batches on an instance that already has open gaps. Railway template users: edit your service's image tag.
v1.7.0
Changed
- Backfill walks now share their scans. Chunks sit on an absolute 2000-ledger grid, and contracts whose next chunk is the same range form a group whose ledgers are fetched and extracted once — each contract still commits its own rows and watermark atomically, so a failed commit isolates to its contract while the rest keep their progress; the trailing contract retries through a one-entry scan cache instead of re-downloading the range. A contract walking alone is a group of one and behaves as before. This is what makes registering many contracts at once affordable: N same-range registrations previously cost N copies of every RPC download.
sierpe_backfill_chunks_totalandsierpe_backfill_ledgers_scanned_totalnow count scans actually performed (once per shared chunk).
Fixed
- The getLedgers batch shrink (1.5.1) had no memory: every call restarted at the full batch size and re-paid the aborted oversized downloads against the body cap, silently multiplying the bandwidth of a heavy-range walk roughly four times (found on the first mainnet homelab deployment: ~1.75 MB of meta per ledger near the tip). The client now remembers the batch size that fit and probes 25% higher only after every 8 successful batches.
Upgrade
Pull ghcr.io/zkcaleb-dev/sierpe:v1.7.0 (or v1.7.0-full). No migration, no API change. Railway template users: edit your service's image tag.
v1.6.0
Added
- Movements now store and serve the raw ContractEvent XDR they were decoded from (
rawXdron/v1/contracts/{id}/movements, migration 0011). The emitting token is usually not registered, so no events row exists to join to and the original bytes were unrecoverable from the database; consumers that re-emit movements into their own pipelines need the event itself, not the decode. Rows ingested before the migration have no stored event to backfill from and omit the field. - Archived contracts register.
POST /v1/contractswith explicitkindsnow accepts a contract whose instance is no longer live on chain (archived after TTL expiry — the RPC cannot tell that apart from one that never existed). It registers as classificationunknownand the response carries a newwarningsarray saying so; history is still derived from whatever sources reach: an archived contract's past exists in the History Archives even when its instance does not. Without explicit kinds the 404 stands. Re-registering after a restore re-classifies.
Security
- Toolchain pinned to go1.25.13 and vulnerable indirect dependencies upgraded (grpc 1.82.1, aws-sdk-go-v2 eventstream 1.7.8 / s3 1.97.3): clears every reachable finding govulncheck reported against binaries built from go1.25.0.
Upgrade
Pull ghcr.io/zkcaleb-dev/sierpe:v1.6.0 (or v1.6.0-full for the archive leg); migration 0011 applies itself at boot. Railway template users: edit your service's image tag — template updates never touch already-deployed instances.