Tipster oder Syndikat? Beweise deinen Edge, ohne einen Tipp zu zeigen, und verdiene am Gewinn, den er macht.Verdiene an deinem Edge. →
Entwickler · Contract v1

Vorschläge rein, signierte Quittungen raus.

Alles, was eine Signalquelle für die Anbindung braucht: den Vorschlags-Contract, die Versiegelung mit Zeitschloss, das Quittungsformat, wie der Schiedsrichter bewertet und wie du all das selbst prüfst. Geschrieben, damit du es an einen Entwickler weitergeben oder als vollständige Spezifikation in einen KI-Assistenten einfügen kannst.

Status

Einreichen per HTTPS
verfügbar
Versiegelung (tlock)
verfügbar
Signierte Quittungen
verfügbar
Öffentliche Scorecards
verfügbar, per Opt-in
Ausführung
ab live_small, durch den Betreiber
Extension-Messaging
geplant

Überblick

Alles, was du einreichst, ist ein Vorschlag, nie ein Auftrag. Der Betreiber entscheidet je Quelle, ob, wo und mit welchem Einsatz ein Vorschlag ausgeführt wird. Dein Einsatzhinweis und dein angegebener erwarteter Wert sind nur Hinweise und nie bindend.

  • Den erwarteten Wert berechnen wir neu: aus deinem fairen Preis gegen die real ausführbare Quote beim Buchmacher. Setzt du deinen Edge systematisch zu hoch an, wird das als EV-Ehrlichkeit gemessen und kostet dich Bewertung.
  • Jeder Vorschlag bekommt eine Quittung: angenommen oder mit Begründung abgelehnt, später bewertet mit Closing-Line-Value und Gewinn auf Papier. Über diese Rückkopplung qualifizierst du dich.
  • Neue Quellen starten in shadow, nur auf Papier. Den Aufstieg zu echtem Geld verdienst du dir mit Closing-Line-Value, nicht mit kurzfristigem Gewinn.

Die Adresse des Schiedsrichters für das öffentliche Netzwerk ist https://app.manometer.bet. Scorecards liegen unter https://manometer.bet/s/<sourceId>.

Schnellstart

Mit einer Bibliothek oder einem KI-Assistenten? Das Originator-Kit übernimmt das Versiegeln und Senden, und sein README enthält einen Prompt zum Einfügen. Gib deinem Assistenten llms-full.txt als Volltext dieser Website.

  1. Hol dir eine Source-ID und einen API-Schlüssel. Registriere dich als Signalquelle und bestätige deine E-Mail-Adresse. Beides kommt innerhalb von Minuten, und du startest in shadow.
  2. Sende einen Vorschlag im Klartext, um den Hin- und Rückweg zu sehen. Die Antwort ist deine signierte Quittung.
  3. Versiegle die nächsten. Verschlüssle auf die drand-Runde des Anpfiffs und sende nur den Geheimtext.
  4. Bewahre deine Quittungen auf. Jede Quittung lässt sich samt Ankerpfad erneut von /netz/quittung/<rid> abrufen.
  5. Sieh dir deine Scorecard in der Vorschau an und veröffentliche sie, wenn du so weit bist, oder nie.
# Klartext: beim Eingang bewertet, sofort lesbar
curl -X POST https://app.manometer.bet/netz/submit \
  -H "Content-Type: application/json" \
  -d '{
  "sourceId": "src_you",
  "apiKey": "YOUR_API_KEY",
  "proposalId": "you-2026-11-02-0001",
  "proposal": {
    "proposalId": "you-2026-11-02-0001",
    "sourceId": "src_you",
    "sport": "fb",
    "mkt": "1x2",
    "sel": "2",
    "eventIdentity": {
      "home": "Brann",
      "away": "Molde",
      "league": "Eliteserien",
      "startsTs": 1793642400000
    },
    "fairOdds": 2.6,
    "devigMethod": "shin",
    "minOdds": 2.7,
    "tsCreated": 1793266867318,
    "ttlMs": 120000,
    "stakeHint": 10,
    "ev": 6.5
  }
}'

Die Antwort ist 200 {"ok": true, "receipt": {…}}. Sendest du dieselbe Vorschlags-ID noch einmal, kommt dieselbe Quittung mit "duplicate": true zurück: genau eine Quittung pro ID, für immer.

Authentifizierung

Jede Quelle hat eine sourceId und einen apiKey. Beide stehen im JSON-Body jeder Anfrage, nie in der URL. Der Schlüssel wird nie zurückgegeben, nie in eine Datei geschrieben, die die Quelle lesen kann, und lässt sich in der Konsole rotieren. Wiederholte Fehlversuche von einer Adresse werden gedrosselt.

Endpunkte

MethodePfadZugriffWas er tut
POST/netz/submitQuelleReicht einen Vorschlag ein, im Klartext oder versiegelt. Antwortet mit der signierten Quittung.
GET/netz/pubkeyöffentlichDer Ed25519-Schlüssel des Schiedsrichters, seine Key-ID und die Parameter der drand-Chain.
GET/netz/quittung/<rid>öffentlichEine Quittung und, sobald verankert, ihr Merkle-Pfad zum stündlichen Anker.
GET/s/<sourceId>öffentlichDie Scorecard-Seite. Daten nur, wenn die Quelle veröffentlicht hat.
GET/s/<sourceId>/daten.jsonöffentlich, falls veröffentlichtDie wöchentlichen Summen. Einzelne Vorschläge und das Bundle sind nicht öffentlich.
POST/netz/vorschauQuelleVorschau deiner Scorecard, solange sie privat ist.
POST/netz/veroeffentlichenQuelleDeine Scorecard veröffentlichen oder zurückziehen.
POST/netz/bundleQuelleDein vollständiges Bundle herunterladen, solange es privat ist.

Die Routennamen gehören zu Contract v1 und ändern sich innerhalb dieser Version nicht.

Vorschlags-Contract

Pflichtfelder. Maßgeblich für die Validierung ist der Validator der Plattform; das maschinenlesbare Schema findest du in der Konsole.

FeldTypBedeutung
proposalIdstringDein eindeutiger Idempotenzschlüssel. Erneutes Einreichen mit derselben ID wird dedupliziert.
sourceIdstringDeine zugewiesene Source-ID. Muss der im Envelope entsprechen.
sportstringfb · basket · tennis · cs2 (nur Counter-Strike 2)
eventIdentityobject{ home, away, league, startsTs }. Teamnamen als einfache Strings. startsTs ist der Anpfiff in ms UTC und Pflicht. Ergänze pinId, die Pinnacle-Matchup-ID, wenn du sie hast: Damit wird die Zuordnung exakt. Im Spielekatalog kann pinId null sein, bei CS2-Spielen, die Pinnacle nicht führt; jedes Spiel trägt außerdem reference (pinnacle, sportmarket oder null).
mkt · scope · line · sel—Markt, siehe Taxonomie. scope ist standardmäßig match.
fairOddsnumber > 1Dein fairer Preis ohne Marge für die Auswahl.
devigMethodstringWie der faire Preis ermittelt wurde, z. B. shin, proportional, model. Pflicht: Ohne diese Angabe sind erwartete Werte nicht vergleichbar.
minOddsnumber > 1Deine Slippage-Untergrenze. Darunter wird der Vorschlag mit line moved abgelehnt.
tsCreated · ttlMsnumberErstellungszeit in ms UTC und Lebensdauer. Value verfällt; abgelaufene Vorschläge werden abgelehnt.
{
  "proposalId": "you-2026-11-02-0001",
  "sourceId": "src_you",
  "sport": "fb",
  "mkt": "1x2",
  "sel": "2",
  "eventIdentity": {
    "home": "Brann",
    "away": "Molde",
    "league": "Eliteserien",
    "startsTs": 1793642400000
  },
  "fairOdds": 2.6,
  "devigMethod": "shin",
  "minOdds": 2.7,
  "tsCreated": 1793266867318,
  "ttlMs": 120000,
  "stakeHint": 10,
  "ev": 6.5
}

Optionale Felder

FeldTypBedeutung
stakeHintnumberEmpfohlener Einsatz in EUR. Unverbindlich.
evnumberDein angegebener erwarteter Wert in %. Wird protokolliert und mit unserem verglichen.
confidence0–1Deine eigene Konfidenz.
rationalestringFreitext oder Tags: „steam move“, „model edge“.
clvRefstringSchlusskurs-Referenz, gegen die bewertet wird. Standard: der Sharp-Schlusskurs.
originOdds · originBooknumber · stringWo du die Quote gesehen hast, für eine Plausibilitätsprüfung.
bookQuotesarrayQuoten für dieselbe Auswahl bei anderen Buchmachern, z. B. [{"book":"stoiximan","odds":2.15}]. Wir berechnen den erwarteten Wert je Buchmacher neu und leiten zum besten weiter, bei dem wir platzieren können.
live · endsTsboolean · numberLive-Vorschlag, siehe unten.
bestOfnumberSerienlänge für CS2 und Tennis: 1, 3 oder 5.
otIncluded · settleRule—Basketball: Verlängerung eingeschlossen? Tennis: Regel bei Aufgabe.

Markt-Taxonomie

Handicap-Linien gelten aus Sicht des Heimteams; für das Auswärtsteam gilt das Spiegelbild.

SportartmktscopeEinheit der Liniesel
fb1x2match—1 · X · 2
ahmatchTore, Viertellinien erlaubthome · away
totalmatchToreover · under
basketmlmatch—home · away
spreadmatchPunktehome · away
totalmatchPunkteover · under
tennismlmatch—home · away
setHcmatchSätzehome · away
gamesHcmatchSpielehome · away
gamesTotalmatchSpieleover · under
cs2mlmatch—home · away
mapHcmatchMapshome · away
mapsTotalmatchMapsover · under
mapWinnermap1 · map2 · map3—home · away
roundsAhmap1 · map2 · map3Rundenhome · away
roundsTotalmap1 · map2 · map3Rundenover · under

CS2-Moneylines sind Zweiweg-Märkte; eine Auswahl für Unentschieden gibt es nicht. Der Schiedsrichter bewertet die Märkte, für die das Board einen fairen Pinnacle-Preis hat, und CS2-Moneylines auf das Spiel auch ohne ihn; siehe Bewertungsregeln.

Live-Vorschläge

Ein Vorspiel-Vorschlag zum Anpfiff oder danach wird abgelehnt. Ist dein Signal live, setze "live": true: startsTs bleibt dann der Anpfiff, muss aber in der Vergangenheit liegen. Deinen fairen Live-Preis lieferst du selbst; ein veralteter fairer Vorspiel-Preis wird nie ersatzweise genommen. Faire Live-Preise verfallen in Sekunden, deshalb beträgt das Höchstalter 15 statt 120 Sekunden. Ergänze endsTs, damit auf einen entschiedenen Abschnitt nicht gewettet werden kann. Live-Vorschläge gehen im Klartext, weil das Spiel schon läuft. Nur Sieger-Märkte (1X2, Moneyline), Netzwerk-Quoten höchstens 60 Sekunden alt. Im Spiel gibt es keinen Schlusskurs, deshalb misst der Schiedsrichter die Kante beim Eingang: beste Netzwerk-Quote gegen die faire Quote dieses Moments, zuerst Pinnacle live, sonst Sportmarket ohne Marge; ohne beide gibt es keinen Wert. Der Eintrag nennt Quelle und Alter der fairen Quote. Für die Stufen zählt diese Kante wie Closing-Line-Value, solange die abgerechneten Ergebnisse dazu passen: ab 30 abgerechneten Live-Vorschlägen höchstens 2 Standardabweichungen unter dem, was die fairen Quoten erwarten lassen. Marktdaten gibt es drei Stunden nach dem Eingang. Die Ausführung von Live-Signalen schaltet der Betreiber je Quelle frei.

Versiegelung

Während du dich qualifizierst, musst du uns deine Tipps nicht zeigen. Verschlüssle das Vorschlags-JSON mit tlock auf die drand quicknet-Runde des Anpfiffs und sende nur den Geheimtext. Niemand kann ihn vor dieser Runde öffnen, auch der Betreiber nicht. Zu dieser Runde öffnet ihn der öffentliche drand-Beacon, und der Schiedsrichter bewertet ihn auf dem Stand der Sekunde seines Eingangs, gegen den damals aufgenommenen Markt-Snapshot.

Chain
drand quicknet, 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971
Takt
eine Runde alle 3 Sekunden, Genesis 1692803367
Zielrunde
round = ceil((startsTs / 1000 − 1692803367) / 3) + 1, die erste Runde zum oder nach dem Anpfiff
Format
age, mit einem Empfänger tlock <round> <chain>
  • Ein Siegel, das sich mehr als 60 Sekunden vor dem Anpfiff öffnet, wird bewertet, ist aber nicht ausführbar. Eines, das beim Eintreffen schon offen ist, wird mit 400 abgewiesen.
  • Alles oder nichts: Jedes Siegel erscheint auf deiner Scorecard. Ein Siegel, das sich nicht zu einem gültigen JSON-Vorschlag öffnet, zählt als ungültiges Siegel.
  • Der Anpfiff kommt aus der zugeordneten Board-Zeile, sonst aus deinem eventIdentity.startsTs.
  • Vorschlags-ID und Source-ID im Siegel müssen denen im Envelope entsprechen; ein versiegelter Vorschlag, dessen Inhalt abweicht, wird nicht bewertet.
// versiegelt: Node 18+, npm install tlock-js@0.9.0. Die Verschlüsselung braucht keine Netzverbindung.
const { timelockEncrypt, Buffer } = require("tlock-js");
const QUICKNET = { hash: "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
  public_key: "83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a",
  period: 3, genesis_time: 1692803367, schemeID: "bls-unchained-g1-rfc9380", metadata: { beaconID: "quicknet" } };
const chain = { chain: () => ({ info: async () => QUICKNET }) };
const roundAt = (ms) => Math.ceil((ms / 1000 - QUICKNET.genesis_time) / QUICKNET.period) + 1;

const proposal = {"proposalId":"you-2026-11-02-0001","sourceId":"src_you","sport":"fb","mkt":"1x2","sel":"2","eventIdentity":{"home":"Brann","away":"Molde","league":"Eliteserien","startsTs":1793642400000},"fairOdds":2.6,"devigMethod":"shin","minOdds":2.7,"tsCreated":1793266867318,"ttlMs":120000,"stakeHint":10,"ev":6.5};
const round = roundAt(proposal.eventIdentity.startsTs);       // 33,613,012: die erste Runde zum Anpfiff oder danach
const ciphertext = await timelockEncrypt(round, Buffer.from(JSON.stringify(proposal)), chain);

const res = await fetch("https://app.manometer.bet/netz/submit", {
  method: "POST", headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ sourceId: "src_you", apiKey: "YOUR_API_KEY", proposalId: proposal.proposalId, sealed: { ciphertext } }),
});
const { receipt } = await res.json();                        // aufbewahren: das ist dein Nachweis

Quittungen

Jeder angenommene Vorschlag bekommt eine Quittung, signiert mit dem Ed25519-Schlüssel des Schiedsrichters (GET /netz/pubkey).

{
  "v": 1,
  "typ": "manometer.receipt",
  "sourceId": "nordic-models",
  "proposalId": "nm-2026-10-29-0412",
  "receivedTs": 1793266867318,
  "sealed": true,
  "payloadSha256": "c5b23b38cfe7d1c43eea855f5098d1eeaa58837341cc3d7c92a7b3bb2104637e",
  "drand": {
    "chain": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
    "round": 33613012,
    "opensTs": 1793642400000
  },
  "snapshot": {
    "id": "snap_20261029T094105Z",
    "root": "6b53b9a0155cd54029ae5bc4e62f0ea070faa060e9cc56a5dddb924961438c16",
    "ts": 1793266865178,
    "n": 1458
  },
  "referee": "manometer-referee/1",
  "rid": "r_97be19970a67f532344344fb",
  "keyId": "02d02ca9b91687c8",
  "sig": "fAMQgeQr+3+JDBeABEHv5vZqjb6XpzyGtTescRX0BHLuykBnfaAiovOt7YSKxCJ5jYnFuvLXTktupy+KvAmqBw=="
}
  • Kanonisches JSON: Objektschlüssel sortiert, kein Whitespace, undefinierte Felder entfernt.
  • rid = r_ + die ersten 24 Hex-Zeichen von SHA-256 über die kanonische Quittung ohne rid, keyId und sig.
  • keyId = die ersten 16 Hex-Zeichen von SHA-256 über den rohen öffentlichen 32-Byte-Schlüssel.
  • sig = Base64-Ed25519-Signatur über die kanonische Quittung ohne sig.
  • payloadSha256 = SHA-256 des Geheimtexts (versiegelt) oder des kanonischen Vorschlags (Klartext).
  • Markt-Snapshot. Weil ein versiegelter Vorschlag beim Eintreffen nicht lesbar ist, friert der Schiedsrichter das gesamte Vorspiel-Board dieser Sekunde ein: den fairen Pinnacle-Preis ohne Marge und die Quoten aller Buchmacher für 1X2, Moneylines sowie die Handicap- und Total-Linien, für die es einen fairen Preis gibt. CS2-Zeilen bleiben auch ohne fairen Preis drin: Ausführbar hängt am Buchmacher-Preis, der faire Preis zählt erst für den Schlusskurs. Seine Merkle-Root (RFC 6962) steht in der Quittung; nach dem Öffnen enthält dein Bundle die eine relevante Zeile samt Pfad.
  • Externer Zeitanker. Jede Stunde bildet der Schiedsrichter eine Merkle-Root über alle neuen Quittungen, Schlusskurse und Ergebnisse und reicht nur diesen 32-Byte-Hash bei den öffentlichen OpenTimestamps-Kalendern ein, die ihn in Bitcoin festschreiben. Der .ots-Nachweis liegt im Bundle und lässt sich auch mit dem offiziellen ots verify prüfen.

GET /netz/quittung/<rid> liefert { ok, receipt, anchor }, wobei anchor gleich { anker, index, n, wurzel, pfad } ist: Das Blatt ist SHA-256(0x00 ‖ kanonische signierte Quittung), der Pfad verläuft von unten nach oben, und bis zum nächsten stündlichen Anker steht dort null. Du kannst jede Quittung im Browser prüfen.

Lebenszyklus

submitted → valid → enriched → proposed → accepted | rejected | expired
accepted → placed → settled → graded

Jeder Endzustand erzeugt eine Quittung, und eine Ablehnung nennt immer ihren Grund:

GrundBedeutung
line moved below originator minOddsDie ausführbare Quote ist unter deine Untergrenze gefallen.
stale signalÄlter als das Höchstalter je Quelle, standardmäßig 120 Sekunden.
expiredDie Lebensdauer ist vor der Verarbeitung abgelaufen.
event already startedEin Vorspiel-Vorschlag zum Anpfiff oder danach. Für Live setze live: true.
live signals not enabled for this sourceDer Betreiber hat Live für deine Quelle noch nicht freigeschaltet.
live, but not started yet or already finishedLive vor dem Anpfiff oder nach endsTs.
real EV below policy minimumDer neu berechnete erwartete Wert, nicht deine Angabe, liegt unter dem Schwellenwert der Quelle.
odds outside policy band or capsRisikolimits der Plattform: Quotenbereich, offene Wetten, Tages-Exposure.
no executable book odds or no matchDas Ereignis oder der Markt lässt sich bei keinem ausführenden Buchmacher zuordnen.

Die bewertete Quittung ergänzt die real platzierte Quote und den Einsatz, den Schlusskurs ohne Marge, den Closing-Line-Value, das Ergebnis und den Gewinn. Aus diesen Daten entsteht deine Bewertung.

Bewertungsregeln

  • Ausführbar = gültig beim Eingang (nicht abgelaufen, vor dem Anpfiff), nicht älter als das Höchstalter deiner Quelle, das Ereignis auf dem Board zugeordnet, der Markt bewertbar (1X2 und Moneylines, Fußball-Handicaps und -Totals, Basketball-Spreads und -Totals) und ein Buchmacher im Netzwerk bietet mindestens deine Mindestquote.
  • CLV = beste ausführbare Quote beim Eingang ÷ Schlusskurs ohne Marge − 1. Der Schlusskurs ist Pinnacle zum Anpfiff; veröffentlicht Pinnacle keinen, der letzte faire Vorspiel-Preis. Bei CS2-Spielen, die Pinnacle nicht führt, ist das die letzte Sportmarket-Linie ohne Marge, am Schluss-Eintrag mit fs: "smk" markiert; ohne fairen Preis vor dem Anpfiff gibt es keinen CLV. Close-Beat = CLV > 0.
  • Neu berechneter EV = beste ausführbare Quote ÷ deine faire Quote − 1. EV-Ehrlichkeit = Σ neu berechnet ÷ Σ angegeben.
  • Einzigartigkeit = die Auswahl zeigte beim Eingang auf unserem Board noch keinen Edge von 2 % oder mehr.
  • P&L auf Papier = flach 1 Einheit zur besten ausführbaren Quote, abgerechnet nach dem Endstand des Spiels, der von Pinnacle, aus der Buch-Historie, von OddsPapi, bo3.gg oder aus der Websuche kommt oder als von Hand eingetragen gekennzeichnet ist; Viertellinien werden geteilt, annullierte Wetten zählen null. Gewinn wird gezeigt, qualifiziert aber nie.

Leiter, Einsatzhöhe, Routing

shadownur auf Papier

Jede neue Signalquelle und jeder neue Agent fängt hier an. Die ganze Pipeline läuft, platziert wird nichts.

Routing-Gewicht 0
qualifyingnur auf Papier

Mindestens 100 Vorschläge über mindestens 30 Tage, davon mindestens 60 % ausführbar. Closing-Line-Value noch nicht bewiesen.

Routing-Gewicht 0
live_smallechtes Geld, gedeckelt

Closing-Line-Value bewiesen: eine Close-Beat-Rate von 55 % oder mehr oder ein durchschnittlicher CLV von +1,5 % oder mehr, über mindestens 60 Vorschläge mit Schlusskurs.

Routing-Gewicht 0,25
liveechtes Geld, volles Regelwerk

Anhaltender Closing-Line-Value auf live_small. Bricht der rollierende CLV ein, folgt automatisch die Rückstufung.

Routing-Gewicht 1

Warum Closing-Line-Value und nicht Gewinn: Bei 100 bis 200 Wetten ist Gewinn vor allem Varianz; den Schlusskurs zu schlagen ist bei dieser Stichprobengröße das einzige statistisch aussagekräftige Zeichen für Können.

Einsatzhöhe. Der Betreiber legt je Quelle eine Policy fest: den Einsatzmodus (eigener Kelly auf einem Abschlag vom neu berechneten erwarteten Wert, ein Prozentsatz deines Einsatzhinweises oder fest), den Edge-Abschlag (neue Quellen: nur etwa 30 % des gezeigten Edge gelten als belastbar), den Quotenbereich, den minimalen erwarteten Wert, den Höchsteinsatz, das Tages-Exposure und die offenen Wetten. Du beeinflusst die Einsatzhöhe mit genauen fairen Preisen, ehrlichen Angaben, engen Mindestquoten, schnellem Einreichen und einer wachsenden Schlusskurs-Bilanz.

Routing und Zuordnung. Ab live_small werden Vorschläge über die Partnerkonten des Netzwerks ausgeführt. Jede aus einem deiner Vorschläge platzierte Wette trägt deine sourceId und proposalId; die Abrechnung je Quelle entsteht aus diesen abgerechneten Wetten. Routing-Gewicht je Stufe: shadow 0, qualifying 0, live_small 0,25, live 1, gedeckelt durch die Kontokapazität. Konditionen: 15 % des Nettogewinns der aus deinen Signalen ausgeführten Wetten, mit High-Water-Mark auf deinem eigenen Signalbuch, monatlich ausgezahlt aus dem Anteil von Manometer.

Scorecards und Bundles

Deine Scorecard bleibt privat, bis du sie veröffentlichst: Öffne manometer.bet/s/<sourceId>, melde dich mit deiner Source-ID und deinem Schlüssel an und veröffentliche sie; zurückziehen kannst du sie, wann du willst. Öffentlich zeigt sie nur Summen, jeden Montag um 00:00 UTC aktualisiert, und zählt Spiele, die bis dahin angepfiffen wurden: Closing-Line-Value, Close-Beat-Rate, ausführbaren Anteil, Yield auf Papier, Einzigartigkeit, Drawdown und die Leiter. Angemeldet siehst du außerdem die EV-Ehrlichkeit, das Timing, die Auswertungen nach Markt, Vorlaufzeit, Quotenbereich und Grund sowie jeden Vorschlag, versiegelte nur als Quittung und Öffnungsrunde.

Das Bundle (POST /netz/bundle oder Download my bundle) bekommst nur du, und du entscheidest, wer es sieht. Es enthält die signierten Quittungen, die per Zeitschloss gesperrten Geheimtexte, die geöffneten Vorschläge mit ihren drand-Beacons, die Marktzeile beim Eingang mit ihrem Merkle-Pfad, den Schlusskurs und den Endstand mit ihren Pfaden zu den stündlichen Ankern, die OpenTimestamps-Nachweise der Anker, den öffentlichen Schlüssel des Schiedsrichters und die Bewertungsregeln. Marktdaten gibt es ab Anpfiff: Bis dahin enthalten Bundle und Vorschau deine Quittungen und Vorschläge, aber weder die Marktzeile noch den besten Preis oder den fairen Wert. Öffentliche Summen tragen eine Wurzel über die Quittungsnummern; manometer-verify totals <bundle> --stand <ms> --root <hex> --n <anzahl> prüft, dass sie zu genau diesen Vorschlägen gehören.

Verifier

manometer-verify prüft ein Bundle, ohne dass du unseren Servern vertrauen musst. Node 18 oder neuer; die einzige Abhängigkeit ist tlock-js.

BefehlWas er prüft
receiptsDie Ed25519-Signatur jeder Quittung (vergleiche den Schlüssel mit /netz/pubkey), die Quittungs-ID, den SHA-256-Fingerabdruck des Geheimtexts oder Vorschlags, den Merkle-Pfad zum stündlichen Anker, den .ots-Nachweis des Ankers und, online, den Bitcoin-Block-Header von einem öffentlichen Explorer.
sealsJeder Geheimtext nennt seine Runde; er öffnet sich mit dem Beacon dieser Runde, abgerufen von drand und nicht von uns, zu genau dem veröffentlichten Vorschlag; er war beim Eingang nicht schon offen; ein Siegel, das sich vor dem Anpfiff öffnet, wird markiert.
pricesDie Marktzeile beim Eingang gehört zum Snapshot in der signierten Quittung; fairer Preis und beste Netzwerk-Quote werden neu berechnet; der Schlusskurs gehört zum selben Spiel und ist verankert; der CLV wird je Vorschlag und im Schnitt neu berechnet.
resultsJedes Ergebnis ist verankert, nennt seine Quelle und gehört zum selben Spiel; Gewinn, Verlust, Push und halbe Ergebnisse werden aus dem Endstand neu berechnet; Gewinn auf Papier und Yield werden neu berechnet.
allAlles oben Genannte plus die Bundle-Root: eine Merkle-Root über alle Einträge, sodass sich nichts unbemerkt entfernen oder hinzufügen lässt.
# Node 18 oder neuer · einzige Abhängigkeit ist tlock-js (drand)
npm install
node manometer-verify.js all nordic-models.bundle.json

# oder Teil für Teil
node manometer-verify.js receipts nordic-models.bundle.json   # Signaturen, Fingerabdrücke, stündliche Anker, Bitcoin-Header
node manometer-verify.js seals    nordic-models.bundle.json   # jedes Siegel öffnet in seiner drand-Runde zum veröffentlichten Vorschlag
node manometer-verify.js prices   nordic-models.bundle.json   # Markt beim Eingang, Schlusskurs, CLV neu berechnet
node manometer-verify.js results  nordic-models.bundle.json   # Ergebnisse aus dem Endstand, P&L auf Papier neu berechnet

# Exit-Code 0 = alles stimmt · 1 = mindestens eine Abweichung · 2 = Eingabe nicht lesbar

--offline überspringt die Netzwerkabfragen und stützt sich auf das Bundle. Merkle-Bäume: Blatt = SHA-256(0x00 ‖ Daten), Knoten = SHA-256(0x01 ‖ links ‖ rechts). Die Bibliotheksdateien des Verifiers sind byte-identische Kopien der Module des Schiedsrichters, er rechnet also genau das, was der Schiedsrichter rechnet.

Fehler und Limits

CodeWann
200{ ok: true, receipt } oder dieselbe Quittung mit duplicate: true
400Fehlerhafte Anfrage; ein Siegel, das sich in der Vergangenheit oder mehr als 14 Tage im Voraus öffnet; IDs, die nicht übereinstimmen
401Unbekannte Quelle oder falscher Schlüssel
403Quelle deaktiviert
413Zu groß: 64 KB pro Anfrage, 32 KB pro Geheimtext, 16 KB pro kanonischem Vorschlag
42920 Fehlversuche pro Adresse in 10 Minuten; 2.000 Vorschläge pro Quelle und Tag; 500 ungeöffnete Siegel pro Quelle
503Markt-Snapshot noch nicht geladen, zum Beispiel direkt nach einem Neustart. Versuch es in einer Minute erneut.

CORS ist offen (*), ein browserbasierter Originator funktioniert also auch. Das Originator-Kit übernimmt Versiegeln und Senden, aus Node oder dem Browser: Signalgeber laden es unter API und keys.

Transportwege

Contract und Quittungen sind auf jedem Transportweg identisch; ein Wechsel ändert nichts an deiner Integrationslogik.

TransportwegFürStatus
C · HTTPSEntfernte Originatoren. Ein Aufruf pro Vorschlag an /netz/submit, Schlüssel im Body.verfügbar
A · Gemeinsamer OrdnerOriginatoren auf demselben Rechner wie die Plattform. Hänge pro Zeile einen Envelope an feed-inbox.ndjson an; Quittungen erscheinen innerhalb von etwa fünf Sekunden in feed-receipts.ndjson. Schreibe die Inbox nie neu und kürze sie nie.verfügbar
B · Extension-MessagingMessaging mit geringer Latenz zwischen Browser-Extensions, gleicher Envelope und gleiche Quittung.geplant

Versionierung

Dies ist Contract v1. Quittungen tragen v: 1. Zusätzliche Felder ändern die Version nicht; alles, was eine Integration brechen würde, bekommt eine neue Version, vorab angekündigt, und beide Versionen werden für eine Übergangszeit parallel akzeptiert.