MPP on Solana
Stripe and Tempo launched MPP as the next standard for machine payments. Dexter brings it to Solana with managed settlement, gas sponsorship, and the only infrastructure that speaks both MPP and x402 on the same facilitator.
Sellers install one package. Buyers need zero SOL. The protocol runs on the same settlement engine that has processed over 25 million x402 payments across eight chains.
One Facilitator, Both Protocols
x402 and MPP both use HTTP 402 for machine payments. Most providers pick one. Dexter runs both on the same infrastructure. Same fee payer wallets. Same RPC connections. Same security validation. A seller on Dexter can accept x402 and MPP payments with a single account and a single wallet.
8 chains. 25M+ settlements. Linux Foundation standard with Google, Stripe, and Visa backing. Dexter operates one of the most active facilitators in the ecosystem.
x402 FacilitatorSolana managed settlement. IETF draft standard co-authored by Stripe and Tempo. Per-request charge mode and streaming sessions with non-custodial smart wallet delegation.
MPP Quick StartMPP can express x402 payments natively. Services built on x402 can accept MPP-formatted payments without code changes. Dexter handles both directions.
What You Don't Run
The Solana Foundation's solana-mpp-sdk lets you self-host MPP settlement. That means operating RPC endpoints, funding fee payer wallets with SOL, securing signing keys, simulating transactions, handling retries, and monitoring balances. Or you install one package and Dexter does all of it.
| You run it (solana-mpp-sdk) | @dexterai/mpp | |
|---|---|---|
| Solana RPC connections | You provision and manage RPC endpoints with failover | Dexter |
| Fee payer wallet | You fund a wallet with SOL and manage its balance | Dexter |
| Key management | You secure a signing key on your server | Dexter |
| Transaction simulation | You simulate before broadcast to catch failures | Dexter |
| Broadcast + confirmation | You send, poll for confirmation, handle retries | Dexter |
| Blockhash expiry | You track lastValidBlockHeight and re-sign if expired | Dexter |
| Fee payer monitoring | You alert when SOL runs low | Dexter |
| Security policy | You decide which programs and compute limits to allow | Program allowlists, CU caps, fee payer isolation |
Managed Sessions on Solana
Sessions let agents deposit funds once and stream thousands of micropayments with only two on-chain transactions. Open a session, exchange off-chain vouchers at microsecond speed, settle once when done. Two transactions regardless of whether ten or ten thousand payments occurred in between.
Buyers keep funds in a Swig smart wallet with a scoped, revocable delegation to Dexter. On-chain enforced spend limits and TTL. Buyer can revoke access at any time with a single instruction.
Dexter sponsors gas on both the session open and close transactions. Voucher exchanges during the session are off-chain. Buyers need zero SOL for the entire session lifecycle.
Sellers verify vouchers locally with Ed25519 signature checks. No RPC calls, no network round-trips. Verification completes in microseconds, not seconds.
Buyer provisions a Swig smart wallet and grants Dexter a scoped delegation role. One-time setup with SIWx wallet ownership proof.
Buyer requests a session with a seller. Dexter verifies the Swig role on-chain and opens a payment channel. One transaction.
For each API call, the buyer attaches a signed voucher. The seller verifies locally. No blockchain interaction per request.
Dexter executes a single TransferChecked from the buyer's Swig wallet to the seller for the cumulative amount consumed. One transaction.
Per-Request Settlement
Charge mode settles each payment individually. The seller's server calls two Dexter endpoints. Everything else is handled: security validation, fee payer co-signing, Solana simulation, transaction broadcast, and on-chain confirmation.
Client requests a resource. The seller's server asks Dexter for a fee payer address and a fresh blockhash, then returns a 402 challenge with payment details.
The client builds a USDC TransferChecked transaction using the fee payer and blockhash from the challenge. It partially signs with transfer authority only. The client never needs SOL.
Dexter validates the transaction against its security policy, co-signs as fee payer, then submits to Solana for simulation, broadcast, and confirmation.
Dexter returns the transaction signature and a settlement proof. The seller checks the proof against the challenge and serves the paid content with an MPP receipt.
Quick Start
npm install @dexterai/mpp
One payment per request. Each API call settles individually on-chain.
import crypto from 'node:crypto';
import { Mppx } from 'mppx/server';
import { charge } from '@dexterai/mpp/server';
const mppx = Mppx.create({
secretKey: crypto.randomBytes(32).toString('hex'),
methods: [charge({ recipient: 'YourSolanaWallet...' })],
});
app.get('/api/data', async (req, res) => {
const result = await mppx.charge({
amount: '10000', // 0.01 USDC
currency: 'USDC',
})(toWebRequest(req));
if (result.status === 402) return sendChallenge(res, result);
return sendWithReceipt(res, result, { data: 'paid content' });
});Security
Settlement Proof
Every successful response includes the verified recipient, amount, and asset. The SDK checks these match your challenge before issuing a receipt. No RPC needed.
On-Chain Verification
Pass verifyRpcUrl to independently fetch and verify the transaction after settlement. Trustless. Adds ~1-2 seconds.
Fee Payer Isolation
Dexter's fee payer can only sign for gas. It never appears in any instruction's accounts. ATA creation is blocked to prevent rent drain.
Non-Custodial Sessions
Session funds stay in the buyer's Swig wallet. Dexter holds a scoped delegation role with on-chain enforced spend limits, token restrictions, and TTL expiration.
Buyer Revocation
Buyers can remove Dexter's delegation role at any time with a single Swig instruction. Immediate, unilateral, no cooperation required.
Balance Monitoring
Active sessions are monitored every 15 seconds. If a buyer's balance drops below the settled amount, the session closes automatically with emergency settlement.
Endpoints
Charge
POST /mpp/prepareGet fee payer address and fresh blockhash for challenge generation.
POST /mpp/settleSubmit signed transaction for co-signing, simulation, broadcast, and confirmation.
GET /mpp/statsLive settlement statistics. Powers the stats display on this page.
Sessions
POST /mpp/session/openOpen a payment channel. Returns session keypair and channel ID.
POST /mpp/session/voucherSign a payment voucher for a cumulative amount within the session.
POST /mpp/session/closeSettle the session. Executes TransferChecked for the total consumed.
Prerequisites
- Recipient wallet must have a USDC token account. Any wallet that has ever held USDC already has one.
- Buyers need USDC, not SOL. Dexter sponsors all transaction fees.
- Supported networks:
mainnet-betaanddevnet. - USDC only. Mainnet:
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v. Devnet:4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU.