# Zupass 票证能显示却不获准：核 type、签名与活动资格

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

对已有脱敏票证和验证记录分开查看卡片、claim/proof、发行公钥、event/product 与消费状态，识别旧 EdDSA 和新 PODTicket 的差异。

## 使用工具
- [Zupass / PCD SDK](https://lianxiaozhi.com/tools/zupass) · [官方入口](https://zupass.org/)

## 前置条件
- 准备本人有权查看的脱敏票证结构、已有开发验证日志、项目锁定PCD包版本，以及活动方已提供的可信issuer key/eventId/productId条件；不收集私钥、ticketSecret、登录/备份或个人票证。
- 按固定d553fd1…：EdDSATicket包0.10.1、PODPCD0.5.1与PCD接口0.15.0。当前POD正文称新票用PODTicketPCD；官网仅取得壳，不能推当前账户/App部署。仅解读已有材料，不扫票、核销或向活动服务查询。

## 1. 从 type 识别票证而不是卡片名称

先查看原PCD或SerializedPCD.type。eddsa-ticket-pcd是旧EdDSA票，pod-ticket-pcd是另一票证包，pod-pcd是通用POD，不能将POD卡片都当票证。记录同type对应的包/版本与PCD id，不按标题或图标分派。

当前官方POD介绍明确新签票使用PODTicketPCD，通用PODPCD还可表示收藏品等；PCD并非全部ZK。只知道页面有卡片、缺原type时留格式待核，不套旧ticket方法。

核对结果：票证type/包/版本明确，旧/新/通用POD未合并。
依据：[PCD 接口：type、verify 和 SerializedPCD](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/lib/pcd-types/src/pcd.ts)
依据：[EdDSA Ticket：活动、issuer 与已签字段](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCD.ts)
依据：[PODTicketPCD：不同票证包装](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/pod-ticket-pcd/src/PODTicketPCD.ts)
依据：[POD 当前文档：新票证与通用 POD](https://pod.org/pod/introduction)
依据：[固定 EdDSA Ticket 包版本](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/package.json)

## 2. 检查显示名称是否属于已签内容

旧EdDSA getDisplayOptions从claim.ticket的eventName/ticketName拼标题，但此函数不调用verify。这些展示字段未进入实际签名映射；标题相同不能证明活动相同，标题改动也未必造成该旧票验签失败。

ticketDataToBigInts实际映射ticketId/eventId/productId、timestamps、SemaphoreId、consumed/revoked/category、姓名/邮箱哈希与保留位。不要按类型文件里“下面已签”的概括推所有新增展示字段受保护；新PODTicket的映射另核，不沿用这张旧字段表。

核对结果：已把显示字段与具体包的受保护字段分开，标题不作资格证据。
依据：[EdDSA Ticket：verify、显示与两层序列化](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCDPackage.ts)
依据：[EdDSA Ticket：活动、issuer 与已签字段](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCD.ts)
依据：[EdDSA Ticket：实际签名映射与issuer key](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/utils.ts)
依据：[PODTicketPCD：parse、verify 与显示分开](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/pod-ticket-pcd/src/PODTicketPCDPackage.ts)

## 3. 读取正确证明结果，区别解析和验签

对已有EdDSA记录，verify先将claim.ticket映射整数与proof.eddsaPCD.claim.message比较，不等返回false，再验证EdDSA proof。只有deserialize成功或卡片可显示还没完成这一层；参数结构错误或Promise拒绝也不是true。

PODTicketPCDPackage.verify是用其schema映射POD后verifySignature，捕获异常返回false；它与旧票的nested proof不是同接口。按实际包保留原boolean/异常，不制造“卡片已验签”字段，也不运行prove来补签。

核对结果：验签的包/type、原结果与失败范围明确，未把显示/解析当true。
依据：[EdDSA Ticket：verify、显示与两层序列化](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCDPackage.ts)
依据：[PODTicketPCD：parse、verify 与显示分开](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/pod-ticket-pcd/src/PODTicketPCDPackage.ts)
依据：[PCD 接口：type、verify 和 SerializedPCD](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/lib/pcd-types/src/pcd.ts)

## 4. 核 issuer key 与活动、产品条件

旧票从proof.eddsaPCD.claim.publicKey取得issuer key；PODTicket从claim.signerPublicKey取得。保留原编码，并与活动方独立提供的认可key在对应包规则下核对；不要把任意自签key或另一活动key视为认可issuer。

同时核claim.ticket.eventId和productId匹配业务允许列表，ticketId只标单张票；同活动不同产品可能资格不同。包verify只验claim/proof关系，不替应用自动比较这些条件；缺可信key/允许列表时结论停在证明关系，不能批准入场。

核对结果：签名issuer、event、product与业务条件各有原依据，缺项不被省略。
依据：[EdDSA Ticket：活动、issuer 与已签字段](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCD.ts)
依据：[EdDSA Ticket：实际签名映射与issuer key](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/utils.ts)
依据：[EdDSA Ticket：verify、显示与两层序列化](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCDPackage.ts)
依据：[PODTicketPCD：不同票证包装](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/pod-ticket-pcd/src/PODTicketPCD.ts)

## 5. 把已消费与撤销旗标当记录时点的状态

保存isConsumed/isRevoked以及timestampSigned/timestampConsumed原值、读取/签发记录时点。固定display函数先isRevoked显示[CANCELED]，否则isConsumed显示[SCANNED]，只是读取票内旗标，不是实时核销服务回复。

旧QR颜色函数注释提consumed，但实现只因ticket缺失或isRevoked变灰；不能用二维码颜色判断消费。timestamps在本次所读类型/映射没有确定单位，不擅自按秒或毫秒换算；没有活动最新状态就标实时状态未核。

核对结果：展示标签、票内快照与当前服务状态分开，时间单位未猜。
依据：[EdDSA Ticket：verify、显示与两层序列化](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCDPackage.ts)
依据：[EdDSA Ticket：实际签名映射与issuer key](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/utils.ts)
依据：[PODTicketPCD：parse、verify 与显示分开](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/pod-ticket-pcd/src/PODTicketPCDPackage.ts)

## 6. 形成四层拒绝原因而不修改票证

按type/解析、证明关系、issuer+event/product资格、状态/持有人业务条件四层归档拒绝原因。旧票attendeeName等受保护数据仍需业务匹配，持有复制文件不是控制身份或入场资格证明。

缺材料联系原有业务支持流程所需的脱敏包版本、type、event/product和错误，不分享完整ticketSecret/私钥或个人票证。不要改isRevoked/isConsumed、替换issuer或调用prove绕过拒绝；本任务到已有记录排查为止。

核对结果：每个拒绝点有来源与未知范围，不把签名true升级成活动批准。
依据：[PCD 接口：type、verify 和 SerializedPCD](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/lib/pcd-types/src/pcd.ts)
依据：[EdDSA Ticket：活动、issuer 与已签字段](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCD.ts)
依据：[EdDSA Ticket：verify、显示与两层序列化](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCDPackage.ts)
依据：[Zupass 与 PCD SDK：储存、查询和证明分开](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/README.md)

## 常见错误
- 显示名称、QR颜色与验签都不是实时业务核销状态。
- 旧EdDSA字段表与PODTicket的schema/签名路径不同；通用POD不自动是票证。
- 密码学验证通过不替代认可issuer、活动/产品、持有人与当前状态条件。

## 完成检查
- 得到格式—显示—proof—issuer/event/product—状态时点的有限检查表。
- 全部documentation；未登录、扫票、消费/撤销、验证真实个人票证或访问活动API。

## 相关知识
- [原始、解码和整理后的链上数据有什么区别？](https://lianxiaozhi.com/learn/raw-decoded-curated-data)
- [把数据上链，与只保存数据哈希有什么区别？](https://lianxiaozhi.com/learn/data-onchain-vs-offchain)

## 官方依据
- [PCD 接口：type、verify 和 SerializedPCD](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/lib/pcd-types/src/pcd.ts)
- [EdDSA Ticket：活动、issuer 与已签字段](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCD.ts)
- [PODTicketPCD：不同票证包装](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/pod-ticket-pcd/src/PODTicketPCD.ts)
- [POD 当前文档：新票证与通用 POD](https://pod.org/pod/introduction)
- [固定 EdDSA Ticket 包版本](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/package.json)
- [EdDSA Ticket：verify、显示与两层序列化](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/EdDSATicketPCDPackage.ts)
- [EdDSA Ticket：实际签名映射与issuer key](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/eddsa-ticket-pcd/src/utils.ts)
- [PODTicketPCD：parse、verify 与显示分开](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/packages/pcd/pod-ticket-pcd/src/PODTicketPCDPackage.ts)
- [Zupass 与 PCD SDK：储存、查询和证明分开](https://raw.githubusercontent.com/proofcarryingdata/zupass/d553fd1dd9ec9c4a641fa01326a14ef90e4d20f1/README.md)
