Il Machine Payments Protocol (MPP) applica la semantica di autenticazione HTTP ai pagamenti. Un server lancia una challenge a una richiesta non pagata, un client restituisce una credenziale di pagamento e il server restituisce una ricevuta dopo aver accettato il pagamento.
MPP separa tre aspetti:
- Un intent descrive l'interazione commerciale, come un singolo
chargeuna tantum o unasessiona consumo. - Un metodo di pagamento descrive come si sposta il valore. Il metodo Solana supporta SOL nativo e token SPL per i charge.
- Un transport HTTP trasporta challenge, credenziali, ricevute ed errori.
MPP è pubblicato come insieme di Internet-Draft. Considera le specifiche attuali come fonte di riferimento e aspettati che i dettagli evolvano finché le bozze sono in corso di sviluppo.
Scambio HTTP
MPP usa i campi standard di autenticazione HTTP invece di header di pagamento specifici del protocollo:
| Messaggio | Rappresentazione HTTP |
|---|---|
| Challenge di pagamento | 402 Payment Required con WWW-Authenticate: Payment ... |
| Credenziale di pagamento | Richiesta ritentata con Authorization: Payment ... |
| Ricevuta di successo | Risposta della risorsa con Payment-Receipt: ... |
| Dettagli di pagamento non validi | Corpo Problem Details che usa application/problem+json |
Una challenge include un ID generato dal server, realm, metodo, intent, richiesta di pagamento codificata e scadenza. La credenziale riprende la challenge e aggiunge la prova di pagamento specifica del metodo. Il server deve verificare entrambi gli elementi: un trasferimento valido che appartiene a una challenge diversa non deve sbloccare la risorsa.
Addebiti Solana una tantum
L'intent charge di Solana supporta due tipi di credenziale:
- La modalità pull usa una transazione firmata. Il client firma il trasferimento e invia la transazione al server. Il server la verifica, aggiunge facoltativamente la firma del fee payer, la trasmette, la conferma e restituisce la firma della transazione nella ricevuta.
- La modalità push usa una firma di transazione. Il client trasmette prima la transazione, poi invia al server la firma confermata. Il server recupera e verifica la transazione prima di restituire la risorsa.
La modalità pull consente il sostegno delle commissioni di transazione da parte del server e la logica di retry lato server. La modalità push è utile quando un wallet richiede che il client invii la propria transazione, ma non può usufruire del sostegno delle commissioni da parte del server.
Per i campi normativi e le regole di verifica, consulta la specifica Solana charge.
Aggiungere un addebito MPP a un'API Express
Solana Pay Kit offre un'integrazione TypeScript aggiornata per MPP e x402. Installalo insieme a Express:
pnpm add @solana/pay-kit @solana/kit@^6.9.0 expresspnpm add --save-dev @types/express tsx
Questo esempio minimo usa la sandbox Surfpool ospitata e il destinatario demo pubblico del pacchetto. È solo per lo sviluppo locale:
import express from "express";import { createPayKit, usd } from "@solana/pay-kit";const pay = await createPayKit({accept: ["mpp"],rpcUrl: "https://402.surfnet.dev:8899"});const app = express();app.get("/report", pay.express(usd("0.01")), (_req, res) => {res.json({ report: "Paid report" });});app.listen(4567, () => {console.log("Paid API listening on http://127.0.0.1:4567");});
Eseguilo e confronta una richiesta non pagata con una richiesta che gestisce il pagamento:
pnpm tsx server.tscurl -i http://127.0.0.1:4567/reportpay --sandbox curl http://127.0.0.1:4567/report
Il gestore della route viene eseguito solo dopo che il middleware ha accettato il pagamento.
In produzione sostituisci ogni impostazione predefinita della sandbox
Configura in modo esplicito rete, destinatario merchant, RPC dedicato, segreto stabile per il binding delle challenge, firmatario di produzione e archivio di replay durevole. Non indirizzare mai pagamenti reali a un firmatario demo di un pacchetto.
Sessioni a consumo
Usa una session MPP di Solana quando un client effettuerà molti piccoli pagamenti correlati.
Una sessione apre un canale di pagamento onchain con un deposito massimo, poi usa
voucher firmati cumulativi man mano che l'utilizzo cresce. Il server può verificare i voucher
offchain e regolare in seguito l'importo più alto accettato.
È utile per inferenza misurata a token, download misurati a byte, dati in tempo reale e chiamate ripetute a strumenti. Non equivale a inviare un pagamento onchain separato per ogni evento.
Definisci una sessione come pagamento di sessione, canale di pagamento o autorizzazione ripetuta con limite massimo. Parla di pagamento in streaming solo quando il servizio e il contratto di pagamento misurano effettivamente un flusso di utilizzo.
Verifica in produzione
Per ogni charge Solana, il server deve verificare almeno che:
- La challenge sia autentica, non scaduta, associata a questa richiesta e destinata a questo realm.
- La transazione usi la rete, l'asset o mint, il destinatario, l'importo e il token program previsti.
- Eventuali istruzioni di fee payer o di associated token account siano esplicitamente consentite e non possano svuotare il firmatario del server.
- La transazione sia andata a buon fine al livello di commitment richiesto.
- La firma della transazione non sia già stata consumata.
- Il controllo di replay e l'operazione di consumo siano atomici su tutte le istanze del server.
Per le sessioni, rendi persistenti in un archivio condiviso anche lo stato del canale, l'importo cumulativo accettato e il watermark di regolamento. Documenta come i client recuperano i fondi non utilizzati se il server diventa non disponibile.
Risorse correlate
Is this page helpful?