@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.
- package/LICENSE +21 -0
- package/README.md +267 -0
- package/dist/{TransportWebUSB-TQ7WZ4LE.mjs → TransportWebUSB-YQMAGJAJ.mjs} +12 -9
- package/dist/browser.d.mts +10 -4
- package/dist/browser.d.ts +10 -4
- package/dist/browser.js +47556 -19603
- package/dist/browser.mjs +628 -48
- package/dist/chunk-4GRJ5MAW.mjs +152 -0
- package/dist/chunk-5D7A3L3W.mjs +717 -0
- package/dist/chunk-64AYA5F5.mjs +7834 -0
- package/dist/chunk-GMDGB22A.mjs +379 -0
- package/dist/chunk-I534WKN7.mjs +328 -0
- package/dist/chunk-IBZVA5Y7.mjs +1003 -0
- package/dist/chunk-PRRZAWJE.mjs +223 -0
- package/dist/{chunk-UJCSKKID.mjs → chunk-XGB3TDIC.mjs} +13 -1
- package/dist/{chunk-3M3HNQCW.mjs → chunk-YWGJ77A2.mjs} +28656 -13103
- package/dist/{chunk-6WGN57S2.mjs → chunk-Z3K7W5S3.mjs} +48 -0
- package/dist/constants-LHAAUC2T.mjs +51 -0
- package/dist/dist-2OGQ7FED.mjs +3957 -0
- package/dist/dist-IFHPYLDX.mjs +254 -0
- package/dist/fulfillment_proof-ANHVPKTB.mjs +21 -0
- package/dist/funding_proof-ICFZ5LHY.mjs +21 -0
- package/dist/{index-DIBZHOOQ.d.ts → index-DXh2IGkz.d.ts} +21239 -10304
- package/dist/{index-8MQz13eJ.d.mts → index-DeE1ZzA4.d.mts} +21239 -10304
- package/dist/index.d.mts +9 -3
- package/dist/index.d.ts +9 -3
- package/dist/index.js +48396 -19623
- package/dist/index.mjs +537 -19
- package/dist/interface-Bf7w1PLW.d.mts +679 -0
- package/dist/interface-Bf7w1PLW.d.ts +679 -0
- package/dist/{noir-DKfEzWy9.d.mts → noir-kzbLVTei.d.mts} +31 -21
- package/dist/{noir-DKfEzWy9.d.ts → noir-kzbLVTei.d.ts} +31 -21
- package/dist/proofs/halo2.d.mts +151 -0
- package/dist/proofs/halo2.d.ts +151 -0
- package/dist/proofs/halo2.js +350 -0
- package/dist/proofs/halo2.mjs +11 -0
- package/dist/proofs/kimchi.d.mts +160 -0
- package/dist/proofs/kimchi.d.ts +160 -0
- package/dist/proofs/kimchi.js +431 -0
- package/dist/proofs/kimchi.mjs +13 -0
- package/dist/proofs/noir.d.mts +1 -1
- package/dist/proofs/noir.d.ts +1 -1
- package/dist/proofs/noir.js +74 -18
- package/dist/proofs/noir.mjs +84 -24
- package/dist/solana-U3MEGU7W.mjs +280 -0
- package/dist/validity_proof-3POXLPNY.mjs +21 -0
- package/package.json +54 -21
- package/src/adapters/index.ts +41 -0
- package/src/adapters/jupiter.ts +571 -0
- package/src/adapters/near-intents.ts +135 -0
- package/src/advisor/advisor.ts +653 -0
- package/src/advisor/index.ts +54 -0
- package/src/advisor/tools.ts +303 -0
- package/src/advisor/types.ts +164 -0
- package/src/chains/ethereum/announcement.ts +536 -0
- package/src/chains/ethereum/bnb-optimizations.ts +474 -0
- package/src/chains/ethereum/commitment.ts +522 -0
- package/src/chains/ethereum/constants.ts +462 -0
- package/src/chains/ethereum/deployment.ts +596 -0
- package/src/chains/ethereum/gas-estimation.ts +538 -0
- package/src/chains/ethereum/index.ts +268 -0
- package/src/chains/ethereum/optimizations.ts +614 -0
- package/src/chains/ethereum/privacy-adapter.ts +855 -0
- package/src/chains/ethereum/registry.ts +584 -0
- package/src/chains/ethereum/rpc.ts +905 -0
- package/src/chains/ethereum/stealth.ts +491 -0
- package/src/chains/ethereum/token.ts +790 -0
- package/src/chains/ethereum/transfer.ts +637 -0
- package/src/chains/ethereum/types.ts +456 -0
- package/src/chains/ethereum/viewing-key.ts +455 -0
- package/src/chains/near/commitment.ts +608 -0
- package/src/chains/near/constants.ts +284 -0
- package/src/chains/near/function-call.ts +871 -0
- package/src/chains/near/history.ts +654 -0
- package/src/chains/near/implicit-account.ts +840 -0
- package/src/chains/near/index.ts +393 -0
- package/src/chains/near/native-transfer.ts +658 -0
- package/src/chains/near/nep141.ts +775 -0
- package/src/chains/near/privacy-adapter.ts +889 -0
- package/src/chains/near/resolver.ts +971 -0
- package/src/chains/near/rpc.ts +1016 -0
- package/src/chains/near/stealth.ts +419 -0
- package/src/chains/near/types.ts +317 -0
- package/src/chains/near/viewing-key.ts +876 -0
- package/src/chains/solana/anchor-transfer.ts +386 -0
- package/src/chains/solana/commitment.ts +577 -0
- package/src/chains/solana/constants.ts +126 -12
- package/src/chains/solana/ephemeral-keys.ts +543 -0
- package/src/chains/solana/index.ts +252 -1
- package/src/chains/solana/key-derivation.ts +418 -0
- package/src/chains/solana/kit-compat.ts +334 -0
- package/src/chains/solana/optimizations.ts +560 -0
- package/src/chains/solana/privacy-adapter.ts +605 -0
- package/src/chains/solana/providers/generic.ts +47 -6
- package/src/chains/solana/providers/helius-enhanced-types.ts +336 -0
- package/src/chains/solana/providers/helius-enhanced.ts +623 -0
- package/src/chains/solana/providers/helius.ts +186 -33
- package/src/chains/solana/providers/index.ts +31 -0
- package/src/chains/solana/providers/interface.ts +61 -18
- package/src/chains/solana/providers/quicknode.ts +409 -0
- package/src/chains/solana/providers/triton.ts +426 -0
- package/src/chains/solana/providers/webhook.ts +338 -67
- package/src/chains/solana/rpc-client.ts +1150 -0
- package/src/chains/solana/scan.ts +83 -66
- package/src/chains/solana/sol-transfer.ts +732 -0
- package/src/chains/solana/spl-transfer.ts +886 -0
- package/src/chains/solana/stealth-scanner.ts +703 -0
- package/src/chains/solana/sunspot-verifier.ts +453 -0
- package/src/chains/solana/transaction-builder.ts +755 -0
- package/src/chains/solana/transfer.ts +74 -5
- package/src/chains/solana/types.ts +57 -6
- package/src/chains/solana/utils.ts +110 -0
- package/src/chains/solana/viewing-key.ts +807 -0
- package/src/compliance/fireblocks.ts +921 -0
- package/src/compliance/index.ts +23 -0
- package/src/compliance/range-sas.ts +398 -33
- package/src/config/endpoints.ts +100 -0
- package/src/crypto.ts +11 -8
- package/src/errors.ts +82 -0
- package/src/evm/erc4337-relayer.ts +830 -0
- package/src/evm/index.ts +47 -0
- package/src/fees/calculator.ts +396 -0
- package/src/fees/index.ts +87 -0
- package/src/fees/near-contract.ts +429 -0
- package/src/fees/types.ts +268 -0
- package/src/index.ts +686 -1
- package/src/intent.ts +6 -3
- package/src/logger.ts +324 -0
- package/src/network/index.ts +80 -0
- package/src/network/proxy.ts +691 -0
- package/src/optimizations/index.ts +541 -0
- package/src/oracle/types.ts +1 -0
- package/src/privacy-backends/arcium-types.ts +727 -0
- package/src/privacy-backends/arcium.ts +719 -0
- package/src/privacy-backends/combined-privacy.ts +866 -0
- package/src/privacy-backends/cspl-token.ts +595 -0
- package/src/privacy-backends/cspl-types.ts +512 -0
- package/src/privacy-backends/cspl.ts +907 -0
- package/src/privacy-backends/health.ts +488 -0
- package/src/privacy-backends/inco-types.ts +323 -0
- package/src/privacy-backends/inco.ts +616 -0
- package/src/privacy-backends/index.ts +254 -4
- package/src/privacy-backends/interface.ts +649 -6
- package/src/privacy-backends/lru-cache.ts +343 -0
- package/src/privacy-backends/magicblock.ts +458 -0
- package/src/privacy-backends/mock.ts +258 -0
- package/src/privacy-backends/privacycash.ts +13 -17
- package/src/privacy-backends/private-swap.ts +570 -0
- package/src/privacy-backends/rate-limiter.ts +683 -0
- package/src/privacy-backends/registry.ts +414 -2
- package/src/privacy-backends/router.ts +283 -3
- package/src/privacy-backends/shadowwire.ts +449 -0
- package/src/privacy-backends/sip-native.ts +3 -0
- package/src/privacy-logger.ts +191 -0
- package/src/production-safety.ts +373 -0
- package/src/proofs/aggregator.ts +1029 -0
- package/src/proofs/browser-composer.ts +1150 -0
- package/src/proofs/browser.ts +113 -25
- package/src/proofs/cache/index.ts +127 -0
- package/src/proofs/cache/interface.ts +545 -0
- package/src/proofs/cache/key-generator.ts +188 -0
- package/src/proofs/cache/lru-cache.ts +481 -0
- package/src/proofs/cache/multi-tier-cache.ts +575 -0
- package/src/proofs/cache/persistent-cache.ts +788 -0
- package/src/proofs/compliance-proof.ts +872 -0
- package/src/proofs/composer/base.ts +923 -0
- package/src/proofs/composer/index.ts +25 -0
- package/src/proofs/composer/interface.ts +518 -0
- package/src/proofs/composer/types.ts +383 -0
- package/src/proofs/converters/halo2.ts +452 -0
- package/src/proofs/converters/index.ts +208 -0
- package/src/proofs/converters/interface.ts +363 -0
- package/src/proofs/converters/kimchi.ts +462 -0
- package/src/proofs/converters/noir.ts +451 -0
- package/src/proofs/fallback.ts +888 -0
- package/src/proofs/halo2.ts +42 -0
- package/src/proofs/index.ts +471 -0
- package/src/proofs/interface.ts +13 -0
- package/src/proofs/kimchi.ts +42 -0
- package/src/proofs/lazy.ts +1004 -0
- package/src/proofs/mock.ts +25 -1
- package/src/proofs/noir.ts +110 -29
- package/src/proofs/orchestrator.ts +960 -0
- package/src/proofs/parallel/concurrency.ts +297 -0
- package/src/proofs/parallel/dependency-graph.ts +602 -0
- package/src/proofs/parallel/executor.ts +420 -0
- package/src/proofs/parallel/index.ts +131 -0
- package/src/proofs/parallel/interface.ts +685 -0
- package/src/proofs/parallel/worker-pool.ts +644 -0
- package/src/proofs/providers/halo2.ts +560 -0
- package/src/proofs/providers/index.ts +34 -0
- package/src/proofs/providers/kimchi.ts +641 -0
- package/src/proofs/validator.ts +881 -0
- package/src/proofs/verifier.ts +867 -0
- package/src/quantum/index.ts +112 -0
- package/src/quantum/winternitz-vault.ts +639 -0
- package/src/quantum/wots.ts +611 -0
- package/src/settlement/backends/direct-chain.ts +1 -0
- package/src/settlement/index.ts +9 -0
- package/src/settlement/router.ts +732 -46
- package/src/solana/index.ts +72 -0
- package/src/solana/jito-relayer.ts +687 -0
- package/src/solana/noir-verifier-types.ts +430 -0
- package/src/solana/noir-verifier.ts +816 -0
- package/src/stealth/address-derivation.ts +193 -0
- package/src/stealth/ed25519.ts +431 -0
- package/src/stealth/index.ts +233 -0
- package/src/stealth/meta-address.ts +221 -0
- package/src/stealth/secp256k1.ts +368 -0
- package/src/stealth/utils.ts +194 -0
- package/src/stealth.ts +50 -1504
- package/src/sync/index.ts +106 -0
- package/src/sync/manager.ts +504 -0
- package/src/sync/mock-provider.ts +318 -0
- package/src/sync/oblivious.ts +625 -0
- package/src/tokens/index.ts +15 -0
- package/src/tokens/registry.ts +301 -0
- package/src/utils/deprecation.ts +94 -0
- package/src/utils/index.ts +9 -0
- package/src/wallet/ethereum/index.ts +68 -0
- package/src/wallet/ethereum/metamask-privacy.ts +420 -0
- package/src/wallet/ethereum/multi-wallet.ts +646 -0
- package/src/wallet/ethereum/privacy-adapter.ts +700 -0
- package/src/wallet/ethereum/types.ts +3 -1
- package/src/wallet/ethereum/walletconnect-adapter.ts +675 -0
- package/src/wallet/hardware/index.ts +10 -0
- package/src/wallet/hardware/ledger-privacy.ts +414 -0
- package/src/wallet/index.ts +71 -0
- package/src/wallet/near/adapter.ts +626 -0
- package/src/wallet/near/index.ts +86 -0
- package/src/wallet/near/meteor-wallet.ts +1153 -0
- package/src/wallet/near/my-near-wallet.ts +790 -0
- package/src/wallet/near/wallet-selector.ts +702 -0
- package/src/wallet/solana/adapter.ts +6 -4
- package/src/wallet/solana/index.ts +13 -0
- package/src/wallet/solana/privacy-adapter.ts +567 -0
- package/src/wallet/sui/types.ts +6 -4
- package/src/zcash/rpc-client.ts +13 -6
- package/dist/chunk-2XIVXWHA.mjs +0 -1930
- package/dist/chunk-3INS3PR5.mjs +0 -884
- package/dist/chunk-3OVABDRH.mjs +0 -17096
- package/dist/chunk-7RFRWDCW.mjs +0 -1504
- package/dist/chunk-DLDWZFYC.mjs +0 -1495
- package/dist/chunk-E6SZWREQ.mjs +0 -57
- package/dist/chunk-F6F73W35.mjs +0 -16166
- package/dist/chunk-G33LB27A.mjs +0 -16166
- package/dist/chunk-HGU6HZRC.mjs +0 -231
- package/dist/chunk-L2K34JCU.mjs +0 -1496
- package/dist/chunk-OFDBEIEK.mjs +0 -16166
- package/dist/chunk-SF7YSLF5.mjs +0 -1515
- package/dist/chunk-SN4ZDTVW.mjs +0 -16166
- package/dist/chunk-WWUSGOXE.mjs +0 -17129
- package/dist/constants-VOI7BSLK.mjs +0 -27
- package/dist/index-B71aXVzk.d.ts +0 -13264
- package/dist/index-BYZbDjal.d.ts +0 -11390
- package/dist/index-CHB3KuOB.d.mts +0 -11859
- package/dist/index-CzWPI6Le.d.ts +0 -11859
- package/dist/index-pOIIuwfV.d.mts +0 -13264
- package/dist/index-xbWjohNq.d.mts +0 -11390
- package/dist/solana-4O4K45VU.mjs +0 -46
- package/dist/solana-5EMCTPTS.mjs +0 -46
- package/dist/solana-NDABAZ6P.mjs +0 -56
- package/dist/solana-Q4NAVBTS.mjs +0 -46
- 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,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 };
|