Ü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.
- 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.
- Sende einen Vorschlag im Klartext, um den Hin- und Rückweg zu sehen. Die Antwort ist deine signierte Quittung.
- Versiegle die nächsten. Verschlüssle auf die drand-Runde des Anpfiffs und sende nur den Geheimtext.
- Bewahre deine Quittungen auf. Jede Quittung lässt sich samt Ankerpfad erneut von
/netz/quittung/<rid>abrufen. - 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
| Methode | Pfad | Zugriff | Was er tut |
|---|---|---|---|
POST | /netz/submit | Quelle | Reicht einen Vorschlag ein, im Klartext oder versiegelt. Antwortet mit der signierten Quittung. |
GET | /netz/pubkey | öffentlich | Der Ed25519-Schlüssel des Schiedsrichters, seine Key-ID und die Parameter der drand-Chain. |
GET | /netz/quittung/<rid> | öffentlich | Eine Quittung und, sobald verankert, ihr Merkle-Pfad zum stündlichen Anker. |
GET | /s/<sourceId> | öffentlich | Die Scorecard-Seite. Daten nur, wenn die Quelle veröffentlicht hat. |
GET | /s/<sourceId>/daten.json | öffentlich, falls veröffentlicht | Die wöchentlichen Summen. Einzelne Vorschläge und das Bundle sind nicht öffentlich. |
POST | /netz/vorschau | Quelle | Vorschau deiner Scorecard, solange sie privat ist. |
POST | /netz/veroeffentlichen | Quelle | Deine Scorecard veröffentlichen oder zurückziehen. |
POST | /netz/bundle | Quelle | Dein 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.
| Feld | Typ | Bedeutung |
|---|---|---|
proposalId | string | Dein eindeutiger Idempotenzschlüssel. Erneutes Einreichen mit derselben ID wird dedupliziert. |
sourceId | string | Deine zugewiesene Source-ID. Muss der im Envelope entsprechen. |
sport | string | fb · basket · tennis · cs2 (nur Counter-Strike 2) |
eventIdentity | object | { 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. |
fairOdds | number > 1 | Dein fairer Preis ohne Marge für die Auswahl. |
devigMethod | string | Wie der faire Preis ermittelt wurde, z. B. shin, proportional, model. Pflicht: Ohne diese Angabe sind erwartete Werte nicht vergleichbar. |
minOdds | number > 1 | Deine Slippage-Untergrenze. Darunter wird der Vorschlag mit line moved abgelehnt. |
tsCreated · ttlMs | number | Erstellungszeit 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
| Feld | Typ | Bedeutung |
|---|---|---|
stakeHint | number | Empfohlener Einsatz in EUR. Unverbindlich. |
ev | number | Dein angegebener erwarteter Wert in %. Wird protokolliert und mit unserem verglichen. |
confidence | 0–1 | Deine eigene Konfidenz. |
rationale | string | Freitext oder Tags: „steam move“, „model edge“. |
clvRef | string | Schlusskurs-Referenz, gegen die bewertet wird. Standard: der Sharp-Schlusskurs. |
originOdds · originBook | number · string | Wo du die Quote gesehen hast, für eine Plausibilitätsprüfung. |
bookQuotes | array | Quoten 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 · endsTs | boolean · number | Live-Vorschlag, siehe unten. |
bestOf | number | Serienlä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.
| Sportart | mkt | scope | Einheit der Linie | sel |
|---|---|---|---|---|
| fb | 1x2 | match | — | 1 · X · 2 |
ah | match | Tore, Viertellinien erlaubt | home · away | |
total | match | Tore | over · under | |
| basket | ml | match | — | home · away |
spread | match | Punkte | home · away | |
total | match | Punkte | over · under | |
| tennis | ml | match | — | home · away |
setHc | match | Sätze | home · away | |
gamesHc | match | Spiele | home · away | |
gamesTotal | match | Spiele | over · under | |
| cs2 | ml | match | — | home · away |
mapHc | match | Maps | home · away | |
mapsTotal | match | Maps | over · under | |
mapWinner | map1 · map2 · map3 | — | home · away | |
roundsAh | map1 · map2 · map3 | Runden | home · away | |
roundsTotal | map1 · map2 · map3 | Runden | over · 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 ohnerid,keyIdundsig.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 ohnesig.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 offiziellenots verifyprü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:
| Grund | Bedeutung |
|---|---|
| line moved below originator minOdds | Die ausführbare Quote ist unter deine Untergrenze gefallen. |
| stale signal | Älter als das Höchstalter je Quelle, standardmäßig 120 Sekunden. |
| expired | Die Lebensdauer ist vor der Verarbeitung abgelaufen. |
| event already started | Ein Vorspiel-Vorschlag zum Anpfiff oder danach. Für Live setze live: true. |
| live signals not enabled for this source | Der Betreiber hat Live für deine Quelle noch nicht freigeschaltet. |
| live, but not started yet or already finished | Live vor dem Anpfiff oder nach endsTs. |
| real EV below policy minimum | Der neu berechnete erwartete Wert, nicht deine Angabe, liegt unter dem Schwellenwert der Quelle. |
| odds outside policy band or caps | Risikolimits der Plattform: Quotenbereich, offene Wetten, Tages-Exposure. |
| no executable book odds or no match | Das 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
Jede neue Signalquelle und jeder neue Agent fängt hier an. Die ganze Pipeline läuft, platziert wird nichts.
Routing-Gewicht 0Mindestens 100 Vorschläge über mindestens 30 Tage, davon mindestens 60 % ausführbar. Closing-Line-Value noch nicht bewiesen.
Routing-Gewicht 0Closing-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,25Anhaltender Closing-Line-Value auf live_small. Bricht der rollierende CLV ein, folgt automatisch die Rückstufung.
Routing-Gewicht 1Warum 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.
| Befehl | Was er prüft |
|---|---|
receipts | Die 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. |
seals | Jeder 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. |
prices | Die 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. |
results | Jedes 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. |
all | Alles 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
| Code | Wann |
|---|---|
200 | { ok: true, receipt } oder dieselbe Quittung mit duplicate: true |
400 | Fehlerhafte Anfrage; ein Siegel, das sich in der Vergangenheit oder mehr als 14 Tage im Voraus öffnet; IDs, die nicht übereinstimmen |
401 | Unbekannte Quelle oder falscher Schlüssel |
403 | Quelle deaktiviert |
413 | Zu groß: 64 KB pro Anfrage, 32 KB pro Geheimtext, 16 KB pro kanonischem Vorschlag |
429 | 20 Fehlversuche pro Adresse in 10 Minuten; 2.000 Vorschläge pro Quelle und Tag; 500 ungeöffnete Siegel pro Quelle |
503 | Markt-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.
| Transportweg | Für | Status |
|---|---|---|
| C · HTTPS | Entfernte Originatoren. Ein Aufruf pro Vorschlag an /netz/submit, Schlüssel im Body. | verfügbar |
| A · Gemeinsamer Ordner | Originatoren 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-Messaging | Messaging 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.