跳到正文
← 使用教程

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

链小知 · 进阶 · 核验 · 依官方文档整理

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

开始前准备

  • 准备本人有权查看的脱敏票证结构、已有开发验证日志、项目锁定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未合并。

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

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

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

检查结果:已把显示字段与具体包的受保护字段分开,标题不作资格证据。

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。

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与业务条件各有原依据,缺项不被省略。

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

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

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

检查结果:展示标签、票内快照与当前服务状态分开,时间单位未猜。

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

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

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

检查结果:每个拒绝点有来源与未知范围,不把签名true升级成活动批准。

怎样确认完成

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

常见错误与边界

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

本教程根据官方资料整理,尚未完成逐步操作验收。界面、支持范围及费用变化时,先核对官方说明。 纯文本版 · 提交纠错依据