Skip to main content
Facilitator ist die serverseitige Abrechnungs-Komponente im X402-Link. Der Client ist für die Signatur verantwortlich, Gateway oder dein Server sind für den Aufruf von Facilitator’s /verify und /settle zuständig. Die Produktionsadresse des Facilitators von Ace Data Cloud lautet:
Quellcode-Repository: https://github.com/AceDataCloud/FacilitatorX402

v2 Wire Vereinbarung

Der X402-Link von Ace Data Cloud verwendet vollständig die offizielle x402 v2 und akzeptiert keine v1 X-Payment-Anforderungsheader mehr. Bei der Integration sind drei Punkte zu beachten:
  • Der Anforderungsheader ist PAYMENT-SIGNATURE, der Wert ist ein base64-kodiertes JSON-Envelope.
  • Die oberste Ebene des Envelopes muss x402Version: 2 sein und das accepted-Objekt muss das gewählte scheme und network deklarieren.
  • network verwendet die CAIP-2 Kennung (z. B. eip155:8453), Abkürzungen wie base sind nicht zulässig.
Envelope-Struktur:
Die 402-Antwort enthält neben dem JSON-Body auch einen PAYMENT-REQUIRED-Anforderungsheader, dessen Wert die base64-kodierte Herausforderung ist, um dem Client das Lesen der Zahlungsanforderung zu erleichtern, ohne den Body zu analysieren.

Kernschnittstellen

GET /supported

Unterstützte Netzwerke und Schemes anzeigen:
Beispielantwort:
Ergebnisbeschreibung:
  • network verwendet die CAIP-2 Kennung, nicht Abkürzungen wie base, skale.
  • /supported zeigt an, dass der Facilitator über die entsprechenden Validierungs- und Abrechnungsfähigkeiten verfügt.
  • Base, SKALE und Solana unterstützen exact; upto wird derzeit nur auf Base angeboten.
  • signers sind die Adressen, die der Facilitator zur Einreichung von Abrechnungstransaktionen verwendet.
  • Ob eine bestimmte API diese Optionen zulässt, hängt weiterhin von den accepts der API 402 ab.

POST /verify

Überprüfen, ob die vom Client übermittelte PAYMENT-SIGNATURE eine bestimmte Zahlungsanforderung erfüllt. Anforderungstext:
Das paymentRequirements-Feld von v2 umfasst scheme, network, asset, amount, payTo, maxTimeoutSeconds und extra, wobei das Betragsfeld amount ist. Die API 402-Antwort enthält zusätzlich maxAmountRequired in accepts[], damit der Client das Limit ablesen kann, es gehört jedoch nicht zu den Feldern des Facilitator-Anforderungstextes. Erfolgreiche Antwort:
Die PAYMENT-RESPONSE-Antwort für die Zahlung einer Produktionsbestellung enthält nach der Dekodierung das Abrechnungsergebnis. Das Ergebnis der Programmausführung für die Zahlung einer Base-Bestellung:
Ergebnisbeschreibung:
  • success=True zeigt an, dass die Abrechnung des Facilitators erfolgreich war.
  • transaction ist der Hash der On-Chain-Transaktion, die pay_id der Bestellung wird ebenfalls in denselben Wert geschrieben.
  • Im Explorer kann die Überweisung von 1200000 atomic USDC auf Base USDC eingesehen werden.
  • errorReason=None zeigt an, dass bei dieser Abrechnung kein geschäftlicher Fehler zurückgegeben wurde.
Eine fehlgeschlagene Validierung gibt normalerweise auch HTTP 200 zurück, aber isValid ist false. Die Geschäftseite sollte invalidReason lesen und nicht nur den HTTP-Statuscode betrachten.

POST /settle

Die bereits validierte Genehmigung auf der Blockchain abrechnen. Der Anforderungstext ist im Wesentlichen identisch mit dem von /verify. Der Unterschied bei upto ist: Der paymentRequirements.amount wird beim Abrechnen auf den tatsächlichen Abrechnungsbetrag geändert; das Signaturlimit wird vom Facilitator in der Verifizierungsphase aufgezeichnet, und beim Abrechnen wird überprüft, dass der tatsächliche Betrag dieses Limit nicht überschreitet. Erfolgreiche Antwort:
Wenn der tatsächliche Betrag für upto 0 beträgt, kann transaction eine leere Zeichenfolge sein, was bedeutet, dass keine On-Chain-Transaktion erforderlich ist.

Wie Ace Data Cloud Gateway den Facilitator verwendet

Der Link des Ace Data Cloud API Gateways ist wie folgt:
  1. Der Client fordert zum ersten Mal die API an, ohne Authorization und PAYMENT-SIGNATURE.
  2. Gateway berechnet den geschätzten Preis der Anfrage und gibt 402 und accepts zurück.
  3. Der Client signiert und versucht es erneut mit PAYMENT-SIGNATURE.
  4. Gateway dekodiert PAYMENT-SIGNATURE und wählt die passende Zahlungsanforderung aus.
  5. Gateway ruft Facilitator /verify auf.
  6. Nach erfolgreichem /verify lässt Gateway die Anfrage an die Ziel-API weiter.
  7. Nach der Rückgabe der Ziel-API ruft Gateway in der Phase /record Facilitator /settle auf.
  8. Gateway schreibt den On-Chain-Transaktionshash in die verwendete Aufzeichnungsmetadaten. exact in Schritt 7 den Betrag der Signatur abrechnen; upto in Schritt 7 den amount basierend auf dem tatsächlichen Verbrauch schreiben und dann den tatsächlichen Betrag abrechnen.

Eigene API-Anbindung

Wenn du deine eigene API X402-fähig machen möchtest, kannst du diese Struktur umsetzen:
  1. Bereite für jede kostenpflichtige Schnittstelle paymentRequirements vor, die Netzwerk, Betrag, Empfangsadresse, Vermögensadresse und Signatur-Domain enthält.
  2. Wenn die Anfrage kein PAYMENT-SIGNATURE hat, gib HTTP 402 und accepts zurück.
  3. Wenn die Anfrage ein PAYMENT-SIGNATURE hat, dekodiere es in Base64, um paymentPayload zu erhalten.
  4. Rufe den Facilitator /verify auf.
  5. Führe die Geschäftslogik nach erfolgreicher Validierung aus.
  6. Rufe nach erfolgreichem Geschäft den Facilitator /settle auf.
  7. Speichere payer, transaction, amount, network zur Abrechnung.
Der Server muss seine eigenen generierten paymentRequirements für /verify und /settle verwenden und sollte den vom Client zurückgegebenen Betrag, die Empfangsadresse oder die Vermögensadresse nicht vertrauen.

Replay-Schutz

Der Facilitator wird nonce aufzeichnen. Genehmigungen mit demselben nonce können nicht wiederholt validiert und abgerechnet werden. Das bedeutet:
  • Der Client sollte bei jeder Anfrage ein neues Envelope signieren;
  • Wenn /settle eine Transaktion eingereicht hat, aber vorübergehend nicht bestätigt ist, kann /settle mit demselben nonce erneut versucht werden, um eine idempotente Abrechnung durchzuführen;
  • Verwende dasselbe PAYMENT-SIGNATURE nicht im Cache für mehrere API-Aufrufe.

Häufige Fehler