摘要:用 viem createPublicClient 连公开 HTTP RPC,只读 getBlockNumber / getGasPrice / getBlock;对照 Etherscan 同块。开发文,含「区块链开发」标签。

站内已有 ethers.js 读合约、Interface 解码 calldata 与 WebSocket 订阅读。本篇换工具链:用 viem 的 createPublicClient 连公开 HTTP RPC,只读 getBlockNumber / getGasPrice / getBlock / getBalance。全程无私钥、不发交易、不需要测试网 ETH。

一、官方:什么是 Public Client

打开 viem 文档「Public Client」。文档写明:Public Client 是面向「公开」JSON-RPC 方法的接口——例如取最新块高、读合约;用 createPublicClient 创建,并传入为某条 Chain 配好的 Transport(本场用 http())。它和写交易用的 Wallet Client 分开:读链不必持有私钥。

viem 创建 PublicClient:读块高与 gas-程序旅途
图1:viem.sh/docs/clients/public:createPublicClient、Transport + Chain;界面英文,2026-10-17 实拍

二、官方:getBlockNumber 与 getGasPrice

Public Actions 里:

  • publicClient.getBlockNumber() → bigint:当前节点看到的最新块号。
  • publicClient.getGasPrice() → bigint(wei):节点给出的气价提示;EIP-1559 下更常看块里的 baseFeePerGas。
  • getBlock({ blockNumber }):拿该块的 hash、timestamp、gasUsed/gasLimit、交易列表等。
viem 创建 PublicClient:读块高与 gas-程序旅途
图2:viem.sh/docs/actions/public/getBlockNumber:返回最新块号 bigint;界面英文,2026-10-17 实拍
viem 创建 PublicClient:读块高与 gas-程序旅途
图3:viem.sh/docs/actions/public/getGasPrice:返回 gas price(wei);侧栏可见 Fee 类其它动作;界面英文,2026-10-17 实拍

三、本机实跑:PublicClient 只读主网

脚本在本目录 demo/viem_demo.mjs(viem 2.x)。本场用公开 RPC https://ethereum.publicnode.com(只读;可换成你自己的节点)。2026-10-17 Asia/Shanghai 实跑要点(数值会变):

  • getBlockNumber() → 26211226
  • getGasPrice() → 60692665 wei ≈ 0.0607 gwei
  • getBlock:hash 0xe1a021d8…b468;baseFee ≈ 0.0607 gwei;gasUsed/gasLimit 59986141 / 60000000;交易数 164
  • getBalance(公开地址 Vitalik)≈ 5.77 ETH;getChainId() = 1
viem 创建 PublicClient:读块高与 gas-程序旅途
图4:本机 node viem_demo.mjs:块高、gas、getBlock、getBalance、chainId;只读;2026-10-17

四、浏览器对照:同一块在 Etherscan

打开 Etherscan 块页 /block/26211226:可见 Block Height、Transactions 164 等与本机 getBlock 对齐。块高/Gas/未最终化状态会随时间变——开发时应用「同一时刻、同一 RPC 视角」理解差异,而不是死记数字。

viem 创建 PublicClient:读块高与 gas-程序旅途
图5:etherscan.io/block/26211226:Height 26211226、Transactions 164;与本机 getBlock 对照;界面英文,2026-10-17 实拍

五、和站内相关文怎么分工

场景 更合适的文 本篇补充
ethers Provider + ABI 读合约 ethers 读合约文 本篇专讲 viem PublicClient 建连与块/Gas
ABI 解码 calldata / 日志 Interface 解码文 工具链不同;都是只读
WebSocket 订阅 newHeads/logs WS 订阅文 本篇是 HTTP 拉取,非订阅
Foundry cast 命令行读链 cast 文 本篇是 JS/TS 库
先分清 Client 类型
Public = 只读 JSON-RPC;要发交易才需要 Wallet Client + 私钥(本场不做)。
RPC 会限流
公共节点不稳定时换 endpoint 或自建;结果以你连上的节点为准。
Gas 数字会变
getGasPrice / baseFee 随拥堵波动;文中数字仅作实跑快照。需要看测试网时可试用欧易 Web3(创建可填 CHENGXULVTU)。
  1. 读完 viem Public Client / getBlockNumber / getGasPrice 文档。
  2. 对本机跑 demo/viem_demo.mjs,核对块高、gas、chainId。
  3. 拿同一块号到 Etherscan 交叉一眼交易数等字段。
  4. 买少量主网 Gas(与本文无关)可在 币安 或 欧易——本场不需要。

相关阅读

说明:配图为 2026-10-17 viem 官方文档、本机真实终端输出、Etherscan 同块 Overview。样例块高与 Gas 会变。本文不构成投资建议。