Don't trust us. Check us.
A track record you have to take on faith is an advertisement. Here is the chain of evidence behind every scorecard on this site: what you can check yourself, with which tool, and what it does not prove.
The referee's public key
- Algorithm
- Ed25519
- Key id
- 012ee526613d7e5a
- Public key
- dPym5kD8ZwOWweXSgf+bIMYlH5Kn3PGo6bFUJ0uzbDA=
- Live since
- 29 Oct 2026
- Published at
- app.manometer.bet/netz/pubkey
Every bundle carries the key that signed it, so old bundles stay checkable if the key is ever rotated. Compare it with the published one.
Seven links, each one fixed before the next exists.
The order matters. Each link is committed before anyone can know the information that would make it worth faking: the pick before kick-off, the receipt before the result, the anchor before anyone could want to change it.
What the referee signs.
| Field | What it fixes |
|---|---|
receivedTs | The millisecond the proposal arrived, on our clock, later backed by the hourly anchor. |
payloadSha256 | The fingerprint of the ciphertext, or of the canonical proposal if it was sent in clear. Change one byte and it no longer matches. |
drand | The chain and the round the seal opens at. The round is a time anyone can compute. |
snapshot | The Merkle root of the whole pre-match market at receipt. After opening, the bundle carries the one relevant row with its path to this root. |
rid | The receipt id: the first 24 hex characters of the SHA-256 of the receipt's own content. |
keyId, sig | Which referee key signed it, and the Ed25519 signature over everything else. |
Canonical JSON means object keys sorted, no whitespace, undefined fields dropped, so anyone computes exactly the same bytes. Merkle trees follow RFC 6962, the standard used by Certificate Transparency.
{
"v": 1,
"typ": "manometer.receipt",
"sourceId": "nordic-models",
"proposalId": "nm-2026-10-29-0412",
"receivedTs": 1793266867318,
"sealed": true,
"payloadSha256": "8ce78c3a5e8727141ecce663c7f0e1afaa6b398f77ae65c0393f74b3b20e6806",
"drand": {
"chain": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
"round": 33613012,
"opensTs": 1793642400000
},
"snapshot": {
"id": "snap_20261029T094105Z",
"root": "6b53b9a0155cd54029ae5bc4e62f0ea070faa060e9cc56a5dddb924961438c16",
"ts": 1793266865178,
"n": 1458
},
"referee": "manometer-referee/1",
"rid": "r_58df37a36872e26a5e9d4599",
"keyId": "02d02ca9b91687c8",
"sig": "hpmMgQq6t0k/xb2We4Ev33OYi1BBgJ3fw4xJJzojCnEAcGmPadOu+EmJPaKC2s8SQuhtRU376djybmz3qusaAw=="
}
A real, sealed sample proposal for a game on 2 Nov 2026, signed with a sample key. It opens at drand round 33,613,012, 2026-11-02 18:00 UTC. Until then, nobody can read it, including us.
And, just as important, what it does not.
Proof that overclaims is worse than none. Each check below answers one question precisely.
| Check | Proves | Does not prove | Where |
|---|---|---|---|
| Signature | The referee issued exactly this receipt. | That the referee's clock was right; the anchor covers that. | Browser, CLI |
| Receipt id | The receipt was not edited after it was issued. | Anything about the proposal's content. | Browser, CLI |
| Fingerprint | The ciphertext or proposal you hold is the one that was received. | That the proposal was any good. | Browser, CLI |
| Time lock | The seal could not be opened before its round; it opens to the proposal in the bundle. | That the source chose a sensible round; a seal opening before kick-off is marked. | Round in browser, opening in CLI |
| Anchor | The receipt existed no later than the Bitcoin block that holds the anchor. | That it existed no earlier; the receipt time is the referee's. | Path in browser, Bitcoin in CLI |
| Market proof | The price used for scoring was in the market snapshot of that second. | That the market data was complete; it is one board's view. | CLI |
| Bundle root | Nothing was added to or removed from the scorecard. | That the source sent all its picks to us, rather than only some of them. | CLI |
Open code proves what we publish, not what runs on our server.
Nobody should claim otherwise. The protection for a signal source comes from the seal, not from the code: in the valuable window, before kick-off, we only hold ciphertext. What runs on our server afterwards cannot change what the receipts and anchors already fixed.
What open source gives you: an Agent whose behaviour you can read, a protocol anyone can implement, and a verifier that computes exactly what the referee computes. Its library files are byte-identical copies of the referee's own.
What is open, and whenThe verifier.
It needs the bundle and nothing from us: drand beacons come from the public drand network, Bitcoin headers from any block explorer. --offline skips those lookups and relies on the bundle alone.
# Node 18 or newer · the only dependency is tlock-js (drand) npm install node manometer-verify.js all nordic-models.bundle.json # or one part at a time node manometer-verify.js receipts nordic-models.bundle.json # signatures, fingerprints, hourly anchors, Bitcoin header node manometer-verify.js seals nordic-models.bundle.json # every seal opens at its drand round, to the published proposal node manometer-verify.js prices nordic-models.bundle.json # market at receipt, closing line, CLV recomputed node manometer-verify.js results nordic-models.bundle.json # results from the final score, paper P&L recomputed # exit code 0 = everything checked out · 1 = at least one mismatch · 2 = unreadable input
Qualify without showing a single pick.
Tipster, syndicate or modeller: register, confirm your email, get your key, seal your first proposals and watch the referee score them. Nothing is executed until the closing line says so.