v0.3.0 — Phase 3 stable
Phase 3 stable. Solana support across signer, PayAI adapter, MCP,
and a public x402 facilitator surface. Verified real on-chain on
both Noble grand-1 (Cosmos) and Solana devnet.
Added
@suverse-pay/signer-solana— SPLtransferCheckedpayload
signing for theexactscheme on Solana mainnet (solana:5eykt4...)
and devnet (solana:EtWTRABZ...). Builds a v0VersionedTransaction
with the required instruction layout (ComputeBudget × 2, then
transferChecked, then Memo for uniqueness), partial-signs as the
payer, and emits the canonical v2{paymentPayload, paymentRequirements}envelope. Round-trip ed25519 verification
asserted by the signer test suite.@suverse-pay/adapter-payai— PayAI facilitator adapter at
https://facilitator.payai.network, registered alongside
cosmos-pay and coinbase-cdp. Supports Solana mainnet
(solana:5eykt4...) and devnet (solana:EtWTRABZ...) via the
v2 schema (PayAI's wire format putsacceptedandresource
insidepaymentPayload, distinct from the v1 envelope; the
adapter handles the translation).- Coinbase CDP Solana support in the existing
coinbase-cdp
adapter — declarative addition only, the wire format is
identical to the EVM path.(network, asset, scheme) = (solana:5eykt4..., USDC, exact)is the primary route on Solana
mainnet with PayAI as failover. - Public x402 facilitator surface at
/facilitator/*on
apps/api:GET /facilitator/health— liveness, no authGET /facilitator/supported— x402 spec §7.3 SupportedResponsePOST /facilitator/verify— x402 spec §7.1, no authPOST /facilitator/settle— x402 spec §7.2, Bearer
<resource-key>auth, rate-limited per key, idempotency-key
derived from(payer, payload-hash, hourBucket). Routes across
cosmos-pay, Coinbase CDP, and PayAI based on(network, scheme)
with per-route failover.
- MCP Solana support:
init_sessionaccepts a BIP-39 mnemonic
and derives the Solana base58 address alongside the existing
Cosmos bech32 and EVM 0x-hex addresses;pay_and_callselects
the signer-solana forsolana:*networks via the
selectSigner(network)dispatch and fetches a fresh devnet /
mainnet blockhash at sign time (the signer doesn't cache them —
Solana drops them after ~150 slots). scripts/smoke/mcp-solana/— 5-step smoke that broadcasts a
real SPLtransferCheckedon Solana devnet via PayAI. Includes a
Node-onlymock-x402-devnetresource server (no external deps —
built onnode:http) that emits 402 with v2 Solana
PaymentRequirementsand forwardsPAYMENT-SIGNATUREto PayAI
using the correct v2 envelope. Asserts a real devnet
txSignatureand idempotent replay.scripts/smoke/facilitator-mocked/— 10-step smoke for the
public/facilitator/*surface against a mocked gateway. Covers
supported / health / verify (Cosmos + EVM) / settle (Cosmos) /
settle without auth / settle with bad auth / rate limit /
idempotency.
Verified
- Real Solana devnet settlement through MCP: agent → MCP →
402 → MCP signs SPLtransferCheckedwith CU limit 20_000 (the
cap PayAI enforces; the previous default of 200_000 was rejected)
→ mock x402 forwardsPAYMENT-SIGNATUREto PayAI/settle→
PayAI co-signs and broadcasts to Solana devnet → real
txSignaturereturned to the agent. Tx queryable on
https://explorer.solana.com/tx/<sig>?cluster=devnet. - Real Cosmos settlement (regression — unchanged from v0.2.0):
MsgExec(MsgSend)on Noble grand-1 still passes themcp-real
suite end-to-end. - Idempotent replay on Solana: a second
pay_and_callwith the
same(payer, network, url, body, hourBucket)returns
idempotentReplay: truewith the samepaymentIdand
txSignature— no second on-chain transaction. - All 6 smoke suites green:
mocked(10),real(9),
mcp-mocked(7),mcp-real(4),facilitator-mocked(10),
mcp-solana(5).
Deferred
- Coinbase CDP real-network smoke remains gated on a CDP API
key. Static config + adapter unit tests cover the wire format;
real settle awaits credentials. - PayAI mainnet smoke — devnet is the only on-chain smoke that
runs by default. Mainnet costs real money and is captured as
IDEAS.md entry 8 for future scheduled runs. - Self-serve resource-key issuance for the public
/facilitator/*surface — keys are admin-bootstrapped today
(IDEAS.md entries 9, 10).