Skip to content

Releases: lightgatehq/lidapters

v0.15.0 — module path moves to github.com/lightgatehq/lidapters

Choose a tag to compare

@github-actions github-actions released this 31 Aug 19:45
7ab19eb

No functional change from v0.14.0. This release exists only because the module's declared path changed when the repository moved to the lightgatehq organization, and a path change is a new module identity to the Go toolchain.

go get github.com/lightgatehq/lidapters@v0.15.0

Why v0.15.0 and not v0.14.1

The two paths are distinct modules rather than a patch lineage, so a fresh minor makes the discontinuity legible and leaves the old path's patch range free. The repository follows semantic versioning and carries no policy requiring otherwise.

Why a new tag was needed at all

The v0.5.x-v0.14.0 tags remain resolvable only under github.com/daccred/lidapters. They are reachable under the new path — same commits, same repository, so proxy.golang.org lists them — but they do not resolve there:

go: github.com/lightgatehq/lidapters@v0.14.0: parsing go.mod:
	module declares its path as: github.com/daccred/lidapters
	        but was required as: github.com/lightgatehq/lidapters

Those tags predate the rename, so their go.mod still declares the old path and the toolchain rejects the mismatch. v0.15.0 is the lowest tag that actually carries the new module path.

Neither retract nor replace can express a path change, so neither was added.

Contents

Diffing v0.14.0 against this tag yields only the import-path rewrite — 90 string replacements across 58 files (#46) — with build, vet, and the full test suite green on both sides. #45 is test-only work that landed before the rename.

Note for consumers

The old path keeps resolving indefinitely, because the module proxy's cache of it is permanent. That makes a stale import fail silently rather than loudly: it will build green while linking a different module. Move deliberately, and assert that no references to the old path survive.

What's Changed

  • test(blend): close two V1-09 review gaps (share-stage floor vector, pre-Comet checkpoint gate) by @raybaann in #45
  • chore: rename the module path to github.com/lightgatehq/lidapters by @raybaann in #46

Full Changelog: v0.14.0...v0.15.0

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 02 Aug 11:28
382c1bb

What's Changed

  • feat(blend): fold Comet LP state for backstop valuation by @koolamusic in #44

Full Changelog: v0.13.0...v0.14.0

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 02 Aug 11:07
8144766

What's Changed

  • docs: freeze notice — development continues inside relay.lightgate.xyz by @raybaann in #42
  • feat(blend): expose per-ledger temporary-state transitions by @koolamusic in #38
  • feat(blend): producer-owned price provenance (V1-05 D-02) by @koolamusic in #43

Full Changelog: v0.12.1...v0.13.0

v0.12.1

Choose a tag to compare

@github-actions github-actions released this 01 Aug 23:06
f575cad

What's Changed

  • fix(aquarius): close the chain-adjudicated cross-engine divergences (fee growth, amplification, activity attribution) by @raybaann in #41

Full Changelog: v0.12.0...v0.12.1

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 01 Aug 20:35
41fc28f

What's Changed

  • test(blend): mainnet golden fixtures for the v0.10/v0.11 decode surfaces by @raybaann in #32
  • fix(blend): never resolve positions through an unknown reserve index by @koolamusic in #37
  • Soroswap and FxDAO adapters: DEX pair census + snapshot-only vault fold by @raybaann in #39
  • Aquarius to blend grade: mainnet fixtures, exact event vocabulary, absent-not-zero keying by @raybaann in #40

Full Changelog: v0.11.0...v0.12.0

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 25 Jul 06:38
585cf4e

What's Changed

  • feat(blend): decode auction state, emission accrual, structured event fields (#9) by @raybaann in #30

Full Changelog: v0.10.0...v0.11.0

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 25 Jul 04:52
232c5b9

What's Changed

  • Feat parallelization & Aquarius by @Brymes in #28
  • feat(blend): classify events by exact contract name by @raybaann in #29

New Contributors

Full Changelog: v0.9.0...v0.10.0

v0.9.0 — TTL-archive semantics + per-ledger dirty positions

Choose a tag to compare

@koolamusic koolamusic released this 14 Jul 09:47
459c5af

What changed

TTL-lapse no longer deletes state. A Positions or ResConfig/ResData entry whose TTL lapses (or is evicted by a network sweep) is now archived in place — Archived/ArchivedLedgerSeq on UserReservePosition, PendingUserPosition, ReserveState — instead of being purged. Explicit on-chain deletes keep their existing semantics (discriminated via ContractDataChange.ChangeType). On mainnet the old behavior silently dropped 300+ dormant-but-live position holders from fold state.

Per-ledger dirty positions API. bindings.DirtyPosition/DirtyKind/DirtyPositionsProvider and Adapter.LastDirtyPositions() expose exactly which (address, pool) pairs changed each ledger, with upsert/removal kinds. Adapter.ProjectPositions projects a single user+pool in O(dirty) — ~20–60µs flat from 1k to 50k total users, vs 18–504ms for a full transform. Enables consumers to emit per-ledger position rows at fold speed.

Determinism fix. reserveByIndex was rebuilt from a randomized map range; now built from the sorted reserve slice. Pre-existing, exposed by dirty-set comparison in the parity suite.

Both fold strategies (paranoid | incremental) produce identical dirty sets and archived state — enforced by the parity suite, including new Positions TTL-eviction fixtures.

Compatibility: all serialization changes are additive; v0.8.0 snapshots load unchanged. No breaking API changes.

Merge: #27 · SHA: 459c5af · Compare: v0.8.0...v0.9.0

What's Changed

  • fix(blend): archive TTL-lapsed/evicted positions; expose per-ledger dirty set by @koolamusic in #27

Full Changelog: v0.8.0...v0.9.0

v0.8.0 — incremental state-fold strategy (config-selected)

Choose a tag to compare

@github-actions github-actions released this 12 Jul 09:28
6e76791

What's new

A second, config-selected state-fold strategy: incremental (PR #26, #25).

The reference fold (DecodeState) is a stateless pure reducer: every ledger it rebuilds its whole in-memory mirror from the prior LedgerState and re-sorts the full typed state — O(total accumulated state) per ledger, so replay throughput decays as users accumulate. Measured on a production mainnet replay: ~312 ledgers/s with an empty prior vs ~51 ledgers/s carrying ~600k ledgers of accumulated state.

blend.Config gains a StateMode knob, selected once at construction and swapped as a whole strategy:

  • paranoid (default, and the default when the knob is empty) — today's code path, byte-for-byte. It remains the reference oracle: fully stateless, run-twice byte-identical, the strategy every optimization is validated against.
  • incremental — a persistent builder mirror carried across ledgers plus caches for the per-user position blocks and their global sort order. Per-ledger cost drops to O(this ledger's changes) plus output materialization. Output is byte-identical to paranoid — same slices, same ordering, same serialized checksums — enforced by a permanent CI parity gate (golden fixtures + a synthetic multi-ledger churn sequence, per-ledger state and delta-stream comparison, and a red-check that proves seeded divergences are caught).

Measured (real mainnet checkpoint state, 20,000 real ledgers folded from a stored production checkpoint at ledger 57,166,999 carrying ~600k ledgers of accumulated state):

  • Byte-parity on production data: sha256 state checksums identical between modes at every measured interval (ledgers 57,171,999 / 57,176,999 / 57,181,999 / 57,186,999).
  • Fold throughput at real state size: paranoid 372.1s for 20k ledgers (53.8 l/s — independently reproducing the production replay's observed ~51 l/s decay) vs incremental 4.8s (4,198.9 l/s) — 78.1x. The fold stops being the replay bottleneck; stateless extraction becomes the dominant term.

In-repo benchmark at 50,000 carried user positions, one touched user per ledger: paranoid 453.6 ms/ledger vs incremental 10.4 ms/ledger (~44x).

Statefulness contract

An incremental adapter carries fold state between calls: do not share one across concurrent folds, and treat the returned LedgerState as immutable. DecodeState remains a pure function of (prior content, changes): the carried mirror is only trusted when prior is the adapter's own previous return value; any other prior (first ledger, checkpoint restore, rewind) reseeds from it. The default paranoid mode is untouched and fully stateless.

Compatibility

Minor version bump: additive API only (StateMode on blend.Config). No LedgerState shape change — snapshots and fold checkpoints round-trip unchanged between versions and between modes; a fold may be seeded from a checkpoint written by either mode. Paranoid remains the default and the reference; consumers opt into incremental deliberately, per deployment.

Full diff: v0.7.1...v0.8.0

v0.7.1 — oracle asset view guard + decoded-meta discovery

Choose a tag to compare

@koolamusic koolamusic released this 11 Jul 09:57
8b3c67b

What's fixed

blend_oracle_asset view no longer errors on extended oracle-config records (8b3c67b, #24).

Since v0.6.0, blend_oracle_config also carries oracle-aggregator and price-feed records whose payload->'assets' can be absent or non-array; the view's bare jsonb_array_elements raised cannot extract elements from a scalar on the first such row, taking the whole view down. The lateral join now guards on jsonb_typeof(...) = 'array' and yields no rows for those records — ordinary oracle rows are unchanged.

DiscoverPoolsFromLedgerCloseMeta exported for consumers that already hold a decoded xdr.LedgerCloseMeta (replay pipelines that pre-decode each ledger once) — factory-event discovery without a second XDR unmarshal. The byte-input DiscoverPoolsFromMeta delegates to it; both stay pure.

Compatibility

Patch release: no LedgerState change, no storage schema change, additive API only (one exported function). Snapshots produced under v0.7.0 remain valid.

Full diff: v0.7.0...v0.7.1

What's Changed

  • ci: restrict dependabot to security updates only by @koolamusic in #23
  • fix: guard oracle asset view against non-array assets; export decoded-meta discovery by @Brymes in #24

New Contributors

Full Changelog: v0.7.0...v0.7.1