Every published signal commits a 32-byte SHA-256 over 7 specific authorship fields to a 0-value transaction on Base mainnet (chain_id 8453). RONIN cannot retroactively edit the claim — RONIN does not control Base.
| Block | When | Canonical hash (32 bytes) | Tx |
|---|---|---|---|
| Loading from Base mainnet… | |||
The canonical hash is computed deterministically: SHA-256 over JSON.stringify of {signal_id, author_user_id, entry_price, target, stop_loss, published_at_iso, recipe_name} with sort_keys=True. The hash field excludes PII by design — no email, no IP, no operator identity.
The fixture below is the L5 smoke-test signal. Click Compute hash — your browser runs SHA-256 via SubtleCrypto, mirroring the Python implementation. The output should match the on-chain hash from the smoke transaction. Edit any field to see the hash change.
—
Read the Python implementation: ronin_crypto/services/onchain_anchor.py · compute_canonical_hash. The JS here mirrors json.dumps(sort_keys=True, separators=(',',':'), ensure_ascii=False) and unicodedata NFC normalization.
The canonicalization function is 20 lines of Python. SHA-256 over 7 named fields, sorted, UTF-8 encoded, NFC normalized. No hidden inputs.
The publisher wallet's full transaction history is public on basescan. Around 100 independent Base nodes worldwide hold the same record.
The SHA-256 widget above runs in your browser via SubtleCrypto. Same fields in → same hash out. RONIN never sees your inputs.
Every validation capability we claim on the homepage flips green on this page when its code and data are both wired. No claim ships before its row is green. This page updates every 60 seconds from /api/audit/validation-status — same endpoint anyone can curl.
What this means: a ● means the code shipped AND the backing data is live — the marketing claim is provable. A ● means code is ready and we're waiting for the first run. A ● means code is ready and an operator action is pending. The page is the scorecard.
Note: this section tracks a separate Base Sepolia contract for edge-retraction events. The L5 live anchor ledger above is the canonical surface — it covers every published signal, not only retractions. This block is retained while the contract finishes its testnet soak.
| Edge | Threshold spec | Status | Last update | Tx |
|---|---|---|---|---|
| Loading from chain… | ||||
For every retracted edge above we replay the signals it would have fired after its retraction date and compare them against real outcomes. A verdict is only reported when the difference is statistically significant; otherwise we publish the sample size that would settle it. Two of these replays were withdrawn entirely because the test itself was invalid, and we show that rather than a number. Source ↗
Until 2026-07-25 this table decided verdicts on a bare two-percentage-point difference, with no significance test. At these sample sizes the standard error is larger than that, so it published noise as findings in both directions. The rule was replaced and every affected row re-derived; the corrections are visible below.
| Edge | Retracted | Cohort n | vs control | Significance | n to settle | Verdict |
|---|---|---|---|---|---|---|
| Loading post-mortem… | ||||||
The retractions above are edges that reached production and were pulled. This is the larger record: hypotheses tested and rejected before they ever shipped. We publish the mechanism that killed each one, never the parameters, because the thesis is what you can check and the thresholds are what took the work.
Read the classes carefully, because they do not carry equal weight. A leak or simulation kill proves our own measurement was wrong; it does not prove the market lacks that edge. Only beta and statistical kills are claims about the market itself.
For every NO_TRADE signal the gates issued, we paper-trade it at the entry the gates would have suggested and measure realized PnL over the signal's horizon. If RONIN's skips would have lost money on average, the selection beats coin-flip. Anonymized aggregate across all tenants — no per-tenant data exposed.
Every active gate has a training-time hit-rate band. Each week we measure the realized hit-rate of signals that gate passed and compare. Drift above 10pp from the training band means the gate has stopped working as claimed. Aggregate counts only — no per-gate data exposed.