如何将 MPP 与 Foundry 和 Tempo 结合使用

  • QuickNode
  • 发布于 2026-04-07 13:20
  • 阅读 27

本文介绍了 Machine Payments Protocol(MPP)如何通过 HTTP 402 机制让机器在请求 API 时直接完成支付,并以 Tempo 钱包和 Foundry 的 cast 工具为例,演示了如何访问 Quicknode 的 MPP 区块链 RPC 接口。文章重点说明了 charge 与 session 两种支付模式、环境配置步骤以及常见错误和使用场景。

概览

Machine Payments Protocol(MPP)允许你通过 HTTP 请求内联支付 API 访问费用。无需账户、无需 API keys,只需要一个钱包和稳定币余额。支付作为请求本身的一部分完成,响应会连同收据一起返回。

这对于访问区块链数据尤其有用。支持 MPP 的 RPC 提供商会暴露标准的 JSON-RPC 端点,任何钱包都可以调用。你使用 Tempo 区块链上的稳定币按请求付费,提供商在返回数据前验证支付。Agent、脚本和应用可以立即开始查询区块链状态,而无需经过注册流程。

Tempo 在这里扮演两个角色:它是结算 MPP 交易的支付通道,同时它维护着一个 Foundry 的 fork,为 cast 提供原生 MPP 支持。cast 是 Foundry 用于发起 RPC 调用、发送交易以及与智能合约交互的命令行工具。安装 Tempo fork 之后,cast 会自动处理 402 支付挑战。

本指南将带你完成 Foundry 与 Tempo 的设置,并使用 cast 发起付费 RPC 调用。示例中我们将始终使用 Quicknode 的 MPP endpoints 作为提供商。

你将需要

  • 已安装 Tempo CLI(用于钱包管理和 cast 的 MPP 支持)
  • 已安装 Foundry(用于 cast 方法)

你将进行

  • 了解 Machine Payments Protocol 及其存在的原因
  • 设置 Tempo wallet 并安装 Foundry Tempo fork
  • 使用 cast 通过 charge 和 session intents 发起付费 RPC 调用
  • 通过 Quicknode 的 MPP endpoints 访问区块链数据
  • 管理 payment sessions 并验证链上交易

什么是 Machine Payments Protocol (MPP)?

Machine Payments Protocol 是一个 向 IETF 提议的开放标准,它为任何 HTTP endpoint 添加内联支付。它由 TempoStripe 设计,用来解决一个特定问题:程序化客户端(Agent、脚本、机器人)没有一种好的方式在没有人类先行设置计费的情况下为 API 访问付费。

传统支付流程依赖结账表单、浏览器会话和可视化 CAPTCHA,这些都专为人类设计。MPP 用一种机器可读的支付协商来替代它们,该协商建立在 HTTP 402 Payment Required 之上。这个状态码自 HTTP/1.1 以来就已存在,但直到现在才被正式标准化。

MPP 在实践中如何工作

该协议遵循一种基于标准 HTTP headers 的挑战-响应模式:

  1. Request - 客户端向付费 endpoint 发送一个普通 HTTP 请求(GET、POST 等)。
  2. Challenge - 服务器返回 402 Payment Required 和一个 WWW-Authenticate: Payment header。该 header 描述价格、接受的货币、收款地址以及可用的支付方式。
  3. Pay - 客户端选择一种支付方式并完成支付(签名稳定币转账、支付 Stripe invoice 等)。
  4. Retry - 客户端使用包含支付证明(“Credential”)的 Authorization: Payment header 重新发送原始请求。
  5. Deliver - 服务器验证支付并返回带有 Payment-Receipt header 的响应。

mppx 和 Foundry 的 Tempo fork 这样的客户端库会自动处理第 2-4 步。从你的代码视角来看,请求就是能正常工作。

Payment Intents:Charge vs. Session

MPP 定义了两种控制计费方式的 payment intent:

Charge Session
Pattern 每个请求一次性支付 通过 payment channel 按使用量付费
Settlement 立即进行链上交易 链下 vouchers,定期链上结算
Best for 偶发查询、简单集成 高频请求、Agent、计量计费

Sessions 的工作方式是先开启一个带有初始存款的链上 payment channel。后续每个请求都会带上一个签名 voucher(“我目前已消费至 X 总额”),服务器只需通过一次 ecrecover(EVM 链中使用的密码学签名恢复函数)即可验证,无需每个请求都进行链上交易。会话结束时,服务器会在链上结算最终余额,并退还未使用的存款。

SDKs 和工具

本指南使用两个客户端工具:

  • Tempo CLI - 管理你的 Tempo wallet(密钥、余额、充值)。
  • Foundry (Tempo fork) - Foundry 是用于 EVM 开发的工具包,而 cast 是它用于发起链上 RPC 调用的命令行工具。Tempo fork 为 cast 添加了原生 MPP 支持。它从 Tempo CLI 读取 wallet 凭证,因此需要先设置 Tempo wallet。

有关完整参考,请参阅 Tempo CLI docsTempo Foundry SDK docs

设置 Tempo Wallet 和 Foundry

在你能够发起付费 RPC 调用之前,你需要两样东西:一个 Tempo wallet(用于签名支付)和 Foundry 的 Tempo fork(为 cast 提供 MPP 支持)。Foundry fork 会从 Tempo CLI 读取 wallet 凭证,因此必须先设置 Tempo wallet。

第 1 步:安装 Tempo CLI

curl -fsSL https://tempo.xyz/install | bash

之后如需更新,运行 tempoup。使用 tempo --version 验证。

第 2 步:创建并连接 Tempo Wallet

info

tempo wallet login 的初始身份验证需要浏览器。对于 Agent 和自动化脚本,你可以在初始登录后使用 tempo wallet keys 创建作用域 access keys。这些 key 具有独立的消费限额,且使用时不需要浏览器交互。

tempo wallet login

这会打开一个浏览器流程来创建或连接一个 Tempo Wallet。如果你还没有,它会创建一个。登录后,验证一切已准备就绪:

tempo wallet whoami

你应该会看到你的 wallet 地址、余额、access key 和消费限额:

    Wallet: 0xb9eb3aa4bd212928fb92def7f17318e0149bfc10
   Balance: 1.000000 USDC.e

       Key: 0x1697b73624b7515f4e1464415d86b83b3956cae2
     Chain: tempo
   Expires: 29d 23h
     Limit: 0.000000 / 100.000000 USDC.e (100.000000 remaining)

如果你看到了 wallet 地址和 key,说明 wallet 已设置完成,cast 可以用它进行 MPP 支付。

第 3 步:为 Wallet 充值

tempo wallet fund

这会打开你 wallet 的充值选项。对于主网,你需要 Tempo 上的 pathUSD 或 USDC.e(Chain ID: 4217)。你也可以将 USDC 跨链到 Tempo,或者在 Tempo DEX 上进行兑换。

info

Quicknode 的 MPP endpoints 允许你使用 Tempo Moderato 上的测试网稳定币,按 每个 intent 最多 10,000 次免费 RPC 请求 的额度使用(charge 和 session 分开计算)。

你可以通过运行此命令获取测试网资金

curl -X POST https://docs.tempo.xyz/api/faucet \
  -H "Content-Type: application/json" \
  -d '{"address": "<YOUR_ADDRESS>"}'

随时查看你的余额:

tempo wallet whoami

第 4 步:安装支持 Tempo 的 Foundry

如果你还没有 foundryup,先安装它:

curl -L https://foundry.paradigm.xyz | bash

然后安装 Tempo fork:

foundryup -n tempo

这会安装兼容 Tempo 的 forgecastanvilchisel 版本。验证安装:

forge -V

输出应在版本字符串中包含 -tempo(例如 forge 1.6.0-nightly-tempo)。如果包含,说明你已经在正确的 fork 上。

通过 Quicknode MPP 访问区块链数据

Quicknode 运行 MPP endpoints,让你无需创建账户即可访问 140+ blockchain networks。本指南中的所有示例都将使用这些 MPP endpoints。

Quicknode MPP Endpoints

Intent URL pattern Cost per request
Charge https://mpp.quicknode.com/<network> $0.001
Session https://mpp.quicknode.com/session/<network> $0.00001

<network> 替换为受支持的 network slug。Quicknode MPP 支持与 Quicknode x402 相同的 140+ networks,包括所有 testnets。你可以通过以下方式动态获取完整的支持 slug 列表:

curl https://x402.quicknode.com/networks

常见 slug:tempo-mainnetethereum-mainnetbase-mainnetpolygon-mainnetsolana-mainnetarbitrum-mainnet

Sessions 的单次请求成本比 charge 便宜 100 倍。如果你要进行多于少量的调用,sessions 是更好的选择。

llms.txt Discovery 文件

Quicknode 在以下地址发布了其 MPP service 的机器可读描述:

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

该文件遵循 llms.txt convention,并包含支持的支付方式、endpoint patterns、client setup code、定价、速率限制、错误代码,以及适用于 Tempo 和 Solana 的 wallet 生成片段。如果你正在构建一个需要自行发现并支付 RPC 访问费用的 Agent,请将其指向该 URL。读取该文件的 Agent 已经拥有从零开始到发起付费 RPC 调用所需的全部信息,而无需人工帮助。

支付方式选择

当客户端命中 charge endpoint 时,服务器会返回一个列出所有接受支付方式的 402 challenge。然后客户端会根据你的 wallet 实际持有什么来支付:

  • 如果你的 wallet 有 主网稳定币(pathUSD 或 USDC.e),就使用它们支付。
  • 如果你的 wallet 只有 测试网 pathUSD(在 Tempo Moderato 上),就使用测试网资金。这是免费试用路径,每个 wallet 上限 10,000 次请求。

速率限制和错误

Endpoint Limit
/:network (charge) 每个 IP:network 对每 10 秒 1,000 次请求
/session/:network (session) 每个 IP:session:network 对每 10 秒 1,000 次请求

常见错误响应:

Status Error code What it means
402 (MPP challenge) 需要支付 -- WWW-Authenticate header 包含 challenge
403 lifetime_limit_reached 达到测试网上限(1 万次请求)。切换到主网 wallet
404 unsupported_network 未识别的 network slug
429 rate_limit_exceeded 请求过多。退避并重试
503 mpp_not_configured 此环境未配置 MPP

使用 Cast 发起付费 RPC 调用

在设置好 Tempo wallet(tempo wallet login)并安装 Foundry 的 Tempo fork(foundryup -n tempo)之后,你就可以通过 MPP endpoints 查询区块链数据了。cast 会从 Tempo CLI 读取你的 wallet,并自动处理 402 challenge-response 流程。

Charge(一次性支付)

charge endpoint 会对每个请求处理一次性支付:

cast rpc -r https://mpp.quicknode.com/tempo-mainnet eth_blockNumber

cast 接收 402 challenge,使用 Tempo 签名一笔稳定币转账,并携带 payment credential 重试。响应会像普通 RPC 调用一样返回:

0x...

你可以使用任何标准 JSON-RPC 方法:

## 获取最新区块
cast rpc -r https://mpp.quicknode.com/tempo-mainnet eth_getBlockByNumber "latest" false

## 获取账户余额
cast rpc -r https://mpp.quicknode.com/tempo-mainnet eth_getBalance "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" "latest"

## 获取当前 gas price
cast rpc -r https://mpp.quicknode.com/tempo-mainnet eth_gasPrice

Session(按使用量付费)

对于重复请求,请使用 session endpoint。第一次请求时,你的 wallet 会向链上 escrow contract 存入 0.1 USDC.e 以开启 payment channel。后续请求使用链下签名 vouchers 支付,延迟接近零,每次请求无需链上交易。

cast rpc -r https://mpp.quicknode.com/session/tempo-mainnet eth_blockNumber

按每次请求 $0.00001 计算,0.1 USDC.e 的存款最多可覆盖 10,000 次请求。对于会连续发出大量 RPC 调用的脚本或应用,sessions 更合理。

在 Tempo 上验证支付

在 Tempo block explorer 上检查你的支付交易:

搜索你的 wallet 地址即可查看每次 RPC 请求对应的稳定币转账。

使用场景

既然你现在已经可以使用 cast 发起付费 RPC 调用,下面是一些借助 Quicknode 的 MPP endpoints 可以做的实用事情。

读取账户和交易数据

查询任意受支持 network 上的账户余额、合约状态和交易历史:

## 查询 Tempo 主网上的地址余额
cast rpc -r https://mpp.quicknode.com/tempo-mainnet eth_getBalance "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045" "latest"

## 读取合约的 storage slot
cast rpc -r https://mpp.quicknode.com/tempo-mainnet eth_getStorageAt "0xCONTRACT_ADDRESS" "0x0" "latest"

## 获取交易收据
cast rpc -r https://mpp.quicknode.com/tempo-mainnet eth_getTransactionReceipt "0xTX_HASH"

监控区块和 gas

适用于仪表盘、告警或费用估算:

## 最新区块号
cast rpc -r https://mpp.quicknode.com/tempo-mainnet eth_blockNumber

## 带交易的完整区块
cast rpc -r https://mpp.quicknode.com/tempo-mainnet eth_getBlockByNumber "latest" true

## 当前 gas price
cast rpc -r https://mpp.quicknode.com/tempo-mainnet eth_gasPrice

在 Foundry 脚本和测试中使用

由于 cast 会自动处理 MPP,因此你可以在 Foundry 工作流中任何需要传入 --rpc-url 的地方使用 Quicknode MPP endpoints:

## 通过 MPP 在真实网络上运行 forge script
forge script script/Deploy.s.sol \
  --rpc-url https://mpp.quicknode.com/tempo-mainnet \
  --broadcast

## 通过 MPP 在 fork 上运行测试
forge test --fork-url https://mpp.quicknode.com/tempo-mainnet

注意: --broadcast 标志会向网络提交真实交易。如果你只是测试脚本,请省略 --broadcast,这样可以在不花费 gas 或不在链上部署任何内容的情况下模拟部署。

常见问题

什么是 MPP?

Machine Payments Protocol 是一个(向 IETF 提议的)开放标准,它为 HTTP endpoints 添加内联支付。客户端使用 402 Payment Required 状态码和标准 HTTP headers 将支付作为请求的一部分完成。它支持多种支付方式,包括 Tempo 稳定币、Solana USDC 和 Stripe。

我需要 RPC provider 的账户吗?

不需要。MPP 替代了基于账户的访问。你只需要一个持有稳定币的钱包。无需注册、无需 API keys、也无需计费 dashboard。

charge 和 session 有什么区别?

charge 每个请求处理一次性链上支付(约 500ms 开销)。session 会先用初始存款开启一个 payment channel,然后在后续请求中使用链下 vouchers,以实现接近零延迟。偶发调用使用 charge;任何会重复请求的场景使用 session。

Quicknode MPP 的费用是多少?

charge 请求每次 $0.001。session 请求每次 $0.00001(每百万请求 $10)。sessions 便宜 100 倍,因为它们将链上结算摊销到多次请求中。

我可以免费试用 MPP 吗?

可以。Quicknode 的 MPP endpoints 接受 Tempo Moderato 上的测试网 pathUSD,提供每个 intent 10,000 次免费请求(charge 和 session 分开计算)。不需要真实资金。

MPP 支持哪些稳定币?

这取决于服务提供商。Quicknode 接受 Tempo 上的 pathUSD 和 USDC.e(桥接 USDC)。服务器会在 402 challenge 中列出其接受的货币。

AI agents 如何发现 MPP endpoints?

服务提供商可以发布一个机器可读的 llms.txt 文件来描述其 MPP service。Quicknode 的文件位于 https://mpp.quicknode.com/llms.txt,其中包含 endpoint patterns、定价、client setup code,以及适用于 Tempo 和 Solana 的启动说明。

如果测试网请求上限用完了会怎样?

服务器会返回 HTTP 403,内容为 { "error": "lifetime_limit_reached" },并且不会扣款。切换到有主网资金的钱包即可获得无限访问。

总结

如果你已经读到这里,那么你现在已经了解了 Machine Payments Protocol 是什么、如何设置 Tempo wallet,以及如何使用 Foundry Tempo fork 通过 cast 发起付费 RPC 调用。你可以使用 charge 处理一次性请求,或者在需要高频访问且成本更低时使用 sessions,通过 Quicknode 的 MPP endpoints 查询区块链数据。

要进一步了解 MPP、Tempo 和 Quicknode,请查看以下资源:

我们 ❤️ 反馈!

告诉我们 如果你有任何反馈或新的主题需求。我们很乐意听到你的声音。

  • 原文链接: quicknode.com/guides/age...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。