SuperAPI AI 工具集

viem-v2

编程与开发

查看项目

更新于 10-27 16:23

技能介绍

viem-v2 是一个用于在 TypeScript/JavaScript 应用中集成 EVM 区块链的技能,核心依赖 viem 库。它面向需要读取链上数据、发送交易、与智能合约交互或连接以太坊等场景的开发者。

用途与选型 该技能提供快速决策指引:Node.js 脚本或后端使用 viem 配合 http 传输;React/Next.js 前端使用基于 viem 的 wagmi hooks;实时事件监控使用 viem 配合 webSocket 传输;浏览器钱包集成使用 wagmi 或 viem 自定义传输。对于尚无钱包 UI 的应用,不建议引入 wagmi;后端、脚本以及地址/签名验证应直接使用 viem。

安装 核心库安装命令为 npm install viem。React 应用还需安装 wagmi viem @tanstack/react-query。

核心概念 viem 使用两类客户端:PublicClient 用于只读操作,如获取余额、读取合约、获取日志;WalletClient 用于写入操作,如发送交易、签名消息。传输方式包括 http()(标准 RPC 调用,最常用)、webSocket()(实时事件订阅)和 custom()(浏览器钱包 window.ethereum)。viem 内置 50 多条链定义,可从 viem/chains 导入,例如 mainnet、arbitrum、optimism、base、polygon。

输入校验规则 在将任何用户提供的值插入生成的 TypeScript 代码前,需遵循以下规则:以太坊地址必须匹配 ^0x[a-fA-F0-9]{40}$,可使用 viem 的 isAddress() 校验;链 ID 必须来自 viem 支持的链定义;私钥绝不能硬编码,应始终使用 process.env.PRIVATE_KEY 并在运行时校验;RPC URL 只能使用 https:// 或 wss:// 协议;ABI 输入在编码前需校验类型与预期 Solidity 类型一致。

快速开始示例 读取余额:使用 createPublicClient、http、formatEther 和 mainnet,调用 client.getBalance 获取地址余额并格式化输出。 读取合约:使用 parseAbi 定义 ABI,调用 client.readContract 读取如 USDC 的 balanceOf。 发送交易:使用 createWalletClient、privateKeyToAccount、parseEther,调用 client.sendTransaction 发送原生代币。 写入合约:先通过 publicClient.simulateContract 模拟以捕获错误,再用 walletClient.writeContract 执行,最后用 publicClient.waitForTransactionReceipt 等待确认。

参考文档 技能提供更深入的主题参考:客户端设置、传输与链;读取区块链数据;发送交易;私钥与 HD 钱包;ABI 处理与 multicall;React/wagmi hooks。

相关插件 熟悉 viem 基础后,uniswap-trading 插件提供 Uniswap 兑换集成,包括 Uniswap Trading API 集成、Universal Router SDK 使用和代币兑换实现,安装命令为 claude plugin add @uniswap/uniswap-trading。

常用工具 单位换算:parseEther、formatEther、parseUnits、formatUnits。地址工具:isAddress、getAddress。哈希:keccak256、toHex。

错误处理 viem 抛出类型化错误,可捕获处理,例如 ContractFunctionExecutionError、InsufficientFundsError。

交互关系 React 钱包 UI 使用 wagmi-v3(基于 viem);以太坊哈希(选择器、主题、EIP-712)使用 nodejs-keccak256-v1;非 EVM 链使用 solana-v1。

资源 viem 文档、wagmi 文档、viem GitHub、wagmi GitHub。