Snapshot 导出投票记录对不上:核 proposal、choice序号与分页覆盖
链小知 · 进阶 · 核验 · 依官方文档整理
读取已有Hub记录,排查提案混用、选项错位和只取第一页造成的统计缺口。
开始前准备
- 准备有权查看的已有提案、原时点设置或脱敏记录;只核对材料,不连接钱包、投票、签名或更改配置。
- 官方说明用于解释记录;未访问本人账户或请求业务API,未知字段和运行状态保留未知。
1. 核提案与查询环境
官方Hub文档分别列生产hub.snapshot.org/graphql和演示testnet.hub.snapshot.org/graphql。检查已有记录来自哪一个端点,proposal.id和space.id对应哪份提案,示例里的旧提案不是本人的实时记录。
单提案材料可包含choices、snapshot、network、strategies、scores、scores_by_strategy、scores_total和scores_updated;保留实际返回的字段,缺失不补零。
检查结果:端点、空间、提案和结果更新时间可对应。
2. 检查筛选和分页
Get votes支持first、skip、where中的proposal/space/voter及排序。官方示例first:1000、skip:0仅展示一个请求,不是全量证明或保证的最大上限。检查已有每页条件和排序是否一致。
仅有第一页或同页重复保存就标部分覆盖;按vote.id去重,保留每页数量、读取时点和缺页情况。活跃投票的新增记录会影响基于skip的页位,跨时点材料不能自动当一次完整快照。
检查结果:统计带过滤条件、页位和覆盖边界。
3. 核选项身份和票权
官方文档规定choice索引从1开始,第一项对应choices[0];只在该投票类型确实返回单一序号时这样对应。多选、权重或排名形式按实际类型解读,不能强制转成一个整数。
vote.id是记录身份,voter是地址;vp、vp_by_strategy与vp_state分别保留。不能用记录条数替代票权,也不能把地址去重后声称独立人数。
检查结果:选项序号、原choice形式和vp状态均保留。
4. 对齐汇总范围
将同一提案、同一读取范围的投票材料与scores相关汇总并列,按实际投票类型解释差异。记录页没带vp或完整choice时,不能凭示例response缺字段推不存在。
文档中vp示例出现final,本文只记录实际vp_state,未独立重算票权或调用Score API;局部记录无法解释差异就保留待核。
检查结果:局部数据与汇总不一致时保留原因及未知项。
怎样确认完成
- 保存端点、提案、条件、页覆盖、vote.id与choice映射的核对表。
- 不补发API、不签名,也不从缺失记录得出零参与。
常见错误与边界
- 示例里的first:1000和旧时间不代表当前服务限额或当日提案。
- 网页/API示例可读不证明本人导出完整或投票结果已执行。