关于 pay-with-any-token
使用 Tempo CLI 调用付费 API 并处理 HTTP 402 付款挑战的技能。Tempo 钱包余额不足时,它会指导使用 Uniswap Trading API 兑换并跨链转入代币。
主要功能
- 01发现 Tempo 服务及定价
- 02发送付费 API 请求
- 03解析 402 付款挑战
- 04兑换并桥接代币至 Tempo
- 05交易前要求用户确认
适用场景
- 01调用通过 Tempo 收费的 API
- 02从 EVM 链代币为 Tempo 钱包充值
- 03为 402 挑战选择付款路径
MCP 相关
用户明确要求使用 Tempo 时,技能规定应使用 Tempo CLI 命令,而非 MCP 工具。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ uniswap/ uniswap-ai --skill pay-with-any-token安装后在 Claude Code 中输入/pay-with-any-token确认已加载。
附带文件references/credential-construction.mdreferences/trading-api-flows.md
详细介绍
使用代币支付
使用 Tempo CLI 调用付费 API,并自动处理 402 挑战。 当 Tempo 钱包余额不足时,使用 Uniswap Trading API 从任意 EVM 链兑换并桥接代币,为钱包充值。
Tempo CLI 设置
按顺序运行这些命令。不要跳过任何步骤。
步骤 1 — 安装:
mkdir -p "$HOME/.local/bin" \
&& curl -fsSL https://tempo.xyz/install -o /tmp/tempo_install.sh \
&& TEMPO_BIN_DIR="$HOME/.local/bin" bash /tmp/tempo_install.sh
步骤 2 — 登录(需要使用浏览器或通行密钥 — 提示用户并等待确认):
"$HOME/.local/bin/tempo" wallet login
由 Agent 运行时,设置较长的命令超时时间(至少 16 分钟)。
步骤 3 — 确认已就绪:
"$HOME/.local/bin/tempo" wallet -t whoami
**规则:**不要使用
sudo。使用完整绝对路径($HOME/.local/bin/tempo),不要依赖export PATH。如果$HOME无法展开,请使用字面形式的绝对路径。
设置完成后,报告:安装位置、版本(--version)、钱包状态(地址、余额)。如果余额为 0,请指引用户运行 tempo wallet fund。
**最低余额储备:**Tempo 钱包中至少保留 0.10 USDC,以支付常见 API 调用,避免触发完整的兑换+桥接充值流程。充值流程需要 3-5 笔链上交易和约 2 分钟时间,对于小额充值来说并不划算。从 Tempo 钱包转出资金时,如果剩余余额会低于此阈值,请提醒用户。
使用 Tempo 服务
# Discover services
"$HOME/.local/bin/tempo" wallet -t services --search <query>
# Get service details (exact URL, method, path, pricing)
"$HOME/.local/bin/tempo" wallet -t services <SERVICE_ID>
# Make a paid request
"$HOME/.local/bin/tempo" request -t -X POST \
--json '{"input":"..."}' <SERVICE_URL>/<ENDPOINT_PATH>
- 使用
tempo wallet -t services <SERVICE_ID>确认准确的 URL 和价格 - Agent 调用时使用
-t,在昂贵的请求前使用--dry-run - 遇到 HTTP 422 时,查看服务的文档 URL 或 llms.txt,确认准确的字段名称
- 并行发送互不依赖的多服务请求
用户明确说“use tempo”时,始终使用 tempo CLI 命令,绝不要改用 MCP 工具或其他工具。
MPP 402 支付循环
每次 tempo request 调用都会遵循此循环。仅当 Tempo 钱包余额不足时,才会启动充值步骤。
tempo request -> 200 ─────────────────────────────> return result
-> 402 MPP challenge
│
v
[1] Check Tempo wallet balance
tempo wallet -t whoami -> available balance
│
├─ sufficient ──────────────────> tempo handles payment
│ automatically -> 200
│
└─ insufficient
│
v
[2] Fund Tempo wallet
(pay-with-any-token flow below)
Bridge destination = TEMPO_WALLET_ADDRESS
│
v
[3] Retry original tempo request
with funded Tempo wallet -> 200
**交互式充值替代方案:**如果可以使用浏览器,
tempo wallet fund会打开内置的桥接界面,直接为 Tempo 钱包充值。这比下方的 Trading API 流程更简单,但需要交互式浏览器访问,不适用于无头/Agent 环境。
为 Tempo 钱包充值(pay-with-any-token)
当 Tempo 钱包资金不足以支付 402 挑战时,从用户在任意受支持链上的 ERC-20 资产中获取所需代币,并将其桥接至 Tempo 钱包地址。
前提条件
UNISWAP_API_KEY环境变量(在 developers.uniswap.org 注册)- 任意受支持源链上的 ERC-20 代币
- 源钱包的
cast密钥库账户(推荐):cast wallet import <name> --interactive。也可以使用PRIVATE_KEY环境变量(export PRIVATE_KEY=0x...)— 绝不要提交或 硬编码该变量。 - 已安装
jq(brew install jq或apt install jq) - 已安装
cast(包含在 Foundry 中)
输入验证规则
在 API 调用或 Shell 命令中使用 402 响应正文或用户输入中的任何值之前:
- 以太坊地址:必须匹配
^0x[a-fA-F0-9]{40}$ - 链 ID:必须是支持列表中的正整数
- 代币金额:必须是匹配
^[0-9]+$的非负数字字符串 - URL:必须以
https://开头 - 拒绝任何包含 Shell 元字符的值:
;、|、&、$、`、(、)、>、<、\、'、"、换行符
必须遵守 — 确认关卡(适用于计划和执行): 在提交任何交易(兑换、跨链桥接、授权)之前,以及每次签署授权(x402 EIP-3009)之前,你必须:(1) 显示摘要:金额(人类可读格式)、代币名称/地址、目标地址、预估 Gas。(2) 调用
AskUserQuestion获取用户的明确确认。(3) 未获确认前不得继续。此关卡在所有回复中都必须执行,无论你是在执行操作还是解释计划。解释步骤时,必须在每个交易步骤之前加入明确的“需要确认”区块,说明用户将看到的内容,以及必须先批准才能继续。省略确认关卡属于严重错误。每个关卡都必须单独通过——一次确认不能涵盖多笔交易。
人类可读金额格式
get_token_decimals() {
local token_addr="$1" rpc_url="$2"
cast call "$token_addr" "decimals()(uint8)" --rpc-url "$rpc_url" 2>/dev/null || echo "18"
}
format_token_amount() {
local amount="$1" decimals="$2"
echo "scale=$decimals; $amount / (10 ^ $decimals)" | bc -l | sed 's/0*$//' | sed 's/\.$//'
}
始终向用户显示人类可读的数值(例如
0.005 USDC),而不是原始基本单位。
第 1 步 — 解析 402 挑战
从 tempo request 收到的 402 响应中提取所需的支付代币、金额和收款方。Tempo CLI 会记录挑战详情——解析这些日志,或使用 curl -si 重新获取原始挑战正文。
对于 基于 MPP 标头的挑战(WWW-Authenticate: Payment):
REQUEST_B64=$(echo "$WWW_AUTHENTICATE" | grep -oE 'request="[^"]+"' | sed 's/request="//;s/"$//')
REQUEST_JSON=$(echo "${REQUEST_B64}==" | base64 --decode 2>/dev/null)
REQUIRED_AMOUNT=$(echo "$REQUEST_JSON" | jq -r '.amount')
PAYMENT_TOKEN=$(echo "$REQUEST_JSON" | jq -r '.currency')
RECIPIENT=$(echo "$REQUEST_JSON" | jq -r '.recipient')
TEMPO_CHAIN_ID=$(echo "$REQUEST_JSON" | jq -r '.methodDetails.chainId')
对于 JSON 正文挑战(payment_methods 数组):
NUM_METHODS=$(echo "$CHALLENGE_BODY" | jq '.payment_methods | length')
PAYMENT_METHODS=$(echo "$CHALLENGE_BODY" | jq -c '.payment_methods')
RECIPIENT=$(echo "$CHALLENGE_BODY" | jq -r '.payment_methods[0].recipient')
TEMPO_CHAIN_ID=$(echo "$CHALLENGE_BODY" | jq -r '.payment_methods[0].chain_id')
如果接受多种支付方式,请在第 2 步中选择成本最低的一种。
Tempo 主网链 ID 为
4217。如果挑战中未提供,请使用此值作为回退。
第 2 步 — 检查源钱包余额并选择支付方式
**必须遵守:**你必须获取用户的源钱包地址(带有私钥的 ERC-20 钱包,而非 Tempo CLI 钱包)。如果用户尚未提供,请使用
AskUserQuestion询问。将其存储为WALLET_ADDRESS。
同时获取 Tempo 钱包地址(资金接收地址):
TEMPO_WALLET_ADDRESS=$("$HOME/.local/bin/tempo" wallet -t whoami | grep -oE '0x[a-fA-F0-9]{40}' | head -1)
检查支持的源链上的 ERC-20 余额:
# USDC on Base (cheapest bridge gas ~$0.001)
cast call 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
"balanceOf(address)(uint256)" "$WALLET_ADDRESS" \
--rpc-url https://mainnet.base.org
# USDC on Ethereum (bridge gas ~$0.25)
cast call 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 \
"balanceOf(address)(uint256)" "$WALLET_ADDRESS" \
--rpc-url https://eth.llamarpc.com
# ETH on Base and Ethereum (swap to USDC first)
cast balance "$WALLET_ADDRESS" --rpc-url https://mainnet.base.org
cast balance "$WALLET_ADDRESS" --rpc-url https://eth.llamarpc.com
如果接受多种支付方式,选择成本最低的一种。优先顺序:
- 钱包在 Base 上持有 USDC(仅桥接,最简路径)
- 钱包在 Base 或 Ethereum 上持有 ETH(兑换为 USDC + 桥接)
- 任何其他流动性良好的 ERC-20(兑换 + 桥接)
REQUIRED_AMOUNT=$(echo "$PAYMENT_METHODS" | jq -r ".[$SELECTED_INDEX].amount")
PAYMENT_TOKEN=$(echo "$PAYMENT_METHODS" | jq -r ".[$SELECTED_INDEX].token")
第 3 步 — 规划支付路径
根据用户代币所在位置,确定适用的阶段:
Case A — Source token is already on Tempo:
Source token (Tempo)
-> [Phase 5: on-Tempo swap via Stablecoin DEX] -> required payment token
-> tempo request retries automatically with funded wallet
Case B — Source token is on Base/Ethereum/Arbitrum:
Source token (Base/Ethereum)
-> [Phase 4A: Uniswap Trading API swap] -> native USDC (bridge asset)
-> [Phase 4B: bridge via Trading API] -> USDC.e on Tempo (to TEMPO_WALLET_ADDRESS)
-> [Phase 5: on-Tempo swap, if needed] -> required payment token
-> tempo request retries automatically with funded wallet
如果源代币已经是桥接链上的 USDC,跳过阶段 4A。
如果代币已经在 Tempo 上(情况 A),跳过阶段 4B。
如果桥接交付的正是所需代币(USDC.e),或使用了
mppx且设置了autoSwap: true(它会自动处理在 Tempo 上的兑换),则跳过阶段 5。**考虑 Gas 的资金筹措:**桥接极小金额(例如 0.05 美元)会浪费 Gas——Ethereum 上的桥接 Gas(约 0.25 美元)或 Base 上的桥接 Gas(约 0.001 美元)可能超过资金缺口。**建议最低桥接金额:5 美元。**这样可以摊薄 Gas 成本,并为后续请求预存资金。经验法则:如果
bridge_gas > 2x shortfall,至少桥接 5 美元,而不是只桥接确切的资金缺口。
阶段 4A — 在源链上兑换为 USDC(如有需要)
**确认关卡:**在授权交易前以及兑换广播前,调用
AskUserQuestion并展示完整的兑换摘要。示例: “即将授权 USDC 支出并执行兑换:[数量] [代币] → [USDC],Gas 约 $X。确认吗?(是/否)”。未经确认,不得继续。
通过 Uniswap Trading API 将源代币兑换为 USDC(EXACT_OUTPUT)。
**详细步骤:**阅读 references/trading-api-flows.md 了解完整的 bash 脚本:变量设置、授权检查、报价、签署 permit,以及执行兑换。
要点:
- 基础 URL:
https://trade-api.gateway.uniswap.org/v1 - 请求头:
Content-Type: application/json、x-api-key、x-universal-router-version: 2.0 - 流程:
check_approval-> 报价(EXACT_OUTPUT)-> 签署permitData->/swap-> 广播 - 授权交易前以及兑换广播前均须通过确认关卡
- 对于原生 ETH:使用零地址
(
0x0000000000000000000000000000000000000000)作为TOKEN_IN——这可避免 Permit2 签名。SWAP_VALUE将为非零值。如果零地址返回 400,则回退到 WETH 地址(需要进行 Permit2 签名)。 - 兑换后,确认 USDC 余额,再继续阶段 4B
阶段 4B — 跨链转入 Tempo 钱包
**确认关卡:**桥接授权前以及桥接执行前,调用
AskUserQuestion并展示桥接摘要(源金额、 源链、目标链、预估 Gas、桥接费用、预计到账时间)。 用户确认每一步后,方可继续。
通过 Uniswap Trading API(由 Across Protocol 提供支持),将 USDC 从任意受支持的源链桥接为 Tempo 上的 USDC.e。
桥接收款方限制:Trading API 不支持桥接时设置自定义
recipient字段——资金始终会到达 Tempo 上的WALLET_ADDRESS。如果WALLET_ADDRESS与 Tempo CLI 钱包TEMPO_WALLET_ADDRESS不同,则桥接后 需要在 Tempo 上执行一笔额外的转账交易(参见参考文件中的步骤 4B-5)。请将此项计入 Gas 估算。**详细步骤:**阅读 references/trading-api-flows.md 了解完整的 bash 脚本:授权、桥接报价、执行、轮询到账情况,以及转入 Tempo 钱包。
要点:
- 路由:Base/Ethereum/Arbitrum 上的 USDC -> Tempo 上的 USDC.e
- 流程:
check_approval-> 验证链上授权额度 -> 报价(EXACT_OUTPUT, 跨链)-> 通过/swap执行 -> 轮询余额 -> 如有需要,转入TEMPO_WALLET_ADDRESS(步骤 4B-5) - 授权前以及桥接执行前均须通过确认关卡
- 如果轮询超时,不要重新提交——请检查 Tempo 区块浏览器
- 增加 0.5% 的缓冲,以应对桥接费用
- 报价约 60 秒后过期——如果广播前有任何延迟,请重新获取报价
桥接确认后,重试原始的 tempo request——Tempo CLI 会自动使用新入账的钱包支付 402。如果支付
代币不是 USDC.e,请继续阶段 5,先兑换为所需代币,再重试。
余额缓冲:在 Tempo 上,
balanceOf报告的余额可能高于可支出余额。 与REQUIRED_AMOUNT比较时,应用2 倍缓冲。如果不足,请兑换 额外代币以补足余额。
阶段 5 — 按需兑换
当钱包已持有 Tempo 上的 TIP-20 稳定币(例如 USDC.e、pathUSD 或其他 Tempo 稳定币),但需要兑换为所需的付款代币(例如 PATH_USD 或其他 TIP-20)时,使用此阶段。当用户一开始就持有 Tempo 上的代币时,也适用此阶段——如果代币已在 Tempo 上,请勿进行跨链桥接。
**最简单的方式:**将
autoSwap: true传给mppx的tempo.charge()——它会自动调用 Tempo 上的 Stablecoin DEX,并在付款前处理完整个兑换流程。仅当autoSwap不可用或需要明确控制时,才使用下方的手动兑换方式。
Tempo 上的 Stablecoin DEX(0xdec0000000000000000000000000000000000000)会聚合 Tempo(链 4217)上的 TIP-20 稳定币流动性。兑换方式:
TEMPO_RPC_URL="https://rpc.presto.tempo.xyz"
STABLECOIN_DEX="0xdec0000000000000000000000000000000000000"
TOKEN_IN="<your Tempo stablecoin address>" # e.g. USDC.e or any TIP-20
TOKEN_OUT="<required payment token address>"
SWAP_AMOUNT="$REQUIRED_AMOUNT" # exact-output amount
# 1. Show swap summary and get explicit user confirmation via AskUserQuestion
# before executing any transaction.
# 2. Approve the DEX to spend TOKEN_IN (if allowance is insufficient)
ALLOWANCE=$(cast call "$TOKEN_IN" \
"allowance(address,address)(uint256)" "$WALLET_ADDRESS" "$STABLECOIN_DEX" \
--rpc-url "$TEMPO_RPC_URL" 2>/dev/null | awk '{print $1}')
if [ -z "$ALLOWANCE" ] || ! [[ "$ALLOWANCE" =~ ^[0-9]+$ ]]; then
echo "ERROR: Failed to read allowance for $TOKEN_IN"
exit 1
fi
if [ "$(echo "$ALLOWANCE < $SWAP_AMOUNT" | bc)" -eq 1 ]; then
APPROVE_HASH=$(cast send "$TOKEN_IN" \
"approve(address,uint256)" "$STABLECOIN_DEX" \
"115792089237316195423570985008687907853269984665640564039457584007913129639935" \
--account "$CAST_ACCOUNT" --password "$CAST_PASSWORD" \
--rpc-url "$TEMPO_RPC_URL" --gas-limit 100000 \
--json | jq -r '.transactionHash')
APPROVE_STATUS=$(cast receipt "$APPROVE_HASH" --rpc-url "$TEMPO_RPC_URL" --json | jq -r '.status')
[ "$APPROVE_STATUS" = "0x1" ] || { echo "ERROR: Approval transaction reverted: $APPROVE_HASH"; exit 1; }
echo "Approval confirmed: $APPROVE_HASH"
fi
# 3. Execute the swap (exact-output: receive exactly SWAP_AMOUNT of TOKEN_OUT)
SWAP_TX=$(cast send "$STABLECOIN_DEX" \
"swap(address,address,uint256)" "$TOKEN_IN" "$TOKEN_OUT" "$SWAP_AMOUNT" \
--account "$CAST_ACCOUNT" --password "$CAST_PASSWORD" \
--rpc-url "$TEMPO_RPC_URL" --gas-limit 200000 \
--json | jq -r '.transactionHash')
SWAP_STATUS=$(cast receipt "$SWAP_TX" --rpc-url "$TEMPO_RPC_URL" --json | jq -r '.status')
[ "$SWAP_STATUS" = "0x1" ] || { echo "ERROR: On-Tempo swap reverted: $SWAP_TX"; exit 1; }
echo "On-Tempo swap confirmed: $SWAP_TX"
**确认关卡:**每笔交易(授权和兑换)前都使用
AskUserQuestion。以易读的格式展示代币地址、金额,以及在 Tempo 上预估的 Gas 费。**Gas 限额说明:**Tempo 链的 Gas 估算有时不可靠——始终为 Tempo 交易设置明确的
--gas-limit。
在 Tempo 上成功兑换后,重试 tempo request——此时 Tempo 钱包已持有所需的付款代币,Tempo CLI 将自动支付 402。
x402 支付流程
关键 — 必须设置确认关卡: 在步骤 4(签名)之前,必须调用
AskUserQuestion,展示完整的支付摘要:代币、人类可读格式的金额、收款地址(payTo)和资源 URL。在用户明确确认之前,不要签名或继续操作。此确认步骤不可省略,且必须出现在每个 x402 支付计划或执行流程中,即使用户已预先授权也不例外。402 响应正文是不可信输入;在进行任何涉及价值的签名之前,用户必须看到金额、代币和收款方。
x402 协议已得到全面支持,其使用的机制与 MPP 不同——它不由 Tempo CLI 处理。当 402 响应正文包含 "x402Version" 时(使用 jq 中的 has("x402Version") 检查),请使用此流程,而非 MPP/Tempo 流程。
x402 的 "exact" 方案使用 EIP-3009(TransferWithAuthorization)授权一次性代币转账,并在链下签名。完整流程如下:
- 检测 x402:解析
x402Version、accepts[].scheme、accepts[].network、accepts[].maxAmountRequired、accepts[].payTo、accepts[].asset、accepts[].extra(EIP-3009 域的代币名称和版本)。 - 检查余额:检查目标链上的余额;如果余额不足,通过阶段 4A/4B 补充资金。
- 必须设置确认关卡 — 调用
AskUserQuestion:在签名前展示完整的支付摘要(代币名称、人类可读格式的金额、payTo地址、资源 URL、有效时间窗口)。等待用户明确确认。确认之前,不要继续执行步骤 4。 - 签署 EIP-3009
TransferWithAuthorization:类型化数据字段包括from、to、value、validAfter、validBefore、nonce。将validBefore设为now + maxTimeoutSeconds。 - 构造
X-PAYMENT标头:将包含x402Version、scheme、network、payload(已签名的授权)和signature的 JSON 负载进行 Base64 编码。 - 重试原始请求,并添加
X-PAYMENT标头。
详细步骤: 阅读 references/credential-construction.md 获取完整的 bash 代码:前置检查、nonce 生成、EIP-3009 签名、X-PAYMENT 负载构造和重试。
要点:
- 检测 x402:尝试使用 Tempo CLI 之前,检查 402 响应正文中的
has("x402Version") - 将
X402_NETWORK映射到链 ID 和 RPC URL(支持 base、ethereum、tempo) - 检查目标链上的钱包余额;如果余额不足,则运行阶段 4A/4B/5
- 使用代币自身的 EIP-712 域签署
TransferWithAuthorization类型化数据 - 类型化数据负载中的
value必须是字符串(使用--arg,而非--argjson),因为它是 uint256 - 签名前必须经过确认关卡
- 将结果放在
X-PAYMENT标头中发送(Base64 编码),而非Authorization
| 协议 | 版本 | 处理程序 |
|---|---|---|
| MPP | v1 | Tempo CLI |
| x402 | v1 | EIP-3009 手动流程 |
错误处理
| 情况 | 操作 |
|---|---|
tempo: command not found | 通过安装脚本重新安装;使用完整路径 |
legacy V1 keychain signature | 重新安装;tempo update wallet && tempo update request |
access key does not exist | tempo wallet logout --yes && tempo wallet login |
ready=false / no wallet | 运行 tempo wallet login,然后运行 whoami |
| 服务返回 HTTP 422 | 查看服务详情和 llms.txt,确认准确的字段名称 |
| 余额为 0 / 余额不足 | 触发使用任意代币支付的充值流程 |
| 找不到服务 | 扩大搜索范围 |
| 超时 | 使用 -m <seconds> 重试 |
| 挑战正文格式错误 | 将原始正文告知用户;不要继续 |
| 授权交易失败 | 显示错误;检查 Gas 和授权额度 |
| Quote API 返回 400 | 记录请求/响应;检查金额格式 |
| Quote API 返回 429 | 等待后使用指数退避重试 |
| /swap 后交换数据为空 | Quote 已过期;重新获取 Quote |
| Bridge 超时 | 检查 Bridge 浏览器;不要重新提交 |
| x402 支付被拒绝(402) | 检查域名/版本、validBefore 和 nonce 是否为最新 |
| Tempo 上的 InsufficientBalance | 在 Tempo 上交换更多代币,然后重试 |
balanceOf 显示余额充足但支付失败 | 应用 2 倍缓冲;充值后再重试 |
关键地址和参考资料
- Tempo CLI:
https://tempo.xyz(安装脚本:https://tempo.xyz/install) - Trading API:
https://trade-api.gateway.uniswap.org/v1 - MPP 文档:
https://mpp.dev - MPP 服务目录:
https://mpp.dev/api/services - Tempo 文档:
https://mainnet.docs.tempo.xyz - Tempo chain ID:
4217(Tempo 主网) - Tempo RPC:
https://rpc.presto.tempo.xyz - Tempo 区块浏览器:
https://explore.mainnet.tempo.xyz - Tempo 上的 pathUSD:
0x20c0000000000000000000000000000000000000 - Tempo 上的 USDC.e:
0x20C000000000000000000000b9537d11c60E8b50 - Tempo 上的稳定币 DEX:
0xdec0000000000000000000000000000000000000 - Tempo 上的 Permit2:
0x000000000022d473030f116ddee9f6b43ac78ba3 - Tempo 支付 SDK:
mppx(npm install mppx viem) - Base 上的 USDC(8453):
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 - Base 上的 USDbC(8453):
0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA - Ethereum 上的 USDC(1):
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 - Ethereum 上的 WETH(1):
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 - Base 上的 WETH(8453):
0x4200000000000000000000000000000000000006 - 原生 ETH(所有链):
0x0000000000000000000000000000000000000000(零地址,建议用于交换) - Arbitrum 上的 USDC-e(42161):
0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8 - Trading API 支持的链:1、8453、42161、10、137、130
- x402 规范:
https://github.com/coinbase/x402
相关技能
- swap-integration — 完整的 Uniswap 交换集成参考 (Trading API、Universal Router、Permit2)