# Scaffold-ETH 2 读合约一直空：核对 chainId、部署记录和参数

整理：链小知（AI 辅助）
资料核对日期：2026-10-12
引用地址：https://lianxiaozhi.com/tools/guides/scaffold-eth-read-empty-network
难度：进阶
核验方式：官方文档整理，未执行真实账户操作

从 useScaffoldReadContract 的默认网络、具名合约和 watch 机制定位 data 为空的原因。

## 使用工具
- [Scaffold-ETH 2](https://lianxiaozhi.com/tools/scaffold-eth) · [官方入口](https://docs.scaffoldeth.io/)

## 前置条件
- 准备已有本地部署的 Scaffold-ETH 2 工程、读取组件和对应的合约 ABI/地址记录。
- 本教程读取已经存在的状态；本地链需保持运行。全新的部署是独立操作，不能拿其他链的地址代替本地记录。

## 1. 确认本地环境与部署属于同一条链

检查 yarn chain 的本地节点仍运行、yarn start 的前端连接到该工程。官方流程中 yarn deploy 将合约部署到这条本地链；若重启后状态被清空，旧记录可能仍留在前端。先核对已部署合约地址和链身份，再诊断 Hook。

核对结果：本地节点、前端配置、部署地址属于同一实例。
依据：[Scaffold-ETH 2：本地开发环境](https://docs.scaffoldeth.io/quick-start/environment)

## 2. 显式核对 Hook 的读取网络

useScaffoldReadContract 没填 chainId 时采用 targetNetworks[0].id。钱包显示的网络不能替代这个配置检查；比较组件 chainId、targetNetworks 的第一项与部署记录链 ID。多网络工程可以显式选择读值网络，但地址/ABI也要有该网络对应记录。

核对结果：Hook 的实际读取 chainId 与合约部署链一致。
依据：[Scaffold-ETH 2：useScaffoldReadContract](https://docs.scaffoldeth.io/hooks/useScaffoldReadContract)

## 3. 按 ABI 核对 contractName 和 args

官方例子使用 contractName: "YourContract"、functionName: "userGreetingCounter"、args: ["<ADDRESS>"]。这些字段必须对应项目实际合约和函数；缺少地址参数、参数顺序错误或读到另一个 ABI，都应先修输入，而不是关闭类型检查。

核对结果：合约名、函数名、完整参数及返回类型均与 ABI 对上。
依据：[Scaffold-ETH 2：useScaffoldReadContract](https://docs.scaffoldeth.io/hooks/useScaffoldReadContract)
依据：[Scaffold-ETH 2：官方文档索引](https://docs.scaffoldeth.io/llms.txt)

## 4. 区分尚未读到与合法零值

检查 Hook 的返回状态与错误信息，data 未返回时展示加载或失败，不能用无条件兜底 0 掩盖错误。返回 bigint 的零才是已读到的零；按项目返回类型格式化，保存原始值。若地址上没有预期代码，回到网络和部署记录检查。

核对结果：界面能区分 undefined、错误和真实零值，原始返回值可复核。
依据：[Scaffold-ETH 2：useScaffoldReadContract](https://docs.scaffoldeth.io/hooks/useScaffoldReadContract)

## 5. 核对刷新行为再判断卡住

watch 默认 true，会随新区块刷新；若组件关闭 watch，状态未自动变化并不证明读取失败。用返回的 refetch 检查主动刷新结果，并记录触发时刻和网络。仍失败时依次检查节点可达、合约记录、ABI和参数，避免把重新部署当第一种排查办法。

核对结果：watch 配置、刷新时间、最后成功值或错误明确。
依据：[Scaffold-ETH 2：useScaffoldReadContract](https://docs.scaffoldeth.io/hooks/useScaffoldReadContract)
依据：[Scaffold-ETH 2：本地开发环境](https://docs.scaffoldeth.io/quick-start/environment)

## 常见错误
- 钱包网络与 Hook 默认 targetNetworks[0] 可能不同。
- 新启动的本地链不保证保留旧部署；同样的地址字符串也不证明同一状态。
- 关闭类型检查或把所有空值改成 0 会隐藏错链、ABI 和参数问题。

## 完成检查
- 已记录 chainId、合约地址/ABI、输入参数、读取状态和刷新设置。
- 文档核对只证明排查流程，未实际启动或部署本地工程。

## 相关知识

## 官方依据
- [Scaffold-ETH 2：本地开发环境](https://docs.scaffoldeth.io/quick-start/environment)
- [Scaffold-ETH 2：useScaffoldReadContract](https://docs.scaffoldeth.io/hooks/useScaffoldReadContract)
- [Scaffold-ETH 2：官方文档索引](https://docs.scaffoldeth.io/llms.txt)
