@zhengkan2008/rpc-pool
v2.1.2
Published
Health-aware RPC pool with query load balancing and tx primary-backup failover.
Readme
RPC Pool(重写版)
@zhengkan2008/rpc-pool 提供两条通道:
- 查询通道(
query):多 RPC 负载均衡,连续失败自动摘除,进入观察名单,探活后自动回池。 - 交易通道(
tx):单主 RPC 提交交易,连续失败自动切备,故障节点进入观察名单,恢复后回备池。
环境变量
以 Gnosis 为例:
# 查询池(负载均衡)
GNOSIS_RPC_HTTP_GNOSISCHAIN=https://rpc.gnosischain.com/
GNOSIS_RPC_HTTP_PUBLICNODE=https://gnosis-rpc.publicnode.com
# 交易池(可选,不配则默认用查询池第一个作为主)
GNOSIS_RPC_HTTP_PRIMARY=https://rpc.gnosischain.com/
GNOSIS_RPC_HTTP_BACKUP_1=https://gnosis-rpc.publicnode.com
# 或者使用 TX 专用键(优先级更高)
# GNOSIS_RPC_TX_PRIMARY=https://rpc.gnosischain.com/
# GNOSIS_RPC_TX_BACKUP_1=https://gnosis-rpc.publicnode.com支持链前缀:ETH、BSC、BASE、ARBITRUM、GNOSIS。
新增常用主网支持:POLYGON(137)、OPTIMISM(10)、AVALANCHE(43114)。
别名可用:polygon/matic、optimism/op、avalanche/avax。
策略参数
RPC_QUERY_FAIL_THRESHOLD=3
RPC_TX_FAIL_THRESHOLD=2
RPC_RECOVER_THRESHOLD=2
RPC_WATCH_COOLDOWN_MS=30000
RPC_HEALTHCHECK_MS=8000
RPC_PROBE_TIMEOUT_MS=2500
RPC_REQUEST_TIMEOUT_MS=10000
RPC_TRANSPORT_RETRY_DELAY_MS=150使用方式
import {
getQueryClient,
getQueryTransport,
getTxTransport,
getRpcPoolStats,
} from '@zhengkan2008/rpc-pool';
import { createWalletClient } from 'viem';
import { gnosis } from 'viem/chains';
const queryClient = getQueryClient('gnosis');
const block = await queryClient.getBlockNumber();
const txWallet = createWalletClient({
chain: gnosis,
transport: getTxTransport('gnosis'),
});
const stats = getRpcPoolStats('gnosis');
console.log(stats.tx.primaryUrl, stats.query.watchCount);新 API
getRpcPool(chainName)getQueryClient(chainName)getQueryTransport(chainName)getTxTransport(chainName)getRpcPoolStats(chainName)listRpcPoolChains()
.pools 自动补全
可根据已有 provider 条目自动补全“多链 + HTTP/WS”组合(目前内置 ALCHEMY、DRPC)。
例如已有:
ETH_RPC_HTTP_ALCHEMY=https://eth-mainnet.g.alchemy.com/v2/<key>运行后可自动补出同 provider 的:
ETH_RPC_WS_ALCHEMYGNOSIS_RPC_HTTP_ALCHEMYGNOSIS_RPC_WS_ALCHEMY- 以及该 provider 支持的其他链组合
命令:
# 只预览,不写文件
npm run pools:autofill:dry-run
# 写回 scripts/.pools
npm run pools:autofill发布到 npm / 私有仓库
1) 发布到 npm 官方仓库
cd shared/rpc-pool
npm run build
npm run pack:dry-run
npm login --registry https://registry.npmjs.org
npm run publish:npm2) 发布到私有 npm 仓库
cd shared/rpc-pool
export NPM_PRIVATE_REGISTRY="https://npm.company.internal/"
export NPM_PRIVATE_TOKEN="<token>"
npm run publish:private3) 凭据模板
可参考 .npmrc.example,按你的仓库地址和 token 替换。
4) scope 注意事项
当前包名是 @zhengkan2008/rpc-pool。如果你在 npm 官方不拥有 @zhengkan2008 scope,需要先改 package.json 的 name(例如改成你自己的 scope)。
