用途:在 TypeScript/JavaScript 应用中通过 viem 接入 EVM 链,覆盖后端、脚本与前端场景。React 钱包连接与 hooks 属于 wagmi,无钱包 UI 的应用不要先引入 wagmi;后端、脚本及地址/签名验证直接使用 viem。
主要能力:提供两类客户端——PublicClient 负责只读操作(查余额、读合约、拉取日志),WalletClient 负责写操作(发交易、签名消息)。传输层支持 http() 常规 RPC、webSocket() 实时事件订阅、custom() 浏览器钱包(window.ethereum)。内置 50+ 链定义,可从 viem/chains 导入 mainnet、arbitrum、optimism、base、polygon 等。还提供 parseEther/formatEther、parseUnits/formatUnits 单位换算,isAddress/getAddress 地址工具,keccak256、toHex 哈希,以及类型化错误(如 ContractFunctionExecutionError、InsufficientFundsError)。
使用方式:核心库安装 npm install viem;React 应用另装 npm install wagmi viem @tanstack/react-query。读取余额用 createPublicClient 配 http() 与目标链,再调用 getBalance;读合约用 parseAbi 定义 ABI 后调用 readContract;发送原生代币用 privateKeyToAccount 与 createWalletClient 调用 sendTransaction;写合约建议先用 publicClient.simulateContract 模拟,再用 walletClient.writeContract 执行,最后用 waitForTransactionReceipt 等待确认。
输入校验要求:地址须匹配 ^0x[a-fA-F0-9]{40}$,可用 isAddress();链 ID 须来自支持的链定义;私钥禁止硬编码,只能用 process.env.PRIVATE_KEY 并在运行时校验;RPC URL 仅用 https:// 或 wss://;ABI 入参需先校验类型与 Solidity 类型一致。
适用场景与限制:适合后端脚本、链上数据读取、交易发送、合约交互与实时事件监控;浏览器钱包集成可选 wagmi 或 viem 自定义 transport。React 钱包 UI 应转向 wagmi;Ethereum 哈希(选择器、topic、EIP-712)可参考 nodejs-keccak256;非 EVM 链应改用 solana 相关方案。资料未提供具体收费、价格或性能指标。