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,324 @@
1
+ // Copyright (c) 2025-2026 zkLicensing project developers
2
+ // SPDX-License-Identifier: BUSL-1.1
3
+ /**
4
+ * permitDescribe.ts — `zklicensing/permits/describe`
5
+ *
6
+ * What a zkPermits field signature means, in words. Wallets show these
7
+ * messages as a list of numbers, and most carry only a hash of the details
8
+ * (the permit, the fees, the keys). So the description is built the other
9
+ * way round: from the request's details, the message is rebuilt and must
10
+ * equal the numbers about to be signed — only then is the summary
11
+ * `verified`. Show it before asking the wallet, with the fingerprint (how
12
+ * many numbers, and how the last one ends) for comparing with the wallet's
13
+ * screen.
14
+ */
15
+ import { Bool, Field, PublicKey, UInt32, UInt64 } from 'o1js';
16
+ import { PERMIT_TAGS, PERMIT_NETWORK, acceptMessage, applyMessage, approveMessage, authorityKeys, authorityKeysHash, grantMessage, DEFAULT_DECISION_WINDOW, DEFAULT_MIN_PROCESSING_FEE, initMessage, networkField, packApplicationTerms, packFees, packPolicy, rejectMessage, retireMessage, rotateMessage, setFeesMessage, statusMessage, surrenderMessage, payoutMessage, payoutCancelMessage, rekeyMessage, unpackApplicationTerms, unpackFees, withdrawMessage, } from './permitMessages.js';
17
+ import { recordToApplication, recordToLeaf } from './permitRegistryRebuild.js';
18
+ import { minaUnit } from './units.js';
19
+ import { EMPTY_ROOT } from './contractInterface.js';
20
+ const TAG_KIND = new Map(Object.entries(PERMIT_TAGS).map(([k, v]) => [v.toString(), k]));
21
+ const NET_NAME = new Map(Object.entries(PERMIT_NETWORK).map(([k, v]) => [v.toString(), k]));
22
+ const NO_EXPIRY = 4294967295;
23
+ export function fingerprint(fields) {
24
+ const last = fields[fields.length - 1] ?? '';
25
+ return `${fields.length} numbers, the last ending …${last.slice(-6)}`;
26
+ }
27
+ // Devnet fees are tMINA (test MINA, no value).
28
+ const mina = (nano, network) => {
29
+ const s = BigInt(nano).toString().padStart(10, '0');
30
+ return `${s.slice(0, -9)}.${s.slice(-9)}`.replace(/\.?0+$/, '') + ' ' + minaUnit(network ?? 'mainnet');
31
+ };
32
+ const short = (s) => (s.length > 14 ? `${s.slice(0, 6)}…${s.slice(-6)}` : s);
33
+ function scopeText(scope, ctx) {
34
+ const v = BigInt(scope);
35
+ const bits = [];
36
+ for (let i = 0; i < 254; i++)
37
+ if ((v >> BigInt(i)) & 1n)
38
+ bits.push(i);
39
+ return bits.length ? bits.map(b => ctx.scopeLabel?.(b) ?? `activity ${b}`).join(', ') : 'none';
40
+ }
41
+ const slotText = (slot, ctx) => (slot >= NO_EXPIRY ? 'no expiry' : ctx.slotLabel?.(slot) ?? `slot ${slot}`);
42
+ const windowText = (slots) => `${Math.round(slots / 960)} days after the application`;
43
+ function applicationFacts(a, ctx, network) {
44
+ return [
45
+ ['Activities', scopeText(a.scope, ctx)],
46
+ ['Valid', `${slotText(a.validFrom, ctx)} – ${slotText(a.expirySlot, ctx)}`],
47
+ ['Document hash', short(a.docHash)],
48
+ ['Kind', a.baseSeq === 0 ? 'new permit' : 'renewal or change'],
49
+ ['Fee in escrow', mina(a.fee, network)],
50
+ ['Decision deadline', slotText(a.deadline, ctx)],
51
+ ];
52
+ }
53
+ function leafFacts(prefix, r, ctx) {
54
+ return [
55
+ [`${prefix}activities`, scopeText(r.scope, ctx)],
56
+ [`${prefix}valid`, `${slotText(r.validFrom, ctx)} – ${slotText(r.expirySlot, ctx)}`],
57
+ [`${prefix}document hash`, short(r.docHash)],
58
+ ];
59
+ }
60
+ /** The message's tag, network and registry (readable from the numbers themselves). */
61
+ function header(fields) {
62
+ const kind = TAG_KIND.get(fields[0] ?? '') ?? null;
63
+ const network = NET_NAME.get(fields[1] ?? '') ?? null;
64
+ let registry = null;
65
+ try {
66
+ registry = PublicKey.fromFields([Field(fields[2]), Field(fields[3])]).toBase58();
67
+ }
68
+ catch { /* not a key */ }
69
+ return { kind, network, registry };
70
+ }
71
+ const same = (a, b) => a.length === b.length && a.every((f, i) => f.toString() === b[i]);
72
+ /**
73
+ * Describes an authority request (the keeper's RequestView: kind, message
74
+ * and its details) and checks that the details give exactly `message`.
75
+ */
76
+ export function describeRequest(q, ctx = {}) {
77
+ const fields = q.message;
78
+ const h = header(fields);
79
+ const base = { kind: q.kind, network: h.network, registry: h.registry, fingerprint: fingerprint(fields) };
80
+ const fail = (title, problem, facts = []) => ({ ...base, title, facts, verified: false, problem });
81
+ if (!h.network)
82
+ return fail('Unknown message', 'The message names no zkPermits network.');
83
+ if (h.registry !== q.registry)
84
+ return fail('Unknown message', 'The message is for another registry than the request says.');
85
+ const net = networkField(h.network);
86
+ const reg = PublicKey.fromBase58(q.registry);
87
+ const epoch = UInt32.from(fields[4] ?? 0);
88
+ const nonce = UInt32.from(fields[5] ?? 0);
89
+ let expected;
90
+ let title;
91
+ let facts = [];
92
+ try {
93
+ switch (q.kind) {
94
+ case 'grant': {
95
+ if (!q.oldLeaf || !q.newLeaf)
96
+ return fail('Grant', 'The request has no permit details.');
97
+ expected = grantMessage({ network: net, registry: reg, epoch, oldLeaf: recordToLeaf(q.oldLeaf), newLeaf: recordToLeaf(q.newLeaf) });
98
+ const isNew = q.oldLeaf.seq === 0 && !q.oldLeaf.holderKey;
99
+ title = isNew ? `Approve a new permit for ${short(q.newLeaf.holderKey)}` : `Approve a change to permit ${short(q.newLeaf.subject)}`;
100
+ facts = [
101
+ ['Permit', short(q.newLeaf.subject)],
102
+ ['Holder key', q.newLeaf.holderKey],
103
+ ...leafFacts('', q.newLeaf, ctx),
104
+ ...(isNew ? [] : leafFacts('Before: ', q.oldLeaf, ctx)),
105
+ ...(q.fee ? [['Fee the holder pays', mina(q.fee, h.network)]] : []),
106
+ ];
107
+ break;
108
+ }
109
+ case 'suspend':
110
+ case 'reinstate':
111
+ case 'revoke': {
112
+ if (!q.oldLeaf)
113
+ return fail(q.kind, 'The request has no permit details.');
114
+ expected = statusMessage(q.kind, { network: net, registry: reg, epoch, leaf: recordToLeaf(q.oldLeaf), reasonCode: Field(q.reasonCode ?? 0) });
115
+ title = `${q.kind === 'suspend' ? 'Suspend' : q.kind === 'reinstate' ? 'Reinstate' : 'Revoke (final)'} permit ${short(q.oldLeaf.subject)}`;
116
+ facts = [['Permit', short(q.oldLeaf.subject)], ['Holder key', q.oldLeaf.holderKey], ['Activities', scopeText(q.oldLeaf.scope, ctx)], ['Reason code', String(q.reasonCode ?? 0)]];
117
+ break;
118
+ }
119
+ case 'setFees': {
120
+ if (!q.newFeesPacked || !q.newAppTermsPacked)
121
+ return fail('Change fees', 'The request has no fees.');
122
+ expected = setFeesMessage({ network: net, registry: reg, epoch, actionNonce: nonce, newFeesPacked: Field(q.newFeesPacked), newAppTermsPacked: Field(q.newAppTermsPacked) });
123
+ const f = unpackFees(Field(q.newFeesPacked));
124
+ const t = unpackApplicationTerms(Field(q.newAppTermsPacked));
125
+ title = 'Change the registry\'s fees';
126
+ facts = [
127
+ ['Permit fee', mina(f.grantFee.toBigInt(), h.network)], ['Renewal fee', mina(f.renewalFee.toBigInt(), h.network)], ['Minimum', mina(f.minFee.toBigInt(), h.network)],
128
+ ['Processing fee (kept on rejection or withdrawal)', mina(t.processingFee.toBigInt(), h.network)],
129
+ ['Decision deadline', windowText(Number(t.decisionWindow.toString()))],
130
+ ];
131
+ break;
132
+ }
133
+ case 'approveApplication':
134
+ case 'rejectApplication': {
135
+ if (!q.application)
136
+ return fail('Application', 'The request has no application.');
137
+ const app = recordToApplication(q.application);
138
+ const reject = q.kind === 'rejectApplication';
139
+ expected = reject
140
+ ? rejectMessage({ network: net, registry: reg, epoch, application: app, reasonCode: Field(q.reasonCode ?? 0) })
141
+ : approveMessage({ network: net, registry: reg, epoch, application: app });
142
+ const kept = BigInt(q.application.processingFee);
143
+ title = reject
144
+ ? `Reject the application of ${short(q.application.holderKey)}`
145
+ : `Approve the application of ${short(q.application.holderKey)} (permit active at once)`;
146
+ facts = [
147
+ ['Applicant key', q.application.holderKey],
148
+ ...applicationFacts(q.application, ctx, h.network),
149
+ ...(reject
150
+ ? [['Kept (processing fee)', mina(kept, h.network)], ['Refunded to the payer', mina(BigInt(q.application.fee) - kept, h.network)], ['Reason code', String(q.reasonCode ?? 0)]]
151
+ : [['Paid out from escrow', mina(q.application.fee, h.network)]]),
152
+ ];
153
+ break;
154
+ }
155
+ case 'rotate': {
156
+ if (!q.newKeys || !q.newThreshold)
157
+ return fail('Rotate keys', 'The request has no new keys.');
158
+ const newKeysHash = authorityKeysHash(authorityKeys(q.newKeys.map(k => PublicKey.fromBase58(k)), q.newThreshold));
159
+ expected = rotateMessage({ network: net, registry: reg, epoch, actionNonce: nonce, newKeysHash });
160
+ title = 'Replace the authority keys';
161
+ facts = [...q.newKeys.map((k, i) => [`New key ${i + 1}`, k]), ['Signatures needed', `${q.newThreshold} of ${q.newKeys.length}`]];
162
+ break;
163
+ }
164
+ case 'payout': {
165
+ if (!q.newPayout)
166
+ return fail('Change the payout address', 'The request has no address.');
167
+ expected = payoutMessage({ network: net, registry: reg, epoch, actionNonce: nonce, payout: PublicKey.fromBase58(q.newPayout) });
168
+ title = 'Change the payout address (after 48 hours)';
169
+ facts = [['New payout address', q.newPayout], ['Takes effect', '48 hours after it lands; until then fees go to the current address, and the keys can cancel it']];
170
+ break;
171
+ }
172
+ case 'payoutCancel': {
173
+ expected = payoutCancelMessage({ network: net, registry: reg, epoch, actionNonce: nonce });
174
+ title = 'Cancel the pending payout address change';
175
+ facts = q.newPayout ? [['Cancelled address', q.newPayout]] : [];
176
+ break;
177
+ }
178
+ case 'retire': {
179
+ const root = fields[6];
180
+ if (root === undefined || fields[7] === undefined || fields[8] === undefined)
181
+ return fail('Retire the registry', 'The message names no permits root or successor.');
182
+ let successor;
183
+ try {
184
+ successor = PublicKey.fromFields([Field(fields[7]), Field(fields[8])]);
185
+ }
186
+ catch {
187
+ return fail('Retire the registry', 'The successor in the message is not a valid address.');
188
+ }
189
+ expected = retireMessage({ network: net, registry: reg, epoch, actionNonce: nonce, permitsRoot: Field(root), successor });
190
+ title = 'Retire the registry for a redeploy (final)';
191
+ facts = [
192
+ ['Effect', 'no more changes here: no grants, renewals, status changes, applications or surrenders'],
193
+ ['Permits', 'carry over, all at once and unchanged, to the new registry below: only it can start from them'],
194
+ ['New registry', successor.toBase58()],
195
+ ['Frozen permits root', root],
196
+ ];
197
+ break;
198
+ }
199
+ case 'init': {
200
+ const r = ctx.registry;
201
+ if (!r)
202
+ return fail('Deploy registry', 'The registry\'s configuration is needed to check this message.');
203
+ const keysHash = authorityKeysHash(authorityKeys(r.keys.map(k => PublicKey.fromBase58(k)), r.threshold));
204
+ const policyPacked = packPolicy({ gracePeriod: UInt32.from(r.policy.gracePeriod), maxTerm: UInt32.from(r.policy.maxTerm), singleKeySuspend: Bool(r.policy.singleKeySuspend), holderSigRequired: Bool(r.policy.holderSigRequired) });
205
+ const feesPacked = packFees({ grantFee: UInt64.from(r.fees.grantFee), renewalFee: UInt64.from(r.fees.renewalFee), minFee: UInt64.from(r.fees.minFee) });
206
+ const processingFee = r.fees.processingFee ?? DEFAULT_MIN_PROCESSING_FEE.toString();
207
+ const decisionWindow = r.decisionWindow ?? Number(DEFAULT_DECISION_WINDOW.toBigint());
208
+ const appTermsPacked = packApplicationTerms({
209
+ processingFee: UInt64.from(processingFee), minProcessingFee: UInt64.from(r.fees.minProcessingFee ?? DEFAULT_MIN_PROCESSING_FEE.toString()), decisionWindow: UInt32.from(decisionWindow),
210
+ });
211
+ expected = initMessage({
212
+ network: net, registry: reg, keysHash, policyPacked, feesPacked, appTermsPacked, metadataHash: Field(r.metadataHash), payout: PublicKey.fromBase58(r.payout),
213
+ forkActivationSlot: UInt32.from(r.forkActivationSlot ?? 0),
214
+ predecessor: r.predecessor ? PublicKey.fromBase58(r.predecessor) : PublicKey.empty(),
215
+ initialPermitsRoot: Field(r.initialPermitsRoot ?? EMPTY_ROOT.toString()),
216
+ });
217
+ title = r.predecessor
218
+ ? `Redeploy the registry (generation ${r.generation ?? 2}, replacing ${short(r.predecessor)})`
219
+ : 'Set up the registry (keys, rules and fees)';
220
+ facts = [
221
+ ...(r.predecessor ? [['Replaces', r.predecessor], ['Permits', `starts with all permits of the replaced registry, as they are when it retires (permits root ${short(r.initialPermitsRoot ?? '')})`]] : []),
222
+ ...r.keys.map((k, i) => [`Key ${i + 1}`, k]),
223
+ ['Signatures needed', `${r.threshold} of ${r.keys.length}`],
224
+ ['Permit fee', mina(r.fees.grantFee, h.network)], ['Renewal fee', mina(r.fees.renewalFee, h.network)],
225
+ ['Processing fee (kept on rejection or withdrawal)', mina(processingFee, h.network)],
226
+ ['Decision deadline', windowText(decisionWindow)],
227
+ ['Fees paid to', r.payout],
228
+ ['Suspension', r.policy.singleKeySuspend ? 'any one key' : 'same as other actions'],
229
+ ];
230
+ break;
231
+ }
232
+ default:
233
+ return fail('Unknown request', `Unknown request kind ${q.kind}.`);
234
+ }
235
+ }
236
+ catch (e) {
237
+ return fail('Unreadable request', e?.message ?? String(e));
238
+ }
239
+ facts.unshift(['Registry', q.registry], ['Network', h.network]);
240
+ if (!same(expected, fields))
241
+ return { ...base, title, facts, verified: false, problem: 'The numbers to sign do not match these details. Do not sign.' };
242
+ return { ...base, title, facts, verified: true };
243
+ }
244
+ /** The holder accepting a permit and its fee (acceptMessage). */
245
+ export function describeAccept(a, ctx = {}) {
246
+ const expected = acceptMessage({ network: networkField(a.network), registry: PublicKey.fromBase58(a.registry), newLeaf: recordToLeaf(a.newLeaf), fee: UInt64.from(a.fee) });
247
+ const ok = same(expected, a.fields);
248
+ return {
249
+ kind: 'accept', title: `Accept permit ${short(a.newLeaf.subject)} and pay ${mina(a.fee, a.network)}`,
250
+ facts: [['Registry', a.registry], ['Network', a.network], ...leafFacts('', a.newLeaf, ctx), ['Fee', mina(a.fee, a.network)]],
251
+ network: a.network, registry: a.registry, verified: ok, ...(ok ? {} : { problem: 'The numbers to sign do not match these details. Do not sign.' }),
252
+ fingerprint: fingerprint(a.fields),
253
+ };
254
+ }
255
+ /**
256
+ * The holder moving a permit to a new key (rekeyMessage): signed by the
257
+ * current key and the new one. Same terms, a new subject; the old one closes.
258
+ */
259
+ export function describeRekey(a, ctx = {}) {
260
+ const expected = rekeyMessage({ network: networkField(a.network), registry: PublicKey.fromBase58(a.registry), leaf: recordToLeaf(a.leaf), newSubject: Field(a.newSubject), newHolderKey: PublicKey.fromBase58(a.newHolderKey) });
261
+ const ok = same(expected, a.fields);
262
+ return {
263
+ kind: 'rekey', title: `Move permit ${short(a.leaf.subject)} to the key ${short(a.newHolderKey)}`,
264
+ facts: [['Registry', a.registry], ['Network', a.network], ['New holder key', a.newHolderKey], ['Activities', scopeText(a.leaf.scope, ctx)], ['Effect', 'the same permit under the new key; this one closes (moved)']],
265
+ network: a.network, registry: a.registry, verified: ok, ...(ok ? {} : { problem: 'The numbers to sign do not match these details. Do not sign.' }),
266
+ fingerprint: fingerprint(a.fields),
267
+ };
268
+ }
269
+ /** The holder giving up a permit (surrenderMessage). */
270
+ export function describeSurrender(a, ctx = {}) {
271
+ const expected = surrenderMessage({ network: networkField(a.network), registry: PublicKey.fromBase58(a.registry), leaf: recordToLeaf(a.leaf) });
272
+ const ok = same(expected, a.fields);
273
+ return {
274
+ kind: 'surrender', title: `Give up permit ${short(a.leaf.subject)} (final)`,
275
+ facts: [['Registry', a.registry], ['Network', a.network], ['Activities', scopeText(a.leaf.scope, ctx)]],
276
+ network: a.network, registry: a.registry, verified: ok, ...(ok ? {} : { problem: 'The numbers to sign do not match these details. Do not sign.' }),
277
+ fingerprint: fingerprint(a.fields),
278
+ };
279
+ }
280
+ /**
281
+ * The holder's application (applyMessage): the terms and the fee put in
282
+ * escrow. `application.payer` and `deadline` aren't part of what the holder
283
+ * signs (the sender pays; the contract sets the deadline).
284
+ */
285
+ export function describeApply(a, ctx = {}) {
286
+ const expected = applyMessage({ network: networkField(a.network), registry: PublicKey.fromBase58(a.registry), application: recordToApplication(a.application) });
287
+ const ok = same(expected, a.fields);
288
+ const kept = BigInt(a.application.processingFee);
289
+ return {
290
+ kind: 'apply', title: `Apply for a permit and put ${mina(a.application.fee, a.network)} in escrow`,
291
+ facts: [
292
+ ['Registry', a.registry], ['Network', a.network],
293
+ ['Activities', scopeText(a.application.scope, ctx)],
294
+ ['Valid', `${slotText(a.application.validFrom, ctx)} – ${slotText(a.application.expirySlot, ctx)}`],
295
+ ['Document hash', short(a.application.docHash)],
296
+ ['Fee in escrow', mina(a.application.fee, a.network)],
297
+ ['If approved', 'the permit is active at once and the fee is paid'],
298
+ ['If rejected or withdrawn', `${mina(kept, a.network)} processing fee kept, ${mina(BigInt(a.application.fee) - kept, a.network)} refunded`],
299
+ ['If no decision by the deadline', 'full refund'],
300
+ ],
301
+ network: a.network, registry: a.registry, verified: ok, ...(ok ? {} : { problem: 'The numbers to sign do not match these details. Do not sign.' }),
302
+ fingerprint: fingerprint(a.fields),
303
+ };
304
+ }
305
+ /** The holder withdrawing an application (withdrawMessage). */
306
+ export function describeWithdraw(a, ctx = {}) {
307
+ const expected = withdrawMessage({ network: networkField(a.network), registry: PublicKey.fromBase58(a.registry), application: recordToApplication(a.application) });
308
+ const ok = same(expected, a.fields);
309
+ const kept = BigInt(a.application.processingFee);
310
+ return {
311
+ kind: 'withdraw', title: 'Withdraw the application',
312
+ facts: [
313
+ ['Registry', a.registry], ['Network', a.network], ['Activities', scopeText(a.application.scope, ctx)],
314
+ ['Kept (processing fee)', mina(kept, a.network)], ['Refunded to the payer', mina(BigInt(a.application.fee) - kept, a.network)],
315
+ ],
316
+ network: a.network, registry: a.registry, verified: ok, ...(ok ? {} : { problem: 'The numbers to sign do not match these details. Do not sign.' }),
317
+ fingerprint: fingerprint(a.fields),
318
+ };
319
+ }
320
+ /** What any zkPermits field message is, from the numbers alone (kind, network, registry); details need describeRequest. */
321
+ export function identifyPermitMessage(fields) {
322
+ return { ...header(fields), fingerprint: fingerprint(fields) };
323
+ }
324
+ //# sourceMappingURL=permitDescribe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permitDescribe.js","sourceRoot":"","sources":["../src/permitDescribe.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oCAAoC;AAEpC;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9D,OAAO,EACL,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EACxH,uBAAuB,EAAE,0BAA0B,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EACvL,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,sBAAsB,EAAE,UAAU,EAAE,eAAe,GACvI,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAA6C,MAAM,4BAA4B,CAAC;AAC1H,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAuCpD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAiB,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACzG,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAwB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAkB,CAAC,CAAC,CAAC,CAAC;AACpI,MAAM,SAAS,GAAG,UAAU,CAAC;AAE7B,MAAM,UAAU,WAAW,CAAC,MAAgB;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,OAAO,GAAG,MAAM,CAAC,MAAM,8BAA8B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,+CAA+C;AAC/C,MAAM,IAAI,GAAG,CAAC,IAAqB,EAAE,OAAuB,EAAE,EAAE;IAC9D,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC;AACzG,CAAC,CAAC;AACF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAErF,SAAS,SAAS,CAAC,KAAa,EAAE,GAAoB;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACjG,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,GAAoB,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAC;AAErI,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,6BAA6B,CAAC;AAE9F,SAAS,gBAAgB,CAAC,CAAoB,EAAE,GAAoB,EAAE,OAAsB;IAC1F,OAAO;QACL,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;QAC3E,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC9D,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,CAAe,EAAE,GAAoB;IACtE,OAAO;QACL,CAAC,GAAG,MAAM,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC,GAAG,MAAM,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;QACpF,CAAC,GAAG,MAAM,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,SAAS,MAAM,CAAC,MAAgB;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;IACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;IACtD,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,CAAC;QAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IACnH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,CAAU,EAAE,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5G;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,CAK/B,EAAE,MAAuB,EAAE;IAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;IACzB,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1G,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,QAAiC,EAAE,EAA4B,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACtK,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC,iBAAiB,EAAE,yCAAyC,CAAC,CAAC;IAC1F,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,iBAAiB,EAAE,4DAA4D,CAAC,CAAC;IAC5H,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,IAAI,QAAiB,CAAC;IACtB,IAAI,KAAa,CAAC;IAClB,IAAI,KAAK,GAA4B,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,OAAO,EAAE,oCAAoC,CAAC,CAAC;gBACzF,QAAQ,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACpI,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;gBAC1D,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,4BAA4B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpI,KAAK,GAAG;oBACN,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACpC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;oBACnC,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;oBAChC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACvD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAqB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxF,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC;YAAC,KAAK,WAAW,CAAC;YAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;gBAChD,IAAI,CAAC,CAAC,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,oCAAoC,CAAC,CAAC;gBAC1E,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9I,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,WAAW,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3I,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjL,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,iBAAiB;oBAAE,OAAO,IAAI,CAAC,aAAa,EAAE,0BAA0B,CAAC,CAAC;gBACrG,QAAQ,GAAG,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;gBAC5K,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC7C,MAAM,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC7D,KAAK,GAAG,6BAA6B,CAAC;gBACtC,KAAK,GAAG;oBACN,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;oBACpK,CAAC,kDAAkD,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;oBACjG,CAAC,mBAAmB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;iBACvE,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,oBAAoB,CAAC;YAAC,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACpD,IAAI,CAAC,CAAC,CAAC,WAAW;oBAAE,OAAO,IAAI,CAAC,aAAa,EAAE,iCAAiC,CAAC,CAAC;gBAClF,MAAM,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC;gBAC9C,QAAQ,GAAG,MAAM;oBACf,CAAC,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC;oBAC/G,CAAC,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBACjD,KAAK,GAAG,MAAM;oBACZ,CAAC,CAAC,6BAA6B,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;oBAC/D,CAAC,CAAC,8BAA8B,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,0BAA0B,CAAC;gBAC3F,KAAK,GAAG;oBACN,CAAC,eAAe,EAAE,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;oBAC1C,GAAG,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC;oBAClD,GAAG,CAAC,MAAM;wBACR,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,uBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAA4B;wBACzM,CAAC,CAAC,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAA4B,CAAC;iBAC/F,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,YAAY;oBAAE,OAAO,IAAI,CAAC,aAAa,EAAE,8BAA8B,CAAC,CAAC;gBAC9F,MAAM,WAAW,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;gBAClH,QAAQ,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;gBAClG,KAAK,GAAG,4BAA4B,CAAC;gBACrC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAqB,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACrJ,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,CAAC,SAAS;oBAAE,OAAO,IAAI,CAAC,2BAA2B,EAAE,6BAA6B,CAAC,CAAC;gBAC1F,QAAQ,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAChI,KAAK,GAAG,4CAA4C,CAAC;gBACrD,KAAK,GAAG,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,gGAAgG,CAAC,CAAC,CAAC;gBAClK,MAAM;YACR,CAAC;YACD,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,QAAQ,GAAG,mBAAmB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC3F,KAAK,GAAG,0CAA0C,CAAC;gBACnD,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS;oBAAE,OAAO,IAAI,CAAC,qBAAqB,EAAE,iDAAiD,CAAC,CAAC;gBACpK,IAAI,SAAoB,CAAC;gBACzB,IAAI,CAAC;oBAAC,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC;oBAAC,OAAO,IAAI,CAAC,qBAAqB,EAAE,sDAAsD,CAAC,CAAC;gBAAC,CAAC;gBACrL,QAAQ,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC1H,KAAK,GAAG,4CAA4C,CAAC;gBACrD,KAAK,GAAG;oBACN,CAAC,QAAQ,EAAE,uFAAuF,CAAC;oBACnG,CAAC,SAAS,EAAE,+FAA+F,CAAC;oBAC5G,CAAC,cAAc,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;oBACtC,CAAC,qBAAqB,EAAE,IAAI,CAAC;iBAC9B,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;gBACvB,IAAI,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,iBAAiB,EAAE,gEAAgE,CAAC,CAAC;gBACzG,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzG,MAAM,YAAY,GAAG,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;gBACpO,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxJ,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,0BAA0B,CAAC,QAAQ,EAAE,CAAC;gBACpF,MAAM,cAAc,GAAG,CAAC,CAAC,cAAc,IAAI,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtF,MAAM,cAAc,GAAG,oBAAoB,CAAC;oBAC1C,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,0BAA0B,CAAC,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;iBACxL,CAAC,CAAC;gBACH,QAAQ,GAAG,WAAW,CAAC;oBACrB,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC5J,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC;oBAC1D,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE;oBACpF,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC,kBAAkB,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;iBACzE,CAAC,CAAC;gBACH,KAAK,GAAG,CAAC,CAAC,WAAW;oBACnB,CAAC,CAAC,qCAAqC,CAAC,CAAC,UAAU,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG;oBAC9F,CAAC,CAAC,4CAA4C,CAAC;gBACjD,KAAK,GAAG;oBACN,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,+FAA+F,KAAK,CAAC,CAAC,CAAC,kBAAkB,IAAI,EAAE,CAAC,GAAG,CAAC,CAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAqB,CAAC;oBAChE,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC3D,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;oBACrG,CAAC,kDAAkD,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;oBACpF,CAAC,mBAAmB,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;oBACjD,CAAC,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC;oBAC1B,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC;iBACpF,CAAC;gBACF,MAAM;YACR,CAAC;YACD;gBACE,OAAO,IAAI,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,8DAA8D,EAAE,CAAC;IACxJ,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACnD,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,CAAqG,EAAE,MAAuB,EAAE;IAC7J,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5K,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO;QACL,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;QACpG,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5H,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,8DAA8D,EAAE,CAAC;QAClJ,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,CAA+H,EAAE,MAAuB,EAAE;IACtL,MAAM,QAAQ,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjO,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO;QACL,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE;QAChG,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,4DAA4D,CAAC,CAAC;QACrN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,8DAA8D,EAAE,CAAC;QAClJ,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,iBAAiB,CAAC,CAAqF,EAAE,MAAuB,EAAE;IAChJ,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChJ,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO;QACL,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU;QAC3E,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACvG,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,8DAA8D,EAAE,CAAC;QAClJ,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,CAAiG,EAAE,MAAuB,EAAE;IACxJ,MAAM,QAAQ,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACjK,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACjD,OAAO;QACL,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,8BAA8B,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY;QAClG,KAAK,EAAE;YACL,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC;YAChD,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACnD,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;YACnG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YACrD,CAAC,aAAa,EAAE,kDAAkD,CAAC;YACnE,CAAC,0BAA0B,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,yBAAyB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3I,CAAC,gCAAgC,EAAE,aAAa,CAAC;SAClD;QACD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,8DAA8D,EAAE,CAAC;QAClJ,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,gBAAgB,CAAC,CAAiG,EAAE,MAAuB,EAAE;IAC3J,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACpK,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACjD,OAAO;QACL,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,0BAA0B;QACnD,KAAK,EAAE;YACL,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACrG,CAAC,uBAAuB,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,uBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;SAC/H;QACD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,8DAA8D,EAAE,CAAC;QAClJ,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,2HAA2H;AAC3H,MAAM,UAAU,qBAAqB,CAAC,MAAgB;IACpD,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AACjE,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { PayoutChangedEvent, PayoutProposedEvent, PlatformChangedEvent } from './contractInterface.js';
2
+ export { PayoutChangedEvent, PayoutProposedEvent, PlatformChangedEvent };
3
+ export declare const PermitGrantedEvent: any;
4
+ export type PermitGrantedEvent = any;
5
+ export declare const PermitStatusEvent: any;
6
+ export type PermitStatusEvent = any;
7
+ export declare const FeesUpdatedEvent: any;
8
+ export type FeesUpdatedEvent = any;
9
+ export declare const AuthorityRotatedEvent: any;
10
+ export type AuthorityRotatedEvent = any;
11
+ /**
12
+ * The registry was initialized; `permitsRoot` is the tree it starts with (its
13
+ * predecessor's frozen permits on a redeploy) and `predecessor` the retired
14
+ * registry it continues (PublicKey.empty() for a first generation), so a
15
+ * registry's lineage can be rebuilt from chain events alone.
16
+ */
17
+ export declare const RegistryCreatedEvent: any;
18
+ /** The registry was retired for a redeploy: its permits are frozen at `permitsRoot`, and only `successor` can start from them. */
19
+ /**
20
+ * `byPlatform`: retired by the platform key (retireByPlatform), not the
21
+ * authority's keys; `forced`: with application fees still in escrow, which
22
+ * stay on the retired registry.
23
+ */
24
+ export declare const RegistryRetiredEvent: any;
25
+ export type RegistryCreatedEvent = any;
26
+ export declare const ApplicationFiledEvent: any;
27
+ export type ApplicationFiledEvent = any;
28
+ /** A permit moved to a new holder key: `leaf` is the new one (its old leaf is closed as MOVED, in a permitStatusChanged event). */
29
+ export declare const PermitMovedEvent: any;
30
+ export type PermitMovedEvent = any;
31
+ export declare const ApplicationSettledEvent: any;
32
+ export type ApplicationSettledEvent = any;
33
+ /** On-chain state layout (appState index → field), for direct account reads. */
34
+ export declare const PERMIT_REGISTRY_STATE: {
35
+ readonly permitsRoot: 0;
36
+ readonly authorityKeysHash: 1;
37
+ readonly authorityEpoch: 2;
38
+ readonly actionNonce: 3;
39
+ readonly policyPacked: 4;
40
+ readonly feesPacked: 5;
41
+ readonly payoutX: 6;
42
+ readonly payoutIsOdd: 7;
43
+ readonly version: 8;
44
+ readonly ancestorsRoot: 9;
45
+ readonly forkActivationSlot: 10;
46
+ readonly metadataHash: 11;
47
+ readonly networkId: 12;
48
+ readonly escrowRoot: 13;
49
+ readonly appTermsPacked: 14;
50
+ readonly filingCount: 15;
51
+ readonly successorX: 16;
52
+ readonly successorIsOdd: 17;
53
+ readonly pendingPayoutX: 18;
54
+ readonly pendingPayoutIsOdd: 19;
55
+ readonly pendingPayoutSlot: 20;
56
+ readonly platformX: 21;
57
+ readonly platformIsOdd: 22;
58
+ readonly treasuryX: 23;
59
+ readonly treasuryIsOdd: 24;
60
+ readonly platformEpoch: 25;
61
+ /** Set by a platform retire: the key set the successor must keep (0 after the authority's own retire). */
62
+ readonly frozenKeysHash: 26;
63
+ };
64
+ /** Source version of the PermitRegistry circuit, set at initialize. */
65
+ export declare const PERMIT_REGISTRY_VERSION = 1;
66
+ /**
67
+ * Canonical PermitRegistry verification-key hashes by generation (the
68
+ * platform address is compiled in). Append-only, like CANONICAL_VK_HASHES:
69
+ * add a row for a new circuit release, never delete one. The keeper refuses
70
+ * to prove with a circuit whose hash isn't the current row, and the
71
+ * vkDrift test catches an unintended change.
72
+ */
73
+ export declare const CANONICAL_PERMIT_VK_HASHES: Readonly<Record<number, string>>;
74
+ export declare const CURRENT_PERMIT_GENERATION: number;
75
+ export declare const CANONICAL_PERMIT_VK_HASH: string;
76
+ /** Verification-key hash of the PermitProof holder-proof ZkProgram. */
77
+ export declare const CANONICAL_PERMIT_PROOF_VK_HASH: string;
78
+ /**
79
+ * Events-only view of a PermitRegistry: `new PermitRegistryEvents(address)
80
+ * .fetchEvents(from?)` decodes a registry's events (archive node or local
81
+ * chain) without the private circuit source. Event names and shapes match
82
+ * PermitRegistry exactly, so the type indices agree.
83
+ */
84
+ export declare const PermitRegistryEvents: any;
85
+ //# sourceMappingURL=permitInterface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permitInterface.d.ts","sourceRoot":"","sources":["../src/permitInterface.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,CAAC;AAEzE,eAAO,MAAM,kBAAkB,EAAE,GAK/B,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAErC,eAAO,MAAM,iBAAiB,EAAE,GAG9B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAEpC,eAAO,MAAM,gBAAgB,EAAE,GAA+E,CAAC;AAC/G,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEnC,eAAO,MAAM,qBAAqB,EAAE,GAAgD,CAAC;AACrF,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAExC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,GAAgH,CAAC;AACpJ,kIAAkI;AAClI;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,GAA+G,CAAC;AACnJ,MAAM,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAGvC,eAAO,MAAM,qBAAqB,EAAE,GAA0C,CAAC;AAC/E,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAExC,mIAAmI;AACnI,eAAO,MAAM,gBAAgB,EAAE,GAAqD,CAAC;AACrF,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEnC,eAAO,MAAM,uBAAuB,EAAE,GAMpC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAG1C,gFAAgF;AAChF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BhC,0GAA0G;;CAElG,CAAC;AAEX,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEvE,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,MAAU,CAAC;AAEnD,eAAO,MAAM,wBAAwB,EAAE,MAA8D,CAAC;AAEtG,uEAAuE;AACvE,eAAO,MAAM,8BAA8B,EAAE,MAAwF,CAAC;AAEtI;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,GAelC,CAAC"}
@@ -0,0 +1,121 @@
1
+ // Copyright (c) 2025-2026 zkLicensing project developers
2
+ // SPDX-License-Identifier: BUSL-1.1
3
+ /**
4
+ * permitInterface.ts — `zklicensing/permits/interface`
5
+ *
6
+ * Public interface of the PermitRegistry contract: event shapes, state
7
+ * layout indices and the canonical verification-key hashes. Enough to
8
+ * decode events and rebuild a registry's tree without the private circuit
9
+ * source (same split as contractInterface.ts for licensing).
10
+ */
11
+ import { Bool, Field, PublicKey, SmartContract, Struct, UInt32, UInt64 } from 'o1js';
12
+ import { Application, PermitLeaf } from './permitMessages.js';
13
+ import { PayoutChangedEvent, PayoutProposedEvent, PlatformChangedEvent } from './contractInterface.js';
14
+ export { PayoutChangedEvent, PayoutProposedEvent, PlatformChangedEvent };
15
+ export const PermitGrantedEvent = Struct({
16
+ leaf: PermitLeaf,
17
+ fee: UInt64,
18
+ payer: PublicKey,
19
+ isNew: Field, // 1 = first grant for this subject, 0 = renewal / change
20
+ });
21
+ export const PermitStatusEvent = Struct({
22
+ leaf: PermitLeaf, // the leaf after the change
23
+ reasonCode: Field, // authority's reason code; 0 for surrender
24
+ });
25
+ export const FeesUpdatedEvent = Struct({ feesPacked: Field, appTermsPacked: Field, actionNonce: UInt32 });
26
+ export const AuthorityRotatedEvent = Struct({ keysHash: Field, epoch: UInt32 });
27
+ /**
28
+ * The registry was initialized; `permitsRoot` is the tree it starts with (its
29
+ * predecessor's frozen permits on a redeploy) and `predecessor` the retired
30
+ * registry it continues (PublicKey.empty() for a first generation), so a
31
+ * registry's lineage can be rebuilt from chain events alone.
32
+ */
33
+ export const RegistryCreatedEvent = Struct({ keysHash: Field, network: Field, payout: PublicKey, permitsRoot: Field, predecessor: PublicKey });
34
+ /** The registry was retired for a redeploy: its permits are frozen at `permitsRoot`, and only `successor` can start from them. */
35
+ /**
36
+ * `byPlatform`: retired by the platform key (retireByPlatform), not the
37
+ * authority's keys; `forced`: with application fees still in escrow, which
38
+ * stay on the retired registry.
39
+ */
40
+ export const RegistryRetiredEvent = Struct({ permitsRoot: Field, actionNonce: UInt32, successor: PublicKey, byPlatform: Bool, forced: Bool });
41
+ // Application escrow.
42
+ export const ApplicationFiledEvent = Struct({ application: Application });
43
+ /** A permit moved to a new holder key: `leaf` is the new one (its old leaf is closed as MOVED, in a permitStatusChanged event). */
44
+ export const PermitMovedEvent = Struct({ oldSubject: Field, leaf: PermitLeaf });
45
+ export const ApplicationSettledEvent = Struct({
46
+ subject: Field,
47
+ applicationHash: Field,
48
+ outcome: Field, // APPLICATION_OUTCOME: 1 approved, 2 rejected, 3 withdrawn, 4 reclaimed, 5 cancelled by the platform
49
+ kept: UInt64, // paid out to the authority and the platform (98/2)
50
+ refunded: UInt64, // returned to the payer
51
+ });
52
+ /** On-chain state layout (appState index → field), for direct account reads. */
53
+ export const PERMIT_REGISTRY_STATE = {
54
+ permitsRoot: 0,
55
+ authorityKeysHash: 1,
56
+ authorityEpoch: 2,
57
+ actionNonce: 3,
58
+ policyPacked: 4,
59
+ feesPacked: 5,
60
+ payoutX: 6,
61
+ payoutIsOdd: 7,
62
+ version: 8,
63
+ ancestorsRoot: 9,
64
+ forkActivationSlot: 10,
65
+ metadataHash: 11,
66
+ networkId: 12,
67
+ escrowRoot: 13,
68
+ appTermsPacked: 14,
69
+ filingCount: 15,
70
+ successorX: 16,
71
+ successorIsOdd: 17,
72
+ pendingPayoutX: 18,
73
+ pendingPayoutIsOdd: 19,
74
+ pendingPayoutSlot: 20,
75
+ platformX: 21,
76
+ platformIsOdd: 22,
77
+ treasuryX: 23,
78
+ treasuryIsOdd: 24,
79
+ platformEpoch: 25,
80
+ /** Set by a platform retire: the key set the successor must keep (0 after the authority's own retire). */
81
+ frozenKeysHash: 26,
82
+ };
83
+ /** Source version of the PermitRegistry circuit, set at initialize. */
84
+ export const PERMIT_REGISTRY_VERSION = 1;
85
+ /**
86
+ * Canonical PermitRegistry verification-key hashes by generation (the
87
+ * platform address is compiled in). Append-only, like CANONICAL_VK_HASHES:
88
+ * add a row for a new circuit release, never delete one. The keeper refuses
89
+ * to prove with a circuit whose hash isn't the current row, and the
90
+ * vkDrift test catches an unintended change.
91
+ */
92
+ export const CANONICAL_PERMIT_VK_HASHES = {
93
+ 1: '27337945734556665205684717094424577317630618958452630976255659397562153215921',
94
+ };
95
+ export const CURRENT_PERMIT_GENERATION = 1;
96
+ export const CANONICAL_PERMIT_VK_HASH = CANONICAL_PERMIT_VK_HASHES[CURRENT_PERMIT_GENERATION];
97
+ /** Verification-key hash of the PermitProof holder-proof ZkProgram. */
98
+ export const CANONICAL_PERMIT_PROOF_VK_HASH = '17966873603167039790277974846902264570097359740655050143055465189220786366055';
99
+ /**
100
+ * Events-only view of a PermitRegistry: `new PermitRegistryEvents(address)
101
+ * .fetchEvents(from?)` decodes a registry's events (archive node or local
102
+ * chain) without the private circuit source. Event names and shapes match
103
+ * PermitRegistry exactly, so the type indices agree.
104
+ */
105
+ export const PermitRegistryEvents = class PermitRegistryEvents extends SmartContract {
106
+ events = {
107
+ registryCreated: RegistryCreatedEvent,
108
+ permitGranted: PermitGrantedEvent,
109
+ permitStatusChanged: PermitStatusEvent,
110
+ feesUpdated: FeesUpdatedEvent,
111
+ authorityRotated: AuthorityRotatedEvent,
112
+ applicationFiled: ApplicationFiledEvent,
113
+ applicationSettled: ApplicationSettledEvent,
114
+ registryRetired: RegistryRetiredEvent,
115
+ permitMoved: PermitMovedEvent,
116
+ payoutProposed: PayoutProposedEvent,
117
+ payoutChanged: PayoutChangedEvent,
118
+ platformChanged: PlatformChangedEvent,
119
+ };
120
+ };
121
+ //# sourceMappingURL=permitInterface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permitInterface.js","sourceRoot":"","sources":["../src/permitInterface.ts"],"names":[],"mappings":"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"}