@sip-protocol/sdk 0.7.3 → 0.7.4

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 (264) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +267 -0
  3. package/dist/{TransportWebUSB-TQ7WZ4LE.mjs → TransportWebUSB-YQMAGJAJ.mjs} +12 -9
  4. package/dist/browser.d.mts +10 -4
  5. package/dist/browser.d.ts +10 -4
  6. package/dist/browser.js +47556 -19603
  7. package/dist/browser.mjs +628 -48
  8. package/dist/chunk-4GRJ5MAW.mjs +152 -0
  9. package/dist/chunk-5D7A3L3W.mjs +717 -0
  10. package/dist/chunk-64AYA5F5.mjs +7834 -0
  11. package/dist/chunk-GMDGB22A.mjs +379 -0
  12. package/dist/chunk-I534WKN7.mjs +328 -0
  13. package/dist/chunk-IBZVA5Y7.mjs +1003 -0
  14. package/dist/chunk-PRRZAWJE.mjs +223 -0
  15. package/dist/{chunk-UJCSKKID.mjs → chunk-XGB3TDIC.mjs} +13 -1
  16. package/dist/{chunk-3M3HNQCW.mjs → chunk-YWGJ77A2.mjs} +28656 -13103
  17. package/dist/{chunk-6WGN57S2.mjs → chunk-Z3K7W5S3.mjs} +48 -0
  18. package/dist/constants-LHAAUC2T.mjs +51 -0
  19. package/dist/dist-2OGQ7FED.mjs +3957 -0
  20. package/dist/dist-IFHPYLDX.mjs +254 -0
  21. package/dist/fulfillment_proof-ANHVPKTB.mjs +21 -0
  22. package/dist/funding_proof-ICFZ5LHY.mjs +21 -0
  23. package/dist/{index-DIBZHOOQ.d.ts → index-DXh2IGkz.d.ts} +21239 -10304
  24. package/dist/{index-8MQz13eJ.d.mts → index-DeE1ZzA4.d.mts} +21239 -10304
  25. package/dist/index.d.mts +9 -3
  26. package/dist/index.d.ts +9 -3
  27. package/dist/index.js +48396 -19623
  28. package/dist/index.mjs +537 -19
  29. package/dist/interface-Bf7w1PLW.d.mts +679 -0
  30. package/dist/interface-Bf7w1PLW.d.ts +679 -0
  31. package/dist/{noir-DKfEzWy9.d.mts → noir-kzbLVTei.d.mts} +31 -21
  32. package/dist/{noir-DKfEzWy9.d.ts → noir-kzbLVTei.d.ts} +31 -21
  33. package/dist/proofs/halo2.d.mts +151 -0
  34. package/dist/proofs/halo2.d.ts +151 -0
  35. package/dist/proofs/halo2.js +350 -0
  36. package/dist/proofs/halo2.mjs +11 -0
  37. package/dist/proofs/kimchi.d.mts +160 -0
  38. package/dist/proofs/kimchi.d.ts +160 -0
  39. package/dist/proofs/kimchi.js +431 -0
  40. package/dist/proofs/kimchi.mjs +13 -0
  41. package/dist/proofs/noir.d.mts +1 -1
  42. package/dist/proofs/noir.d.ts +1 -1
  43. package/dist/proofs/noir.js +74 -18
  44. package/dist/proofs/noir.mjs +84 -24
  45. package/dist/solana-U3MEGU7W.mjs +280 -0
  46. package/dist/validity_proof-3POXLPNY.mjs +21 -0
  47. package/package.json +54 -21
  48. package/src/adapters/index.ts +41 -0
  49. package/src/adapters/jupiter.ts +571 -0
  50. package/src/adapters/near-intents.ts +135 -0
  51. package/src/advisor/advisor.ts +653 -0
  52. package/src/advisor/index.ts +54 -0
  53. package/src/advisor/tools.ts +303 -0
  54. package/src/advisor/types.ts +164 -0
  55. package/src/chains/ethereum/announcement.ts +536 -0
  56. package/src/chains/ethereum/bnb-optimizations.ts +474 -0
  57. package/src/chains/ethereum/commitment.ts +522 -0
  58. package/src/chains/ethereum/constants.ts +462 -0
  59. package/src/chains/ethereum/deployment.ts +596 -0
  60. package/src/chains/ethereum/gas-estimation.ts +538 -0
  61. package/src/chains/ethereum/index.ts +268 -0
  62. package/src/chains/ethereum/optimizations.ts +614 -0
  63. package/src/chains/ethereum/privacy-adapter.ts +855 -0
  64. package/src/chains/ethereum/registry.ts +584 -0
  65. package/src/chains/ethereum/rpc.ts +905 -0
  66. package/src/chains/ethereum/stealth.ts +491 -0
  67. package/src/chains/ethereum/token.ts +790 -0
  68. package/src/chains/ethereum/transfer.ts +637 -0
  69. package/src/chains/ethereum/types.ts +456 -0
  70. package/src/chains/ethereum/viewing-key.ts +455 -0
  71. package/src/chains/near/commitment.ts +608 -0
  72. package/src/chains/near/constants.ts +284 -0
  73. package/src/chains/near/function-call.ts +871 -0
  74. package/src/chains/near/history.ts +654 -0
  75. package/src/chains/near/implicit-account.ts +840 -0
  76. package/src/chains/near/index.ts +393 -0
  77. package/src/chains/near/native-transfer.ts +658 -0
  78. package/src/chains/near/nep141.ts +775 -0
  79. package/src/chains/near/privacy-adapter.ts +889 -0
  80. package/src/chains/near/resolver.ts +971 -0
  81. package/src/chains/near/rpc.ts +1016 -0
  82. package/src/chains/near/stealth.ts +419 -0
  83. package/src/chains/near/types.ts +317 -0
  84. package/src/chains/near/viewing-key.ts +876 -0
  85. package/src/chains/solana/anchor-transfer.ts +386 -0
  86. package/src/chains/solana/commitment.ts +577 -0
  87. package/src/chains/solana/constants.ts +126 -12
  88. package/src/chains/solana/ephemeral-keys.ts +543 -0
  89. package/src/chains/solana/index.ts +252 -1
  90. package/src/chains/solana/key-derivation.ts +418 -0
  91. package/src/chains/solana/kit-compat.ts +334 -0
  92. package/src/chains/solana/optimizations.ts +560 -0
  93. package/src/chains/solana/privacy-adapter.ts +605 -0
  94. package/src/chains/solana/providers/generic.ts +47 -6
  95. package/src/chains/solana/providers/helius-enhanced-types.ts +336 -0
  96. package/src/chains/solana/providers/helius-enhanced.ts +623 -0
  97. package/src/chains/solana/providers/helius.ts +186 -33
  98. package/src/chains/solana/providers/index.ts +31 -0
  99. package/src/chains/solana/providers/interface.ts +61 -18
  100. package/src/chains/solana/providers/quicknode.ts +409 -0
  101. package/src/chains/solana/providers/triton.ts +426 -0
  102. package/src/chains/solana/providers/webhook.ts +338 -67
  103. package/src/chains/solana/rpc-client.ts +1150 -0
  104. package/src/chains/solana/scan.ts +83 -66
  105. package/src/chains/solana/sol-transfer.ts +732 -0
  106. package/src/chains/solana/spl-transfer.ts +886 -0
  107. package/src/chains/solana/stealth-scanner.ts +703 -0
  108. package/src/chains/solana/sunspot-verifier.ts +453 -0
  109. package/src/chains/solana/transaction-builder.ts +755 -0
  110. package/src/chains/solana/transfer.ts +74 -5
  111. package/src/chains/solana/types.ts +57 -6
  112. package/src/chains/solana/utils.ts +110 -0
  113. package/src/chains/solana/viewing-key.ts +807 -0
  114. package/src/compliance/fireblocks.ts +921 -0
  115. package/src/compliance/index.ts +23 -0
  116. package/src/compliance/range-sas.ts +398 -33
  117. package/src/config/endpoints.ts +100 -0
  118. package/src/crypto.ts +11 -8
  119. package/src/errors.ts +82 -0
  120. package/src/evm/erc4337-relayer.ts +830 -0
  121. package/src/evm/index.ts +47 -0
  122. package/src/fees/calculator.ts +396 -0
  123. package/src/fees/index.ts +87 -0
  124. package/src/fees/near-contract.ts +429 -0
  125. package/src/fees/types.ts +268 -0
  126. package/src/index.ts +686 -1
  127. package/src/intent.ts +6 -3
  128. package/src/logger.ts +324 -0
  129. package/src/network/index.ts +80 -0
  130. package/src/network/proxy.ts +691 -0
  131. package/src/optimizations/index.ts +541 -0
  132. package/src/oracle/types.ts +1 -0
  133. package/src/privacy-backends/arcium-types.ts +727 -0
  134. package/src/privacy-backends/arcium.ts +719 -0
  135. package/src/privacy-backends/combined-privacy.ts +866 -0
  136. package/src/privacy-backends/cspl-token.ts +595 -0
  137. package/src/privacy-backends/cspl-types.ts +512 -0
  138. package/src/privacy-backends/cspl.ts +907 -0
  139. package/src/privacy-backends/health.ts +488 -0
  140. package/src/privacy-backends/inco-types.ts +323 -0
  141. package/src/privacy-backends/inco.ts +616 -0
  142. package/src/privacy-backends/index.ts +254 -4
  143. package/src/privacy-backends/interface.ts +649 -6
  144. package/src/privacy-backends/lru-cache.ts +343 -0
  145. package/src/privacy-backends/magicblock.ts +458 -0
  146. package/src/privacy-backends/mock.ts +258 -0
  147. package/src/privacy-backends/privacycash.ts +13 -17
  148. package/src/privacy-backends/private-swap.ts +570 -0
  149. package/src/privacy-backends/rate-limiter.ts +683 -0
  150. package/src/privacy-backends/registry.ts +414 -2
  151. package/src/privacy-backends/router.ts +283 -3
  152. package/src/privacy-backends/shadowwire.ts +449 -0
  153. package/src/privacy-backends/sip-native.ts +3 -0
  154. package/src/privacy-logger.ts +191 -0
  155. package/src/production-safety.ts +373 -0
  156. package/src/proofs/aggregator.ts +1029 -0
  157. package/src/proofs/browser-composer.ts +1150 -0
  158. package/src/proofs/browser.ts +113 -25
  159. package/src/proofs/cache/index.ts +127 -0
  160. package/src/proofs/cache/interface.ts +545 -0
  161. package/src/proofs/cache/key-generator.ts +188 -0
  162. package/src/proofs/cache/lru-cache.ts +481 -0
  163. package/src/proofs/cache/multi-tier-cache.ts +575 -0
  164. package/src/proofs/cache/persistent-cache.ts +788 -0
  165. package/src/proofs/compliance-proof.ts +872 -0
  166. package/src/proofs/composer/base.ts +923 -0
  167. package/src/proofs/composer/index.ts +25 -0
  168. package/src/proofs/composer/interface.ts +518 -0
  169. package/src/proofs/composer/types.ts +383 -0
  170. package/src/proofs/converters/halo2.ts +452 -0
  171. package/src/proofs/converters/index.ts +208 -0
  172. package/src/proofs/converters/interface.ts +363 -0
  173. package/src/proofs/converters/kimchi.ts +462 -0
  174. package/src/proofs/converters/noir.ts +451 -0
  175. package/src/proofs/fallback.ts +888 -0
  176. package/src/proofs/halo2.ts +42 -0
  177. package/src/proofs/index.ts +471 -0
  178. package/src/proofs/interface.ts +13 -0
  179. package/src/proofs/kimchi.ts +42 -0
  180. package/src/proofs/lazy.ts +1004 -0
  181. package/src/proofs/mock.ts +25 -1
  182. package/src/proofs/noir.ts +110 -29
  183. package/src/proofs/orchestrator.ts +960 -0
  184. package/src/proofs/parallel/concurrency.ts +297 -0
  185. package/src/proofs/parallel/dependency-graph.ts +602 -0
  186. package/src/proofs/parallel/executor.ts +420 -0
  187. package/src/proofs/parallel/index.ts +131 -0
  188. package/src/proofs/parallel/interface.ts +685 -0
  189. package/src/proofs/parallel/worker-pool.ts +644 -0
  190. package/src/proofs/providers/halo2.ts +560 -0
  191. package/src/proofs/providers/index.ts +34 -0
  192. package/src/proofs/providers/kimchi.ts +641 -0
  193. package/src/proofs/validator.ts +881 -0
  194. package/src/proofs/verifier.ts +867 -0
  195. package/src/quantum/index.ts +112 -0
  196. package/src/quantum/winternitz-vault.ts +639 -0
  197. package/src/quantum/wots.ts +611 -0
  198. package/src/settlement/backends/direct-chain.ts +1 -0
  199. package/src/settlement/index.ts +9 -0
  200. package/src/settlement/router.ts +732 -46
  201. package/src/solana/index.ts +72 -0
  202. package/src/solana/jito-relayer.ts +687 -0
  203. package/src/solana/noir-verifier-types.ts +430 -0
  204. package/src/solana/noir-verifier.ts +816 -0
  205. package/src/stealth/address-derivation.ts +193 -0
  206. package/src/stealth/ed25519.ts +431 -0
  207. package/src/stealth/index.ts +233 -0
  208. package/src/stealth/meta-address.ts +221 -0
  209. package/src/stealth/secp256k1.ts +368 -0
  210. package/src/stealth/utils.ts +194 -0
  211. package/src/stealth.ts +50 -1504
  212. package/src/sync/index.ts +106 -0
  213. package/src/sync/manager.ts +504 -0
  214. package/src/sync/mock-provider.ts +318 -0
  215. package/src/sync/oblivious.ts +625 -0
  216. package/src/tokens/index.ts +15 -0
  217. package/src/tokens/registry.ts +301 -0
  218. package/src/utils/deprecation.ts +94 -0
  219. package/src/utils/index.ts +9 -0
  220. package/src/wallet/ethereum/index.ts +68 -0
  221. package/src/wallet/ethereum/metamask-privacy.ts +420 -0
  222. package/src/wallet/ethereum/multi-wallet.ts +646 -0
  223. package/src/wallet/ethereum/privacy-adapter.ts +700 -0
  224. package/src/wallet/ethereum/types.ts +3 -1
  225. package/src/wallet/ethereum/walletconnect-adapter.ts +675 -0
  226. package/src/wallet/hardware/index.ts +10 -0
  227. package/src/wallet/hardware/ledger-privacy.ts +414 -0
  228. package/src/wallet/index.ts +71 -0
  229. package/src/wallet/near/adapter.ts +626 -0
  230. package/src/wallet/near/index.ts +86 -0
  231. package/src/wallet/near/meteor-wallet.ts +1153 -0
  232. package/src/wallet/near/my-near-wallet.ts +790 -0
  233. package/src/wallet/near/wallet-selector.ts +702 -0
  234. package/src/wallet/solana/adapter.ts +6 -4
  235. package/src/wallet/solana/index.ts +13 -0
  236. package/src/wallet/solana/privacy-adapter.ts +567 -0
  237. package/src/wallet/sui/types.ts +6 -4
  238. package/src/zcash/rpc-client.ts +13 -6
  239. package/dist/chunk-2XIVXWHA.mjs +0 -1930
  240. package/dist/chunk-3INS3PR5.mjs +0 -884
  241. package/dist/chunk-3OVABDRH.mjs +0 -17096
  242. package/dist/chunk-7RFRWDCW.mjs +0 -1504
  243. package/dist/chunk-DLDWZFYC.mjs +0 -1495
  244. package/dist/chunk-E6SZWREQ.mjs +0 -57
  245. package/dist/chunk-F6F73W35.mjs +0 -16166
  246. package/dist/chunk-G33LB27A.mjs +0 -16166
  247. package/dist/chunk-HGU6HZRC.mjs +0 -231
  248. package/dist/chunk-L2K34JCU.mjs +0 -1496
  249. package/dist/chunk-OFDBEIEK.mjs +0 -16166
  250. package/dist/chunk-SF7YSLF5.mjs +0 -1515
  251. package/dist/chunk-SN4ZDTVW.mjs +0 -16166
  252. package/dist/chunk-WWUSGOXE.mjs +0 -17129
  253. package/dist/constants-VOI7BSLK.mjs +0 -27
  254. package/dist/index-B71aXVzk.d.ts +0 -13264
  255. package/dist/index-BYZbDjal.d.ts +0 -11390
  256. package/dist/index-CHB3KuOB.d.mts +0 -11859
  257. package/dist/index-CzWPI6Le.d.ts +0 -11859
  258. package/dist/index-pOIIuwfV.d.mts +0 -13264
  259. package/dist/index-xbWjohNq.d.mts +0 -11390
  260. package/dist/solana-4O4K45VU.mjs +0 -46
  261. package/dist/solana-5EMCTPTS.mjs +0 -46
  262. package/dist/solana-NDABAZ6P.mjs +0 -56
  263. package/dist/solana-Q4NAVBTS.mjs +0 -46
  264. package/dist/solana-ZYO63LY5.mjs +0 -46
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/proofs/halo2.ts
21
+ var halo2_exports = {};
22
+ __export(halo2_exports, {
23
+ Halo2Provider: () => Halo2Provider,
24
+ createHalo2Provider: () => createHalo2Provider,
25
+ createOrchardProvider: () => createOrchardProvider
26
+ });
27
+ module.exports = __toCommonJS(halo2_exports);
28
+
29
+ // src/proofs/providers/halo2.ts
30
+ var import_utils = require("@noble/hashes/utils");
31
+ var import_types = require("@sip-protocol/types");
32
+ var DEFAULT_HALO2_CONFIG = {
33
+ artifactsPath: "",
34
+ circuits: [],
35
+ verbose: false,
36
+ numThreads: 4,
37
+ enableRecursion: false,
38
+ backend: "wasm"
39
+ };
40
+ var Halo2Provider = class {
41
+ system = "halo2";
42
+ _config;
43
+ _status;
44
+ _capabilities;
45
+ _metrics;
46
+ _circuits = /* @__PURE__ */ new Map();
47
+ _provingKeys = /* @__PURE__ */ new Map();
48
+ _initPromise = null;
49
+ _initError = null;
50
+ constructor(config = {}) {
51
+ this._config = { ...DEFAULT_HALO2_CONFIG, ...config };
52
+ this._metrics = {
53
+ proofsGenerated: 0,
54
+ proofsVerified: 0,
55
+ avgGenerationTimeMs: 0,
56
+ avgVerificationTimeMs: 0,
57
+ successRate: 1,
58
+ memoryUsageBytes: 0
59
+ };
60
+ this._status = {
61
+ isReady: false,
62
+ isBusy: false,
63
+ queueLength: 0,
64
+ metrics: this._metrics
65
+ };
66
+ this._capabilities = {
67
+ system: "halo2",
68
+ supportsRecursion: this._config.enableRecursion,
69
+ supportsBatchVerification: true,
70
+ supportsBrowser: this._config.backend === "wasm",
71
+ supportsNode: true,
72
+ maxProofSize: 10 * 1024 * 1024,
73
+ // 10MB
74
+ supportedStrategies: [
75
+ import_types.ProofAggregationStrategy.SEQUENTIAL,
76
+ import_types.ProofAggregationStrategy.PARALLEL,
77
+ import_types.ProofAggregationStrategy.BATCH,
78
+ ...this._config.enableRecursion ? [import_types.ProofAggregationStrategy.RECURSIVE] : []
79
+ ],
80
+ availableCircuits: []
81
+ };
82
+ for (const circuit of this._config.circuits) {
83
+ this._circuits.set(circuit.id, circuit);
84
+ }
85
+ }
86
+ // ─── Properties ───────────────────────────────────────────────────────────
87
+ get capabilities() {
88
+ return {
89
+ ...this._capabilities,
90
+ availableCircuits: Array.from(this._circuits.keys())
91
+ };
92
+ }
93
+ get status() {
94
+ return { ...this._status };
95
+ }
96
+ // ─── Lifecycle ────────────────────────────────────────────────────────────
97
+ async initialize() {
98
+ if (this._status.isReady) return;
99
+ if (this._initPromise) {
100
+ return this._initPromise;
101
+ }
102
+ this._initPromise = this.doInitialize();
103
+ return this._initPromise;
104
+ }
105
+ async doInitialize() {
106
+ try {
107
+ if (this._config.verbose) {
108
+ console.log("[Halo2Provider] Initializing...");
109
+ }
110
+ await this.simulateAsyncLoad();
111
+ if (this._config.artifactsPath) {
112
+ await this.loadCircuitArtifacts();
113
+ }
114
+ this._status.isReady = true;
115
+ if (this._config.verbose) {
116
+ console.log("[Halo2Provider] Initialization complete");
117
+ console.log(`[Halo2Provider] Available circuits: ${Array.from(this._circuits.keys()).join(", ")}`);
118
+ }
119
+ } catch (error) {
120
+ this._initError = error instanceof Error ? error : new Error(String(error));
121
+ this._status.lastError = this._initError.message;
122
+ throw this._initError;
123
+ }
124
+ }
125
+ async waitUntilReady(timeoutMs = 3e4) {
126
+ if (this._status.isReady) return;
127
+ if (this._initError) {
128
+ throw this._initError;
129
+ }
130
+ if (!this._initPromise) {
131
+ this._initPromise = this.doInitialize();
132
+ }
133
+ const timeoutPromise = new Promise((_, reject) => {
134
+ setTimeout(() => reject(new Error(`Halo2Provider initialization timed out after ${timeoutMs}ms`)), timeoutMs);
135
+ });
136
+ await Promise.race([this._initPromise, timeoutPromise]);
137
+ }
138
+ async dispose() {
139
+ this._provingKeys.clear();
140
+ this._status.isReady = false;
141
+ this._initPromise = null;
142
+ this._initError = null;
143
+ if (this._config.verbose) {
144
+ console.log("[Halo2Provider] Disposed");
145
+ }
146
+ }
147
+ // ─── Circuit Management ───────────────────────────────────────────────────
148
+ getAvailableCircuits() {
149
+ return Array.from(this._circuits.keys());
150
+ }
151
+ hasCircuit(circuitId) {
152
+ return this._circuits.has(circuitId);
153
+ }
154
+ /**
155
+ * Register a circuit configuration
156
+ */
157
+ registerCircuit(config) {
158
+ this._circuits.set(config.id, config);
159
+ if (this._config.verbose) {
160
+ console.log(`[Halo2Provider] Registered circuit: ${config.id} (k=${config.k})`);
161
+ }
162
+ }
163
+ /**
164
+ * Load proving/verifying keys for a circuit
165
+ */
166
+ async loadCircuitKeys(circuitId) {
167
+ const circuit = this._circuits.get(circuitId);
168
+ if (!circuit) {
169
+ throw new Error(`Circuit not found: ${circuitId}`);
170
+ }
171
+ const provingKey = {
172
+ circuitId,
173
+ k: circuit.k,
174
+ pkBytes: void 0,
175
+ // Lazy-loaded
176
+ vkBytes: new Uint8Array(64)
177
+ // Placeholder VK
178
+ };
179
+ this._provingKeys.set(circuitId, provingKey);
180
+ if (this._config.verbose) {
181
+ console.log(`[Halo2Provider] Loaded keys for circuit: ${circuitId}`);
182
+ }
183
+ }
184
+ // ─── Proof Generation ─────────────────────────────────────────────────────
185
+ async generateProof(request) {
186
+ const startTime = Date.now();
187
+ if (!this._status.isReady) {
188
+ return {
189
+ success: false,
190
+ error: "Provider not initialized",
191
+ timeMs: Date.now() - startTime,
192
+ providerId: `halo2-${this.generateProviderId()}`
193
+ };
194
+ }
195
+ const circuit = this._circuits.get(request.circuitId);
196
+ if (!circuit) {
197
+ return {
198
+ success: false,
199
+ error: `Circuit not found: ${request.circuitId}`,
200
+ timeMs: Date.now() - startTime,
201
+ providerId: `halo2-${this.generateProviderId()}`
202
+ };
203
+ }
204
+ try {
205
+ this._status.isBusy = true;
206
+ const proof = await this.generateMockProof(request, circuit);
207
+ const timeMs = Date.now() - startTime;
208
+ this._metrics.proofsGenerated++;
209
+ this._metrics.avgGenerationTimeMs = (this._metrics.avgGenerationTimeMs * (this._metrics.proofsGenerated - 1) + timeMs) / this._metrics.proofsGenerated;
210
+ return {
211
+ success: true,
212
+ proof,
213
+ timeMs,
214
+ providerId: `halo2-${this.generateProviderId()}`
215
+ };
216
+ } catch (error) {
217
+ this._metrics.successRate = this._metrics.proofsGenerated > 0 ? (this._metrics.proofsGenerated - 1) / this._metrics.proofsGenerated : 0;
218
+ return {
219
+ success: false,
220
+ error: error instanceof Error ? error.message : "Unknown error during proof generation",
221
+ timeMs: Date.now() - startTime,
222
+ providerId: `halo2-${this.generateProviderId()}`
223
+ };
224
+ } finally {
225
+ this._status.isBusy = false;
226
+ }
227
+ }
228
+ async generateMockProof(request, circuit) {
229
+ const simulatedTimeMs = Math.min(100 + circuit.k * 10, 2e3);
230
+ await this.delay(simulatedTimeMs);
231
+ const proofBytes = (0, import_utils.randomBytes)(256);
232
+ const proofHex = `0x${(0, import_utils.bytesToHex)(proofBytes)}`;
233
+ const publicInputs = Object.values(request.publicInputs).map((v) => {
234
+ if (typeof v === "string" && v.startsWith("0x")) {
235
+ return v;
236
+ }
237
+ if (typeof v === "bigint" || typeof v === "number") {
238
+ return `0x${v.toString(16).padStart(64, "0")}`;
239
+ }
240
+ return `0x${Buffer.from(String(v)).toString("hex")}`;
241
+ });
242
+ return {
243
+ id: `halo2-proof-${Date.now()}-${(0, import_utils.randomBytes)(4).reduce((a, b) => a + b.toString(16), "")}`,
244
+ proof: proofHex,
245
+ publicInputs,
246
+ metadata: {
247
+ system: "halo2",
248
+ systemVersion: "0.3.0",
249
+ circuitId: circuit.id,
250
+ circuitVersion: "1.0.0",
251
+ generatedAt: Date.now(),
252
+ proofSizeBytes: proofBytes.length,
253
+ verificationCost: BigInt(circuit.k * 1e4)
254
+ }
255
+ };
256
+ }
257
+ // ─── Verification ─────────────────────────────────────────────────────────
258
+ async verifyProof(proof) {
259
+ if (!this._status.isReady) {
260
+ throw new Error("Provider not initialized");
261
+ }
262
+ const startTime = Date.now();
263
+ try {
264
+ const isValid = this.validateProofFormat(proof);
265
+ const timeMs = Date.now() - startTime;
266
+ this._metrics.proofsVerified++;
267
+ this._metrics.avgVerificationTimeMs = (this._metrics.avgVerificationTimeMs * (this._metrics.proofsVerified - 1) + timeMs) / this._metrics.proofsVerified;
268
+ return isValid;
269
+ } catch {
270
+ return false;
271
+ }
272
+ }
273
+ async verifyBatch(proofs) {
274
+ if (!this._status.isReady) {
275
+ throw new Error("Provider not initialized");
276
+ }
277
+ const results = [];
278
+ for (const proof of proofs) {
279
+ results.push(await this.verifyProof(proof));
280
+ }
281
+ return results;
282
+ }
283
+ validateProofFormat(proof) {
284
+ if (!proof.id || !proof.proof || !proof.metadata) {
285
+ return false;
286
+ }
287
+ if (proof.metadata.system !== "halo2") {
288
+ return false;
289
+ }
290
+ if (!proof.proof.startsWith("0x")) {
291
+ return false;
292
+ }
293
+ if (proof.metadata.expiresAt && proof.metadata.expiresAt < Date.now()) {
294
+ return false;
295
+ }
296
+ return true;
297
+ }
298
+ // ─── Helpers ──────────────────────────────────────────────────────────────
299
+ async simulateAsyncLoad() {
300
+ await this.delay(50);
301
+ }
302
+ async loadCircuitArtifacts() {
303
+ if (this._config.verbose) {
304
+ console.log(`[Halo2Provider] Loading artifacts from: ${this._config.artifactsPath}`);
305
+ }
306
+ }
307
+ delay(ms) {
308
+ return new Promise((resolve) => setTimeout(resolve, ms));
309
+ }
310
+ generateProviderId() {
311
+ return (0, import_utils.bytesToHex)((0, import_utils.randomBytes)(4));
312
+ }
313
+ };
314
+ function createHalo2Provider(config) {
315
+ return new Halo2Provider(config);
316
+ }
317
+ function createOrchardProvider() {
318
+ return new Halo2Provider({
319
+ enableRecursion: true,
320
+ circuits: [
321
+ {
322
+ id: "orchard_action",
323
+ name: "Orchard Action Circuit",
324
+ k: 11,
325
+ numColumns: 10,
326
+ numPublicInputs: 5,
327
+ supportsRecursion: true
328
+ },
329
+ {
330
+ id: "orchard_bundle",
331
+ name: "Orchard Bundle Circuit",
332
+ k: 12,
333
+ numColumns: 12,
334
+ numPublicInputs: 8,
335
+ supportsRecursion: true
336
+ }
337
+ ]
338
+ });
339
+ }
340
+
341
+ // src/proofs/providers/kimchi.ts
342
+ var import_utils2 = require("@noble/hashes/utils");
343
+ var import_types2 = require("@sip-protocol/types");
344
+ var KIMCHI_PROOF_SIZE = 22 * 1024;
345
+ // Annotate the CommonJS export names for ESM import in node:
346
+ 0 && (module.exports = {
347
+ Halo2Provider,
348
+ createHalo2Provider,
349
+ createOrchardProvider
350
+ });
@@ -0,0 +1,11 @@
1
+ import {
2
+ Halo2Provider,
3
+ createHalo2Provider,
4
+ createOrchardProvider
5
+ } from "../chunk-5D7A3L3W.mjs";
6
+ import "../chunk-XGB3TDIC.mjs";
7
+ export {
8
+ Halo2Provider,
9
+ createHalo2Provider,
10
+ createOrchardProvider
11
+ };
@@ -0,0 +1,160 @@
1
+ import { b as ComposableProofProvider, g as ProofGenerationRequest, h as ProofGenerationResult } from '../interface-Bf7w1PLW.mjs';
2
+ import { ProofSystem, ProofProviderCapabilities, ProofProviderStatus, SingleProof } from '@sip-protocol/types';
3
+ export { ProofMetadata, ProofProviderCapabilities, ProofProviderStatus, ProofSystem, SingleProof } from '@sip-protocol/types';
4
+
5
+ /**
6
+ * Kimchi Proof Provider
7
+ *
8
+ * Implements ComposableProofProvider interface for Mina's Kimchi proof system.
9
+ * Kimchi is the proving system behind Mina Protocol, providing succinct proofs
10
+ * and efficient recursive composition via Pickles.
11
+ *
12
+ * Key features:
13
+ * - Constant-size proofs (~22KB)
14
+ * - Recursive proof composition (Pickles wrapper)
15
+ * - Efficient verification
16
+ * - Browser WASM support via o1js
17
+ *
18
+ * @see https://docs.minaprotocol.com/ for Kimchi documentation
19
+ * @packageDocumentation
20
+ */
21
+
22
+ /**
23
+ * Kimchi circuit configuration
24
+ */
25
+ interface KimchiCircuitConfig {
26
+ /** Circuit identifier */
27
+ id: string;
28
+ /** Circuit name */
29
+ name: string;
30
+ /** Number of gates in the circuit */
31
+ gateCount: number;
32
+ /** Public input count */
33
+ publicInputCount: number;
34
+ /** Whether circuit uses recursion (Pickles) */
35
+ usesRecursion: boolean;
36
+ /** Verification key hash (for caching) */
37
+ verificationKeyHash?: string;
38
+ }
39
+ /**
40
+ * Kimchi provider configuration
41
+ */
42
+ interface KimchiProviderConfig {
43
+ /**
44
+ * Pre-configured circuits
45
+ */
46
+ circuits?: KimchiCircuitConfig[];
47
+ /**
48
+ * Enable verbose logging
49
+ * @default false
50
+ */
51
+ verbose?: boolean;
52
+ /**
53
+ * Network for proof generation
54
+ * @default 'testnet'
55
+ */
56
+ network?: 'mainnet' | 'testnet' | 'local';
57
+ /**
58
+ * Enable Pickles recursive proving
59
+ * @default true
60
+ */
61
+ enablePickles?: boolean;
62
+ /**
63
+ * Proof compilation cache directory
64
+ */
65
+ cacheDir?: string;
66
+ /**
67
+ * Number of workers for parallel compilation
68
+ * @default 2
69
+ */
70
+ compileWorkers?: number;
71
+ }
72
+ /**
73
+ * Kimchi Proof Provider
74
+ *
75
+ * Implements ComposableProofProvider for Mina's Kimchi proof system.
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const provider = new KimchiProvider({
80
+ * enablePickles: true,
81
+ * network: 'testnet',
82
+ * })
83
+ *
84
+ * await provider.initialize()
85
+ *
86
+ * const result = await provider.generateProof({
87
+ * circuitId: 'transfer_proof',
88
+ * privateInputs: { sender: '...', amount: '...' },
89
+ * publicInputs: { commitment: '...' },
90
+ * })
91
+ * ```
92
+ */
93
+ declare class KimchiProvider implements ComposableProofProvider {
94
+ readonly system: ProofSystem;
95
+ private _config;
96
+ private _status;
97
+ private _capabilities;
98
+ private _metrics;
99
+ private _circuits;
100
+ private _compiledCircuits;
101
+ private _initPromise;
102
+ private _initError;
103
+ constructor(config?: KimchiProviderConfig);
104
+ get capabilities(): ProofProviderCapabilities;
105
+ get status(): ProofProviderStatus;
106
+ initialize(): Promise<void>;
107
+ private doInitialize;
108
+ waitUntilReady(timeoutMs?: number): Promise<void>;
109
+ dispose(): Promise<void>;
110
+ getAvailableCircuits(): string[];
111
+ hasCircuit(circuitId: string): boolean;
112
+ /**
113
+ * Register a circuit configuration
114
+ */
115
+ registerCircuit(config: KimchiCircuitConfig): void;
116
+ /**
117
+ * Compile a circuit for proof generation
118
+ *
119
+ * Compiling in Kimchi/o1js creates the verification key and prepares
120
+ * the circuit for proving.
121
+ */
122
+ compileCircuit(circuitId: string): Promise<string>;
123
+ /**
124
+ * Check if a circuit is compiled
125
+ */
126
+ isCircuitCompiled(circuitId: string): boolean;
127
+ generateProof(request: ProofGenerationRequest): Promise<ProofGenerationResult>;
128
+ private generateMockProof;
129
+ verifyProof(proof: SingleProof): Promise<boolean>;
130
+ verifyBatch(proofs: SingleProof[]): Promise<boolean[]>;
131
+ private validateProofFormat;
132
+ /**
133
+ * Check if Pickles recursive proving is available
134
+ */
135
+ supportsRecursion(): boolean;
136
+ /**
137
+ * Merge multiple proofs recursively using Pickles
138
+ *
139
+ * This enables constant-size proofs regardless of how many
140
+ * proofs are combined.
141
+ */
142
+ mergeProofsRecursively(proofs: SingleProof[]): Promise<SingleProof | null>;
143
+ private simulateAsyncLoad;
144
+ private delay;
145
+ private generateProviderId;
146
+ }
147
+ /**
148
+ * Create a Kimchi provider with standard configuration
149
+ */
150
+ declare function createKimchiProvider(config?: KimchiProviderConfig): KimchiProvider;
151
+ /**
152
+ * Create a Kimchi provider configured for Mina mainnet
153
+ */
154
+ declare function createMinaMainnetProvider(): KimchiProvider;
155
+ /**
156
+ * Create a Kimchi provider configured for zkApp development
157
+ */
158
+ declare function createZkAppProvider(network?: 'testnet' | 'local'): KimchiProvider;
159
+
160
+ export { ComposableProofProvider, type KimchiCircuitConfig, KimchiProvider, type KimchiProviderConfig, createKimchiProvider, createMinaMainnetProvider, createZkAppProvider };
@@ -0,0 +1,160 @@
1
+ import { b as ComposableProofProvider, g as ProofGenerationRequest, h as ProofGenerationResult } from '../interface-Bf7w1PLW.js';
2
+ import { ProofSystem, ProofProviderCapabilities, ProofProviderStatus, SingleProof } from '@sip-protocol/types';
3
+ export { ProofMetadata, ProofProviderCapabilities, ProofProviderStatus, ProofSystem, SingleProof } from '@sip-protocol/types';
4
+
5
+ /**
6
+ * Kimchi Proof Provider
7
+ *
8
+ * Implements ComposableProofProvider interface for Mina's Kimchi proof system.
9
+ * Kimchi is the proving system behind Mina Protocol, providing succinct proofs
10
+ * and efficient recursive composition via Pickles.
11
+ *
12
+ * Key features:
13
+ * - Constant-size proofs (~22KB)
14
+ * - Recursive proof composition (Pickles wrapper)
15
+ * - Efficient verification
16
+ * - Browser WASM support via o1js
17
+ *
18
+ * @see https://docs.minaprotocol.com/ for Kimchi documentation
19
+ * @packageDocumentation
20
+ */
21
+
22
+ /**
23
+ * Kimchi circuit configuration
24
+ */
25
+ interface KimchiCircuitConfig {
26
+ /** Circuit identifier */
27
+ id: string;
28
+ /** Circuit name */
29
+ name: string;
30
+ /** Number of gates in the circuit */
31
+ gateCount: number;
32
+ /** Public input count */
33
+ publicInputCount: number;
34
+ /** Whether circuit uses recursion (Pickles) */
35
+ usesRecursion: boolean;
36
+ /** Verification key hash (for caching) */
37
+ verificationKeyHash?: string;
38
+ }
39
+ /**
40
+ * Kimchi provider configuration
41
+ */
42
+ interface KimchiProviderConfig {
43
+ /**
44
+ * Pre-configured circuits
45
+ */
46
+ circuits?: KimchiCircuitConfig[];
47
+ /**
48
+ * Enable verbose logging
49
+ * @default false
50
+ */
51
+ verbose?: boolean;
52
+ /**
53
+ * Network for proof generation
54
+ * @default 'testnet'
55
+ */
56
+ network?: 'mainnet' | 'testnet' | 'local';
57
+ /**
58
+ * Enable Pickles recursive proving
59
+ * @default true
60
+ */
61
+ enablePickles?: boolean;
62
+ /**
63
+ * Proof compilation cache directory
64
+ */
65
+ cacheDir?: string;
66
+ /**
67
+ * Number of workers for parallel compilation
68
+ * @default 2
69
+ */
70
+ compileWorkers?: number;
71
+ }
72
+ /**
73
+ * Kimchi Proof Provider
74
+ *
75
+ * Implements ComposableProofProvider for Mina's Kimchi proof system.
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const provider = new KimchiProvider({
80
+ * enablePickles: true,
81
+ * network: 'testnet',
82
+ * })
83
+ *
84
+ * await provider.initialize()
85
+ *
86
+ * const result = await provider.generateProof({
87
+ * circuitId: 'transfer_proof',
88
+ * privateInputs: { sender: '...', amount: '...' },
89
+ * publicInputs: { commitment: '...' },
90
+ * })
91
+ * ```
92
+ */
93
+ declare class KimchiProvider implements ComposableProofProvider {
94
+ readonly system: ProofSystem;
95
+ private _config;
96
+ private _status;
97
+ private _capabilities;
98
+ private _metrics;
99
+ private _circuits;
100
+ private _compiledCircuits;
101
+ private _initPromise;
102
+ private _initError;
103
+ constructor(config?: KimchiProviderConfig);
104
+ get capabilities(): ProofProviderCapabilities;
105
+ get status(): ProofProviderStatus;
106
+ initialize(): Promise<void>;
107
+ private doInitialize;
108
+ waitUntilReady(timeoutMs?: number): Promise<void>;
109
+ dispose(): Promise<void>;
110
+ getAvailableCircuits(): string[];
111
+ hasCircuit(circuitId: string): boolean;
112
+ /**
113
+ * Register a circuit configuration
114
+ */
115
+ registerCircuit(config: KimchiCircuitConfig): void;
116
+ /**
117
+ * Compile a circuit for proof generation
118
+ *
119
+ * Compiling in Kimchi/o1js creates the verification key and prepares
120
+ * the circuit for proving.
121
+ */
122
+ compileCircuit(circuitId: string): Promise<string>;
123
+ /**
124
+ * Check if a circuit is compiled
125
+ */
126
+ isCircuitCompiled(circuitId: string): boolean;
127
+ generateProof(request: ProofGenerationRequest): Promise<ProofGenerationResult>;
128
+ private generateMockProof;
129
+ verifyProof(proof: SingleProof): Promise<boolean>;
130
+ verifyBatch(proofs: SingleProof[]): Promise<boolean[]>;
131
+ private validateProofFormat;
132
+ /**
133
+ * Check if Pickles recursive proving is available
134
+ */
135
+ supportsRecursion(): boolean;
136
+ /**
137
+ * Merge multiple proofs recursively using Pickles
138
+ *
139
+ * This enables constant-size proofs regardless of how many
140
+ * proofs are combined.
141
+ */
142
+ mergeProofsRecursively(proofs: SingleProof[]): Promise<SingleProof | null>;
143
+ private simulateAsyncLoad;
144
+ private delay;
145
+ private generateProviderId;
146
+ }
147
+ /**
148
+ * Create a Kimchi provider with standard configuration
149
+ */
150
+ declare function createKimchiProvider(config?: KimchiProviderConfig): KimchiProvider;
151
+ /**
152
+ * Create a Kimchi provider configured for Mina mainnet
153
+ */
154
+ declare function createMinaMainnetProvider(): KimchiProvider;
155
+ /**
156
+ * Create a Kimchi provider configured for zkApp development
157
+ */
158
+ declare function createZkAppProvider(network?: 'testnet' | 'local'): KimchiProvider;
159
+
160
+ export { ComposableProofProvider, type KimchiCircuitConfig, KimchiProvider, type KimchiProviderConfig, createKimchiProvider, createMinaMainnetProvider, createZkAppProvider };