@sip-protocol/sdk 0.7.2 → 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 +48874 -18336
- package/dist/browser.mjs +674 -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-YWGJ77A2.mjs +33806 -0
- 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-DXh2IGkz.d.ts +24681 -0
- package/dist/index-DeE1ZzA4.d.mts +24681 -0
- package/dist/index.d.mts +9 -3
- package/dist/index.d.ts +9 -3
- package/dist/index.js +48676 -17318
- package/dist/index.mjs +583 -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 +276 -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 +201 -0
- 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 +402 -0
- package/src/chains/solana/providers/index.ts +85 -0
- package/src/chains/solana/providers/interface.ts +221 -0
- 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 +790 -0
- package/src/chains/solana/rpc-client.ts +1150 -0
- package/src/chains/solana/scan.ts +170 -73
- 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 +77 -7
- 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 +37 -0
- package/src/compliance/range-sas.ts +956 -0
- 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 +785 -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 +336 -0
- package/src/privacy-backends/interface.ts +906 -0
- 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-types.ts +278 -0
- package/src/privacy-backends/privacycash.ts +456 -0
- package/src/privacy-backends/private-swap.ts +570 -0
- package/src/privacy-backends/rate-limiter.ts +683 -0
- package/src/privacy-backends/registry.ts +690 -0
- package/src/privacy-backends/router.ts +626 -0
- package/src/privacy-backends/shadowwire.ts +449 -0
- package/src/privacy-backends/sip-native.ts +256 -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 +111 -30
- 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/surveillance/algorithms/address-reuse.ts +143 -0
- package/src/surveillance/algorithms/cluster.ts +247 -0
- package/src/surveillance/algorithms/exchange.ts +295 -0
- package/src/surveillance/algorithms/temporal.ts +337 -0
- package/src/surveillance/analyzer.ts +442 -0
- package/src/surveillance/index.ts +64 -0
- package/src/surveillance/scoring.ts +372 -0
- package/src/surveillance/types.ts +264 -0
- 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-3INS3PR5.mjs +0 -884
- package/dist/chunk-3OVABDRH.mjs +0 -17096
- package/dist/chunk-DLDWZFYC.mjs +0 -1495
- package/dist/chunk-E6SZWREQ.mjs +0 -57
- package/dist/chunk-G33LB27A.mjs +0 -16166
- package/dist/chunk-HGU6HZRC.mjs +0 -231
- package/dist/chunk-L2K34JCU.mjs +0 -1496
- package/dist/chunk-SN4ZDTVW.mjs +0 -16166
- package/dist/constants-VOI7BSLK.mjs +0 -27
- 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-xbWjohNq.d.mts +0 -11390
- package/dist/solana-5EMCTPTS.mjs +0 -46
- package/dist/solana-Q4NAVBTS.mjs +0 -46
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof Caching Layer - Interface Definitions
|
|
3
|
+
*
|
|
4
|
+
* @module proofs/cache
|
|
5
|
+
* @description Types and interfaces for proof caching
|
|
6
|
+
*
|
|
7
|
+
* M20-13: Implement proof caching layer (#313)
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { ProofSystem, SingleProof } from '@sip-protocol/types'
|
|
11
|
+
|
|
12
|
+
// ─── Cache Key Types ─────────────────────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Components that make up a cache key
|
|
16
|
+
*/
|
|
17
|
+
export interface CacheKeyComponents {
|
|
18
|
+
/** Proof system (noir, halo2, kimchi) */
|
|
19
|
+
readonly system: ProofSystem
|
|
20
|
+
/** Circuit identifier */
|
|
21
|
+
readonly circuitId: string
|
|
22
|
+
/** Hash of private inputs */
|
|
23
|
+
readonly privateInputsHash: string
|
|
24
|
+
/** Hash of public inputs */
|
|
25
|
+
readonly publicInputsHash: string
|
|
26
|
+
/** Optional version string */
|
|
27
|
+
readonly version?: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A complete cache key
|
|
32
|
+
*/
|
|
33
|
+
export interface CacheKey {
|
|
34
|
+
/** String representation of the key */
|
|
35
|
+
readonly key: string
|
|
36
|
+
/** Components used to generate the key */
|
|
37
|
+
readonly components: CacheKeyComponents
|
|
38
|
+
/** Timestamp when key was generated */
|
|
39
|
+
readonly generatedAt: number
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ─── Cache Entry Types ───────────────────────────────────────────────────────
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Metadata about a cache entry
|
|
46
|
+
*/
|
|
47
|
+
export interface CacheEntryMetadata {
|
|
48
|
+
/** When the entry was created */
|
|
49
|
+
readonly createdAt: number
|
|
50
|
+
/** When the entry was last accessed */
|
|
51
|
+
lastAccessedAt: number
|
|
52
|
+
/** Number of times the entry has been accessed */
|
|
53
|
+
accessCount: number
|
|
54
|
+
/** Size of the entry in bytes */
|
|
55
|
+
readonly sizeBytes: number
|
|
56
|
+
/** Time-to-live in milliseconds (0 = no expiry) */
|
|
57
|
+
readonly ttlMs: number
|
|
58
|
+
/** When the entry expires (0 = never) */
|
|
59
|
+
readonly expiresAt: number
|
|
60
|
+
/** Source of the entry */
|
|
61
|
+
readonly source: 'generation' | 'warming' | 'import'
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* A cached proof entry
|
|
66
|
+
*/
|
|
67
|
+
export interface CacheEntry<T = SingleProof> {
|
|
68
|
+
/** The cache key */
|
|
69
|
+
readonly key: CacheKey
|
|
70
|
+
/** The cached value */
|
|
71
|
+
readonly value: T
|
|
72
|
+
/** Entry metadata */
|
|
73
|
+
readonly metadata: CacheEntryMetadata
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Result of a cache lookup
|
|
78
|
+
*/
|
|
79
|
+
export interface CacheLookupResult<T = SingleProof> {
|
|
80
|
+
/** Whether the lookup found a valid entry */
|
|
81
|
+
readonly hit: boolean
|
|
82
|
+
/** The cached entry (if found) */
|
|
83
|
+
readonly entry?: CacheEntry<T>
|
|
84
|
+
/** Reason for miss (if applicable) */
|
|
85
|
+
readonly missReason?: 'not_found' | 'expired' | 'invalid' | 'evicted'
|
|
86
|
+
/** Lookup time in milliseconds */
|
|
87
|
+
readonly lookupTimeMs: number
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ─── Cache Configuration ─────────────────────────────────────────────────────
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* LRU cache configuration
|
|
94
|
+
*/
|
|
95
|
+
export interface LRUCacheConfig {
|
|
96
|
+
/** Maximum number of entries */
|
|
97
|
+
readonly maxEntries: number
|
|
98
|
+
/** Maximum total size in bytes */
|
|
99
|
+
readonly maxSizeBytes: number
|
|
100
|
+
/** Default TTL in milliseconds (0 = no expiry) */
|
|
101
|
+
readonly defaultTtlMs: number
|
|
102
|
+
/** Enable entry access tracking */
|
|
103
|
+
readonly trackAccess: boolean
|
|
104
|
+
/** Eviction check interval in milliseconds */
|
|
105
|
+
readonly evictionIntervalMs: number
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Default LRU cache configuration
|
|
110
|
+
*/
|
|
111
|
+
export const DEFAULT_LRU_CONFIG: LRUCacheConfig = {
|
|
112
|
+
maxEntries: 1000,
|
|
113
|
+
maxSizeBytes: 100 * 1024 * 1024, // 100MB
|
|
114
|
+
defaultTtlMs: 3600000, // 1 hour
|
|
115
|
+
trackAccess: true,
|
|
116
|
+
evictionIntervalMs: 60000, // 1 minute
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Persistent cache configuration (IndexedDB/File)
|
|
121
|
+
*/
|
|
122
|
+
export interface PersistentCacheConfig {
|
|
123
|
+
/** Storage name/path */
|
|
124
|
+
readonly storageName: string
|
|
125
|
+
/** Maximum total size in bytes */
|
|
126
|
+
readonly maxSizeBytes: number
|
|
127
|
+
/** Default TTL in milliseconds */
|
|
128
|
+
readonly defaultTtlMs: number
|
|
129
|
+
/** Enable compression */
|
|
130
|
+
readonly enableCompression: boolean
|
|
131
|
+
/** Compression threshold (only compress if larger) */
|
|
132
|
+
readonly compressionThresholdBytes: number
|
|
133
|
+
/** Enable encryption */
|
|
134
|
+
readonly enableEncryption: boolean
|
|
135
|
+
/** Encryption key (required if encryption enabled) */
|
|
136
|
+
readonly encryptionKey?: string
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Default persistent cache configuration
|
|
141
|
+
*/
|
|
142
|
+
export const DEFAULT_PERSISTENT_CONFIG: PersistentCacheConfig = {
|
|
143
|
+
storageName: 'sip-proof-cache',
|
|
144
|
+
maxSizeBytes: 1024 * 1024 * 1024, // 1GB
|
|
145
|
+
defaultTtlMs: 86400000, // 24 hours
|
|
146
|
+
enableCompression: true,
|
|
147
|
+
compressionThresholdBytes: 1024, // 1KB
|
|
148
|
+
enableEncryption: false,
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Multi-tier cache configuration
|
|
153
|
+
*/
|
|
154
|
+
export interface MultiTierCacheConfig {
|
|
155
|
+
/** In-memory LRU cache config */
|
|
156
|
+
readonly memory: LRUCacheConfig
|
|
157
|
+
/** Persistent cache config */
|
|
158
|
+
readonly persistent?: PersistentCacheConfig
|
|
159
|
+
/** Enable write-through to persistent cache */
|
|
160
|
+
readonly writeThrough: boolean
|
|
161
|
+
/** Enable read-through from persistent cache */
|
|
162
|
+
readonly readThrough: boolean
|
|
163
|
+
/** Promote entries from persistent to memory on access */
|
|
164
|
+
readonly promoteOnAccess: boolean
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Default multi-tier cache configuration
|
|
169
|
+
*/
|
|
170
|
+
export const DEFAULT_MULTI_TIER_CONFIG: MultiTierCacheConfig = {
|
|
171
|
+
memory: DEFAULT_LRU_CONFIG,
|
|
172
|
+
writeThrough: true,
|
|
173
|
+
readThrough: true,
|
|
174
|
+
promoteOnAccess: true,
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ─── Cache Statistics ────────────────────────────────────────────────────────
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Proof cache statistics
|
|
181
|
+
* (Named ProofCacheStats to avoid conflict with composer CacheStats)
|
|
182
|
+
*/
|
|
183
|
+
export interface ProofCacheStats {
|
|
184
|
+
/** Total number of lookups */
|
|
185
|
+
readonly totalLookups: number
|
|
186
|
+
/** Number of cache hits */
|
|
187
|
+
readonly hits: number
|
|
188
|
+
/** Number of cache misses */
|
|
189
|
+
readonly misses: number
|
|
190
|
+
/** Hit rate (0-1) */
|
|
191
|
+
readonly hitRate: number
|
|
192
|
+
/** Current number of entries */
|
|
193
|
+
readonly entryCount: number
|
|
194
|
+
/** Current size in bytes */
|
|
195
|
+
readonly sizeBytes: number
|
|
196
|
+
/** Maximum size in bytes */
|
|
197
|
+
readonly maxSizeBytes: number
|
|
198
|
+
/** Number of evictions */
|
|
199
|
+
readonly evictions: number
|
|
200
|
+
/** Number of expirations */
|
|
201
|
+
readonly expirations: number
|
|
202
|
+
/** Average lookup time in milliseconds */
|
|
203
|
+
readonly avgLookupTimeMs: number
|
|
204
|
+
/** Average entry age in milliseconds */
|
|
205
|
+
readonly avgEntryAgeMs: number
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Initial proof cache statistics
|
|
210
|
+
*/
|
|
211
|
+
export const INITIAL_PROOF_CACHE_STATS: ProofCacheStats = {
|
|
212
|
+
totalLookups: 0,
|
|
213
|
+
hits: 0,
|
|
214
|
+
misses: 0,
|
|
215
|
+
hitRate: 0,
|
|
216
|
+
entryCount: 0,
|
|
217
|
+
sizeBytes: 0,
|
|
218
|
+
maxSizeBytes: 0,
|
|
219
|
+
evictions: 0,
|
|
220
|
+
expirations: 0,
|
|
221
|
+
avgLookupTimeMs: 0,
|
|
222
|
+
avgEntryAgeMs: 0,
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// ─── Cache Events ────────────────────────────────────────────────────────────
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Cache event types
|
|
229
|
+
*/
|
|
230
|
+
export type CacheEventType =
|
|
231
|
+
| 'hit'
|
|
232
|
+
| 'miss'
|
|
233
|
+
| 'set'
|
|
234
|
+
| 'delete'
|
|
235
|
+
| 'evict'
|
|
236
|
+
| 'expire'
|
|
237
|
+
| 'clear'
|
|
238
|
+
| 'warm'
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Cache event
|
|
242
|
+
*/
|
|
243
|
+
export interface CacheEvent {
|
|
244
|
+
/** Event type */
|
|
245
|
+
readonly type: CacheEventType
|
|
246
|
+
/** Cache key involved (if applicable) */
|
|
247
|
+
readonly key?: string
|
|
248
|
+
/** Timestamp */
|
|
249
|
+
readonly timestamp: number
|
|
250
|
+
/** Additional event data */
|
|
251
|
+
readonly data?: Record<string, unknown>
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Cache event listener
|
|
256
|
+
*/
|
|
257
|
+
export type CacheEventListener = (event: CacheEvent) => void
|
|
258
|
+
|
|
259
|
+
// ─── Invalidation Strategies ─────────────────────────────────────────────────
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Invalidation strategy type
|
|
263
|
+
*/
|
|
264
|
+
export type InvalidationStrategy =
|
|
265
|
+
| 'ttl' // Time-based expiration
|
|
266
|
+
| 'lru' // Least recently used
|
|
267
|
+
| 'lfu' // Least frequently used
|
|
268
|
+
| 'fifo' // First in, first out
|
|
269
|
+
| 'size' // Size-based eviction
|
|
270
|
+
| 'manual' // Manual invalidation only
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Invalidation rule
|
|
274
|
+
*/
|
|
275
|
+
export interface InvalidationRule {
|
|
276
|
+
/** Rule identifier */
|
|
277
|
+
readonly id: string
|
|
278
|
+
/** Strategy to apply */
|
|
279
|
+
readonly strategy: InvalidationStrategy
|
|
280
|
+
/** Pattern to match keys (glob or regex) */
|
|
281
|
+
readonly pattern?: string
|
|
282
|
+
/** TTL for this rule (if ttl strategy) */
|
|
283
|
+
readonly ttlMs?: number
|
|
284
|
+
/** Priority (higher = applied first) */
|
|
285
|
+
readonly priority: number
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// ─── Cache Warming ───────────────────────────────────────────────────────────
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Cache warming configuration
|
|
292
|
+
*/
|
|
293
|
+
export interface CacheWarmingConfig {
|
|
294
|
+
/** Enable automatic warming */
|
|
295
|
+
readonly enabled: boolean
|
|
296
|
+
/** Keys to warm on startup */
|
|
297
|
+
readonly warmOnStartup: CacheKeyComponents[]
|
|
298
|
+
/** Warm interval in milliseconds */
|
|
299
|
+
readonly warmIntervalMs: number
|
|
300
|
+
/** Maximum entries to warm per interval */
|
|
301
|
+
readonly maxEntriesPerWarm: number
|
|
302
|
+
/** Prediction model for warming */
|
|
303
|
+
readonly predictionModel: 'recent' | 'frequent' | 'pattern' | 'none'
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Default cache warming configuration
|
|
308
|
+
*/
|
|
309
|
+
export const DEFAULT_WARMING_CONFIG: CacheWarmingConfig = {
|
|
310
|
+
enabled: false,
|
|
311
|
+
warmOnStartup: [],
|
|
312
|
+
warmIntervalMs: 300000, // 5 minutes
|
|
313
|
+
maxEntriesPerWarm: 10,
|
|
314
|
+
predictionModel: 'frequent',
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Cache warming result
|
|
319
|
+
*/
|
|
320
|
+
export interface WarmingResult {
|
|
321
|
+
/** Number of entries warmed */
|
|
322
|
+
readonly warmed: number
|
|
323
|
+
/** Number of entries failed */
|
|
324
|
+
readonly failed: number
|
|
325
|
+
/** Time taken in milliseconds */
|
|
326
|
+
readonly timeMs: number
|
|
327
|
+
/** Keys that were warmed */
|
|
328
|
+
readonly keys: string[]
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// ─── Interface Definitions ───────────────────────────────────────────────────
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Cache key generator interface
|
|
335
|
+
*/
|
|
336
|
+
export interface ICacheKeyGenerator {
|
|
337
|
+
/**
|
|
338
|
+
* Generate a cache key from components
|
|
339
|
+
*/
|
|
340
|
+
generate(components: CacheKeyComponents): CacheKey
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Parse a cache key string back to components
|
|
344
|
+
*/
|
|
345
|
+
parse(key: string): CacheKeyComponents | null
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Hash input data deterministically
|
|
349
|
+
*/
|
|
350
|
+
hashInputs(inputs: Record<string, unknown>): string
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Base cache interface
|
|
355
|
+
*/
|
|
356
|
+
export interface IProofCache<T = SingleProof> {
|
|
357
|
+
/**
|
|
358
|
+
* Get an entry from the cache
|
|
359
|
+
*/
|
|
360
|
+
get(key: CacheKey | string): Promise<CacheLookupResult<T>>
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Set an entry in the cache
|
|
364
|
+
*/
|
|
365
|
+
set(key: CacheKey | string, value: T, ttlMs?: number): Promise<boolean>
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Delete an entry from the cache
|
|
369
|
+
*/
|
|
370
|
+
delete(key: CacheKey | string): Promise<boolean>
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Check if an entry exists
|
|
374
|
+
*/
|
|
375
|
+
has(key: CacheKey | string): Promise<boolean>
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Clear all entries
|
|
379
|
+
*/
|
|
380
|
+
clear(): Promise<void>
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Get cache statistics
|
|
384
|
+
*/
|
|
385
|
+
getStats(): ProofCacheStats
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Get all keys matching a pattern
|
|
389
|
+
*/
|
|
390
|
+
keys(pattern?: string): Promise<string[]>
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Add an event listener
|
|
394
|
+
*/
|
|
395
|
+
addEventListener(listener: CacheEventListener): void
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Remove an event listener
|
|
399
|
+
*/
|
|
400
|
+
removeEventListener(listener: CacheEventListener): void
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* LRU cache interface
|
|
405
|
+
*/
|
|
406
|
+
export interface ILRUCache<T = SingleProof> extends IProofCache<T> {
|
|
407
|
+
/**
|
|
408
|
+
* Get the current size in bytes
|
|
409
|
+
*/
|
|
410
|
+
getSizeBytes(): number
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Get the entry count
|
|
414
|
+
*/
|
|
415
|
+
getEntryCount(): number
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* Manually trigger eviction
|
|
419
|
+
*/
|
|
420
|
+
evict(count?: number): number
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Get entries in LRU order
|
|
424
|
+
*/
|
|
425
|
+
getEntriesLRU(): CacheEntry<T>[]
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Dispose of the cache and cleanup resources
|
|
429
|
+
*/
|
|
430
|
+
dispose(): void
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Persistent cache interface
|
|
435
|
+
*/
|
|
436
|
+
export interface IPersistentCache<T = SingleProof> extends IProofCache<T> {
|
|
437
|
+
/**
|
|
438
|
+
* Initialize the persistent storage
|
|
439
|
+
*/
|
|
440
|
+
initialize(): Promise<void>
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Close the persistent storage
|
|
444
|
+
*/
|
|
445
|
+
close(): Promise<void>
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Check if storage is available
|
|
449
|
+
*/
|
|
450
|
+
isAvailable(): boolean
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Get storage usage information
|
|
454
|
+
*/
|
|
455
|
+
getStorageInfo(): Promise<{
|
|
456
|
+
used: number
|
|
457
|
+
available: number
|
|
458
|
+
quota: number
|
|
459
|
+
}>
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Compact the storage (remove expired, defragment)
|
|
463
|
+
*/
|
|
464
|
+
compact(): Promise<void>
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Multi-tier cache interface
|
|
469
|
+
*/
|
|
470
|
+
export interface IMultiTierCache<T = SingleProof> extends IProofCache<T> {
|
|
471
|
+
/**
|
|
472
|
+
* Get the memory cache tier
|
|
473
|
+
*/
|
|
474
|
+
getMemoryCache(): ILRUCache<T>
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Get the persistent cache tier (if available)
|
|
478
|
+
*/
|
|
479
|
+
getPersistentCache(): IPersistentCache<T> | null
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Warm the cache with specific keys
|
|
483
|
+
*/
|
|
484
|
+
warm(keys: CacheKeyComponents[]): Promise<WarmingResult>
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Start automatic cache warming
|
|
488
|
+
*/
|
|
489
|
+
startWarming(config?: CacheWarmingConfig): void
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* Stop automatic cache warming
|
|
493
|
+
*/
|
|
494
|
+
stopWarming(): void
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* Apply invalidation rules
|
|
498
|
+
*/
|
|
499
|
+
invalidate(rules: InvalidationRule[]): Promise<number>
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Dispose of the cache and cleanup resources
|
|
503
|
+
*/
|
|
504
|
+
dispose(): Promise<void>
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/**
|
|
508
|
+
* Verification key cache (specialized for VKs)
|
|
509
|
+
*/
|
|
510
|
+
export interface IVerificationKeyCache {
|
|
511
|
+
/**
|
|
512
|
+
* Get a verification key
|
|
513
|
+
*/
|
|
514
|
+
getVK(system: ProofSystem, circuitId: string): Promise<string | null>
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Set a verification key
|
|
518
|
+
*/
|
|
519
|
+
setVK(system: ProofSystem, circuitId: string, vk: string): Promise<void>
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* Preload verification keys for circuits
|
|
523
|
+
*/
|
|
524
|
+
preloadVKs(circuits: Array<{ system: ProofSystem; circuitId: string }>): Promise<void>
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* Compiled circuit cache (specialized for compiled circuits)
|
|
529
|
+
*/
|
|
530
|
+
export interface ICompiledCircuitCache {
|
|
531
|
+
/**
|
|
532
|
+
* Get a compiled circuit
|
|
533
|
+
*/
|
|
534
|
+
getCircuit(system: ProofSystem, circuitId: string): Promise<Uint8Array | null>
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Set a compiled circuit
|
|
538
|
+
*/
|
|
539
|
+
setCircuit(system: ProofSystem, circuitId: string, circuit: Uint8Array): Promise<void>
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Check if circuit is compiled and cached
|
|
543
|
+
*/
|
|
544
|
+
hasCircuit(system: ProofSystem, circuitId: string): Promise<boolean>
|
|
545
|
+
}
|