目 录CONTENT

文章目录

rpc使用指南

懿曲折扇情
2026-01-25 / 0 评论 / 0 点赞 / 3 阅读 / 4,992 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2026-01-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
广告 广告

区块链RPC完整指南

目录

  1. 什么是RPC
  2. RPC在区块链中的作用
  3. RPC的工作原理
  4. 主流区块链的RPC接口
  5. RPC接口使用方法
  6. 常用RPC接口详解
  7. RPC部署指南
  8. 最佳实践与安全建议
  9. 故障排查

什么是RPC

RPC(Remote Procedure Call,远程过程调用) 是一种计算机通信协议,允许程序调用另一个地址空间(通常是远程服务器)上的函数或方法,就像调用本地函数一样。

在区块链领域,RPC是节点与外部应用之间的通信桥梁,让开发者能够通过HTTP、WebSocket等方式与区块链节点交互,查询链上数据、发送交易、部署智能合约等。


RPC在区块链中的作用

1. 数据查询

  • 查询账户余额
  • 获取交易信息
  • 读取智能合约状态
  • 查询区块信息

2. 交易提交

  • 发送原生代币转账
  • 调用智能合约方法
  • 部署智能合约
  • 签名和广播交易

3. 网络管理

  • 获取网络状态
  • 监控节点同步状态
  • 管理节点连接

4. 开发工具支持

  • 支持开发框架(如Web3.js、Ethers.js)
  • 提供调试接口
  • 支持测试网络交互

RPC的工作原理

┌─────────────┐         HTTP/WebSocket          ┌─────────────┐
│  客户端应用  │ ──────────────────────────────> │  RPC节点    │
│ (DApp/工具)  │ <────────────────────────────── │  (区块链)   │
└─────────────┘         JSON-RPC响应            └─────────────┘

通信流程

  1. 客户端发送请求:以JSON格式发送RPC方法调用
  2. 节点处理请求:解析请求,执行相应操作
  3. 返回结果:将执行结果以JSON格式返回给客户端

JSON-RPC格式

{
  "jsonrpc": "2.0",
  "method": "eth_getBalance",
  "params": ["0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb", "latest"],
  "id": 1
}

响应格式:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x2386f26fc10000"
}

主流区块链的RPC接口

1. Ethereum (以太坊)

  • 标准端口:8545 (HTTP), 8546 (WebSocket)
  • RPC规范:JSON-RPC 2.0
  • 常用客户端:Geth, Erigon, Nethermind

2. Bitcoin (比特币)

  • 标准端口:8332 (HTTP)
  • RPC规范:Bitcoin Core RPC
  • 常用客户端:Bitcoin Core

3. BSC (币安智能链)

  • 兼容性:与Ethereum RPC兼容
  • 标准端口:8545

4. Polygon

  • 兼容性:与Ethereum RPC兼容
  • 标准端口:8545

5. Solana

  • 标准端口:8899 (HTTP), 8900 (WebSocket)
  • RPC规范:自定义JSON-RPC

RPC接口使用方法

方法一:使用HTTP请求(cURL)

# 查询以太坊账户余额
curl -X POST \
  -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb", "latest"],"id":1}' \
  http://localhost:8545

方法二:使用Web3.js (JavaScript)

const Web3 = require('web3');

// 连接到RPC节点
const web3 = new Web3('http://localhost:8545');

// 查询余额
async function getBalance() {
  const balance = await web3.eth.getBalance('0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb');
  console.log('Balance:', web3.utils.fromWei(balance, 'ether'), 'ETH');
}

getBalance();

方法三:使用Ethers.js (JavaScript)

const { ethers } = require('ethers');

// 连接到RPC节点
const provider = new ethers.providers.JsonRpcProvider('http://localhost:8545');

// 查询余额
async function getBalance() {
  const balance = await provider.getBalance('0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb');
  console.log('Balance:', ethers.utils.formatEther(balance), 'ETH');
}

getBalance();

方法四:使用Python (web3.py)

from web3 import Web3

# 连接到RPC节点
w3 = Web3(Web3.HTTPProvider('http://localhost:8545'))

# 查询余额
balance = w3.eth.get_balance('0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb')
print(f"Balance: {w3.fromWei(balance, 'ether')} ETH")

常用RPC接口详解

Ethereum RPC接口

1. 账户相关

eth_getBalance - 查询账户余额
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_getBalance",
  "params": ["0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb", "latest"],
  "id": 1
}

// 响应
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x2386f26fc10000"
}

参数说明:

  • address: 要查询的账户地址(20字节,十六进制)
  • block: 区块号或标签(“latest”, “earliest”, “pending”)

使用示例:

// Web3.js
const balance = await web3.eth.getBalance('0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb');

// Ethers.js
const balance = await provider.getBalance('0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb');
eth_getTransactionCount - 获取账户nonce
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_getTransactionCount",
  "params": ["0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb", "latest"],
  "id": 1
}

用途: 获取账户的交易计数,用于构建新交易时设置正确的nonce值。

2. 区块相关

eth_blockNumber - 获取最新区块号
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_blockNumber",
  "params": [],
  "id": 1
}

// 响应
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x1a2b3c"
}

使用示例:

const blockNumber = await web3.eth.getBlockNumber();
console.log('Current block:', blockNumber);
eth_getBlockByNumber - 获取区块信息
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_getBlockByNumber",
  "params": ["0x1a2b3c", true],
  "id": 1
}

参数说明:

  • block: 区块号(十六进制)或标签
  • fullTransactions: true返回完整交易对象,false只返回交易哈希
eth_getBlockByHash - 通过哈希获取区块
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_getBlockByHash",
  "params": ["0x1234...abcd", true],
  "id": 1
}

3. 交易相关

eth_getTransactionByHash - 获取交易信息
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_getTransactionByHash",
  "params": ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],
  "id": 1
}

返回字段说明:

  • hash: 交易哈希
  • from: 发送方地址
  • to: 接收方地址
  • value: 转账金额(wei)
  • gas: Gas限制
  • gasPrice: Gas价格
  • nonce: 交易nonce
  • input: 交易数据(合约调用数据)
eth_getTransactionReceipt - 获取交易回执
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_getTransactionReceipt",
  "params": ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],
  "id": 1
}

返回字段说明:

  • status: 交易状态(0x0失败,0x1成功)
  • blockNumber: 所在区块号
  • blockHash: 所在区块哈希
  • gasUsed: 实际使用的Gas
  • logs: 事件日志数组
  • contractAddress: 如果是合约创建,返回合约地址

使用示例:

// 等待交易确认
async function waitForTransaction(txHash) {
  const receipt = await web3.eth.getTransactionReceipt(txHash);
  if (receipt.status) {
    console.log('Transaction successful!');
  } else {
    console.log('Transaction failed!');
  }
  return receipt;
}
eth_sendRawTransaction - 发送已签名的交易
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_sendRawTransaction",
  "params": ["0xf86c808502540be400825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83"],
  "id": 1
}

重要提示:

  • 交易必须先用私钥签名
  • 签名后的交易是十六进制字符串
  • 这是发送交易的标准方式(比eth_sendTransaction更安全)

完整交易发送示例:

const Web3 = require('web3');
const web3 = new Web3('http://localhost:8545');

async function sendTransaction() {
  // 1. 获取账户nonce
  const nonce = await web3.eth.getTransactionCount('0xYourAddress', 'pending');
  
  // 2. 构建交易对象
  const tx = {
    from: '0xYourAddress',
    to: '0xRecipientAddress',
    value: web3.utils.toWei('1', 'ether'),
    gas: 21000,
    gasPrice: await web3.eth.getGasPrice(),
    nonce: nonce
  };
  
  // 3. 使用私钥签名(注意:实际应用中私钥应安全存储)
  const signedTx = await web3.eth.accounts.signTransaction(tx, '0xYourPrivateKey');
  
  // 4. 发送已签名的交易
  const receipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction);
  
  console.log('Transaction hash:', receipt.transactionHash);
}

4. 智能合约相关

eth_call - 调用合约方法(只读)
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_call",
  "params": [
    {
      "to": "0xContractAddress",
      "data": "0x70a08231000000000000000000000000742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
    },
    "latest"
  ],
  "id": 1
}

用途: 调用合约的view/pure函数,不消耗Gas,不改变链上状态。

使用示例:

// 调用ERC20的balanceOf方法
const contractAddress = '0x...';
const accountAddress = '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb';

// 方法签名:balanceOf(address) -> 0x70a08231
const data = web3.eth.abi.encodeFunctionCall({
  name: 'balanceOf',
  type: 'function',
  inputs: [{ type: 'address', name: '_owner' }]
}, [accountAddress]);

const result = await web3.eth.call({
  to: contractAddress,
  data: data
});

const balance = web3.utils.toBN(result).toString();
console.log('Token balance:', balance);
eth_estimateGas - 估算Gas消耗
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_estimateGas",
  "params": [{
    "from": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    "to": "0xContractAddress",
    "data": "0x..."
  }],
  "id": 1
}

用途: 在执行交易前估算需要消耗的Gas数量。

5. 网络相关

net_version - 获取网络ID
// 请求
{
  "jsonrpc": "2.0",
  "method": "net_version",
  "params": [],
  "id": 1
}
eth_chainId - 获取链ID
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_chainId",
  "params": [],
  "id": 1
}
eth_syncing - 检查节点同步状态
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_syncing",
  "params": [],
  "id": 1
}

返回说明:

  • false: 节点已完全同步
  • 对象: 节点正在同步,包含当前区块、最高区块等信息

6. 事件监听

eth_getLogs - 获取事件日志
// 请求
{
  "jsonrpc": "2.0",
  "method": "eth_getLogs",
  "params": [{
    "fromBlock": "0x1a2b3c",
    "toBlock": "latest",
    "address": "0xContractAddress",
    "topics": ["0x..."]
  }],
  "id": 1
}

用途: 查询智能合约发出的事件日志。

使用示例:

// 查询Transfer事件
const logs = await web3.eth.getPastLogs({
  address: contractAddress,
  topics: [
    web3.utils.keccak256('Transfer(address,address,uint256)')
  ],
  fromBlock: 0,
  toBlock: 'latest'
});
WebSocket订阅(实时监听)
const Web3 = require('web3');
const web3 = new Web3('ws://localhost:8546');

// 订阅新区块
const subscription = web3.eth.subscribe('newBlockHeaders', (error, blockHeader) => {
  if (!error) {
    console.log('New block:', blockHeader.number);
  }
});

// 订阅待处理交易
const pendingTxSubscription = web3.eth.subscribe('pendingTransactions', (error, txHash) => {
  if (!error) {
    console.log('Pending transaction:', txHash);
  }
});

// 订阅日志
const logSubscription = web3.eth.subscribe('logs', {
  address: contractAddress,
  topics: [web3.utils.keccak256('Transfer(address,address,uint256)')]
}, (error, log) => {
  if (!error) {
    console.log('New log:', log);
  }
});

Bitcoin RPC接口示例

getbalance - 查询余额

curl --user username:password \
  --data-binary '{"jsonrpc":"1.0","id":"curltest","method":"getbalance","params":[]}' \
  -H 'content-type: text/plain;' \
  http://127.0.0.1:8332/

getblockchaininfo - 获取区块链信息

curl --user username:password \
  --data-binary '{"jsonrpc":"1.0","id":"curltest","method":"getblockchaininfo","params":[]}' \
  -H 'content-type: text/plain;' \
  http://127.0.0.1:8332/

sendtoaddress - 发送交易

curl --user username:password \
  --data-binary '{"jsonrpc":"1.0","id":"curltest","method":"sendtoaddress","params":["1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", 0.1]}' \
  -H 'content-type: text/plain;' \
  http://127.0.0.1:8332/

RPC部署指南

方案一:本地节点部署(Ethereum Geth)

1. 安装Geth

macOS:

brew install ethereum

Linux (Ubuntu/Debian):

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

Docker方式:

docker pull ethereum/client-go:latest

2. 启动Geth节点

主网同步节点:

geth --http --http.addr "0.0.0.0" --http.port 8545 --http.api "eth,net,web3" --http.corsdomain "*"

测试网(Goerli):

geth --goerli --http --http.addr "0.0.0.0" --http.port 8545 --http.api "eth,net,web3"

开发模式(快速测试):

geth --dev --http --http.addr "0.0.0.0" --http.port 8545 --http.api "eth,net,web3,personal,admin"

参数说明:

  • --http: 启用HTTP-RPC服务器
  • --http.addr: RPC服务器监听地址(0.0.0.0表示所有网络接口)
  • --http.port: RPC服务器端口
  • --http.api: 启用的API模块
  • --http.corsdomain: 允许的CORS域名(开发时可用"*",生产环境需限制)
  • --dev: 开发模式,快速挖矿
  • --goerli: 连接到Goerli测试网

3. 启用WebSocket

geth --http --http.addr "0.0.0.0" --http.port 8545 \
     --ws --ws.addr "0.0.0.0" --ws.port 8546 \
     --http.api "eth,net,web3" \
     --ws.api "eth,net,web3"

4. 安全配置(生产环境)

geth --http \
     --http.addr "127.0.0.1" \
     --http.port 8545 \
     --http.api "eth,net,web3" \
     --http.corsdomain "https://yourdomain.com" \
     --http.vhosts "yourdomain.com" \
     --authrpc.addr "127.0.0.1" \
     --authrpc.port 8551 \
     --authrpc.jwtsecret /path/to/jwt.hex

安全建议:

  • 生产环境不要使用0.0.0.0,使用127.0.0.1或特定IP
  • 使用反向代理(Nginx)添加认证和HTTPS
  • 限制API访问权限
  • 使用JWT认证(EIP-155)

方案二:使用Infura/Alchemy等公共RPC服务

Infura使用示例

  1. 注册账号:访问 https://infura.io
  2. 创建项目:获取Project ID和API Key
  3. 使用RPC端点
// 主网
const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_PROJECT_ID');

// Goerli测试网
const web3 = new Web3('https://goerli.infura.io/v3/YOUR_PROJECT_ID');

// WebSocket
const web3 = new Web3('wss://mainnet.infura.io/ws/v3/YOUR_PROJECT_ID');

Alchemy使用示例

// 主网
const web3 = new Web3('https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY');

// Goerli测试网
const web3 = new Web3('https://eth-goerli.g.alchemy.com/v2/YOUR_API_KEY');

方案三:使用Nginx反向代理

Nginx配置示例

upstream geth_backend {
    server 127.0.0.1:8545;
}

server {
    listen 443 ssl http2;
    server_name rpc.yourdomain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    # 基本认证
    auth_basic "RPC Access";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://geth_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # WebSocket支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # 超时设置
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

方案四:Docker Compose部署

docker-compose.yml示例

version: '3.8'

services:
  geth:
    image: ethereum/client-go:latest
    container_name: ethereum-node
    restart: unless-stopped
    ports:
      - "8545:8545"  # HTTP-RPC
      - "8546:8546"  # WebSocket
      - "30303:30303"  # P2P
    volumes:
      - ./data:/root/.ethereum
    command:
      - --http
      - --http.addr=0.0.0.0
      - --http.port=8545
      - --http.api=eth,net,web3
      - --ws
      - --ws.addr=0.0.0.0
      - --ws.port=8546
      - --ws.api=eth,net,web3
      - --syncmode=snap
      - --cache=4096
    networks:
      - blockchain

networks:
  blockchain:
    driver: bridge

启动命令:

docker-compose up -d

方案五:云服务部署(AWS/GCP/Azure)

AWS EC2部署示例

  1. 创建EC2实例

    • 选择Ubuntu 20.04 LTS
    • 至少8GB RAM,100GB+存储
    • 开放端口:8545, 8546, 30303
  2. 安装Geth

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
  1. 配置systemd服务

创建 /etc/systemd/system/geth.service:

[Unit]
Description=Ethereum Go client
After=network.target

[Service]
Type=simple
User=ethereum
ExecStart=/usr/bin/geth --http --http.addr 0.0.0.0 --http.port 8545 --http.api eth,net,web3 --syncmode snap --cache 4096
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
  1. 启动服务
sudo systemctl daemon-reload
sudo systemctl enable geth
sudo systemctl start geth
sudo systemctl status geth
  1. 配置安全组
    • 只允许特定IP访问8545端口
    • 或使用VPN/SSH隧道

最佳实践与安全建议

1. 安全配置

生产环境安全清单

  • 限制监听地址:使用127.0.0.1而非0.0.0.0
  • 启用HTTPS:通过Nginx反向代理添加SSL
  • API访问控制:只启用必要的API模块
  • 身份认证:使用HTTP Basic Auth或JWT
  • IP白名单:限制可访问的IP地址
  • 速率限制:防止API滥用
  • 日志监控:记录所有RPC请求
  • 防火墙规则:只开放必要端口

禁用危险API

# 不要在生产环境启用这些API
--http.api "eth,net,web3"  # 只启用必要的

# 避免启用:
# - personal (允许解锁账户)
# - admin (管理功能)
# - miner (挖矿控制)
# - debug (调试功能)

2. 性能优化

Geth性能参数

geth \
  --syncmode snap \          # 使用snap同步模式(更快)
  --cache 4096 \             # 增加缓存大小(GB)
  --maxpeers 50 \            # 最大对等节点数
  --http \
  --http.api "eth,net,web3" \
  --ws \
  --ws.api "eth,net,web3"

使用Erigon(更快的客户端)

erigon --http --http.addr 0.0.0.0 --http.port 8545 --http.api eth,net,web3

3. 错误处理

JavaScript错误处理示例

async function safeRpcCall(method, params) {
  try {
    const result = await web3.eth[method](...params);
    return { success: true, data: result };
  } catch (error) {
    console.error(`RPC call failed: ${method}`, error);
    return { 
      success: false, 
      error: error.message,
      code: error.code 
    };
  }
}

// 使用示例
const result = await safeRpcCall('getBalance', ['0x...']);
if (result.success) {
  console.log('Balance:', result.data);
} else {
  console.error('Error:', result.error);
}

重试机制

async function rpcCallWithRetry(method, params, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await web3.eth[method](...params);
    } catch (error) {
      if (i === maxRetries - 1) throw error;
      await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
    }
  }
}

4. 连接池管理

// 使用多个RPC端点实现负载均衡和故障转移
const providers = [
  'https://mainnet.infura.io/v3/KEY1',
  'https://eth-mainnet.g.alchemy.com/v2/KEY2',
  'http://localhost:8545'
];

let currentProviderIndex = 0;

function getProvider() {
  return new Web3(providers[currentProviderIndex]);
}

async function callWithFallback(method, params) {
  for (let i = 0; i < providers.length; i++) {
    try {
      const provider = getProvider();
      return await provider.eth[method](...params);
    } catch (error) {
      currentProviderIndex = (currentProviderIndex + 1) % providers.length;
      if (i === providers.length - 1) throw error;
    }
  }
}

5. 监控和日志

监控指标

  • RPC请求数量
  • 响应时间
  • 错误率
  • 节点同步状态
  • 连接数

日志配置

# Geth日志配置
geth --http \
     --verbosity 3 \          # 日志详细程度(0-6)
     --log.json \             # JSON格式日志
     --log.file /var/log/geth.log

故障排查

常见问题及解决方案

1. 连接被拒绝

错误信息: ECONNREFUSEDConnection refused

可能原因:

  • RPC服务未启动
  • 端口被占用
  • 防火墙阻止连接

解决方案:

# 检查服务是否运行
ps aux | grep geth

# 检查端口是否被占用
netstat -an | grep 8545
# 或
lsof -i :8545

# 检查防火墙
sudo ufw status
sudo ufw allow 8545/tcp

2. CORS错误

错误信息: Access-Control-Allow-Origin 相关错误

解决方案:

# 启动时添加CORS配置
geth --http --http.corsdomain "https://yourdomain.com,http://localhost:3000"

3. 节点未同步

检查同步状态:

const syncing = await web3.eth.isSyncing();
if (syncing) {
  console.log('Syncing:', syncing);
} else {
  console.log('Node is synced');
}

解决方案:

  • 等待节点同步完成
  • 检查网络连接
  • 增加对等节点数:--maxpeers 100

4. Gas估算失败

错误信息: execution revertedinsufficient funds

解决方案:

  • 检查账户余额是否足够
  • 验证合约调用参数
  • 检查合约状态

5. 交易pending时间过长

可能原因:

  • Gas价格过低
  • 网络拥堵
  • 节点未同步

解决方案:

// 提高Gas价格
const gasPrice = await web3.eth.getGasPrice();
const tx = {
  // ... 其他参数
  gasPrice: web3.utils.toBN(gasPrice).mul(web3.utils.toBN(120)).div(web3.utils.toBN(100)) // 提高20%
};

调试工具

1. 使用Geth控制台

geth attach http://localhost:8545

在控制台中可以直接执行RPC调用:

> eth.getBalance("0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb")
> eth.blockNumber
> net.peerCount

2. 使用Postman测试RPC

创建POST请求:

  • URL: http://localhost:8545
  • Headers: Content-Type: application/json
  • Body (raw JSON):
{
  "jsonrpc": "2.0",
  "method": "eth_blockNumber",
  "params": [],
  "id": 1
}

3. 使用在线RPC测试工具


附录

A. 常用RPC端点列表

网络 HTTP端点 WebSocket端点
Ethereum主网 https://mainnet.infura.io/v3/YOUR_KEY wss://mainnet.infura.io/ws/v3/YOUR_KEY
Goerli测试网 https://goerli.infura.io/v3/YOUR_KEY wss://goerli.infura.io/ws/v3/YOUR_KEY
BSC主网 https://bsc-dataseed.binance.org wss://bsc-ws-node.nariox.org:443
Polygon主网 https://polygon-rpc.com wss://polygon-rpc.com

B. 常用工具库

C. 参考资源

D. 快速参考命令

# 启动Geth开发节点
geth --dev --http --http.addr 0.0.0.0 --http.port 8545 --http.api eth,net,web3,personal

# 检查节点状态
curl -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
  http://localhost:8545

# 查看日志
tail -f /var/log/geth.log

# 重启服务
sudo systemctl restart geth

总结

区块链RPC是连接应用与区块链网络的桥梁,掌握RPC的使用对于区块链开发至关重要。本文档涵盖了:

  1. ✅ RPC的基本概念和作用
  2. ✅ 主流区块链的RPC接口
  3. ✅ 详细的接口使用方法
  4. ✅ 完整的部署指南
  5. ✅ 安全最佳实践
  6. ✅ 故障排查方法

无论是初学者还是专业开发者,都可以通过本文档快速上手区块链RPC的使用和部署。

下一步建议:

  • 搭建本地测试节点进行实践
  • 使用Web3.js或Ethers.js开发简单的DApp
  • 学习智能合约交互
  • 探索事件监听和实时数据订阅

祝您开发顺利!🚀

0

评论区