UNDERSTAND · IN BUILD
Flashy Ledger
Ledger-as-a-Service: an append-only, multi-asset ledger any network can settle on, with one write path, one invariant, and a daily Merkle root anchored to any chain that accepts a transaction. Flashy Gold is the first asset on it.
Where this sits
The unit · rewards layer
Flashy Gold is the rewards layer across every Flashy property, canonical at flashy.gold. What it is, that site defines. Where it settles is this page.
Today · Ledger-as-a-Service IN BUILD
Flashy Ledger holds the entries and commits to them — one root a day, anchored to any chain. The first asset on Flashy Ledger, and the reason it was built.
Direction NORTH STAR
A Layer 2 on The Open Network, where the entries stop being anchored and start being native. Nothing here runs on it yet.
Why a ledger before a chain
The step before every transaction is native to a chain. A 32-byte root has no chain affinity, so one commitment reaches every chain at once, and the roots stay valid when the transactions eventually move on-chain.
The order is not an apology for the chain being late. An issuer who anchors first gets the property that actually matters — a record they cannot be talked out of — without betting the economy on one chain’s fees, throughput or survival, and without the migration being a rewrite when it comes. A ledger that cannot reconcile does not become trustworthy by being published on-chain; it becomes permanently wrong in public.
The engine is a published package, @flashylabs/ledger, so the rules can be read rather than described. The Merkle specification is on /snapshots/ in enough detail to reimplement in a language we did not choose.
The write path
Funded source
quest · streak · auction · adjustment
Guarded writer IN BUILD
An idempotency key is required. A replayed event produces no second entry.
Entry + balance
One transaction, with the before and after recorded on the entry itself.
What is not true yet
One gate now exists for service-to-service calls (SEAM-4 Phase 1). Direct balance writes have not been counted again since the first audit, and no CI rule forbids them. That gap is why Σ(entries) cannot be expected to equal Σ(balances). The portable lint rule that closes it exists in flashy-contracts and is not yet installed in the consuming repository.
ClaimYour.Gold · SEAM-4 Phase 1 · read 2026-08-20
Entry types
| Type | Meaning | Source of truth |
|---|---|---|
| issuance | Flashy Gold created against a funded source. Never discretionary. | prisma/schema.prisma · GoldLedger.entryType |
| redemption | Gold retired against a real obligation the group has taken on. | prisma/schema.prisma · RedemptionOrder |
| transfer | Two entries, never one balance edit. Both land or neither. | @flashylabs/ledger · postTransfer() |
| adjustment | A correction. Entries are append-only, so a fix is a new entry. | @flashylabs/ledger · reverse() |
Entries are append-only. A correction is a new adjustment entry, never an edit — which is what makes the incident register possible and what makes a deleted mistake detectable.
The extraction
The ledger runs inside the ClaimYour.Gold monolith today. The rules that govern it live in @flashylabs/ledger — a pure, storage-agnostic package with integer minor units and a hash chain per identity. Moving the monolith's writes onto that package is the extraction, and it is what the roadmap tracks. The package will be this site's read path; today every published figure is a labelled fixture, and the live read lands with Phase 1.