Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

本指南涵盖 Stable 节点的所有配置选项,包括针对不同用例的优化。

配置文件概述

Stable 节点使用两个主要的配置文件:

  • config.toml: 核心 StableBFT 配置
  • app.toml: 应用程序特定配置

这两个文件都位于 ~/.stabled/config/

核心配置 (config.toml)

基本设置

Mainnet
# 要加入的链 ID
chain_id = "stable_988-1"
 
# 此节点的自定义可读名称
moniker = "your-node-name"
 
# 数据库后端: goleveldb | cleveldb | boltdb | rocksdb | badgerdb
db_backend = "goleveldb"

P2P 配置

Mainnet
[p2p]
# 监听传入连接的地址
laddr = "tcp://0.0.0.0:26656"
 
# 向对等节点广播的地址,以便它们拨号
external_address = "YOUR_PUBLIC_IP:26656"
 
# 种子节点列表,逗号分隔
seeds = "c21897d374c480a963edcda941ac94030895f6b4@seed1.stable.xyz:46656"
 
# 持久对等节点列表,逗号分隔
persistent_peers = "b896f6f8ca5a4d1cc40de09407df0c96e76df950@peer1.stable.xyz:26656"

附加 P2P 设置(两个网络相同):

# 入站对等节点的最大数量
max_num_inbound_peers = 50
 
# 出站对等节点的最大数量
max_num_outbound_peers = 30
 
# 切换以禁用防止对等节点从相同 IP 连接的保护
allow_duplicate_ip = false
 
# 对等节点连接配置
handshake_timeout = "20s"
dial_timeout = "3s"
 
# 在连接上刷新消息之前的等待时间
flush_throttle_timeout = "100ms"
 
# 消息包载荷的最大大小
max_packet_msg_payload_size = 1024
 
# 速率限制
send_rate = 5120000  # 5 MB/s
recv_rate = 5120000  # 5 MB/s
 
# 种子模式(仅适用于种子节点)
seed_mode = false
 
# 启用对等节点交换反应器
pex = true

RPC 服务器配置

[rpc]
# RPC 服务器的 TCP 或 UNIX 套接字地址
laddr = "tcp://127.0.0.1:26657"
 
# 允许执行跨域请求的来源列表
cors_allowed_origins = ["*"]
 
# 客户端允许与跨域请求一起使用的方法列表
cors_allowed_methods = ["HEAD", "GET", "POST"]
 
# 客户端允许与跨域请求一起使用的非简单头列表
cors_allowed_headers = ["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time"]
 
# gRPC 服务器的 TCP 或 UNIX 套接字地址
grpc_laddr = "tcp://127.0.0.1:9090"
 
# 同时连接的最大数量
grpc_max_open_connections = 900
 
# 激活不安全的 RPC 命令,如 /dial_seeds 和 /unsafe_flush_mempool
unsafe = false
 
# 同时连接的最大数量(包括 WebSocket)
max_open_connections = 900
 
# 可以连接的唯一 clientID 的最大数量
max_subscription_clients = 100
 
# 给定客户端可以订阅的唯一查询的最大数量
max_subscriptions_per_client = 5
 
# 等待 tx 提交的时间
timeout_broadcast_tx_commit = "10s"
 
# 请求正文的最大大小
max_body_bytes = 1000000
 
# 请求头的最大大小
max_header_bytes = 1048576

内存池配置

[mempool]
# 要使用的内存池版本
version = "v1"
 
# 重新检查已启用
recheck = true
 
# 广播已启用
broadcast = true
 
# 内存池中的最大交易数量
size = 3000
 
# 限制内存池中所有 tx 的总大小
max_txs_bytes = 1073741824  # 1GB
 
# 缓存大小
cache_size = 10000
 
# 不要从缓存中删除无效交易
keep-invalid-txs-in-cache = false
 
# 单笔交易的最大大小
max_tx_bytes = 1048576  # 1MB
 
# 发送给对等节点的交易批次的最大大小
max_batch_bytes = 0

共识配置

[consensus]
# 在预投票空之前,我们等待提议区块的时间
timeout_propose = "5s"
 
# 每个回合 timeout_propose 增加的量
timeout_propose_delta = "10ms"
 
# 收到 +2/3 预投票后等待的时间
timeout_prevote = "150ms"
 
# 每个回合 timeout_prevote 增加的量
timeout_prevote_delta = "10ms"
 
# 收到 +2/3 预提交后等待的时间
timeout_precommit = "150s"
 
# 每个回合 timeout_precommit 增加的量
timeout_precommit_delta = "10ms"
 
# 一旦我们收到所有预提交,就立即取得进展
skip_timeout_commit = false
 
# 启用/禁用双重签名检查
double_sign_check_height = 2
 
# 空区块模式
create_empty_blocks = true
create_empty_blocks_interval = "0s"
 
# Reactor 睡眠时长
peer_gossip_sleep_duration = "100ms"
peer_query_maj23_sleep_duration = "2s"

应用程序配置 (app.toml)

基本应用程序设置

# 修剪策略
pruning = "default"
 
# HaltHeight 包含一个非零区块高度,在该高度节点将停止
halt-height = 0
 
# HaltTime 包含一个非零时间,在该时间节点将停止
halt-time = 0
 
# MinRetainBlocks 定义了节点将保留的区块数量
min-retain-blocks = 0
 
# InterBlockCache 启用区块间缓存
inter-block-cache = true
 
# IndexEvents 定义了以 {eventType}.{attributeKey} 形式的事件集
index-events = []
 
# IavlCacheSize 设置 iavl 树缓存的大小
iavl-cache-size = 781250

API 配置

[api]
# Enable 定义是否应启用 API 服务器
enable = true
 
# Swagger 定义是否应自动注册 swagger 文档
swagger = true
 
# Address 定义 API 服务器监听的地址
address = "tcp://0.0.0.0:1317"
 
# MaxOpenConnections 定义最大打开连接数
max-open-connections = 1000
 
# EnabledUnsafeCORS 定义是否应启用 CORS
enabled-unsafe-cors = true

gRPC 配置

[grpc]
# Enable 定义是否应启用 gRPC 服务器
enable = true
 
# Address 定义 gRPC 服务器绑定的地址
address = "0.0.0.0:9090"

EVM JSON-RPC 配置

[json-rpc]
# 启用 JSON-RPC 服务器
enable = true
 
# 绑定 JSON-RPC 服务器的地址
address = "0.0.0.0:8545"
 
# 绑定 WebSocket 服务器的地址
ws-address = "0.0.0.0:8546"
 
# 启用的 API
api = "eth,net,web3,txpool,personal,debug"
 
# eth_call/estimateGas 的 gas 上限
gas-cap = 25000000
 
# eth_call/estimateGas 的 EVM 超时
evm-timeout = "5s"
 
# 交易的 Tx 费用上限
txfee-cap = 1
 
# eth_getLogs 的过滤器上限
filter-cap = 200
 
# FeeHistory 上限
feehistory-cap = 100
 
# eth_getLogs 的区块范围上限
logs-cap = 10000
 
# 区块范围上限
block-range-cap = 10000
 
# HTTP 超时
http-timeout = "30s"
 
# HTTP 空闲超时
http-idle-timeout = "120s"
 
# 允许未受保护的交易
allow-unprotected-txs = true
 
# 内存池中交易的最大数量
max-tx-in-pool = 3000
 
# 启用索引器
enable-indexer = false
 
# 启用指标
metrics = true

配置配置文件

全节点(默认)

全节点的平衡配置:

# config.toml 调整
sed -i 's/^indexer = ".*"/indexer = "kv"/' ~/.stabled/config/config.toml
sed -i 's/^max_num_inbound_peers = .*/max_num_inbound_peers = 50/' ~/.stabled/config/config.toml
sed -i 's/^max_num_outbound_peers = .*/max_num_outbound_peers = 30/' ~/.stabled/config/config.toml
 
# app.toml 调整
sed -i 's/^pruning = ".*"/pruning = "default"/' ~/.stabled/config/app.toml
sed -i 's/^snapshot-interval = .*/snapshot-interval = 1000/' ~/.stabled/config/app.toml

归档节点

不修剪,完整历史记录:

# config.toml 调整
sed -i 's/^indexer = ".*"/indexer = "kv"/' ~/.stabled/config/config.toml
 
# app.toml 调整
sed -i 's/^pruning = ".*"/pruning = "nothing"/' ~/.stabled/config/app.toml

RPC 节点

公共 RPC 端点配置:

# config.toml 调整
sed -i 's/^max_num_inbound_peers = .*/max_num_inbound_peers = 30/' ~/.stabled/config/config.toml
sed -i 's/^max_open_connections = .*/max_open_connections = 30/' ~/.stabled/config/config.toml
sed -i 's/^cors_allowed_origins = .*/cors_allowed_origins = ["*"]/' ~/.stabled/config/config.toml
 
# app.toml 调整
sed -i 's/^enable = .*/enable = true/' ~/.stabled/config/app.toml
sed -i 's/^swagger = .*/swagger = true/' ~/.stabled/config/app.toml
sed -i 's/^enabled-unsafe-cors = .*/enabled-unsafe-cors = true/' ~/.stabled/config/app.toml

监控配置

Prometheus 指标

# config.toml
[instrumentation]
# 启用 Prometheus 指标
prometheus = true
 
# 指标监听地址
prometheus_listen_addr = ":26660"
 
# 指标命名空间
namespace = "stablebft"

日志记录

# config.toml
[log]
# 日志级别 (trace|debug|info|warn|error|fatal|panic)
level = "info"
 
# 日志格式 (plain|json)
format = "plain"

应用配置更改

进行配置更改后:

# 重启节点
sudo systemctl restart ${SERVICE_NAME}
 
# 检查日志中的错误
sudo journalctl -u ${SERVICE_NAME} -f
 
# 验证加载的配置
curl localhost:26657/status | jq '.result.node_info'

后续步骤