---
title: "使用 ERPC CLI 调用 RPC 方法并将事件发送到您的 URL"
description: "erpc rpc call 向 Solana 或 Ethereum 主网发送一个 JSON-RPC 请求，x402 无需账户即可按次付费，erpc webhook 以 POST 方式将 RPC 事件发送到您的 URL。"
canonical: "https://erpc.global/zh/doc/erpc-cli/rpc-call-and-webhooks/"
locale: "zh"
---

# 使用 ERPC CLI 调用 RPC 方法并将事件发送到您的 URL

`erpc rpc call` 使用您已登录的 ERPC 账户从终端发送一个 JSON-RPC 请求，也可以通过 x402 按次付费。`erpc webhook` 以 POST 方式将 RPC 事件发送到您的 URL。

本页介绍 ERPC CLI `v0.1.0-rc.4`，这是一个预发布版本。

## 调用 RPC 方法

使用您已登录的 ERPC 账户调用 Solana 或 Ethereum 主网。CLI 会根据方法选择共享端点，您也可以自行选择网络。

```sh
erpc login
erpc rpc call getSlot
erpc --json rpc call eth_getBlockByNumber '["latest", false]' --network ethereum-mainnet
erpc rpc call eth_call --params-file params.json
printf '%s' '["finalized", false]' | erpc rpc call eth_getBlockByNumber -
erpc rpc call getHealth --endpoint-url http://127.0.0.1:8899
```

- **参数**可以是 JSON 数组或对象、通过 `--params-file` 指定的文件，或表示标准输入的 `-`。未提供参数时，调用会发送 `[]`。
- **网络**为 `solana-mainnet` 和 `ethereum-mainnet`（也可写作 `eth-mainnet`）。`erpc rpc list-networks` 会列出提供 ERPC 共享 RPC 和 x402 RPC 的网络。
- **您自己的端点**：`--endpoint-url` 只使用该 URL 中的凭据。该 URL 必须是安全 URL 或 loopback，且不含用户信息。

### 调用会使用账户的哪个密钥

一个账户可以有多个 RPC 密钥。`erpc rpc call` 和 `erpc webhook run` 会按顺序尝试这些密钥，先尝试主要密钥，并在发出自身的调用之前，对每个密钥各进行一次 `getHealth` 调用。密钥在共享 Solana RPC 上判定，与之后调用哪条链无关。

如果 RPC 不接受任何密钥，且无法就其中某个密钥向 RPC 查询，命令会使用第一个无法查询的密钥继续执行，并由命令自身的调用显示结果。如果每个密钥都被拒绝，命令会失败并显示 `the shared RPC takes none of the account's API keys from this machine (<n> tried)`：请参阅[出错时](https://erpc.global/zh/doc/erpc-cli/worker-troubleshooting/)。

## 通过 x402 按次付费

如需在没有账户的情况下按次付费访问，请获取 x402 报价。`--quote` 会打印报价，但不读取钱包，也不进行付款。

要付款，请在终端中运行不带 `--quote` 的命令。CLI 会显示金额并请求确认，然后使用 `erpc wallet create` 配置的钱包对报价中的 Base EURC 付款进行签名。请在该钱包中保留 Base 上的 EURC（[用钱包付款](https://erpc.global/zh/doc/erpc-cli/ai/#用钱包付款)）。

```sh
erpc rpc call getSlot --network solana-mainnet --x402 --quote
erpc rpc call eth_blockNumber --x402
```

## 将事件发送到您的 URL

本地 Webhook 会订阅 RPC WebSocket，并以 POST 方式将事件发送到您的 URL。请先启动接收端，再创建订阅，然后在终端中或在您的进程管理器下运行 `create` 返回的 ID。

```sh
erpc webhook create --name slots --network solana-mainnet \
  --url http://127.0.0.1:8080/events --method slotSubscribe
erpc webhook create --name heads --network ethereum-mainnet \
  --url http://127.0.0.1:8080/events --method eth_subscribe --params '["newHeads"]'
erpc webhook list
erpc webhook run 1
```

如需接收 Solana 上的钱包活动，请使用 `--template solana-wallet --wallet ADDRESS` 代替 `--method`。如需接收 Ethereum 合约日志，请使用 `--template evm-contract-events --address CONTRACT`。回调 URL 为 HTTPS 或 loopback HTTP，可用网络与 `erpc rpc call` 的相同。

### 接收端收到的内容

- 每个 POST 都包含 `webhook_id`、`network` 和原始的 JSON-RPC `notification`。返回 HTTP 2xx 即表示接受。
- 投递从当前的实时订阅开始。重启运行器会订阅新的事件。
- 连接断开或回调失败会使运行器以非零状态结束。
- `erpc webhook run` 接受 `--once` 用于测试单次投递，也接受 `--endpoint-url` 以使用您自己的 WebSocket RPC。

## 管理 Webhook

| 命令 | 作用 |
| --- | --- |
| `erpc webhook list` | 列出已保存的订阅 |
| `erpc webhook show ID` | 显示一个订阅。回调凭据会被省略 |
| `erpc webhook enabled-count` | 统计本机上已启用的订阅数量 |
| `erpc webhook pause ID` | 停用投递。正在运行的运行器会退出 |
| `erpc webhook activate ID` | 使之后的 `run` 可以执行 |
| `erpc webhook delete ID` | 删除定义 |

这些命令只检查和更改本地配置。在脚本中，请向 `pause`、`activate` 和 `delete` 传递 `--yes`。
