@rishavmehra/ghostpay
v0.1.0
Published
Private machine-to-machine payments for AI agents. Zero on-chain trace. Powered by MagicBlock PER + Intel TDX TEE.
Maintainers
Readme
ghostpay
Private machine-to-machine payments for AI agents.
Zero on-chain trace · No KYC · No credit cards · Instant USDC settlement
Powered by MagicBlock PER + Intel TDX TEE + x402 protocol.
Install
npm install ghostpayPeer dependencies:
npm install @solana/web3.js @magicblock-labs/ephemeral-rollups-sdkAgent — pay for APIs privately
import { GhostAgent } from "ghostpay";
import { Keypair } from "@solana/web3.js";
const agent = new GhostAgent({
keypair: Keypair.fromSecretKey(/* your key */),
authToken: process.env.MAGICBLOCK_AUTH_TOKEN!,
budget: {
maxSpendUSDC: 0.05, // session cap
perCallLimitUSDC: 0.01, // per-call cap
},
cluster: "devnet",
onPayment: (proof, totalSpent, remaining) => {
console.log(`Paid $${totalSpent} USDC, $${remaining} remaining`);
},
});
// Drop-in for fetch() — pays 402 automatically, privately
const { data } = await agent.fetch(
"https://api.example.com/hotels?city=tokyo",
"Hotel Search API", // merchant name (for receipt)
"/hotels?city=tokyo" // resource (for receipt)
);
// Session receipt — aggregate only, no per-call identity leak
console.log(agent.receipt());
// {
// agent: "7xKXtg...",
// calls: 1,
// totalSpent: 0.002,
// budget: { maxSpendUSDC: 0.05, perCallLimitUSDC: 0.01 },
// transactions: [{ tx: "5J3mV...", merchant: "Hotel Search API", ... }],
// generatedAt: "2026-04-28T..."
// }Merchant — accept payments in 3 lines
import express from "express";
import { require402 } from "ghostpay/merchant";
const WALLET = "YourWalletAddressHere";
const USDC = "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU"; // devnet
const app = express();
app.get(
"/hotels",
require402({ payTo: WALLET, amountUSDC: 0.002, mint: USDC }),
(req, res) => {
res.json({ results: [{ name: "Hotel Tokyo", price: 120 }] });
}
);How it works
Agent Merchant MagicBlock TEE
│ │ │
├──── GET /hotels ──────►│ │
│ │ │
│◄─── 402 + payTo ──────┤ │
│ │ │
├──── buildPrivateTransfer ────────────────────►│
│ │ [ENCRYPTED] │
│◄──── unsigned tx ────────────────────────────┤
│ │ │
├── sign + send via ephemeral RPC ──────────────►
│ │ │
├──── GET /hotels ──────►│ │
│ + X-PAYMENT proof │ │
│ ├── verify proof ───────►│
│ │◄── ✓ ─────────────────┤
│◄─── 200 + data ───────┤ │Chain observer sees: a program invocation. Nothing else. Amount, sender, and recipient are sealed inside Intel TDX TEE.
API
GhostAgent
| Method/Property | Description |
|---|---|
| new GhostAgent(config) | Create agent with keypair, authToken, budget |
| agent.fetch(url, merchant, resource) | Pay privately and get data |
| agent.balance() | Query private USDC balance from TEE |
| agent.receipt() | Generate session receipt |
| agent.spent | USDC spent this session |
| agent.remaining | USDC left before session cap |
| agent.resetSession() | Reset for a new run |
require402(config) — Express middleware
| Field | Type | Description |
|---|---|---|
| payTo | string | Merchant wallet address |
| amountUSDC | number | Price per call in USDC |
| mint | string | USDC mint address |
| cluster | "devnet" \| "mainnet" | Solana cluster |
Low-level API
import { x402Fetch, buildPrivateTransfer, getPrivateBalance } from "ghostpay";All MagicBlock API functions are exported for custom integrations.
License
MIT
