Files
assetx/webapp-back/holders/README-CN.md
default 2ee4553b71 init: 初始化 AssetX 项目仓库
包含 webapp(Next.js 用户端)、webapp-back(Go 后端)、
antdesign(管理后台)、landingpage(营销落地页)、
数据库 SQL 和配置文件。
2026-03-27 11:26:43 +00:00

158 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Holder Scanner 使用说明
## 问题诊断
你遇到的问题是:**Scanner扫描器没有运行**,所以数据库中没有数据。
当前状态:
- ✅ API Server 正常运行
- ❌ Scanner 未启动(需要启动才能从区块链获取数据)
- ❌ 部署区块号可能不正确(需要更新)
## 解决步骤
### 第一步:获取正确的部署区块号
你数据库中的合约地址是:
- YT-A: `0x7f9eEA491eE53045594ee4669327f0355aCd0e58`
- YT-B: `0x20B94C5E5b7361552E0548161a58696aA6FeDBd4`
- YT-C: `0x0EF308D70cf35460E26a3Eb42F3442Ff28cbE07C`
**重要**:你需要找到这些合约的**实际部署区块号**。
#### 方法 1通过 Arbiscan 查询
1. 访问 [Arbiscan Sepolia](https://sepolia.arbiscan.io/)
2. 搜索合约地址(例如:`0x7f9eEA491eE53045594ee4669327f0355aCd0e58`
3. 查看 "Contract Creation" 或 "Contract Creator" 信息
4. 找到 "Block" 号码
#### 方法 2使用 Web3 工具查询
```bash
# 使用 cast (foundry) 工具
cast block-number --rpc-url https://sepolia-rollup.arbitrum.io/rpc
# 或者使用 etherscan API
curl "https://api-sepolia.arbiscan.io/api?module=contract&action=getcontractcreation&contractaddresses=0x7f9eEA491eE53045594ee4669327f0355aCd0e58"
```
#### 方法 3临时方案不推荐
如果暂时无法获取准确的部署区块号,可以使用一个较新的区块号(例如最新区块 - 10000但这会导致
- ⚠️ 可能遗漏早期的持有者数据
- ⚠️ 首次扫描时间更短,但数据不完整
### 第二步:更新 `.env` 配置
编辑 `.env` 文件,更新部署区块号:
```bash
# Deployment Block Numbers
YT_VAULTS_DEPLOY_BLOCK=123456789 # 替换为 YT-A/B/C 的实际部署区块
YTLP_DEPLOY_BLOCK=123456789 # 替换为 ytLP 的实际部署区块
LENDING_DEPLOY_BLOCK=123456789 # 替换为 Lending 的实际部署区块
```
### 第三步:启动 Scanner
#### 方法 1使用快速启动脚本推荐
```bash
# Linux/Mac
./run-scanner.sh
# Windows (Git Bash)
bash run-scanner.sh
```
#### 方法 2手动编译并运行
```bash
# 编译
go build -o bin/holder-scanner cmd/scanner/main.go
# 运行
./bin/holder-scanner
```
#### 方法 3使用 start-holders.sh交互式
```bash
./start-holders.sh
# 选择: 2. Scanner only
```
### 第四步:验证数据
启动 Scanner 后,你应该看到类似的日志:
```
=== Holder Scanner Service ===
✓ Configuration loaded
✓ Database tables checked
🔗 Chain ID: 421614
📚 从数据库加载合约地址配置...
✅ [Scanner] 加载了 3 个 YT 资产
✓ YT-A: 0x7f9eEA491eE53045594ee4669327f0355aCd0e58
✓ YT-B: 0x20B94C5E5b7361552E0548161a58696aA6FeDBd4
✓ YT-C: 0x0EF308D70cf35460E26a3Eb42F3442Ff28cbE07C
...
📊 开始首次扫描...
1. Scanning YT Vaults...
正在查询 YT-A (0x7f9eEA491eE53045594ee4669327f0355aCd0e58)...
发现 X 个新地址
余额>0: X 个持有者 ✅
```
等待首次扫描完成后,再次访问 API
```bash
curl http://localhost:8080/api/holders/YT-A
```
应该能看到持有者数据。
## 常见问题
### Q1: Scanner 报错 "failed to query logs"
**原因**:部署区块号设置太早,或 RPC 节点限制
**解决**
1. 检查部署区块号是否正确
2. 尝试使用更小的 `BatchSize`(在代码中默认 9999
3. 更换 RPC 节点
### Q2: 扫描速度很慢
**原因**:区块范围太大
**解决**
1. 确保使用准确的部署区块号(不要从太早的区块开始)
2. 检查网络连接
3. 考虑使用付费的 RPC 节点(更高的速率限制)
### Q3: 余额都是 0
**原因**:合约地址不正确,或合约不是 ERC20
**解决**
1. 验证合约地址是否正确
2. 在区块浏览器上检查合约是否是 ERC20 代币
3. 确认合约在对应的链上Arbitrum Sepolia
## 配置参数说明
| 环境变量 | 说明 | 默认值 |
|---------|------|--------|
| `CHAIN_ID` | 链 ID421614=Arbitrum Sepolia, 97=BSC Testnet | 421614 |
| `YT_VAULTS_DEPLOY_BLOCK` | YT 代币合约部署区块号 | 227339300 |
| `YTLP_DEPLOY_BLOCK` | ytLP 合约部署区块号 | 227230270 |
| `LENDING_DEPLOY_BLOCK` | Lending 合约部署区块号 | 227746053 |
## 技术支持
如果遇到问题,请提供:
1. Scanner 完整日志
2. 合约地址
3. 部署区块号
4. 错误信息