Personal research project — paper-testing & tuning, not raising capital.
Reproducible · zero-dependency · none of our code

Don't trust us — check us

Every hash we publish, you can re-derive yourself — with one command, on a clean machine, without a single line of our code. If a single byte of history was altered after the fact, the recompute diverges and points to the exact broken row.

The 5-minute path

stranger → reproduced in <5 min
  1. 1

    Download verify_spa.py and pull the full chains from /api/rates-desk/full-chain/* (each serves the WHOLE file, uncapped).

  2. 2

    Check the checker: shasum -a 256 verify_spa.py = the pinned SHA-256 below.

  3. 3

    Run python3 verify_spa.py data/ — zero-dependency, none of our code at check time.

  4. 4

    Exit 0 = reproduces; 1 = mismatch with the exact broken_at. Or just watch the live demo below.

The one command

Download the verifier, pull the COMPLETE chains straight from the live API (no repo checkout needed), then run it. Exit code 0 = everything reproduces byte-for-byte; 1 = any mismatch, and the tool prints the precise broken_at.

Pull the full chains, then verify

B=https://api.earn-defi.com/api/rates-desk/full-chain
mkdir -p data/rates_desk/paper data/tournament data/rwa_backstop
curl -s $B/decision_log > data/rates_desk/decision_log.jsonl
curl -s $B/exit_nav     > data/rates_desk/exit_nav.json
curl -s $B/anchors      > data/rates_desk/anchors.jsonl
curl -s $B/equity_track > data/rates_desk/equity_track.jsonl
curl -s $B/tournament   > data/tournament/decision_log.jsonl
curl -s $B/nav_proof    > data/rwa_backstop/nav_proof.jsonl
curl -s $B/sleeve       > data/rates_desk/paper/rates_desk_fixed_carry_series_proof.jsonl
python3 verify_spa.py data/

Point it at the WHOLE data/ dir — it covers all 7 surfaces (rates-desk A–D plus tournament E, RWA-NAV F, sleeve G); the narrower data/rates_desk/ form only sees A–D. You can also pin the head: --expect-head <hex> (the decision-chain head, NOT the verifier script's own SHA-256), and --expect-surfaces A,D,E,F,G fails closed if a surface is absent.

First, check the checker

"Check us" only works if you can also check the checker. Before you run it, confirm the verify_spa.py you downloaded matches this pinned release byte-for-byte.

Version

verifier-v1.0

File

scripts/verify_spa.py

Spec

PROOF_CHAIN_SPEC v1.0

Verifier SHA-256

0f8c270c8c1f0c59ffc7236b1e43c1cb2aa58329faf7839c1961ce83209f81da

Confirm authenticity

shasum -a 256 verify_spa.py

Must match the SHA-256 above. If it doesn't, you don't have the authentic verifier — re-download from the pinned tag.

Full manifest: docs/VERIFIER_RELEASE.md. A tag + SHA-256 is owner-independent integrity (anyone recomputes the digest themselves). A GPG-signed git tag (provenance) is the owner's next step — intentionally not done here.

We re-derive a hash, right here

source: offline

To prove the recipe is real, this page fetches the public decision log live and recomputes one row's entry_hash itself, with the browser's SHA-256, over the same canonical JSON the spec defines (§3). No trust in the server: your browser derives the hash from the published bytes and compares it to the one we printed.

awaiting data… row ·

Canonical JSON we hashed (§3)

Recomputed in your browser (SHA-256)

Published entry_hash

Canonical rule: recursive key sort · separators (',',':') no spaces · ensure_ascii=False · UTF-8 → SHA-256 hex. Money/rate values are published as strings, so float rounding can't corrupt them. This is exactly what verify_spa.py does for the whole chain.

If the demo is offline (API unreachable), the command above still reproduces the same head from the downloaded files — the browser demo is a convenience, not a dependency.

What it verifies — precise scope

Four independent published proofs. Honestly: this is a paper research track, $0 real capital — the verifier proves the integrity of the records, not investment outcomes.

A decision_log.jsonl

The tamper-evident decision chain — every ENTRY and every REFUSAL, SHA-256-linked. Flip one past byte and the recompute diverges at that exact row.

B exit_nav.json

The liquidation-NAV schedules — every per-row proof_hash covers its inputs AND outputs AND prev_hash, so a forged net-proceeds number or a reordered row is caught.

C anchors.jsonl

The append-only head-checkpoint anchors — each in-window anchor head is re-derived from the public chain, so a fabricated historical anchor is rejected.

D equity_track.jsonl

The evidenced equity / go-live track — hash-chained like the decision chain. A forged equity number or a back-dated day diverges the recompute. This is what makes "verify the track yourself" literally true.

The files & the recipe

Public artifacts

  • data/rates_desk/decision_log.jsonl
  • data/rates_desk/exit_nav.json
  • data/rates_desk/anchors.jsonl
  • data/rates_desk/equity_track.jsonl

Full uncapped chains: /api/rates-desk/full-chain/{surface} (index at /api/rates-desk/full-chain). Also live: /api/rates-desk/proof (machine) and /refusals (human).

Documents

Hash recipe: docs/PROOF_CHAIN_SPEC.md · verifier release: docs/VERIFIER_RELEASE.md · DD pack: docs/DD_PACK.md.

⚠ Personal Research Project: SPA is a personal research project in paper validation and tuning. Not a regulated financial service. Not raising capital. Not investment advice.

Paper Trading Disclosure: All performance data reflects simulated trading on a virtual $100,000 USDC portfolio. Current paper APY: ~3.6% (variable, not a forecast). Simulated performance does not account for live slippage, liquidity impact, or smart contract execution risk. We reset our own track: only days with a real cycle log count (currently 10/30, anchor 2026-06-22). Go-live target: ~2026-07-21 — contingent on GoLiveChecker 29/29 (currently 27/29 NOT READY). See /track-record.

Not a Regulated Service: SPA is a personal research project at the paper-testing stage. This does not constitute investment advice, financial advice, or a solicitation to invest in any jurisdiction. Consult qualified professionals before making investment decisions.

DeFi-specific risks: Smart contract vulnerabilities and exploits · Protocol insolvency · Stablecoin de-pegging · Oracle manipulation · Regulatory actions · Technology failure. Funds in DeFi protocols are not covered by any investor compensation scheme.