部落格>x402 以及 MPP:運作原理與差異之處

x402 以及 MPP:其運作原理與差異之處

比較x402 與Tempo針對基於 HTTP 402 的 API 付款所提供的 MPP,內容涵蓋協定設計、付款方式、按次計費與會話計費、結算與收據,以及在搭配Quicknode的x402 SDK 或其 MPPendpoint 處理機器對機器(M2M)與 RPC 工作流程時,應何時選用各方案。

薩希爾

薩希爾

2026年3月29日 — 閱讀時間 10 分鐘

x402 以及 MPP:其運作原理與差異之處

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 」?

x402 這是一項開放標準,最初由 Coinbase 提出,提供 HTTP 402 在被「保留供未來使用」數十年後,終於有了實際規格。

這個概念很簡單:伺服器會回傳 402 需付款, 客戶端會看到付款要求、簽署穩定幣授權、重新嘗試該請求,而伺服器則會完成付款並返回資源。所有這些步驟皆在同一次 HTTP 交換中完成。

Quicknode 該服務使用「x402 」來提供經錢包驗證的 RPC 基礎架構存取權限。您無需建立Quicknode 帳戶,只需將內含 USDC 的錢包連結至該服務,其餘事宜(包括驗證、付款結算及會話管理)皆由客戶端函式庫處理。

Quicknode 提供哪些配送服務x402

兩個開源套件:

  • @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 。

x402 信貸提款flow

信貸提款flow

一位使用 @quicknode/x402 首先向Quicknode x402 代理伺服器請求資源(例如 RPC、REST、gRPC-Web 或 WebSocket),並取得一個 402 需付款 回應。接著,客戶端執行 SIWX 驗證,取得 JWT 會話憑證,並提交付款憑證。代理伺服器將該憑證傳送至x402 處理中心以進行驗證及結算付款,確認無誤後即加值點數。客戶端使用該會話憑證重新嘗試原始請求。代理伺服器將其轉發至上游的Quicknode 基礎架構,接收回應後,向客戶端回傳 200 OK 狀態碼,並消耗 1 點點數。


Tempo 的 MPP 究竟是什麼?

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

MPP 電費flow

在 MPP 中 費用 flow, 一個 mppx 客戶端向 MPP 服務請求一項資源,並收到一個 402 以一個 WWW-Authenticate:付款 挑戰。接著,客戶透過所選的後端完成付款(例如,簽署一筆交易或支付發票),並使用 Authorization: Payment <credential>,該服務會向後端驗證該憑證。驗證成功後,該服務會傳回該資源,並附帶 200 OK 並包含一個 付款收據.

MPP 會議flow (Tempo 頻道)

mpp-session-flow

在 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 網際網路草案


值得了解的製作細節

x402 於Quicknode

  • 在 按請求付費 mode, 這裡沒有 SIWX、沒有 JWT,也沒有任何會話狀態。每個請求都是獨立的。

  • 代理僅在上游呼叫成功後才會結算付款。若 RPC 呼叫發生錯誤,您無需付款。

  • 您可以設定 preAuth: true 在信用額度提領時(mode ),於建立客戶時即進行驗證,而非在首次出現 402 錯誤時才進行。如此可節省一次往返請求。

  • gRPC- Web 和 WebSocket 均可正常運作,但由於它們依賴 JWT 會話,因此需要採用「信用額度扣減」模式。如需更多詳細資訊,請參閱

    https://x402.quicknode.com/llms.txt

MPP 搭配Tempo

  • 402 僅適用於付款障礙。若客戶端驗證失敗,伺服器將回傳 401 . 如果付款已成功完成,但因某項政策而無法存取,那是 403 . 此區分在規格中已明確說明。

  • 伺服器可以傳回多個 WWW-Authenticate:付款 採用不同支付方式的付款標頭。單一的 `endpoint ` 可同時接受 `Tempo`、Stripe 及 Lightning。由客戶端選擇其中一種。

  • 在mode 這個會期中,該 付款收據 其中包含的是通道 ID,而非交易哈希。您將在通道關閉時取得該筆鏈上交易的哈希值。

  • MPP 亦透過 MCP(模型上下文協定)處理 AI 工具的呼叫。在此傳輸層上,402 代碼對應於 JSON-RPC 錯誤代碼 32042 ,而憑證/收據則放進 _meta 字段,而非 HTTP 標頭。

  • 有關Quicknode 的 MPP 代理服務、定價、路徑、會話與計費意圖、支援的網路以及客戶端設定等完整「endpoint 」詳情,請參閱

    https://mpp.quicknode.com/llms.txt.


何時該用哪一個

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。


程式碼:實際上長什麼樣子

Quicknode x402 (TypeScript)

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())

Quicknode x402 適用於 `Solana `(TypeScript)

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)

MPP 搭配 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>

MPP 客戶端(TypeScript)

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))

MPP 課程mode (TypeScript)

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

Quicknode 成立於 2017 年,為開發者與企業提供機構級的區塊鏈基礎設施。憑藉 99.99% 的正常運行時間以及對 77 條以上區塊鏈的支持,各團隊得以在無需妥協的情況下,開發並擴展鏈上應用程式。

今天就開始動手吧

隨時掌握最新資訊

將最新的工程見解、產品更新及 Web3 新聞直接送至您的收件匣。