mcpField
X
x402

x402

github.com/browser-use云与 DevOps119.5k1.3k 次安装3 天前更新
代码仓库

关于 x402

x402 是一项脚本化技能,用于配置 Browser Use Cloud 的加密钱包付款,并通过 SDK 运行浏览器任务。它涵盖钱包设置、USDC 充值、付费测试和 SDK 使用;x402 仅支持 Python 或 TypeScript SDK,不支持 CLI。

主要功能

  1. 01基于钱包的 USDC 付款
  2. 02免账户或 API 密钥账单设置
  3. 03钱包充值指引
  4. 04端到端付费测试
  5. 05Python 和 TypeScript SDK 设置

适用场景

  1. 01使用钱包支付 Browser Use 任务
  2. 02用加密货币为现有 API 密钥项目充值
  3. 03在应用中加入 x402 付款

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/browser-use/browser-use --skill x402

安装后在 Claude Code 中输入/x402确认已加载。

详细介绍

Browser Use Cloud — 使用 x402 付款(加密货币钱包)

这是一个脚本化流程。请按顺序执行步骤。x402 只能通过 SDK 使用(Python 使用 browser-use-sdk,TS 使用 browser-use npm 包)——没有用于此功能的 browser-use CLI 命令,因此每个步骤都要运行一段简短的 SDK 脚本。

如何使用此脚本

  • Say: 下方的内容必须逐字说给用户听。不要改写、增添或删减任何内容。
  • Say 块中的 <like this> 是需要填写的内容——将其替换为实际值,其余部分保持原样。
  • Ask: 下方的内容使用 AskUserQuestion 工具。问题和选项文本必须与原文完全一致。
  • 在提问前展示说明时,请将说明放在 AskUserQuestion 的 question 字段中(它会显示在选项上方)。不要在调用该工具前将其作为单独的聊天文本发送——打开问题界面时,这些文本会被丢弃。因此,说明和实际问题都放在 question 字段中,通过一次工具调用发送。
  • Do: 下方的内容是你的操作。不要读出来。
  • 过程中跟踪两个事实:SETUP(步骤 1 的 A 或 B)和 MODE(步骤 2 的 A 或 B)。
  • SETUP、MODE 和 Path A/B/C 名称只是内部标签。绝不要对用户说出这些名称。 请用直白的语言描述选项(例如“为账户充值”/“无账户钱包”),不要说“Mode B”或“Path A”。

步骤 1 — 开始并选择设置方式

Ask:(标题:Use x402)——将说明和问题都按以下内容原样放入 question 字段:

x402 是 Coinbase 推出的一种协议,它让你可以使用加密货币支付 API 请求,而不是提供 API 密钥。x402 让你可以通过加密货币钱包,使用 Base 上的 USDC 按请求向 Browser Use 付款——无需注册、API 密钥或信用卡,只需一个钱包。设置只需几分钟:获取或创建钱包、添加资金、将密钥保存在 .env 中,然后进行测试。

你想如何使用 x402?

  • 直接使用 — 在此终端中通过向我提问来运行 Browser Use 任务,并从你的钱包中付款。我会设置钱包和密钥。
  • 集成到应用中 — 你正在编写应用,并想在其中集成 x402。我会帮你安装 SDK、将密钥保存在项目的 .env 中,并添加代码。

Do: 选择“直接使用” → SETUP = A。选择“集成到应用中” → SETUP = B。


步骤 2 — 查找账户(询问前先检查)

Do: 按以下顺序查找现有的 Browser Use API 密钥。先不要说任何内容。

  1. 环境中的 BROWSER_USE_API_KEY
  2. ./.env 中的 BROWSER_USE_API_KEY= 行
  3. ~/.browser-use/config.json(由 browser-use cloud login / signup 保存)
  4. 如果已安装 CLI,则查看 browser-use doctor 的输出

如果在任何位置都找不到密钥:

Say:

没有找到 Browser Use 密钥,因此我会为你设置无账户模式:钱包就是你的身份,首次付款会创建一个以该钱包命名的项目。

Do: MODE = A。前往步骤 3。

如果找到了密钥:

Ask:(标题:Account)——问题:我在 <location> 找到了 Browser Use API 密钥。USDC 额度应存入哪里?

  • 为该账户充值 — 额度会存入你现有 API 密钥所属的项目。适合免费额度用完,或你希望用加密货币而不是信用卡付款的情况。
  • 无账户钱包 — 钱包是一个独立身份。首次付款会创建一个以该钱包命名的新项目,与现有账户分开。

Do: 选择“为该账户充值” → MODE = B。选择“无账户钱包” → MODE = A。


步骤 3 — 钱包

Ask:(标题:Wallet)——问题:你已经准备好钱包了吗,还是需要我帮你设置?

  • 我有已充值的钱包 — 一个在 Base 主网上持有 USDC 的 EVM 钱包(MetaMask、Rabby、Coinbase Wallet、Frame、Phantom、……)。
  • 带我一步步操作 — 我会指导你创建钱包、添加 Base 并购买 USDC。
  • 新建一个 — 我会生成一个用于自动化的一次性钱包。你仍需为其充值。

根据回答分支。

路径 A —“我有已充值的钱包”

**操作:**检查 .env 是否在 .gitignore 中;如果没有,就添加进去。

询问:(标题:Add key)——将说明和问题都放在 question 字段中:

你的钱包私钥需要放进 .env。你可以在这里粘贴,我会帮你添加;也可以自己添加。提醒一下:聊天中粘贴的内容会保存在记录中,因此对于高价值钱包,自己添加会更安全一些。你想怎么做?

  • 在这里粘贴——在聊天中粘贴你的私钥,我会帮你写入 .env。
  • 我自己添加——你将私钥添加到 .env,然后只把你的公开地址发给我。

如果选择“在这里粘贴”:

**操作:**将 BROWSER_USE_X402_PRIVATE_KEY=<pasted key> 写入 .env(如果文件不存在则创建;确保 .env 已被 git 忽略)。绝不回显私钥,也不要在任何地方打印它。

告知:

已将你的密钥保存到 .env——我不会把它打印出来。

**操作:**前往第 4 步。

如果选择“我自己添加”:

告知:

将以下内容添加到你的 .env,然后把钱包的公开地址发给我(以 0x… 开头的那个,可以安全分享):

BROWSER_USE_X402_PRIVATE_KEY=<your private key>

**操作:**收到地址后,检查它是否符合 ^0x[0-9a-fA-F]{40}$。

告知:

收到:<address>。这是一个有效地址。

**操作:**前往第 4 步。

路径 B —“带我一步步操作”

告知:

  1. 仅从官方网站 https://metamask.io 安装 MetaMask(或 Rabby、Coinbase Wallet、Frame、Trust Wallet、Phantom 等)。创建钱包,将助记词离线保存,并设置密码。
  2. 将 Base 添加为网络。打开 https://chainlist.org/chain/8453 →“Connect Wallet”→“Add to MetaMask”,然后在钱包中批准。
  3. 点击钱包中的“Buy”。选择 USDC、网络 Base,然后使用银行卡 / Apple Pay / 银行付款。USDC 会直接进入你的钱包。
  4. 获取私钥:账户菜单 → Account details → Show private key → 输入密码 → 复制。
  5. 将私钥添加到 .env(确保 .env 已被 git 忽略):
BROWSER_USE_X402_PRIVATE_KEY=<your private key>
  1. 把钱包的公开地址发给我(以 0x… 开头的那个),这样我就能检查。

**操作:**然后从地址检查开始,按照路径 A 继续。

路径 C —“新建一个”

**操作:**生成一个钱包。将密钥保存到 .env。只显示地址。

Python:

pip install eth-account
from eth_account import Account
acc = Account.create()
print("Address:", acc.address)
print("Private key:", acc.key.hex())

TypeScript:

npm install viem
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
const key = generatePrivateKey();
console.log("Address:", privateKeyToAccount(key).address);
console.log("Private key:", key);

告知:

已创建一个新钱包。你的公开地址是 <address>,私钥已保存到 .env。现在需要为钱包充值。

**操作:**前往第 4 步(充值)。


第 4 步 — 充值

如果选择路径 A 或 B(已充值):

告知:

你的钱包已经充值,我们直接跳到测试环节。

**操作:**前往第 5 步。

如果选择路径 C:

告知:

有两种方式可以将 USDC 转入你在 Base 上的钱包:

  • 使用钱包内的 Buy 按钮(最简单):点击“Buy”,选择 USDC,将网络设为 Base,然后使用银行卡付款。无需通过交易所。
  • 从交易所转账:将 USDC 发送到 <address>,并选择“Base”作为网络——不要选择 Ethereum,否则手续费要 $5–$20。

至少充值 $20:这足以支付 $1 的测试费用,还能完成几项实际任务。我会监控余额,并在到账时告诉你。

**操作:**使用 Base 的公共 RPC,每隔 5 秒检查链上余额:

PADDED=$(printf "%064s" "${WALLET_ADDR:2}" | tr ' ' '0')
curl -s https://mainnet.base.org \
  -H "Content-Type: application/json" \
  -d "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\"data\":\"0x70a08231${PADDED}\"},\"latest\"],\"id\":1}"

将 result 读取为十六进制数值;除以 1_000_000(USDC 有 6 位小数)。余额达到 $20 或以上时停止。

告知:

已到账——我看到 Base 上有 $。接下来进行快速测试。


步骤 5 — 测试运行(约 $1)

执行: 如果 SETUP = A,确保 SDK 已安装在你要运行脚本的环境中(默认使用 Python)。如果 SETUP = B,将 SDK 安装到项目所用的语言环境中——根据当前工作目录判断语言(package.json/tsconfig.json → TypeScript;pyproject.toml/requirements.txt/*.py → Python;只有无法判断时才询问):

# Python (needs 3.10+ for the x402 extra)
pip install "browser-use-sdk[x402]"
# TypeScript
npm install browser-use-sdk @x402/fetch @x402/evm viem

询问:(标题:Test run)——问题:准备好测试了吗?这会从你的钱包中恰好扣除 $1 USDC,用于检查支付并端到端运行任务。

  • 使用默认任务 — “前往 example.com 并告诉我标题文本。”(约 5 秒,费用低)
  • 我来提供任务 — 告诉我一个要运行的简短任务。
  • 跳过测试 — 跳过测试,直接开始使用 x402。

执行:

  • 选择“我来提供任务” → 说: 要运行什么任务?请简短描述。 等待对方回复。
  • 选择“跳过测试” → 前往步骤 6。
  • 否则,使用默认任务。

执行: 运行测试。使用原始 x402 客户端,并将 max_value 设为 $1.50,这样会支付 $1,而不是 SDK 默认使用的 $5:

import asyncio, os
from decimal import Decimal
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
from eth_account import Account

async def main():
    client = x402Client()
    register_exact_evm_client(
        client,
        EthAccountSigner(Account.from_key(os.environ["BROWSER_USE_X402_PRIVATE_KEY"])),
    )
    # max_value caps the spend per request — picks the $1 option over the $5 default.
    async with x402HttpxClient(client, max_value=Decimal("1.5"), timeout=180.0) as http:
        resp = await http.post(
            "https://x402.api.browser-use.com/api/v3/sessions",
            json={"task": "<the task>"},
        )
        print(resp.status_code, resp.json())

asyncio.run(main())

如果 MODE = B,添加 API 密钥标头,否则这 $1 会进入一个新的钱包项目,而不是正在充值的项目:

async with x402HttpxClient(
    client, max_value=Decimal("1.5"), timeout=180.0,
    headers={"X-Browser-Use-API-Key": os.environ["BROWSER_USE_API_KEY"]},
) as http:
    ...

如果已安装的 x402 库不支持 max_value,说: 这个 x402 版本无法强制收取 $1,因此测试费用会是 $5。要继续吗?——得到肯定答复后再运行。

说:

已支付。链上凭证:https://basescan.org/address/

#tokentxns — 查找一笔金额恰好为 $1.000000 的 USDC 转出记录。

执行: 读取余额。如果 MODE = A(需要 browser-use-sdk ≥ 3.8.0;如果版本较旧,请告知运行 pip install -U "browser-use-sdk[x402]",或跳过此步骤):

import asyncio, os
from browser_use_sdk.v3 import get_wallet_balance

async def main():
    bal = await get_wallet_balance(os.environ["BROWSER_USE_X402_PRIVATE_KEY"])
    print(bal['total_credits_usd'])

asyncio.run(main())

如果 MODE = B,跳过 get_wallet_balance(它会返回 404——额度存放在 API 密钥所属的项目中,这是正常现象,不要将其显示为错误),并按常规方式读取余额:

from browser_use_sdk.v3 import AsyncBrowserUse
client = AsyncBrowserUse(api_key=os.environ["BROWSER_USE_API_KEY"])
acct = await client.billing.account()
print(acct.total_credits_balance_usd)

说:

完成。你的 Browser Use 余额现在是 $(测试费用约为 $)。任务会从这笔余额中扣款,余额用完时 SDK 会再充值 $5。


步骤 6 — 收尾

如果 SETUP = A:

说:

一切就绪。让我运行任何浏览器任务,我都会通过 SDK 运行,并从你的钱包中扣款。

执行: 对方提出任务时,编写一个临时脚本(放在 /tmp 中;耗时较长的任务则使用后台作业),运行脚本,报告结果并将其删除——不要在对方的当前工作目录中留下文件。SDK 会读取 BROWSER_USE_X402_PRIVATE_KEY,并自行查找 x402 端点:

import asyncio, os
from browser_use_sdk.v3 import AsyncBrowserUse

async def main():
    client = AsyncBrowserUse()  # Mode B: AsyncBrowserUse(api_key=os.environ["BROWSER_USE_API_KEY"])
    result = await client.run(task="<the task>")
    print(result.output)

asyncio.run(main())

如果 SETUP = B:

说:

一切就绪。以下是可在代码中使用的客户端——它会从你的 .env 中读取密钥和端点:

执行: 使用项目所用的语言添加客户端,并告知对方其余内容请参考 cloud 技能/SDK 文档:

from browser_use_sdk.v3 import AsyncBrowserUse

client = AsyncBrowserUse()                                  # Mode A (accountless)
# client = AsyncBrowserUse(api_key="bu_...")                # Mode B (top up existing account)

(x402 需要使用 异步 客户端——设置 x402 环境变量后,同步版 BrowserUse 将无法运行。)


TypeScript 对应写法

PythonTypeScript
from browser_use_sdk.v3 import AsyncBrowserUseimport { BrowserUse } from "browser-use-sdk/v3"
AsyncBrowserUse()new BrowserUse()
await client.run(task=...) → .outputawait client.run({ task }) → .output
get_wallet_balance(key)getWalletBalance(key)(来自 from "browser-use-sdk/v3")
pip install "browser-use-sdk[x402]"npm install browser-use-sdk @x402/fetch @x402/evm viem

两个 SDK 都会从环境变量中读取 BROWSER_USE_X402_PRIVATE_KEY。

规则

  • 按顺序遵循脚本。逐字说出“说”区块中的内容。
  • 未经明确同意,绝不要使用用户的 USDC(步骤 5 中的问题即为征求同意)。
  • 始终提供两种添加密钥的方式:在聊天中粘贴(由你写入 .env),或由用户自行添加。如果对方粘贴了密钥,直接将其写入 .env,绝不要复述,也不要将其存储在其他位置。
  • 保存密钥前,先将 .env 添加到 .gitignore。
  • 钱包中是真钱。 不要将密钥放入源代码管理、日志或截图中;只添加泄露后你能承担损失的金额。

参考资料

评论

支持 Markdown