🤖 最新推出:《Quicknode 人工智慧實戰手冊》 10 個經過實測的 AI 程式設計食譜agents 。
查看食譜已通過 SOC 2 Type II 認證 · ISO 27001
x402 以及 MPP:其運作原理與差異之處
比較x402 與Tempo針對基於 HTTP 402 的 API 付款所提供的 MPP,內容涵蓋協定設計、付款方式、按次計費與會話計費、結算與收據,以及在搭配Quicknode的x402 SDK 或其 MPPendpoint 處理機器對機器(M2M)與 RPC 工作流程時,應何時選用各方案。

x402 每當有人想使用錢包(而非 API 金鑰)來支付服務或 API 的費用時,這個名字總是會被提及。
最近,Tempo 發布了 MPP(Machine Payments Protocol),如今又出現了另一種採用不同設計理念的選項。這兩者經常被拿來比較。它們都基於 HTTP 建構 402 需付款,但它們在不同的層級上解決不同的問題。
以下將說明各項功能的運作方式、Quicknode 的工具在其中扮演的角色,以及您在選擇時真正需要考量的取捨。
x402 透過Quicknode ,您只需一個錢包即可呼叫Quicknode 的 RPC 端點。無需帳戶、API 金鑰或訂閱。使用 USDC(Base 、Polygon 、Solana )或 USDG(X Layer )付款,即可開始發起呼叫。
由Tempo 開發的 MPP,是一套適用於任何 API 的機器對機器支付協定。它擁有專屬的挑戰/憑證/收據機制flow ,支援多種支付方式(Tempo 穩定幣、Stripe 卡、Lightning),並包含一套適用於 RPC 等高頻率計量計費的會話模型。
Quicknode 提供適用於以下兩者的模具: @Quicknode/x402 以及 @Quicknode/x402-solana 適用於x402 ,以及相容於 MPP 的endpoint ,網址為 https://mpp.quicknode.com/ 適用於 mpp SDK。
x402 這是一項開放標準,最初由 Coinbase 提出,提供 HTTP 402 在被「保留供未來使用」數十年後,終於有了實際規格。
這個概念很簡單:伺服器會回傳 402 需付款, 客戶端會看到付款要求、簽署穩定幣授權、重新嘗試該請求,而伺服器則會完成付款並返回資源。所有這些步驟皆在同一次 HTTP 交換中完成。
Quicknode 該服務使用「x402 」來提供經錢包驗證的 RPC 基礎架構存取權限。您無需建立Quicknode 帳戶,只需將內含 USDC 的錢包連結至該服務,其餘事宜(包括驗證、付款結算及會話管理)皆由客戶端函式庫處理。
兩個開源套件:
@quicknode/x402 – 透過Quicknode x402 代理伺服器,支援 JSON-RPC、REST、gRPC-Web 及 WebSocket 的多鏈路客戶端
@quicknode/x402-solana – 專為Solana 設計的客戶端,可與Solana Kit 和 Kite 整合
該客戶支援以下付款模式:
按請求付費 – 每次呼叫 0.001 美元,無需授權,無需建立連線。這是最簡單的途徑。
信貸提款 – 透過 SIWX(Sign-In with X)進行一次驗證,使用 USDC 購買一組點數,隨後在每次請求時使用這些點數。對於長期使用而言,這種方式更具成本效益。
有一點值得注意:支付網路與 RPC 網路是分離的。例如,您可以在Base Sepolia 上使用 USDC 付款,並查詢Ethereum 、mainnet 、Solana 、Aptos 、Flow ,或是任何其他 140 多個受支援的區塊鏈網路。同一個錢包,相同的驗證機制flow 。
一位使用 @quicknode/x402 首先向Quicknode x402 代理伺服器請求資源(例如 RPC、REST、gRPC-Web 或 WebSocket),並取得一個 402 需付款 回應。接著,客戶端執行 SIWX 驗證,取得 JWT 會話憑證,並提交付款憑證。代理伺服器將該憑證傳送至x402 處理中心以進行驗證及結算付款,確認無誤後即加值點數。客戶端使用該會話憑證重新嘗試原始請求。代理伺服器將其轉發至上游的Quicknode 基礎架構,接收回應後,向客戶端回傳 200 OK 狀態碼,並消耗 1 點點數。
MPP(機器支付協定)採取了更廣泛的方針。x402 最初是為了將個別終端裝置貨幣化而設計,而 MPP 則試圖標準化任何機器透過 HTTP 向其他機器付款的方式。
該協定直接使用 HTTP 驗證框架:
WWW-Authenticate:付款 402 回應中會告知客戶需要進行何種付款
授權:付款 該重試單據上附有付款證明
付款收據 收到 200 回應碼,證明伺服器已接受付款
這是一份IETF 網際網路草案(由Tempo Labs 和 Stripe 共同起草),這意味著他們正致力將其推動成為正式標準,而不僅僅是SDK 的慣例。
MPP 將「付款方式」與「付款類型」區分開來:
所謂的「方法」即是指支付通道: tempo (Tempo 區塊鏈上的穩定幣), 條紋 (卡片), 閃電 (Bitcoin),或自訂。
所謂的「意圖」是指計費模式: 費用 (每項請求限一次)或 會話 (基於頻道的按用量計費)。
這點很重要,因為您可以自由搭配組合。單一 APIendpoint 既可接受Tempo 的穩定幣,也能接受 Stripe 卡片。伺服器會在 402 挑戰中列出所有選項,而客戶端則會選擇其支援的任一選項。
就Tempo 而言,該 會話 其運作機制頗具巧思。客戶端並非針對每項請求處理一筆鏈上交易,而是將資金存入託管合約中,並在消耗資源時簽署鏈下憑證。伺服器則透過單一 ecrecover 呼叫;不涉及 RPC,也不進行資料庫查詢,僅消耗 CPU 資源。結算會在伺服器決定關閉通道時以批次方式進行。對於類似按代幣計費的大型語言模型(LLM)這類情境,這比針對每個資料區塊進行鏈上支付要實用得多。
在 MPP 中 費用 flow, 一個 mppx 客戶端向 MPP 服務請求一項資源,並收到一個 402 以一個 WWW-Authenticate:付款 挑戰。接著,客戶透過所選的後端完成付款(例如,簽署一筆交易或支付發票),並使用 Authorization: Payment <credential>,該服務會向後端驗證該憑證。驗證成功後,該服務會傳回該資源,並附帶 200 OK 並包含一個 付款收據.
在 MPP 中 會話 flow 在Tempo 通訊通道中,客戶首先透過向Tempo 託管合約存入資金來開啟通道,然後請求服務存取權限。服務端會要求提供會話憑證,客戶則回應一份經簽名的累積式鏈下憑證。服務端使用 ecrecover 並在傳回回應前檢查增量金額。此憑證更新週期在使用過程中會以高頻率重複進行,隨後服務會在鏈上透過批次結算關閉通道,此後任何未使用的押金將退還給客戶。
x402 | MPP | |
|---|---|---|
來源 | Coinbase,開源規格 | Tempo Labs + Stripe,IETF 網際網路草案 |
線材規格 | 自訂標頭 (X-PAYMENT-*) | 標準 HTTP 驗證方案(WWW-Authenticate: Payment、Authorization: Payment、Payment-Receipt) |
付款方式 | 穩定幣 | 多種:Tempo 穩定幣、Stripe 卡、閃電網路比特幣、自訂 |
多方法每endpoint | 每項請求僅限一個方案。 | 是的。伺服器可以在單一 402 回應中宣告多種處理方式,由客戶端選擇其中一種。 |
計費模式 | 僅限於協定層級的「按請求」處理 | 「按請求計費」與「計量計費(會話)」作為兩種不同的意圖 |
工作階段/通路的支援 | 協定中並未包含此項。實作方會自行新增相關機制(例如:積分系統)。 | Native. session intent 採用結合鏈下憑證與批次鏈上結算的支付通道。 |
結算模式 | 中介方負責核實並處理客戶與伺服器之間的每筆付款 | 收費:依請求結算。會話:伺服器將根據自身時程關閉通道。 |
收據/證明 | 主持人確認 | 付款收據的標題,其收據正文包含參考編號、金額、資產及付款人 |
狀態碼的含義 | 402 需付款 | 明確區分:402 = 需付款、401 = 授權失敗、403 = 政策拒絕 |
運輸 | HTTP | HTTP、MCP(JSON-RPC 錯誤 -32042 加上 _meta 欄位) |
鏈式支撐 | EVM,Solana | Tempo 區塊鏈(適用於tempo 方法),以及非區塊鏈支付管道(Stripe、Lightning) |
標準化專題 | 開源儲存庫,沒有正式的標準制定機構 | IETF 網際網路草案 |
在 按請求付費 mode, 這裡沒有 SIWX、沒有 JWT,也沒有任何會話狀態。每個請求都是獨立的。
代理僅在上游呼叫成功後才會結算付款。若 RPC 呼叫發生錯誤,您無需付款。
您可以設定 preAuth: true 在信用額度提領時(mode ),於建立客戶時即進行驗證,而非在首次出現 402 錯誤時才進行。如此可節省一次往返請求。
gRPC- Web 和 WebSocket 均可正常運作,但由於它們依賴 JWT 會話,因此需要採用「信用額度扣減」模式。如需更多詳細資訊,請參閱
402 僅適用於付款障礙。若客戶端驗證失敗,伺服器將回傳 401 . 如果付款已成功完成,但因某項政策而無法存取,那是 403 . 此區分在規格中已明確說明。
伺服器可以傳回多個 WWW-Authenticate:付款 採用不同支付方式的付款標頭。單一的 `endpoint ` 可同時接受 `Tempo`、Stripe 及 Lightning。由客戶端選擇其中一種。
在mode 這個會期中,該 付款收據 其中包含的是通道 ID,而非交易哈希。您將在通道關閉時取得該筆鏈上交易的哈希值。
MPP 亦透過 MCP(模型上下文協定)處理 AI 工具的呼叫。在此傳輸層上,402 代碼對應於 JSON-RPC 錯誤代碼 32042 ,而憑證/收據則放進 _meta 字段,而非 HTTP 標頭。
有關Quicknode 的 MPP 代理服務、定價、路徑、會話與計費意圖、支援的網路以及客戶端設定等完整「endpoint 」詳情,請參閱
Quicknode 兩者皆支援。兩者都不需要帳戶。選擇取決於您的agent/application 還與哪些其他系統進行通訊。
若您主要需要存取區塊鏈資料,請使用x402 。該 @quicknode/x402 該客戶端提供 JSON-RPC、gRPC-Web 及 WebSocket 傳輸協定、信用點數包計費,並透過Solana Kit 進行整合 @quicknode/x402-solana. 這些是Quicknode 專為其x402 代理伺服器所開發的第一方函式庫。
若您的agent 需支付多項服務費用,例如 RPC 的Quicknode 、用於推論的 LLM 供應商,以及用於檢索的搜尋 API。MPP 讓您能透過單一協定和錢包處理所有這些服務。Quicknode 的 MPPendpoint 位於 https://mpp.quicknode.com/ 運作方式與……相同 mppx 您會用來呼叫任何其他支援 MPP 的服務的客戶端。
沒有理由不能同時使用這兩者。將x402 用作基礎架構層,並使用 MPP 來建構其上的 API。
import { createQuicknodeX402Client } from '@quicknode/x402'
// Initialize x402 client for Base Sepolia
// Wallet needs testnet USDC — get it via POST /auth (SIWE) then POST /drip
const client = await createQuicknodeX402Client({
baseUrl: 'https://x402.quicknode.com',
network: 'eip155:84532',
evmPrivateKey: process.env.PRIVATE_KEY as `0x${string}`,
preAuth: true,
})
// Make a paid RPC call — payment is handled automatically
const res = await client.fetch('https://x402.quicknode.com/base-sepolia', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'eth_blockNumber',
params: [],
}),
})
// Print the result
console.log(await res.json())import { createSolanaX402Clients } from "@Quicknode/x402-solana"
import { address } from "@solana/kit"
import { homedir } from "node:os"
const { rpc } = await createSolanaX402Clients(
"mainnet",
`${homedir()}/.config/solana/id.json`,
)
const balance = await rpc
.getBalance(address("dDCQNnDmNbFVi8cQhKAgXhyhXeJ625tvwsunRyRc7c8"))
.send()
console.log("Balance:", balance.value)mppx CLI# create a wallet (stored in keychain)
npx mppx account create
# charge intent — $0.001/request, one on-chain tx per request
npx mppx -X POST -H 'Content-Type: application/json' \\
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' \\
<https://mpp.quicknode.com/base-sepolia>
# session intent — $0.00001/request, off-chain vouchers
npx mppx -X POST -H 'Content-Type: application/json' \\
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' \\
<https://mpp.quicknode.com/session/base-sepolia>import { Mppx, tempo } from 'mppx/client'
import { privateKeyToAccount } from 'viem/accounts'
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
// Polyfills globalThis.fetch — handles 402 challenges automatically
Mppx.create({
methods: [tempo({ account })],
})
// Charge intent ($0.001/req) — payment is transparent
const res = await fetch('https://mpp.quicknode.com/base-sepolia', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'eth_blockNumber',
params: [],
}),
})
const { result } = await res.json()
console.log('Block number:', BigInt(result))import { Mppx, tempo } from 'mppx/client'
import { privateKeyToAccount } from 'viem/accounts'
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`)
// deposit 0.10 PathUSD into a payment channel
// first request opens the channel on-chain, subsequent ones use off-chain vouchers
Mppx.create({
methods: [tempo({ account, deposit: '0.10' })],
})
const res = await fetch('https://mpp.quicknode.com/session/base-sepolia', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'eth_blockNumber',
params: [],
}),
})
console.log(await res.json())x402 以及 MPP 之間關係密切,且解決了相同的核心問題:透過 HTTP 提供付費的 API 存取服務。
對於Quicknode 的 RPC 代理機制,兩者皆可使用。實際上的區別在於實作風格。x402 依賴於協調者(facilitator)模型,而 MPP 則移除了此依賴關係,並將flow 定義為一種正式的 HTTP 授權方案。
Quicknode 成立於 2017 年,為開發者與企業提供機構級的區塊鏈基礎設施。憑藉 99.99% 的正常運行時間以及對 75 條以上區塊鏈的支持,各團隊得以在無須妥協的情況下,開發並擴展鏈上應用程式。
將最新的工程見解、產品更新及 Web3 新聞直接送至您的收件匣。