Il manuale — documentation
The protocol, briefly.
Gaslt turns the Napoletano caffè sospeso into Solana gas abstraction. A sponsor pre-pays gas into an on-chain escrow; a relayer signs as fee-payer so a newcomer transacts with zero SOL; the escrow reconciles the cost on-chain.
On-chain program (live on devnet)
sospeso_verifier (Anchor) holds the escrow and the claim accounting. Deployed and verified on Solana devnet — program id:
HmVEqQkhXa3RJS2J7zco6PG8Kb8teqrrEAj1Z5XvAZ53
Accounts (PDAs)
- Sospeso — seeds
["sospeso", sponsor, nonce_le]. Holds sponsor, total/remaining lamports, per-claim cap, claim count/limit, expiry, and the new-wallet-only flag. - ClaimReceipt — seeds
["claim", sospeso, beneficiary]. Its mere existence blocks a second claim by the same wallet.
Instructions
create_sospeso— sponsor funds a new pool with caps + policy.claim_sospeso— beneficiary (or relayer paying rent) claims lamports; writes a receipt.top_up— sponsor adds more lamports to an existing pool.reclaim— after expiry, the sponsor recovers the remainder.
TypeScript SDK
The @gaslt/sospeso-sdk ships PDA helpers and a typed client with both instruction builders (*Ix, for bundling / relayer fee-payer) and convenience *Rpc methods.
const client = new SospesoVerifierClient(provider);
const sig = await client.createSospeso(sponsor, {
nonce, amount, maxPerClaim, maxClaims, expiryTs, newWalletOnly,
});
const claimSig = await client.claimSospeso(sospeso, beneficiary, amount);Relayer flow (Octane pattern)
A client sends a partially-signed transaction to the relayer (POST /sponsor). The relayer checks eligibility + rate limits, signs as fee-payer, submits the transaction on-chain, and pairs it with a claim to recover the gas from escrow.
API surface
GET /sospeso— available pools.POST /match— pick an eligible pool for a wallet.POST /sponsor— relayer fee-payer + submit.GET /stats— protocol totals.GET /idl— the program IDL.
The web app calls these through same-origin /api/* route handlers to avoid CORS.