Devnet · v0.44.x · Proof of Bloom

A chain shaped like
a crocus flower.

Crocus is a minimal, seasonal Nakamoto-style chain. Long dormancy, short vivid blooms, deterministic issuance, and a ledger so plain you can read it with cat. Built to make every design decision legible, testable, and easy to poke holes in.

  • Proof-of-Bloom issuance
  • JSONL-first ledger
  • Written consensus spec
  • FLWR · gSAF · pSAF
Crocus sigil — six-petal flower over orbital rings
Release
v0.44.0-alpha
Date
Status
Devnet preview

About

Time-shaped money, written in plain JSONL.

Most blockchains halve their block reward on a fixed schedule until it asymptotes to zero. Crocus halves too — but only during Blooms, finite windows of intense issuance that punctuate long stretches of dormancy. Between Blooms, new supply trickles. During a Bloom, it rains.

The result is a monetary cadence that mirrors a crocus flower: long sleep, short vivid bloom. It's a small, legible research vehicle for what happens to incentive design when issuance gains a temporal shape.

One workspace

A hardened node, a thin HTTP bridge, a deterministic simulator, a CLI, and replay/repair utilities — all in a single Cargo workspace that builds in under a minute.

JSONL ledger

blocks.jsonl, utxo.jsonl, mempool.jsonl are the source of truth. Every consensus event is one JSON line. Rebuild indices from them any time.

Written spec

Every validity, difficulty, issuance, and mempool rule lives in docs/consensus-spec.md with src/path:line citations — and every gap is catalogued, not glossed.

Craftable scarcity

Three denominations — FLWR, gSAF (× 165), pSAF (× 75 000) — for a policy layer that treats minting and crafting as first-class operations.

Architecture

Four processes. Three JSONL files. One index.

WalletX Derive · canonicalize · sign · POST crocus_walletx curl / SDK Cosmos-style HD keys mempoold HTTP bridge · policy · RBF · GC POST /submit rate limits · bans header-first gossip devnet Deterministic simulator --blocks N reproducible seeds issuance exploration node block producer · chain selector · miner · observer HTTP /tx · /mine/once · /chain/tip · /status P2P length-prefixed JSON · ban-score · rate limits /metrics (Prometheus) · /events (SSE) JSONL ledger · source of truth blocks.jsonl · utxo.jsonl · mempool.jsonl append-only · crash-safe · fully replayable redb key/value index · cache tip · tx · addr tables rebuildable from JSONL via crocus_repair

What's in the box

Eight binaries, one Cargo workspace.

nodeHTTP · P2P · SSE

Block producer and chain selector

Proof-of-Bloom PoW, integer-stepped difficulty, cumulative-work fork choice, JSON routes on axum, optional metrics/events.

mempooldHTTP bridge

Policy-enforcing submission edge

Canonical JSON policy, fee floor, RBF, per-IP rate limits, mempool GC by byte/entry/age. Optional header-first gossip.

devnetsimulator

Reproducible issuance scenarios

Deterministic block generator driven by --blocks N and --root <dir>. Ideal for testing seasonal issuance end-to-end.

walletxCLI

Sign, canonicalize, post

HD key derivation, deterministic tx-id derivation via canonical JSON, address helpers, optional HTTP POST through mempoold.

crocus_replay

Fully replayable ledger

Rebuild utxo.jsonl or the chain index from blocks/<hash>.json envelopes. --verify-only accepts operator checkpoints as assertions.

crocus_repair

Key/value index rebuild

Regenerate the redb index (tip · tx · addr tables) from blocks.jsonl in one shot. Useful after adversarial testing.

crocus_snapshot

Consistent snapshots

Capture a point-in-time view of the ledger root directory, with cross-store tip consistency checks.

crocus_stats

Policy and supply audit

Walk the ledger and summarize issuance, fees, total supply, and policy state at any height.

Issuance model

Three levels of periodicity.

Block → Bloom → Cycle → Era. Every number comes straight from src/consensus/constants.rs.

UnitDurationBehaviour
Block ~10 min target Deterministic per-height subsidy inside a Bloom; zero outside.
Bloom 2 016 blocks · ~14 days Reward window inside each Cycle. Three Blooms per Cycle.
Cycle 26 weeks · ~half year One Bloom plus ~24 weeks of dormancy.
Era 8 Blooms Halves the per-Bloom pool: ERA0_BLOOM_POOL / 2^era.
FLWR
Base unit · base of Proof-of-Bloom rewards
×165
gSAF
Gold saffron · 1 gSAF = 165 FLWR
×75 000
pSAF
Purple saffron · 1 pSAF = 75 000 FLWR

Per-Bloom pool starts at 56 250 000 FLWR. Asymptotic cap: 900 000 000 FLWR. Full derivation and edge cases: consensus-spec §3 ↗.

Quickstart

Zero to mined block in a minute.

  1. 1

    Clone and build

    git clone https://github.com/SativusCrocus/crocus
    cd crocus
    cargo build --release --workspace
  2. 2

    Run the node

    target/release/node --http 127.0.0.1:18080 --root devnet
  3. 3

    Mine a handful of blocks

    target/release/devnet --blocks 20 --root devnet
    curl -s http://127.0.0.1:18080/chain/tip | jq .
  4. 4

    Guard write endpoints

    export CROCUS_API_TOKEN='use-a-real-value'
    # /tx and /mine/once now require Authorization: Bearer <token>

Explorer

Point at any running node.

Paste your node's HTTP base below. The page persists it locally and rewires any downstream helpers.

Tip: start a local node, paste http://127.0.0.1:18080.

Sister protocols

Part of a family of verifiable primitives.

Crocus is one of several research vehicles under @SativusCrocus — each exploring a different thin layer between cryptographic assurance and real economic flow.

Roadmap

What landed, what's next.

  1. Phase 3.2

    redb key/value index replaces sled

    Four stacked PRs — scaffold, writers, migrator, drop — move the light DB from sled trees to a single redb file with crash-safe atomic writes.

  2. Phase 4

    Written consensus specification

    A 766-line consensus-spec.md with src/path:line citations on every rule and a 20-row catalogued gap table flowing into Phase 5/6.

  3. Phase 5.1 · 5.2 · 5.4

    Security groundwork

    SECURITY.md cleanup, threat model extended to consensus (selfish mining, eclipse, long-range, mempool exhaustion), and CROCUS_API_TOKEN Bearer auth on write endpoints.

  4. Phase 5.3

    ed25519 P2P peer authentication

    Persistent node identity at <root>/.crocus/node_key; signed handshake in Version/VersionAck; optional peer pinning.

  5. Phase 6

    Test coverage expansion

    Fuzz expansion (chain index, SSE parser), property tests for consensus-critical code, end-to-end integration tests for HTTP + P2P.