博客>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(机器支付协议),如今又出现了一个设计理念不同的第二种方案。这两者经常被拿来比较。它们都基于 HTTP 构建 402 需付款,但它们在不同的层面上解决了不同的问题。

下面将介绍它们各自的工作原理、Quicknode 的工具在其中扮演的角色,以及在选择时真正需要权衡的利弊。


简版

  • x402 在Quicknode 上,您只需一个钱包即可调用Quicknode 上的 RPC 端点。无需账户、API 密钥或订阅。使用 USDC(Base 、Polygon 、Solana )或 USDG(X Layer )支付,即可开始发起调用。

  • Tempo 开发的 MPP 是一种适用于任何 API 的机器间支付协议。它拥有自己的挑战/凭证/收据机制flow ,支持多种支付方式(Tempo 稳定币、Stripe 卡、闪电网络),并包含一种适用于 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 而言,该 会话 “intent”这一概念颇为有趣。客户端不再是针对每个请求都进行链上交易结算,而是将资金存入托管合约,并在消耗资源时签署链下凭证。服务器通过单次验证来核验每张凭证, 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 资讯直接发送至您的收件箱。