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

Landed. Every movement goes through postEntry; the legacy-writer list in eslint.ledger-legacy.mjs is empty and the rule keeps it that way. SEAM-4 Phase 1 gates service-to-service calls through one guard. 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 · eslint.ledger-legacy.mjs · SEAM-1, SEAM-4 · read 2026-08-25

Entry types

TypeMeaningSource of truth
issuanceFlashy Gold created against a funded source. Never discretionary.prisma/schema.prisma · GoldLedger.entryType
redemptionGold retired against a real obligation the group has taken on.prisma/schema.prisma · RedemptionOrder
transferTwo entries, never one balance edit. Both land or neither.@flashylabs/ledger · postTransfer()
adjustmentA 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.