@zanii/x402
v0.2.0
Published
Bind a Zanii payment receipt to its on-chain settlement - verify the tx a receipt references actually settled to the stated recipient. Chain reads injected; zero-dep JSON-RPC fetcher included.
Readme
@zanii/x402
Bind a Zanii payment receipt to its on-chain settlement. recordPayment proves
who paid whom; the rail (x402 / AP2) settles on-chain. This closes the loop: given
the settlement tx a receipt references, verify it actually settled to the stated
recipient — so a payment proof is trustworthy, not just recorded.
npm install @zanii/x402 @zanii/payments @zanii/sdkChain reads are injected, so the core is testable offline; a zero-dependency JSON-RPC fetcher is included for any EVM chain (Base included).
Usage
import { buildX402Payment, verifySettlement, jsonRpcTxFetcher } from '@zanii/x402';
// build + record the payment (money handled correctly by @zanii/payments):
const p = buildX402Payment({ txHash, amount: '49.99', currency: 'USD', to: merchant, chainId: 8453 });
await agent.recordPayment({ rail: p.rail, reference: p.reference, details: p });
// later — verify the settlement actually happened:
const check = await verifySettlement(
{ txHash, to: merchant, minValue: 49_990_000n }, // e.g. 49.99 USDC (6dp)
jsonRpcTxFetcher('https://mainnet.base.org'),
);
if (check.ok) { /* the receipt's tx settled to the right party */ }verifySettlement checks the tx exists, succeeded, went to the recipient,
optionally came from the sender, and moved at least minValue.
Native vs ERC-20.
minValuechecks the transaction's native value. For token transfers (e.g. USDC), pass aTxFetcherthat reads the ERC-20Transferlog and maps it ontoOnChainTx— recipient/status/existence checks work either way.
Changelog
- 0.1.0 — initial release:
verifySettlement,buildX402Payment,jsonRpcTxFetcher.
License
Apache-2.0.
