本指南以一個 Solana 請求為例,走完 x402 的完整流程:讀取價格、付款,然後取得附有結算收據的結果。其他 15 條鏈在各自的路徑上以相同方式運作。
您需要一個錢包,其中持有 Solana 上的 USDC,或 Base 上的 USDC 或 EURC;另外還需要一個 x402 用戶端,也就是讀取 402 回應、以您的錢包簽署付款,並附上該付款重新傳送請求的軟體。關於 x402 用戶端,請參閱
x402.org 上的 x402 文件。
1. 傳送請求
不附付款,直接傳送 RPC 請求:
curl -i https://x402.erpc.global/v1/solana-mainnet \
--header 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
curl -i https://x402.erpc.global/v1/solana-mainnet \
--header 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
回應為 402 Payment Required。標頭列出方法與價格:
HTTP/2 402
x-payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
x-rpc-methods: getSlot
x-rpc-weight: 1000
x-rpc-price-usd: 0.001
HTTP/2 402
x-payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
x-rpc-methods: getSlot
x-rpc-weight: 1000
x-rpc-price-usd: 0.001
回應本文的 accepts 列出付款選項:此請求可使用的每種穩定幣各一項。amount 以穩定幣的最小單位計,因此 1000 即 0.001 USDC,或 0.001 EURC:
{
"error": { "code": "payment_required", "message": "Payment required", "request_id": "…" },
"x402Version": 2,
"accepts": [
{ "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "amount": "1000", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", … },
{ "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", … },
{ "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42", … }
],
"pricing": { "methods": ["getSlot"], …, "weight": 1000, "rawWeight": 42, …, "price": "$0.001", … },
…
}
{
"error": { "code": "payment_required", "message": "Payment required", "request_id": "…" },
"x402Version": 2,
"accepts": [
{ "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "amount": "1000", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", … },
{ "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", … },
{ "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42", … }
],
"pricing": { "methods": ["getSlot"], …, "weight": 1000, "rawWeight": 42, …, "price": "$0.001", … },
…
}
2. 以 x402 用戶端付款
將 402 回應交給您的 x402 用戶端。用戶端會選擇您的錢包可支付的選項,依該金額簽署一筆付款,並將其編碼為 X-Payment 標頭的值。這筆付款無需 SOL 或 ETH 來支付網路手續費。
3. 附上付款,再次傳送請求
再次傳送相同的請求本文,並將付款放入 X-Payment 標頭:
curl -i https://x402.erpc.global/v1/solana-mainnet \
--header 'Content-Type: application/json' \
--header 'X-Payment: <PAYMENT_PAYLOAD>' \
--data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
curl -i https://x402.erpc.global/v1/solana-mainnet \
--header 'Content-Type: application/json' \
--header 'X-Payment: <PAYMENT_PAYLOAD>' \
--data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
請勿修改請求本文。價格依請求本文計算,因此若修改後的請求本文價格不同,付款就不再與之相符,請求會收到 price_mismatch。
付款完成驗證與結算後,RPC 結果隨之回傳,結算收據位於 X-Payment-Response 標頭中:
HTTP/2 200
x-payment-response: <RECEIPT>
HTTP/2 200
x-payment-response: <RECEIPT>
{ "jsonrpc": "2.0", "id": 1, "result": … }
{ "jsonrpc": "2.0", "id": 1, "result": … }
一筆付款只能支付一個請求。若再次傳送同一筆付款,會遭到拒絕並回傳 402 payment_invalid 或 409 duplicate_payment,請求也不會再次轉送。
回應
若 x402.erpc.global 在要求付款之前就以錯誤回應請求,該請求不收取任何費用。
在 Solana 上,讀取範圍過大的呼叫(例如對大型程式呼叫不帶篩選條件的 getProgramAccounts)會在要求付款之前收到 HTTP 200 與一個 JSON-RPC 錯誤,因此不收取任何費用。
後續步驟