CoFHE密文排错:批量签名、ACP与View/Tx输出
链小知 · 进阶 · 核验 · 依官方文档整理
按现行兼容表检查密文批次消费合约与ACP范围,区分本地展示值和可验证上链的解密证明。
开始前准备
- 准备已有的包版本、网络、消费合约、密文批次、脱敏ACP范围及解密结果;缺少版本或权限记录先保留待核。
1. 固定兼容版本与测试网范围
当前Compatibility列@cofhe/*同版0.8.0、cofhe-contracts 1.0.0;0.6合约/插件与0.7以后SDK不兼容。0.6 Permit现称ACP且旧签名会失效,0.7 ACP在0.8仍有效,不能见迁移页标题就一律要求重签。
三个公共测试网为Ethereum Sepolia(11155111)、Arbitrum Sepolia(421614)、Base Sepolia(84532),本地mock另列。官网10月21日主网仍是未来公告,本条不将其当当前已部署网络或实际账户入口。
检查结果:版本/合约兼容关系和真实链ID明确,0.6与0.7签名区分,未来主网未当已开放。
2. 核批次顺序、尾部签名和消费地址
encryptInputs一次返回按输入顺序排列的handles,最后附一份全批签名,长度为输入数加1;不能把签名当额外密文,也不能拿两值批签名拆成两份单值证明。每批明文总量上限2048 bits,超出为ZkPackFailed。
setConsumingContract必须是实际执行FHE.asEuint*转换的合约,未必是外层被调用地址;遗漏在TypeScript无execute,JavaScript为ConsumingContractUninitialized。地址填错可能编译通过而运行校验失败;逐字段核类型、顺序、链和输入拥有者,不推已成功验证。
检查结果:批次n+1结构、类型/顺序、位数和实际消费合约一致,编译成功未代替证明有效。
3. 核ACP已有访问、缩窄范围和共享类型
ACP issuer必须先有对应handle的链上ACL访问;Scope Global=0覆盖其可读全部值,Contract=1限列出合约,Handles=2限列出bytes32句柄。scope只能缩窄既有访问,不能越权,也不追溯缩窄之前已签ACP。
self由issuer签;sharing是分享提议,recipient由接收者携issuer签名导入后签署,导入会生成新的sealing key。ACP expiration是Unix秒;底层创建默认7天与client-wide defaultACPExpiration默认30天是两处设置,核实际载荷而非任选一个值。
检查结果:ACP类型、issuer既有ACL、chain/account、范围与实际Unix秒到期逐项对应,默认差异未硬统一。
4. 按用途区分仅展示值与上链证明
decryptForView始终需要ACP和正确utype:整数得到bigint,Bool为boolean,Uint160为校验和地址字符串;无可上链验证签名。不能把本地显示成功当合约已接受解密。
decryptForTx不取utype,返回ctHash、bigint decryptedValue及Teecryptor signature;必须按ACL选withACP或withoutACP之一,后者只对允许公众解密的handle。allowPublic允许任何人请求并永久发布明文;发布本身验签而非再查发布者ACL,不能以发布者没权限推断已公开值仍保密。
检查结果:View结果类型与utype匹配,Tx的三字段/签名和ACL模式明确,公开发布边界未遗漏。
5. 区分等待、分享与撤销状态
View/Tx都可能在Teecryptor尚未看见密文时得到submit-time 404;默认10,000毫秒重试,requestId在提交重试时可能为空,且与后续状态轮询共享总预算。超时不等于解密为零;核链、账户、ACP有效性与实际错误,保留未知结果。
ACP本地remove仅清理存储;revokeACP/revokeAllACPs的撤销在使用时核验,对已流出的副本也适用,但不能抹去对方已读明文。共享用ACPUtils.export的已签sharing对象,不能发送含sealing私钥的serialize结果;链上共享还暴露issuer/recipient关系。网络Gas与链外计算基准分开,不从基准推实际等待或收费。
检查结果:等待预算/空requestId和结果缺失分列,分享格式不泄密,移除与撤销及历史明文边界明确。
怎样确认完成
- 得到批次、消费地址、ACP范围、解密用途与失败状态对照;官方方法已核,实际密文、权限及上链结果待原材料确认。
常见错误与边界
- 0.8兼容关系与0.7迁移概念分开,主网计划不当当前部署。
- 消费合约不是任意外层地址,一批只有一份共同签名。
- View没上链签名,Tx无ACP只在公众可解密时可用。
- 本地移除不等于撤销;序列化ACP含私钥,不用于分享。