Public registry · cryptographic pre-registration

Every prediction is hashed and anchored into a public chain.

The honest version of an AI trading record isn’t a screenshot of yesterday’s wins. It’s a history that can’t be edited after the fact. Trench captures every prediction at the moment of generation, hashes it, and writes a daily chain entry that references the prior day’s hash. Modify any past bundle and every subsequent hash breaks. Anyone can verify any prediction independently.

Chain head
Days anchored
Latest entry
First anchored
Head hash (SHA256)

How verification works

Every analyzer cycle the bot runs produces a "bundle" — the full prompt input, the raw response, and the parsed signal. The bundle is captured to disk at the exact moment of generation. Each midnight UTC, the day’s bundles are hashed (SHA256, line by line), summarised into a daily record, and that record’s canonical JSON is itself hashed to produce combined_hash.

The chain is append-only: each day’s record carries the prior day’s combined_hash as prev_hash. Tampering with day N silently invalidates every prev_hash in days N+1 through today. The /api/registry/index.json endpoint is the canonical chain.

Independent corroboration: each day’s registry URL is also submitted to the Internet Archive’s Wayback Machine, creating a third-party timestamped snapshot. To trust the chain, you don’t need to trust trenchsignals.io alone — you can cross-check our daily file against the Wayback record from that same date.

Verify a bundle

If you have a bundle (we’ll publish on request — email registry@trenchsignals.io), paste its SHA256 below to confirm whether and when it was registered.

How to verify the chain end-to-end

Anyone with a Python interpreter can replay the chain. The script is open and the canonical JSON form is documented:

import hashlib, json, urllib.request

idx = json.loads(urllib.request.urlopen(
    "https://trenchsignals.io/api/registry/index.json").read())

prev = "GENESIS"
for entry in idx["chain"]:
    full = json.loads(urllib.request.urlopen(
        f"https://trenchsignals.io/api/registry/{entry['date']}.json").read())

    # Recompute combined_hash from the canonical body
    body = {k: v for k, v in full.items() if k not in ("combined_hash", "anchored_at")}
    canonical = json.dumps(body, sort_keys=True, ensure_ascii=True, separators=(",",":"))
    computed = hashlib.sha256(canonical.encode()).hexdigest()

    assert full["prev_hash"]   == prev,                    f"prev mismatch on {entry['date']}"
    assert full["combined_hash"] == computed,              f"hash mismatch on {entry['date']}"
    assert entry["combined_hash"] == full["combined_hash"], f"index mismatch on {entry['date']}"
    prev = full["combined_hash"]

print("OK — chain verifies clean")

Recent chain entries

Date Bundles Combined hash (SHA256, truncated)
Loading chain…

What this protects against

The most common claim in any "I built an AI that beats the market" story is unverifiable past performance. Anyone can claim, after the fact, that they predicted X. The honest test is whether the prediction existed in writing before the outcome was known. This registry is that proof layer: every cycle’s bundle is hashed and chained the same night it’s captured, independently archived to the Wayback Machine within hours, and verifiable by anyone with no cooperation needed from us.

A copycat starting today cannot fabricate prior predictions because the chain’s timestamps are anchored externally. The earliest any new participant’s registry can be is the day they start. Time spent operating in public is not catchable by working harder.