zklicensing 0.1.0-beta.2 → 0.1.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/README.md +417 -201
  2. package/build/agent.d.ts +371 -0
  3. package/build/agent.d.ts.map +1 -0
  4. package/build/agent.js +553 -0
  5. package/build/agent.js.map +1 -0
  6. package/build/agentActions.d.ts +841 -0
  7. package/build/agentActions.d.ts.map +1 -0
  8. package/build/agentActions.js +581 -0
  9. package/build/agentActions.js.map +1 -0
  10. package/build/agentRecord.d.ts +83 -0
  11. package/build/agentRecord.d.ts.map +1 -0
  12. package/build/agentRecord.js +69 -0
  13. package/build/agentRecord.js.map +1 -0
  14. package/build/agentVendor.d.ts +220 -0
  15. package/build/agentVendor.d.ts.map +1 -0
  16. package/build/agentVendor.js +306 -0
  17. package/build/agentVendor.js.map +1 -0
  18. package/build/appsLookup.d.ts +14 -0
  19. package/build/appsLookup.d.ts.map +1 -0
  20. package/build/appsLookup.js +12 -0
  21. package/build/appsLookup.js.map +1 -0
  22. package/build/archiveBootstrap.d.ts +31 -5
  23. package/build/archiveBootstrap.d.ts.map +1 -0
  24. package/build/archiveBootstrap.js +140 -47
  25. package/build/archiveBootstrap.js.map +1 -0
  26. package/build/atomicJson.d.ts +5 -0
  27. package/build/atomicJson.d.ts.map +1 -0
  28. package/build/atomicJson.js +55 -0
  29. package/build/atomicJson.js.map +1 -0
  30. package/build/bindClient.d.ts +85 -0
  31. package/build/bindClient.d.ts.map +1 -0
  32. package/build/bindClient.js +187 -0
  33. package/build/bindClient.js.map +1 -0
  34. package/build/buyClient.d.ts +27 -4
  35. package/build/buyClient.d.ts.map +1 -0
  36. package/build/buyClient.js +72 -26
  37. package/build/buyClient.js.map +1 -0
  38. package/build/chainHead.d.ts +61 -0
  39. package/build/chainHead.d.ts.map +1 -0
  40. package/build/chainHead.js +88 -0
  41. package/build/chainHead.js.map +1 -0
  42. package/build/compactMerkleMap.d.ts +72 -0
  43. package/build/compactMerkleMap.d.ts.map +1 -0
  44. package/build/compactMerkleMap.js +224 -0
  45. package/build/compactMerkleMap.js.map +1 -0
  46. package/build/contractInterface.d.ts +191 -51
  47. package/build/contractInterface.d.ts.map +1 -0
  48. package/build/contractInterface.js +234 -43
  49. package/build/contractInterface.js.map +1 -0
  50. package/build/contractTypes.d.ts +9 -0
  51. package/build/contractTypes.d.ts.map +1 -0
  52. package/build/contractTypes.js +28 -0
  53. package/build/contractTypes.js.map +1 -0
  54. package/build/countryStats.d.ts +12 -3
  55. package/build/countryStats.d.ts.map +1 -0
  56. package/build/countryStats.js +87 -23
  57. package/build/countryStats.js.map +1 -0
  58. package/build/deployClient.d.ts +138 -24
  59. package/build/deployClient.d.ts.map +1 -0
  60. package/build/deployClient.js +91 -31
  61. package/build/deployClient.js.map +1 -0
  62. package/build/deviceIdentity.d.ts +68 -0
  63. package/build/deviceIdentity.d.ts.map +1 -0
  64. package/build/deviceIdentity.js +209 -0
  65. package/build/deviceIdentity.js.map +1 -0
  66. package/build/freezeClient.d.ts +26 -6
  67. package/build/freezeClient.d.ts.map +1 -0
  68. package/build/freezeClient.js +30 -6
  69. package/build/freezeClient.js.map +1 -0
  70. package/build/generationClient.d.ts +6 -3
  71. package/build/generationClient.d.ts.map +1 -0
  72. package/build/generationClient.js +25 -38
  73. package/build/generationClient.js.map +1 -0
  74. package/build/holderSecret.d.ts +70 -0
  75. package/build/holderSecret.d.ts.map +1 -0
  76. package/build/holderSecret.js +76 -0
  77. package/build/holderSecret.js.map +1 -0
  78. package/build/index.d.ts +38 -38
  79. package/build/index.d.ts.map +1 -0
  80. package/build/index.js +97 -121
  81. package/build/index.js.map +1 -0
  82. package/build/keysClient.d.ts +142 -0
  83. package/build/keysClient.d.ts.map +1 -0
  84. package/build/keysClient.js +109 -0
  85. package/build/keysClient.js.map +1 -0
  86. package/build/licenseLeaf.d.ts +76 -0
  87. package/build/licenseLeaf.d.ts.map +1 -0
  88. package/build/licenseLeaf.js +189 -0
  89. package/build/licenseLeaf.js.map +1 -0
  90. package/build/licenseRecord.d.ts +68 -5
  91. package/build/licenseRecord.d.ts.map +1 -0
  92. package/build/licenseRecord.js +26 -1
  93. package/build/licenseRecord.js.map +1 -0
  94. package/build/licenseStore.d.ts +81 -4
  95. package/build/licenseStore.d.ts.map +1 -0
  96. package/build/licenseStore.js +400 -30
  97. package/build/licenseStore.js.map +1 -0
  98. package/build/licenseTrustless.d.ts +43 -0
  99. package/build/licenseTrustless.d.ts.map +1 -0
  100. package/build/licenseTrustless.js +180 -0
  101. package/build/licenseTrustless.js.map +1 -0
  102. package/build/manifestVerify.d.ts +29 -1
  103. package/build/manifestVerify.d.ts.map +1 -0
  104. package/build/manifestVerify.js +46 -4
  105. package/build/manifestVerify.js.map +1 -0
  106. package/build/minaPriceHistory.d.ts +9 -0
  107. package/build/minaPriceHistory.d.ts.map +1 -0
  108. package/build/minaPriceHistory.js +152 -0
  109. package/build/minaPriceHistory.js.map +1 -0
  110. package/build/onChainRoot.d.ts +60 -0
  111. package/build/onChainRoot.d.ts.map +1 -0
  112. package/build/onChainRoot.js +74 -0
  113. package/build/onChainRoot.js.map +1 -0
  114. package/build/ownershipLicenseHash.d.ts +25 -0
  115. package/build/ownershipLicenseHash.d.ts.map +1 -0
  116. package/build/ownershipLicenseHash.js +29 -0
  117. package/build/ownershipLicenseHash.js.map +1 -0
  118. package/build/ownershipSignature.d.ts +153 -0
  119. package/build/ownershipSignature.d.ts.map +1 -0
  120. package/build/ownershipSignature.js +297 -0
  121. package/build/ownershipSignature.js.map +1 -0
  122. package/build/permitCheckFlow.d.ts +155 -0
  123. package/build/permitCheckFlow.d.ts.map +1 -0
  124. package/build/permitCheckFlow.js +196 -0
  125. package/build/permitCheckFlow.js.map +1 -0
  126. package/build/permitDescribe.d.ts +124 -0
  127. package/build/permitDescribe.d.ts.map +1 -0
  128. package/build/permitDescribe.js +324 -0
  129. package/build/permitDescribe.js.map +1 -0
  130. package/build/permitInterface.d.ts +85 -0
  131. package/build/permitInterface.d.ts.map +1 -0
  132. package/build/permitInterface.js +121 -0
  133. package/build/permitInterface.js.map +1 -0
  134. package/build/permitMessages.d.ts +313 -0
  135. package/build/permitMessages.d.ts.map +1 -0
  136. package/build/permitMessages.js +462 -0
  137. package/build/permitMessages.js.map +1 -0
  138. package/build/permitProof.d.ts +108 -0
  139. package/build/permitProof.d.ts.map +1 -0
  140. package/build/permitProof.js +202 -0
  141. package/build/permitProof.js.map +1 -0
  142. package/build/permitRegistryRebuild.d.ts +166 -0
  143. package/build/permitRegistryRebuild.d.ts.map +1 -0
  144. package/build/permitRegistryRebuild.js +347 -0
  145. package/build/permitRegistryRebuild.js.map +1 -0
  146. package/build/permitTree.d.ts +88 -0
  147. package/build/permitTree.d.ts.map +1 -0
  148. package/build/permitTree.js +230 -0
  149. package/build/permitTree.js.map +1 -0
  150. package/build/permitsClient.d.ts +680 -0
  151. package/build/permitsClient.d.ts.map +1 -0
  152. package/build/permitsClient.js +597 -0
  153. package/build/permitsClient.js.map +1 -0
  154. package/build/proveErrors.d.ts +50 -0
  155. package/build/proveErrors.d.ts.map +1 -0
  156. package/build/proveErrors.js +76 -0
  157. package/build/proveErrors.js.map +1 -0
  158. package/build/receipt.d.ts +95 -0
  159. package/build/receipt.d.ts.map +1 -0
  160. package/build/receipt.js +84 -0
  161. package/build/receipt.js.map +1 -0
  162. package/build/refundClient.d.ts +7 -12
  163. package/build/refundClient.d.ts.map +1 -0
  164. package/build/refundClient.js +52 -21
  165. package/build/refundClient.js.map +1 -0
  166. package/build/registryTrustVerify.d.ts +78 -0
  167. package/build/registryTrustVerify.d.ts.map +1 -0
  168. package/build/registryTrustVerify.js +129 -0
  169. package/build/registryTrustVerify.js.map +1 -0
  170. package/build/releaseClient.d.ts +26 -0
  171. package/build/releaseClient.d.ts.map +1 -0
  172. package/build/releaseClient.js +65 -0
  173. package/build/releaseClient.js.map +1 -0
  174. package/build/renewClient.d.ts +28 -2
  175. package/build/renewClient.d.ts.map +1 -0
  176. package/build/renewClient.js +31 -27
  177. package/build/renewClient.js.map +1 -0
  178. package/build/seatName.d.ts +8 -0
  179. package/build/seatName.d.ts.map +1 -0
  180. package/build/seatName.js +136 -0
  181. package/build/seatName.js.map +1 -0
  182. package/build/slotConstants.d.ts +15 -0
  183. package/build/slotConstants.d.ts.map +1 -0
  184. package/build/slotConstants.js +17 -0
  185. package/build/slotConstants.js.map +1 -0
  186. package/build/statsClient.d.ts +61 -7
  187. package/build/statsClient.d.ts.map +1 -0
  188. package/build/statsClient.js +44 -5
  189. package/build/statsClient.js.map +1 -0
  190. package/build/successorChain.d.ts +35 -0
  191. package/build/successorChain.d.ts.map +1 -0
  192. package/build/successorChain.js +69 -0
  193. package/build/successorChain.js.map +1 -0
  194. package/build/taxId.d.ts +44 -0
  195. package/build/taxId.d.ts.map +1 -0
  196. package/build/taxId.js +212 -0
  197. package/build/taxId.js.map +1 -0
  198. package/build/trustAnchorVerify.d.ts +49 -0
  199. package/build/trustAnchorVerify.d.ts.map +1 -0
  200. package/build/trustAnchorVerify.js +432 -0
  201. package/build/trustAnchorVerify.js.map +1 -0
  202. package/build/trustAnchorVerifyCli.d.ts +45 -0
  203. package/build/trustAnchorVerifyCli.d.ts.map +1 -0
  204. package/build/trustAnchorVerifyCli.js +235 -0
  205. package/build/trustAnchorVerifyCli.js.map +1 -0
  206. package/build/txBroadcastClient.d.ts +26 -0
  207. package/build/txBroadcastClient.d.ts.map +1 -0
  208. package/build/txBroadcastClient.js +20 -0
  209. package/build/txBroadcastClient.js.map +1 -0
  210. package/build/unbindClient.d.ts +77 -0
  211. package/build/unbindClient.d.ts.map +1 -0
  212. package/build/unbindClient.js +169 -0
  213. package/build/unbindClient.js.map +1 -0
  214. package/build/units.d.ts +28 -0
  215. package/build/units.d.ts.map +1 -0
  216. package/build/units.js +65 -0
  217. package/build/units.js.map +1 -0
  218. package/build/vatRates.d.ts +54 -0
  219. package/build/vatRates.d.ts.map +1 -0
  220. package/build/vatRates.js +82 -0
  221. package/build/vatRates.js.map +1 -0
  222. package/build/vatRatesData.d.ts +5 -0
  223. package/build/vatRatesData.d.ts.map +1 -0
  224. package/build/vatRatesData.js +42 -0
  225. package/build/vatRatesData.js.map +1 -0
  226. package/build/vendorAccountClient.d.ts +66 -0
  227. package/build/vendorAccountClient.d.ts.map +1 -0
  228. package/build/vendorAccountClient.js +47 -0
  229. package/build/vendorAccountClient.js.map +1 -0
  230. package/build/verifyCore.d.ts +4 -1
  231. package/build/verifyCore.d.ts.map +1 -0
  232. package/build/verifyCore.js +21 -10
  233. package/build/verifyCore.js.map +1 -0
  234. package/build/verifyOffline.d.ts +85 -0
  235. package/build/verifyOffline.d.ts.map +1 -0
  236. package/build/verifyOffline.js +139 -0
  237. package/build/verifyOffline.js.map +1 -0
  238. package/build/verifyService.d.ts.map +1 -0
  239. package/build/verifyService.js +571 -501
  240. package/build/verifyService.js.map +1 -0
  241. package/build/verifyWithAncestors.d.ts +19 -0
  242. package/build/verifyWithAncestors.d.ts.map +1 -0
  243. package/build/verifyWithAncestors.js +127 -0
  244. package/build/verifyWithAncestors.js.map +1 -0
  245. package/build/zipToState.d.ts +2 -0
  246. package/build/zipToState.d.ts.map +1 -0
  247. package/build/zipToState.js +94 -0
  248. package/build/zipToState.js.map +1 -0
  249. package/package.json +141 -16
  250. package/src/agent.ts +682 -0
  251. package/src/agentActions.ts +637 -0
  252. package/src/agentRecord.ts +121 -0
  253. package/src/agentVendor.ts +356 -0
  254. package/src/appsLookup.ts +48 -0
  255. package/src/archiveBootstrap.ts +386 -0
  256. package/src/atomicJson.ts +53 -0
  257. package/src/bindClient.ts +297 -0
  258. package/src/buyClient.ts +344 -0
  259. package/src/chainHead.ts +106 -0
  260. package/src/compactMerkleMap.ts +222 -0
  261. package/src/contractInterface.ts +465 -0
  262. package/src/contractTypes.ts +31 -0
  263. package/src/countryStats.ts +200 -0
  264. package/src/deployClient.ts +517 -0
  265. package/src/deviceIdentity.ts +249 -0
  266. package/src/freezeClient.ts +162 -0
  267. package/src/generationClient.ts +145 -0
  268. package/src/holderSecret.ts +91 -0
  269. package/src/index.ts +362 -0
  270. package/src/keysClient.ts +135 -0
  271. package/src/licenseLeaf.ts +221 -0
  272. package/src/licenseRecord.ts +190 -0
  273. package/src/licenseStore.ts +767 -0
  274. package/src/licenseTrustless.ts +207 -0
  275. package/src/manifestVerify.ts +164 -0
  276. package/src/minaPriceHistory.ts +166 -0
  277. package/src/onChainRoot.ts +90 -0
  278. package/src/ownershipLicenseHash.ts +31 -0
  279. package/src/ownershipSignature.ts +421 -0
  280. package/src/permitCheckFlow.ts +227 -0
  281. package/src/permitDescribe.ts +362 -0
  282. package/src/permitInterface.ts +146 -0
  283. package/src/permitMessages.ts +572 -0
  284. package/src/permitProof.ts +230 -0
  285. package/src/permitRegistryRebuild.ts +423 -0
  286. package/src/permitTree.ts +232 -0
  287. package/src/permitsClient.ts +746 -0
  288. package/src/proveErrors.ts +98 -0
  289. package/src/receipt.ts +156 -0
  290. package/src/refundClient.ts +177 -0
  291. package/src/registryTrustVerify.ts +192 -0
  292. package/src/releaseClient.ts +101 -0
  293. package/src/renewClient.ts +234 -0
  294. package/src/seatName.ts +165 -0
  295. package/src/slotConstants.ts +18 -0
  296. package/src/statsClient.ts +249 -0
  297. package/src/successorChain.ts +87 -0
  298. package/src/taxId.ts +227 -0
  299. package/src/trustAnchorVerify.ts +550 -0
  300. package/src/trustAnchorVerifyCli.ts +234 -0
  301. package/src/txBroadcastClient.ts +48 -0
  302. package/src/unbindClient.ts +233 -0
  303. package/src/units.ts +74 -0
  304. package/src/vatRates.ts +100 -0
  305. package/src/vatRatesData.ts +43 -0
  306. package/src/vendorAccountClient.ts +120 -0
  307. package/src/verifyCore.ts +100 -0
  308. package/src/verifyOffline.ts +212 -0
  309. package/src/verifyService.ts +982 -0
  310. package/src/verifyWithAncestors.ts +163 -0
  311. package/src/zipToState.ts +94 -0
  312. package/build/licenseProof.d.ts +0 -26
  313. package/build/licenseProof.js +0 -41
  314. package/build/migrateClient.d.ts +0 -43
  315. package/build/migrateClient.js +0 -47
  316. package/build/ownership.d.ts +0 -34
  317. package/build/ownership.js +0 -147
@@ -0,0 +1,462 @@
1
+ // Copyright (c) 2025-2026 zkLicensing project developers
2
+ // SPDX-License-Identifier: BUSL-1.1
3
+ /**
4
+ * permitMessages.ts — `zklicensing/permits/messages`
5
+ *
6
+ * The single definition of everything signed or hashed for zkPermits: the
7
+ * permit leaf, subject derivation, packed fees and policy, the authority
8
+ * key-set commitment, and the message each signer signs. The PermitRegistry
9
+ * circuit imports this module, so an off-chain signature (authority console,
10
+ * operator page, agent) always hashes to exactly what the circuit verifies.
11
+ * Test vectors: permitMessages.vectors.json.
12
+ *
13
+ * Every function works both off-chain and inside a circuit (o1js types
14
+ * only). Messages are short Field arrays; wallets sign them with
15
+ * `signFields` (Auro, WalletConnect `mina_signFields`), and o1js
16
+ * `Signature.verify` accepts those signatures in-circuit.
17
+ *
18
+ * Wallet field signatures are NOT bound to a network by the signer, so
19
+ * every message carries the network, the registry address and a
20
+ * per-message nonce itself (see `authorityMessage`).
21
+ */
22
+ import { Bool, Field, Poseidon, PrivateKey, Provable, PublicKey, Signature, Struct, UInt32, UInt64 } from 'o1js';
23
+ // ------------------------------------------------------------
24
+ // Domain separation
25
+ // ------------------------------------------------------------
26
+ /** Deterministic Field from a short ASCII label (≤ 31 bytes). */
27
+ function labelField(label) {
28
+ if (label.length > 31)
29
+ throw new Error(`label too long: ${label}`);
30
+ let v = 0n;
31
+ for (const ch of label) {
32
+ const c = ch.charCodeAt(0);
33
+ if (c > 0x7f)
34
+ throw new Error('ASCII labels only');
35
+ v = (v << 8n) | BigInt(c);
36
+ }
37
+ return Field(v);
38
+ }
39
+ /** One tag per message type. Never reuse or renumber. */
40
+ export const PERMIT_TAGS = {
41
+ INIT: labelField('zkPermits/v1/init'),
42
+ GRANT: labelField('zkPermits/v1/grant'),
43
+ ACCEPT: labelField('zkPermits/v1/accept'),
44
+ SUSPEND: labelField('zkPermits/v1/suspend'),
45
+ REINSTATE: labelField('zkPermits/v1/reinstate'),
46
+ REVOKE: labelField('zkPermits/v1/revoke'),
47
+ SURRENDER: labelField('zkPermits/v1/surrender'),
48
+ SET_FEES: labelField('zkPermits/v1/setFees'),
49
+ ROTATE: labelField('zkPermits/v1/rotate'),
50
+ LEAF: labelField('zkPermits/v1/leaf'),
51
+ SUBJECT: labelField('zkPermits/v1/subject'),
52
+ KEYS: labelField('zkPermits/v1/keys'),
53
+ // Application escrow (PERMITS_PLAN.md §4.2).
54
+ APPLICATION: labelField('zkPermits/v1/application'),
55
+ APPLY: labelField('zkPermits/v1/apply'),
56
+ APPROVE: labelField('zkPermits/v1/approve'),
57
+ REJECT: labelField('zkPermits/v1/reject'),
58
+ WITHDRAW: labelField('zkPermits/v1/withdraw'),
59
+ // Generations: the authority retires a registry before redeploying it.
60
+ RETIRE: labelField('zkPermits/v1/retire'),
61
+ // ... or the platform does (one signature by the platform key).
62
+ PLATFORM_RETIRE: labelField('zkPermits/v1/platformRetire'),
63
+ // Before retiring, the platform may cancel an open application (full refund).
64
+ PLATFORM_CANCEL: labelField('zkPermits/v1/platformCancel'),
65
+ // Key changes: a new payout address (threshold, after a delay), a permit moving to a new holder key.
66
+ PAYOUT: labelField('zkPermits/v1/payout'),
67
+ PAYOUT_CANCEL: labelField('zkPermits/v1/payoutCancel'),
68
+ REKEY: labelField('zkPermits/v1/rekey'),
69
+ };
70
+ /** Network in signed messages. 0 is never valid. */
71
+ export const PERMIT_NETWORK = { devnet: Field(1), mainnet: Field(2) };
72
+ export function networkField(network) {
73
+ const f = PERMIT_NETWORK[network];
74
+ if (!f)
75
+ throw new Error(`unknown network ${network}`);
76
+ return f;
77
+ }
78
+ // ------------------------------------------------------------
79
+ // Permit leaf
80
+ // ------------------------------------------------------------
81
+ /** MOVED: the permit moved to a new holder key (rekeyPermit), under a new subject; this leaf is closed. */
82
+ export const PERMIT_STATUS = { ACTIVE: 0, SUSPENDED: 1, REVOKED: 2, MOVED: 3 };
83
+ export const PERMIT_STATUS_ACTIVE = UInt32.from(0);
84
+ export const PERMIT_STATUS_SUSPENDED = UInt32.from(1);
85
+ export const PERMIT_STATUS_REVOKED = UInt32.from(2);
86
+ export const PERMIT_STATUS_MOVED = UInt32.from(3);
87
+ /** Expiry value meaning "does not expire" (only if the policy allows it). */
88
+ export const NO_EXPIRY_SLOT = UInt32.MAXINT();
89
+ // `const X: any = Struct(...)` — same pattern as licenseLeaf.ts: the inferred
90
+ // Struct class type references o1js internals outside this package's rootDir.
91
+ export const PermitLeaf = Struct({
92
+ subject: Field,
93
+ holderKey: PublicKey,
94
+ scope: Field,
95
+ validFrom: UInt32,
96
+ expirySlot: UInt32,
97
+ status: UInt32,
98
+ seq: UInt32,
99
+ docHash: Field,
100
+ });
101
+ /** Hash stored in the permits MerkleMap. An empty map slot is Field(0). */
102
+ export function permitLeafHash(leaf) {
103
+ return Poseidon.hash([PERMIT_TAGS.LEAF, ...PermitLeaf.toFields(leaf)]);
104
+ }
105
+ /** Tree key of an operator: hides the key behind a salt. */
106
+ export function permitSubject(holderKey, salt) {
107
+ return Poseidon.hash([PERMIT_TAGS.SUBJECT, ...holderKey.toFields(), salt]);
108
+ }
109
+ /** Leaf value for a subject that has never held a permit. */
110
+ export function emptyPermitLeaf(subject) {
111
+ return new PermitLeaf({
112
+ subject,
113
+ holderKey: PublicKey.empty(),
114
+ scope: Field(0),
115
+ validFrom: UInt32.zero,
116
+ expirySlot: UInt32.zero,
117
+ status: PERMIT_STATUS_ACTIVE,
118
+ seq: UInt32.zero,
119
+ docHash: Field(0),
120
+ });
121
+ }
122
+ // ------------------------------------------------------------
123
+ // Packed fees and policy
124
+ // ------------------------------------------------------------
125
+ const TWO_64 = 1n << 64n;
126
+ /** grantFee | renewalFee << 64 | minFee << 128 (nanomina). */
127
+ export function packFees(f) {
128
+ return f.grantFee.value
129
+ .add(f.renewalFee.value.mul(Field(TWO_64)))
130
+ .add(f.minFee.value.mul(Field(TWO_64 * TWO_64)));
131
+ }
132
+ /** Inverse of packFees; range-checks every part (safe in-circuit). */
133
+ export function unpackFees(packed) {
134
+ const bits = packed.toBits(192);
135
+ return {
136
+ grantFee: UInt64.Unsafe.fromField(Field.fromBits(bits.slice(0, 64))),
137
+ renewalFee: UInt64.Unsafe.fromField(Field.fromBits(bits.slice(64, 128))),
138
+ minFee: UInt64.Unsafe.fromField(Field.fromBits(bits.slice(128, 192))),
139
+ };
140
+ }
141
+ /** Default minimum permit fee: 10 MINA. Configurable per registry at initialize. */
142
+ export const DEFAULT_MIN_PERMIT_FEE = UInt64.from(10000000000n);
143
+ /** Platform share of a fee: 2%, rounded down (rounding favours the authority). */
144
+ export const PERMIT_PLATFORM_FEE_BASIS = UInt64.from(50);
145
+ export function platformShare(fee) {
146
+ return fee.div(PERMIT_PLATFORM_FEE_BASIS);
147
+ }
148
+ /** gracePeriod | maxTerm << 32 | singleKeySuspend << 64 | holderSigRequired << 65 */
149
+ export function packPolicy(p) {
150
+ return p.gracePeriod.value
151
+ .add(p.maxTerm.value.mul(Field(1n << 32n)))
152
+ .add(p.singleKeySuspend.toField().mul(Field(1n << 64n)))
153
+ .add(p.holderSigRequired.toField().mul(Field(1n << 65n)));
154
+ }
155
+ export function unpackPolicy(packed) {
156
+ const bits = packed.toBits(66);
157
+ return {
158
+ gracePeriod: UInt32.Unsafe.fromField(Field.fromBits(bits.slice(0, 32))),
159
+ maxTerm: UInt32.Unsafe.fromField(Field.fromBits(bits.slice(32, 64))),
160
+ singleKeySuspend: bits[64],
161
+ holderSigRequired: bits[65],
162
+ };
163
+ }
164
+ /** processingFee | minProcessingFee << 64 | decisionWindow << 128 */
165
+ export function packApplicationTerms(t) {
166
+ return t.processingFee.value
167
+ .add(t.minProcessingFee.value.mul(Field(TWO_64)))
168
+ .add(t.decisionWindow.value.mul(Field(TWO_64 * TWO_64)));
169
+ }
170
+ export function unpackApplicationTerms(packed) {
171
+ const bits = packed.toBits(160);
172
+ return {
173
+ processingFee: UInt64.Unsafe.fromField(Field.fromBits(bits.slice(0, 64))),
174
+ minProcessingFee: UInt64.Unsafe.fromField(Field.fromBits(bits.slice(64, 128))),
175
+ decisionWindow: UInt32.Unsafe.fromField(Field.fromBits(bits.slice(128, 160))),
176
+ };
177
+ }
178
+ /** Default minimum processing fee: 1 MINA. Configurable per registry at initialize. */
179
+ export const DEFAULT_MIN_PROCESSING_FEE = UInt64.from(1000000000n);
180
+ /** Default decision window: 14 days of 90 s slots (as licensing's refund window). */
181
+ export const DEFAULT_DECISION_WINDOW = UInt32.from(13_440);
182
+ /** Longest decision window an authority may set: one year. */
183
+ export const MAX_DECISION_WINDOW = UInt32.from(350_640);
184
+ /**
185
+ * An application with its fee in escrow. Stored as `applicationHash` in the
186
+ * registry's escrow MerkleMap under `subject`; emitted in full when filed.
187
+ * `baseSeq` is the permit leaf's `seq` it applies to (0 = new permit);
188
+ * `fee` is the whole amount escrowed, `processingFee` the part kept on
189
+ * rejection or withdrawal; both are locked at filing. `filing` is the
190
+ * registry's filing number (its filingCount when filed), so two filings
191
+ * never share a hash and a signature settling one can't settle another.
192
+ */
193
+ export const Application = Struct({
194
+ subject: Field,
195
+ holderKey: PublicKey,
196
+ payer: PublicKey,
197
+ baseSeq: UInt32,
198
+ scope: Field,
199
+ validFrom: UInt32,
200
+ expirySlot: UInt32,
201
+ docHash: Field,
202
+ fee: UInt64,
203
+ processingFee: UInt64,
204
+ deadline: UInt32,
205
+ filing: UInt32,
206
+ });
207
+ export function applicationHash(app) {
208
+ return Poseidon.hash([PERMIT_TAGS.APPLICATION, ...Application.toFields(app)]);
209
+ }
210
+ /**
211
+ * What the holder agrees to when applying: everything in the application
212
+ * except the payer (the transaction sender), the deadline (set by the
213
+ * contract from the filing slot) and the filing number (the registry's next).
214
+ */
215
+ export function applicationTermsHash(app) {
216
+ return Poseidon.hash([
217
+ PERMIT_TAGS.APPLICATION, app.subject, ...app.holderKey.toFields(), app.baseSeq.value, app.scope,
218
+ app.validFrom.value, app.expirySlot.value, app.docHash, app.fee.value, app.processingFee.value,
219
+ ]);
220
+ }
221
+ /** The permit leaf an approved application becomes. */
222
+ export function leafFromApplication(app) {
223
+ return new PermitLeaf({
224
+ subject: app.subject,
225
+ holderKey: app.holderKey,
226
+ scope: app.scope,
227
+ validFrom: app.validFrom,
228
+ expirySlot: app.expirySlot,
229
+ status: PERMIT_STATUS_ACTIVE,
230
+ seq: app.baseSeq.add(1),
231
+ docHash: app.docHash,
232
+ });
233
+ }
234
+ /** Outcome codes in `applicationSettled` events. */
235
+ export const APPLICATION_OUTCOME = { APPROVED: 1, REJECTED: 2, WITHDRAWN: 3, RECLAIMED: 4, CANCELLED: 5 };
236
+ // ------------------------------------------------------------
237
+ // Authority key set
238
+ // ------------------------------------------------------------
239
+ export const MAX_AUTHORITY_KEYS = 3;
240
+ // Fixed-length key set. `count` keys are in use (slots 0..count-1); unused
241
+ // slots hold PublicKey.empty() and never count toward a threshold, whatever
242
+ // signature is supplied for them.
243
+ export const AuthorityKeys = Struct({
244
+ keys: Provable.Array(PublicKey, MAX_AUTHORITY_KEYS),
245
+ count: UInt32,
246
+ threshold: UInt32,
247
+ });
248
+ export function authorityKeys(keys, threshold) {
249
+ if (keys.length < 1 || keys.length > MAX_AUTHORITY_KEYS)
250
+ throw new Error(`1..${MAX_AUTHORITY_KEYS} authority keys`);
251
+ if (!Number.isInteger(threshold) || threshold < 1 || threshold > keys.length)
252
+ throw new Error('threshold must be 1..number of keys');
253
+ const b58 = keys.map(k => k.toBase58());
254
+ if (new Set(b58).size !== b58.length)
255
+ throw new Error('authority keys must be distinct');
256
+ const padded = [...keys];
257
+ while (padded.length < MAX_AUTHORITY_KEYS)
258
+ padded.push(PublicKey.empty());
259
+ return new AuthorityKeys({ keys: padded, count: UInt32.from(keys.length), threshold: UInt32.from(threshold) });
260
+ }
261
+ // One optional signature per key slot. `present[i]` false → slot i ignored.
262
+ export const AuthoritySigs = Struct({
263
+ sigs: Provable.Array(Signature, MAX_AUTHORITY_KEYS),
264
+ present: Provable.Array(Bool, MAX_AUTHORITY_KEYS),
265
+ });
266
+ // Placeholder for absent slots: a well-formed signature over an unrelated
267
+ // one-field message. Absent slots are never counted anyway.
268
+ let placeholder = null;
269
+ function placeholderSignature() {
270
+ placeholder ??= Signature.create(PrivateKey.fromBigInt(1n), [Field(0)]);
271
+ return placeholder;
272
+ }
273
+ /** Builds the signature bundle from `{ slotIndex: signature }` (base58 or Signature). */
274
+ export function authoritySigs(bySlot) {
275
+ const sigs = [];
276
+ const present = [];
277
+ for (let i = 0; i < MAX_AUTHORITY_KEYS; i++) {
278
+ const s = bySlot[i];
279
+ if (s === undefined) {
280
+ sigs.push(placeholderSignature());
281
+ present.push(Bool(false));
282
+ continue;
283
+ }
284
+ sigs.push(typeof s === 'string' ? Signature.fromBase58(s) : s);
285
+ present.push(Bool(true));
286
+ }
287
+ return new AuthoritySigs({ sigs, present });
288
+ }
289
+ /**
290
+ * Number of valid signatures over `message` from distinct, in-use key
291
+ * slots. Works in-circuit. Absent or unused slots count zero; a present
292
+ * signature that doesn't verify also counts zero.
293
+ */
294
+ export function countAuthoritySignatures(keys, sigs, message) {
295
+ let n = UInt32.zero;
296
+ for (let i = 0; i < MAX_AUTHORITY_KEYS; i++) {
297
+ const inUse = UInt32.from(i).lessThan(keys.count);
298
+ // An unused slot's key is PublicKey.empty(); verify against a real key
299
+ // instead so the check stays well-formed. The result is masked by inUse.
300
+ const key = Provable.if(inUse, PublicKey, keys.keys[i], keys.keys[0]);
301
+ const ok = sigs.sigs[i].verify(key, message);
302
+ const counted = inUse.and(sigs.present[i]).and(ok);
303
+ n = n.add(Provable.if(counted, UInt32.from(1), UInt32.zero));
304
+ }
305
+ return n;
306
+ }
307
+ /**
308
+ * In-circuit validity of a key set: 1 ≤ count ≤ MAX, 1 ≤ threshold ≤ count,
309
+ * in-use keys pairwise distinct, unused slots empty.
310
+ */
311
+ export function assertValidAuthorityKeys(keys) {
312
+ keys.count.assertGreaterThanOrEqual(UInt32.from(1));
313
+ keys.count.assertLessThanOrEqual(UInt32.from(MAX_AUTHORITY_KEYS));
314
+ keys.threshold.assertGreaterThanOrEqual(UInt32.from(1));
315
+ keys.threshold.assertLessThanOrEqual(keys.count);
316
+ for (let i = 0; i < MAX_AUTHORITY_KEYS; i++) {
317
+ const inUse = UInt32.from(i).lessThan(keys.count);
318
+ // Unused slots must be empty so the commitment is canonical.
319
+ inUse.or(keys.keys[i].equals(PublicKey.empty())).assertTrue();
320
+ // In-use keys are real keys, and distinct from every other in-use key.
321
+ inUse.not().or(keys.keys[i].equals(PublicKey.empty()).not()).assertTrue();
322
+ for (let j = i + 1; j < MAX_AUTHORITY_KEYS; j++) {
323
+ const bothInUse = UInt32.from(j).lessThan(keys.count);
324
+ bothInUse.not().or(keys.keys[i].equals(keys.keys[j]).not()).assertTrue();
325
+ }
326
+ }
327
+ }
328
+ /** Commitment stored on-chain as `authorityKeysHash`. */
329
+ export function authorityKeysHash(k) {
330
+ return Poseidon.hash([PERMIT_TAGS.KEYS, ...AuthorityKeys.toFields(k)]);
331
+ }
332
+ // ------------------------------------------------------------
333
+ // Messages
334
+ // ------------------------------------------------------------
335
+ /**
336
+ * Message an authority key signs:
337
+ * [tag, network, registry.x, registry.isOdd, epoch, nonce, payloadHash]
338
+ * `nonce` is the leaf's `seq` for per-permit actions and the registry's
339
+ * `actionNonce` for registry-wide ones (setFees, rotate, init = 0).
340
+ */
341
+ export function authorityMessage(tag, network, registry, epoch, nonce, payload) {
342
+ return [tag, network, ...registry.toFields(), epoch.value, nonce.value, Poseidon.hash(payload)];
343
+ }
344
+ export function initMessage(a) {
345
+ // On a redeploy, the registry this one continues and the frozen permits
346
+ // tree it starts with (the chain checks both); PublicKey.empty() and the
347
+ // empty root for a first generation.
348
+ return authorityMessage(PERMIT_TAGS.INIT, a.network, a.registry, UInt32.zero, UInt32.zero, [a.keysHash, a.policyPacked, a.feesPacked, a.appTermsPacked, a.metadataHash, ...a.payout.toFields(), a.forkActivationSlot.value, ...a.predecessor.toFields(), a.initialPermitsRoot]);
349
+ }
350
+ /** Authority approval of a leaf change (issue, renew, scope change). Nonce = oldLeaf.seq. */
351
+ export function grantMessage(a) {
352
+ return authorityMessage(PERMIT_TAGS.GRANT, a.network, a.registry, a.epoch, a.oldLeaf.seq, [permitLeafHash(a.oldLeaf), permitLeafHash(a.newLeaf)]);
353
+ }
354
+ /** The operator's acceptance of a grant, including the fee it pays. */
355
+ export function acceptMessage(a) {
356
+ return [PERMIT_TAGS.ACCEPT, a.network, ...a.registry.toFields(), permitLeafHash(a.newLeaf), a.fee.value];
357
+ }
358
+ const STATUS_TAG = {
359
+ suspend: PERMIT_TAGS.SUSPEND, reinstate: PERMIT_TAGS.REINSTATE, revoke: PERMIT_TAGS.REVOKE,
360
+ };
361
+ /** Authority status change of a permit. Nonce = leaf.seq. */
362
+ export function statusMessage(action, a) {
363
+ return authorityMessage(STATUS_TAG[action], a.network, a.registry, a.epoch, a.leaf.seq, [permitLeafHash(a.leaf), a.reasonCode]);
364
+ }
365
+ /** The holder giving up their permit. */
366
+ export function surrenderMessage(a) {
367
+ return [PERMIT_TAGS.SURRENDER, a.network, ...a.registry.toFields(), permitLeafHash(a.leaf), a.leaf.seq.value];
368
+ }
369
+ /** New fees and application terms (processing fee, decision window). */
370
+ export function setFeesMessage(a) {
371
+ return authorityMessage(PERMIT_TAGS.SET_FEES, a.network, a.registry, a.epoch, a.actionNonce, [a.newFeesPacked, a.newAppTermsPacked]);
372
+ }
373
+ /**
374
+ * The authority retires the registry, freezing its permits at `permitsRoot`
375
+ * (the root the redeployed registry's ancestorsRoot commits to). Bound to the
376
+ * epoch and action nonce like the other registry-wide actions.
377
+ */
378
+ export function retireMessage(a) {
379
+ return authorityMessage(PERMIT_TAGS.RETIRE, a.network, a.registry, a.epoch, a.actionNonce, [a.permitsRoot, ...a.successor.toFields()]);
380
+ }
381
+ /**
382
+ * The platform's retirement of a registry (`retireByPlatform`): what the
383
+ * platform key signs, the fields of retireMessage under its own tag (so
384
+ * neither signature can stand in for the other) plus `force`: retire with
385
+ * application fees still in escrow, which then stay on the retired registry.
386
+ */
387
+ export function platformRetireMessage(a) {
388
+ return authorityMessage(PERMIT_TAGS.PLATFORM_RETIRE, a.network, a.registry, a.epoch, a.actionNonce, [a.permitsRoot, ...a.successor.toFields(), a.force.toField()]);
389
+ }
390
+ /**
391
+ * authorityKeysHash of a retired registry: no key set hashes to it, so no
392
+ * authority action can run again, and filing and surrender check
393
+ * it. (0 means not yet initialized.)
394
+ */
395
+ export const RETIRED_KEYS_HASH = Field(1);
396
+ export function rotateMessage(a) {
397
+ return authorityMessage(PERMIT_TAGS.ROTATE, a.network, a.registry, a.epoch, a.actionNonce, [a.newKeysHash]);
398
+ }
399
+ // ------------------------------------------------------------
400
+ // Application escrow messages
401
+ // ------------------------------------------------------------
402
+ /** The holder's application: the terms and the fee they put in escrow. */
403
+ export function applyMessage(a) {
404
+ return [PERMIT_TAGS.APPLY, a.network, ...a.registry.toFields(), applicationTermsHash(a.application)];
405
+ }
406
+ /** Authority approval of an application exactly as filed. Nonce = baseSeq. */
407
+ export function approveMessage(a) {
408
+ return authorityMessage(PERMIT_TAGS.APPROVE, a.network, a.registry, a.epoch, a.application.baseSeq, [applicationHash(a.application)]);
409
+ }
410
+ /** Authority rejection of an application. Nonce = baseSeq. */
411
+ export function rejectMessage(a) {
412
+ return authorityMessage(PERMIT_TAGS.REJECT, a.network, a.registry, a.epoch, a.application.baseSeq, [applicationHash(a.application), a.reasonCode]);
413
+ }
414
+ /**
415
+ * The platform cancelling the open applications of a registry before it
416
+ * retires it (`cancelApplication`, e.g. ahead of a hard fork): every
417
+ * application filed before filing number `cutoff` (the registry's filing
418
+ * count when signed) may be cancelled, its whole fee back to its payer. One
419
+ * signature covers them all; anyone may send the cancellations. Later
420
+ * filings it never covers.
421
+ */
422
+ export function cancelMessage(a) {
423
+ return [PERMIT_TAGS.PLATFORM_CANCEL, a.network, ...a.registry.toFields(), a.cutoff.value];
424
+ }
425
+ /**
426
+ * A new payout address for the registry (threshold, registry-wide nonce):
427
+ * it takes effect PAYOUT_DELAY_SLOTS_N after it is proposed, unless the keys
428
+ * cancel it (payoutCancelMessage) meanwhile.
429
+ */
430
+ export function payoutMessage(a) {
431
+ return authorityMessage(PERMIT_TAGS.PAYOUT, a.network, a.registry, a.epoch, a.actionNonce, a.payout.toFields());
432
+ }
433
+ export function payoutCancelMessage(a) {
434
+ return authorityMessage(PERMIT_TAGS.PAYOUT_CANCEL, a.network, a.registry, a.epoch, a.actionNonce, []);
435
+ }
436
+ /**
437
+ * A permit moving to a new holder key (rekeyPermit), with the same terms,
438
+ * under the new subject permitSubject(newHolderKey, newSalt): signed by the
439
+ * current holder key and the new one, over the permit as it is now. The old
440
+ * leaf is closed (MOVED), so the signatures can't be used twice.
441
+ */
442
+ export function rekeyMessage(a) {
443
+ return [PERMIT_TAGS.REKEY, a.network, ...a.registry.toFields(), permitLeafHash(a.leaf), a.newSubject, ...a.newHolderKey.toFields()];
444
+ }
445
+ /** The holder withdrawing their application before a decision. */
446
+ export function withdrawMessage(a) {
447
+ return [PERMIT_TAGS.WITHDRAW, a.network, ...a.registry.toFields(), applicationHash(a.application)];
448
+ }
449
+ /** What both wallets sign (signMessage) to move an authority account to a new wallet. */
450
+ export function authorityMoveText(from, to) {
451
+ return [
452
+ 'zkPermits: move my authority account to a new wallet',
453
+ `from: ${from}`,
454
+ `to: ${to}`,
455
+ 'Both wallets sign this. The account and its registries move to the new wallet; registry keys change by a rotation.',
456
+ ].join('\n');
457
+ }
458
+ /** Decimal strings for a wallet's `signFields({ message })`. */
459
+ export function toSignableFields(message) {
460
+ return message.map(f => f.toString());
461
+ }
462
+ //# sourceMappingURL=permitMessages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permitMessages.js","sourceRoot":"","sources":["../src/permitMessages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * permitProof.ts — `zklicensing/permits/proof`
3
+ *
4
+ * Zero-knowledge proof that the prover holds an active permit in a registry
5
+ * (PERMITS_PLAN.md §7.2), without revealing which permit or which key:
6
+ *
7
+ * public: registry, root, slot, requiredScope, context
8
+ * output: nullifier = Poseidon(holder secret, context)
9
+ * private: the permit leaf, its Merkle witness, the holder secret, and the
10
+ * holder's signature over (registry, root, context)
11
+ *
12
+ * The verifier checks the proof, that `root` is a recent root of the
13
+ * registry (from a Mina node, or the keeper's /roots), that `slot` is close
14
+ * to now, and — if it wants one use per holder per context — that the
15
+ * nullifier is new. Proving runs on the holder's device: it needs the
16
+ * holder's signature and secret, which never leave it.
17
+ *
18
+ * The holder secret: permit subjects are public (each permit is published
19
+ * with its subject), so a nullifier computed from the subject could be
20
+ * recomputed by anyone for every permit and matched. The nullifier is
21
+ * computed from a secret only the holder's wallet can produce instead: the
22
+ * hash of its text signature over (registry, network, a counter), which is
23
+ * deterministic, so the same wallet re-derives it anywhere from the chain
24
+ * alone (holderSecret.ts). The permit's
25
+ * salt is the hash of that secret, so the keeper and the authority, who see
26
+ * the salt, still cannot compute nullifiers; and one secret per permit keeps
27
+ * one nullifier per permit and context.
28
+ */
29
+ import { Field, PublicKey } from 'o1js';
30
+ import { PermitLeaf } from './permitMessages.js';
31
+ /** Tag for the holder's proof signature (distinct from every registry message). */
32
+ export declare const PERMIT_PROOF_TAG: Field;
33
+ export declare const PermitProofInput: any;
34
+ export type PermitProofInput = any;
35
+ /** The message the holder signs to prove control of the permit's key. */
36
+ export declare function holderProofMessage(registry: PublicKey, root: Field, context: Field): Field[];
37
+ /** Nullifier: stable per (permit, context), unlinkable across contexts; needs the holder secret. */
38
+ export declare function permitNullifier(holderSecret: Field, context: Field): Field;
39
+ export { HOLDER_SECRET_TAG, HOLDER_SALT_TAG, holderSecretText, holderSecretFromSignature, saltFromHolderSecret, deriveHolderSecret, findHolderSecret, holderSecretMatches, MAX_HOLDER_SECRETS, } from './holderSecret.js';
40
+ /** Tag for verifier-bound contexts (distinct from PERMIT_PROOF_TAG). */
41
+ export declare const VERIFIER_CONTEXT_TAG: Field;
42
+ /**
43
+ * The canonical form of a verifier identity: a URL becomes its origin
44
+ * (scheme, lower-case host, non-default port; path and query dropped), so
45
+ * `https://Shop.Example/verify?x=1` and `https://shop.example` are the same
46
+ * verifier. Anything else is a service name, trimmed and lower-cased with
47
+ * runs of whitespace collapsed.
48
+ */
49
+ export declare function normalizeVerifier(verifier: string): string;
50
+ /** A fresh 128-bit nonce for a verifier to hand to a holder. */
51
+ export declare function randomNonce(): bigint;
52
+ /**
53
+ * The proof context for `verifier` (see normalizeVerifier) and its `nonce`:
54
+ * Poseidon(VERIFIER_CONTEXT_TAG, byteLength, identity in 31-byte chunks, nonce).
55
+ * Holder and verifier compute it the same way.
56
+ */
57
+ export declare function verifierContext(verifier: string, nonce: bigint | string): bigint;
58
+ export declare const PermitProof: any;
59
+ export type HolderProofRequest = {
60
+ registry: string;
61
+ /** Root the witness is for (the keeper's GET …/permits/:subject returns both). */
62
+ root: string;
63
+ witness: {
64
+ isLefts: boolean[];
65
+ siblings: string[];
66
+ };
67
+ leaf: PermitLeaf;
68
+ /** The holder secret (deriveHolderSecret). Never leaves the holder's device. */
69
+ holderSecret: string;
70
+ slot: number;
71
+ requiredScope: bigint;
72
+ context: bigint;
73
+ /** Signature over holderProofMessage(registry, root, context) by the holder key (wallet signFields). */
74
+ holderSignature: string;
75
+ };
76
+ /** Holder side: compiles (once) and proves. Returns the proof as JSON. */
77
+ export declare function proveHolder(r: HolderProofRequest): Promise<{
78
+ proof: unknown;
79
+ nullifier: string;
80
+ }>;
81
+ export type HolderProofCheck = {
82
+ registry: string;
83
+ /** Roots accepted as current (e.g. from a Mina node, or the keeper's recent /roots). */
84
+ acceptedRoots: string[];
85
+ currentSlot: number;
86
+ /** How far the proof's slot may be from `currentSlot`. Default 10 slots. */
87
+ maxSlotSkew?: number;
88
+ requiredScope?: bigint;
89
+ } & (
90
+ /** Your identity as the holder saw it and the nonce you issued: the expected context is verifierContext(verifier, nonce). */
91
+ {
92
+ verifier: string;
93
+ nonce: bigint | string;
94
+ context?: never;
95
+ }
96
+ /** A raw expected context, for schemes that derive it otherwise. */
97
+ | {
98
+ context: bigint;
99
+ verifier?: never;
100
+ nonce?: never;
101
+ });
102
+ /** Verifier side: checks the proof and its public inputs. Returns the nullifier. */
103
+ export declare function verifyHolderProof(proofJson: unknown, check: HolderProofCheck): Promise<{
104
+ valid: boolean;
105
+ nullifier: string | null;
106
+ reason: string | null;
107
+ }>;
108
+ //# sourceMappingURL=permitProof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permitProof.d.ts","sourceRoot":"","sources":["../src/permitProof.ts"],"names":[],"mappings":"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"}