@kohaku-eth/tornado-cash 0.0.1 → 0.0.2-alpha.10

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/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # @kohaku-eth/tornado-cash
2
+
3
+ > [!IMPORTANT]
4
+ > THIS PACKAGE IS NOT READY FOR PRODUCTION USE AND CONTAINS UNAUDITED CODE. USE WITH CAUTION AND ENTIRELY AT YOUR OWN RISK. POSSIBILITY OF BREAKING CHANGES IN SUBSEQUENT VERSIONS.
5
+
6
+ Cross-platform Tornado Cash Typescript SDK with support for kohaku's standard interfaces.
7
+
8
+ ## Installation
9
+
10
+ ```sh
11
+ pnpm add @kohaku-eth/tornado-cash
12
+ ```
@@ -0,0 +1,528 @@
1
+ import { Broadcaster } from '@kohaku-eth/plugins/broadcaster';
2
+ import { Host, ChainId, Storage, PrivateOperation, PublicOperation, AssetAmount, ERC20AssetId, PluginInstance, AccountId } from '@kohaku-eth/plugins';
3
+ import { combineReducers } from '@reduxjs/toolkit';
4
+ import { ParseAbiItem, SignedAuthorization, Hash, Address as Address$2 } from 'viem';
5
+ import { TxData } from '@kohaku-eth/provider';
6
+ import { Address as Address$1 } from 'ox/Address';
7
+
8
+ type Nullifier$1 = bigint & {};
9
+ type NullifierHash = bigint & {};
10
+ type Address = bigint & {};
11
+ type Commitment$1 = bigint & {};
12
+ interface IContract {
13
+ address: Address;
14
+ }
15
+ interface IScrapeableContract extends IContract {
16
+ deploymentBlock: bigint;
17
+ }
18
+
19
+ interface Secret {
20
+ nullifier: Nullifier$1;
21
+ salt: bigint;
22
+ commitment: Commitment$1;
23
+ nullifierHash: NullifierHash;
24
+ }
25
+ type BaseDeriveSecretParams = {
26
+ poolAddress: bigint;
27
+ chainId: bigint;
28
+ };
29
+ type DeriveDepositSecretParams = BaseDeriveSecretParams & {
30
+ depositIndex: number;
31
+ };
32
+ interface ISecretManager {
33
+ getDepositSecrets: (params: DeriveDepositSecretParams) => Promise<Secret>;
34
+ deriveEphemeralSigner: (params: DeriveDepositSecretParams) => Promise<`0x${string}`>;
35
+ }
36
+ interface SecretManagerParams {
37
+ host: Pick<Host, 'keystore'>;
38
+ accountIndex?: number;
39
+ }
40
+ declare function SecretManager({ host: { keystore }, accountIndex }: SecretManagerParams): Promise<ISecretManager>;
41
+
42
+ interface IRelayerStatusResponse {
43
+ currentQueue: number;
44
+ netId: number;
45
+ rewardAccount: string;
46
+ version: string;
47
+ tornadoServiceFee: number;
48
+ ethPrices: Record<string, string>;
49
+ }
50
+ interface ITornadoWithdrawRequest {
51
+ proof: `0x${string}`;
52
+ args: [`0x${string}`, `0x${string}`, `0x${string}`, `0x${string}`, `0x${string}`, `0x${string}`];
53
+ contract: `0x${string}`;
54
+ }
55
+ interface ITornadoWithdrawResponse {
56
+ id: string;
57
+ }
58
+ interface IRelayerClient {
59
+ getStatus(hostname: string): Promise<IRelayerStatusResponse>;
60
+ withdraw(relayerUrl: string, body: ITornadoWithdrawRequest): Promise<ITornadoWithdrawResponse>;
61
+ }
62
+
63
+ interface InstanceRegistryConfig extends IScrapeableContract {
64
+ lastDeployedOnBlock?: bigint;
65
+ }
66
+ interface ProtocolConfigState {
67
+ chainId: bigint;
68
+ ensSubdomainKey: string;
69
+ instanceRegistry: InstanceRegistryConfig;
70
+ relayerRegistry: IScrapeableContract;
71
+ aggregator: IContract;
72
+ }
73
+
74
+ type RootState = ReturnType<ReturnType<typeof combineReducers<typeof reducers>>>;
75
+ type PublicRootState = Omit<RootState, 'userSecrets'>;
76
+
77
+ interface IBaseEvent {
78
+ blockNumber: bigint;
79
+ transactionHash: bigint;
80
+ }
81
+ interface IPoolEvent extends IBaseEvent {
82
+ pool: Address;
83
+ }
84
+ interface IDepositEvent extends IPoolEvent {
85
+ commitment: Commitment$1;
86
+ leafIndex: number;
87
+ timestamp: bigint;
88
+ }
89
+ interface IWithdrawalEvent extends IPoolEvent {
90
+ to: Address;
91
+ nullifierHash: NullifierHash;
92
+ relayer: Address;
93
+ fee: bigint;
94
+ }
95
+ type IRawDepositEvent = Omit<IDepositEvent, 'pool'>;
96
+ type IRawWithdrawalEvent = Omit<IWithdrawalEvent, 'pool'>;
97
+ interface IRelayerRegisteredEvent extends IBaseEvent {
98
+ relayer: bigint;
99
+ ensName: string;
100
+ relayerAddress: Address;
101
+ stakedAmount: bigint;
102
+ }
103
+ interface IInstanceStateUpdated extends IBaseEvent {
104
+ address: Address;
105
+ state: 0 | 1;
106
+ }
107
+ interface IAsset {
108
+ name: string;
109
+ decimals: number;
110
+ address: Address;
111
+ symbol: string;
112
+ }
113
+
114
+ declare const POOL_EVENTS_SIGNATURES: {
115
+ readonly Deposited: {
116
+ readonly name: "Deposit";
117
+ readonly type: "event";
118
+ readonly inputs: readonly [{
119
+ readonly type: "bytes32";
120
+ readonly name: "commitment";
121
+ readonly indexed: true;
122
+ }, {
123
+ readonly type: "uint32";
124
+ readonly name: "leafIndex";
125
+ }, {
126
+ readonly type: "uint256";
127
+ readonly name: "timestamp";
128
+ }];
129
+ };
130
+ readonly Withdrawn: {
131
+ readonly name: "Withdrawal";
132
+ readonly type: "event";
133
+ readonly inputs: readonly [{
134
+ readonly type: "address";
135
+ readonly name: "to";
136
+ }, {
137
+ readonly type: "bytes32";
138
+ readonly name: "nullifierHash";
139
+ }, {
140
+ readonly type: "address";
141
+ readonly name: "relayer";
142
+ readonly indexed: true;
143
+ }, {
144
+ readonly type: "uint256";
145
+ readonly name: "fee";
146
+ }];
147
+ };
148
+ };
149
+ declare const RELAYER_REGISTRY_EVENTS_SIGNATURES: {
150
+ readonly RelayerRegistered: {
151
+ readonly name: "RelayerRegistered";
152
+ readonly type: "event";
153
+ readonly inputs: readonly [{
154
+ readonly type: "bytes32";
155
+ readonly name: "relayer";
156
+ }, {
157
+ readonly type: "string";
158
+ readonly name: "ensName";
159
+ }, {
160
+ readonly type: "address";
161
+ readonly name: "relayerAddress";
162
+ }, {
163
+ readonly type: "uint256";
164
+ readonly name: "stakedAmount";
165
+ }];
166
+ };
167
+ };
168
+ declare const INSTANCE_REGISTRY_EVENT_SIGNATURES: {
169
+ InstanceStateUpdated: {
170
+ readonly name: "InstanceStateUpdated";
171
+ readonly type: "event";
172
+ readonly inputs: readonly [{
173
+ readonly type: "address";
174
+ readonly name: "instance";
175
+ readonly indexed: true;
176
+ }, {
177
+ readonly type: "uint8";
178
+ readonly name: "state";
179
+ }];
180
+ };
181
+ };
182
+
183
+ type IEventsMap = Record<string, ParseAbiItem<string>>;
184
+ interface IGetEventsParams<T> {
185
+ events: T | T[];
186
+ fromBlock: bigint;
187
+ toBlock?: bigint;
188
+ address: bigint;
189
+ }
190
+ interface IRelayerRegistryEvents {
191
+ RelayerRegistered: IRelayerRegisteredEvent;
192
+ }
193
+ interface IPoolEvents {
194
+ Deposited: IRawDepositEvent;
195
+ Withdrawn: IRawWithdrawalEvent;
196
+ }
197
+ interface IInstanceRegistryEvents {
198
+ InstanceStateUpdated: IInstanceStateUpdated;
199
+ }
200
+ type IGroupedEvents<NamesTable extends Record<string, unknown>> = {
201
+ [key in keyof NamesTable]: NamesTable[key][];
202
+ };
203
+ type GetEventsFn<EventsMap extends IEventsMap, ParsedEvents extends {
204
+ [key in keyof EventsMap]: unknown;
205
+ }> = <const T extends keyof ParsedEvents = never>(params: IGetEventsParams<T>) => Promise<Pick<IGroupedEvents<ParsedEvents>, T> & {
206
+ fromBlock: bigint;
207
+ toBlock: bigint;
208
+ }>;
209
+ interface IPoolConfig {
210
+ poolAddress: Address;
211
+ isERC20: boolean;
212
+ token: Address;
213
+ state: 0 | 1;
214
+ uniswapPoolSwappingFee: number;
215
+ protocolFeePercentage: number;
216
+ denomination: bigint;
217
+ rootHistorySize: number;
218
+ }
219
+ interface IRelayerAggregatorData {
220
+ owner: Address;
221
+ balance: bigint;
222
+ isRegistered: boolean;
223
+ records: string[];
224
+ }
225
+ interface IDataService {
226
+ getPoolEvents: GetEventsFn<typeof POOL_EVENTS_SIGNATURES, IPoolEvents>;
227
+ getRelayerRegistryEvents: GetEventsFn<typeof RELAYER_REGISTRY_EVENTS_SIGNATURES, IRelayerRegistryEvents>;
228
+ getInstanceRegistryEvents: GetEventsFn<typeof INSTANCE_REGISTRY_EVENT_SIGNATURES, IInstanceRegistryEvents>;
229
+ getAsset(assetAddress: Address): Promise<IAsset>;
230
+ getAllPoolsAddresses(registryAddress: Address): Promise<Address[]>;
231
+ getPoolAsset(poolAddress: Address): Promise<Address>;
232
+ getPoolConfig(registryAddress: Address, poolAddress: Address): Promise<IPoolConfig>;
233
+ getChainId(): Promise<ChainId>;
234
+ getGasPrice(): Promise<bigint>;
235
+ getContractDeploymentBlock(address: Address, fromBlock?: bigint): Promise<bigint>;
236
+ getPoolStateRoot(poolAddress: Address): Promise<bigint>;
237
+ getPoolCurrentRootIndex(poolAddress: Address): Promise<number>;
238
+ isPoolRootValid(poolAddress: Address, root: bigint): Promise<boolean>;
239
+ getPoolHistoricalRoot(poolAddress: Address, index: number): Promise<bigint>;
240
+ getLatestBlockTimestamp(): Promise<bigint>;
241
+ getRelayerData(aggregatorAddress: Address, relayerNameHashes: bigint[], subdomains: string[]): Promise<IRelayerAggregatorData[]>;
242
+ getAccountNonce(accountAddress: Address): Promise<number>;
243
+ quoteEthToToken(amountInWei: bigint, tokenAddress: Address, poolFee: number): Promise<bigint>;
244
+ }
245
+
246
+ type SpecificAssetBalanceFn<isAsync extends boolean = false> = <const Adresses extends Address | Address[] = Address[], ReturnType = Adresses extends unknown[] ? Map<Address, bigint> : bigint>(assetAddress?: Adresses) => isAsync extends true ? Promise<ReturnType> : ReturnType;
247
+
248
+ interface TornadoWithdrawInputs {
249
+ nullifier: bigint;
250
+ secret: bigint;
251
+ pathElements: bigint[];
252
+ pathIndices: number[];
253
+ root: bigint;
254
+ nullifierHash: bigint;
255
+ recipient: bigint;
256
+ relayer: bigint;
257
+ fee: bigint;
258
+ refund: bigint;
259
+ }
260
+ interface TornadoProveOutput {
261
+ proof: `0x${string}`;
262
+ args: [
263
+ `0x${string}`,
264
+ `0x${string}`,
265
+ `0x${string}`,
266
+ `0x${string}`,
267
+ `0x${string}`,
268
+ `0x${string}`
269
+ ];
270
+ }
271
+ interface ITornadoProver {
272
+ prove(inputs: TornadoWithdrawInputs): Promise<TornadoProveOutput>;
273
+ }
274
+
275
+ interface IRelayerFeeConfig {
276
+ minFee: number;
277
+ maxFee: number;
278
+ }
279
+
280
+ interface StoreFactoryParams {
281
+ secretManagerFactory: () => Promise<ISecretManager>;
282
+ dataService: IDataService;
283
+ relayerClient: IRelayerClient;
284
+ paymasterConfig: IChainsPaymastersConfig;
285
+ storageToSyncTo?: Storage;
286
+ protocolConfig: TCProtocolConfig;
287
+ relayerConfig?: IRelayerFeeConfig;
288
+ proverFactory: () => Promise<ITornadoProver>;
289
+ initialState?: () => Promise<Record<string, PublicRootState>>;
290
+ }
291
+
292
+ declare enum DepositStrategy {
293
+ MaxAnonimitySet = 0,
294
+ MinFee = 1
295
+ }
296
+
297
+ interface SignedDelegation {
298
+ senderAddress: `0x${string}`;
299
+ authorization: SignedAuthorization;
300
+ }
301
+ interface IPaymasterWithdrawalPayload {
302
+ mode: 'paymaster';
303
+ proof: TornadoProveOutput;
304
+ poolAddress: Address;
305
+ isERC20: boolean;
306
+ delegation?: SignedDelegation;
307
+ }
308
+ interface PaymasterBroadcastResult {
309
+ userOpHash: Hash;
310
+ }
311
+ interface IPaymasterBroadcasterClient {
312
+ broadcast(withdrawals: IPaymasterWithdrawalPayload[]): Promise<PaymasterBroadcastResult[]>;
313
+ }
314
+
315
+ type DelegationConfig = {
316
+ mode: 'deterministic';
317
+ path?: string;
318
+ } | {
319
+ mode: 'random';
320
+ };
321
+ type StringAddress = `0x${string}`;
322
+ interface IPaymasterConfig {
323
+ paymasterAddress: StringAddress;
324
+ entryPointAddress: StringAddress;
325
+ poolsAccountsMap: Record<StringAddress, StringAddress>;
326
+ bundlerUrl: string;
327
+ }
328
+ type IChainsPaymastersConfig = Record<number, IPaymasterConfig>;
329
+ interface IRelayerWithdrawalPayload {
330
+ mode: 'relayer';
331
+ proof: TornadoProveOutput;
332
+ poolAddress: Address;
333
+ relayerUrl: string;
334
+ }
335
+ type IWithdrawalPayload = IRelayerWithdrawalPayload | IPaymasterWithdrawalPayload;
336
+ interface TCPrivateOperation<Mode extends IWithdrawalPayload['mode'] = 'relayer' | 'paymaster'> extends PrivateOperation {
337
+ withdrawals: (IWithdrawalPayload & {
338
+ mode: Mode;
339
+ })[];
340
+ }
341
+ interface TCPublicOperation extends PublicOperation {
342
+ txns: TxData[];
343
+ }
344
+ interface ITornadoArtifacts {
345
+ circuitText: string;
346
+ provingKey: ArrayBuffer;
347
+ }
348
+ type TCProtocolConfig = Omit<ProtocolConfigState, 'chainId'>;
349
+ interface PrivacyPoolsV1ProtocolParams {
350
+ accountIndex?: number;
351
+ paymasterConfig: IChainsPaymastersConfig;
352
+ secretManagerFactory: (params: SecretManagerParams) => Promise<ISecretManager>;
353
+ stateManager: (params: StoreFactoryParams) => Promise<IStateManager>;
354
+ relayerClientFactory: () => IRelayerClient;
355
+ protocolConfig: TCProtocolConfig;
356
+ relayerConfig?: IRelayerFeeConfig;
357
+ artifactsLoader?: () => Promise<ITornadoArtifacts>;
358
+ proverFactory?: () => Promise<ITornadoProver>;
359
+ initialState?: () => Promise<Record<string, PublicRootState>>;
360
+ stateManagerWorkerUrl?: string;
361
+ }
362
+ interface IBaseOperationParams {
363
+ }
364
+ interface IDepositOperationParams extends IBaseOperationParams {
365
+ asset: Address;
366
+ amount: bigint;
367
+ strategy: DepositStrategy;
368
+ }
369
+ interface IWithdrawBaseParams extends Omit<IDepositOperationParams, 'amount' | 'strategy'> {
370
+ amount?: bigint;
371
+ recipient: Address;
372
+ }
373
+ interface IRelayerWithdrawParams extends IWithdrawBaseParams {
374
+ mode: 'relayer';
375
+ preferredRelayersEns?: string[];
376
+ }
377
+ interface IPaymasterWithdrawParams extends IWithdrawBaseParams {
378
+ mode: 'paymaster';
379
+ delegation?: DelegationConfig;
380
+ }
381
+ type IWithdrawapOperationParams = IRelayerWithdrawParams | IPaymasterWithdrawParams;
382
+ type StoreKey = `${string}-${string}`;
383
+ type StoreStorageKey = `tornado-cash-state-${StoreKey}`;
384
+ interface IStateManager {
385
+ /**
386
+ * Queries the chain and updates its state
387
+ */
388
+ sync: () => Promise<void>;
389
+ /**
390
+ * Generates a deposit payload for the signer
391
+ */
392
+ getDepositPayload: (params: IDepositOperationParams) => Promise<TxData[]>;
393
+ /**
394
+ * Calls the relayer to submit withdrawals and returns job IDs
395
+ */
396
+ getWithdrawalPayloads: (params: IWithdrawapOperationParams) => Promise<IWithdrawalPayload[]>;
397
+ /**
398
+ * Gets the balance of the specified assets.
399
+ * All assets if not specified.
400
+ */
401
+ getBalances: SpecificAssetBalanceFn<true>;
402
+ dumpState: () => Record<StoreStorageKey, PublicRootState>;
403
+ }
404
+
405
+ type TCBroadcasterParameters = {
406
+ relayerClientFactory?: () => IRelayerClient;
407
+ paymasterConfig?: IChainsPaymastersConfig;
408
+ paymasterClientFactory?: () => IPaymasterBroadcasterClient;
409
+ };
410
+ type TCBroadcaster = Broadcaster<TCPrivateOperation, ITornadoWithdrawResponse[]>;
411
+ interface TCBaseCredential {
412
+ accountIndex: number;
413
+ }
414
+ interface TCPluginParameters extends TCBroadcasterParameters, TCBaseCredential {
415
+ protocolConfig: TCProtocolConfig;
416
+ relayerConfig?: IRelayerFeeConfig;
417
+ initialState?: PrivacyPoolsV1ProtocolParams['initialState'];
418
+ artifacts: ITornadoArtifacts;
419
+ stateManagerWorkerUrl?: string;
420
+ }
421
+ type TCAddress = Address$1;
422
+ type TCAssetAmount<Tag extends string | undefined = undefined> = AssetAmount<ERC20AssetId, bigint, Tag>;
423
+ type TCAssetBalance = TCAssetAmount;
424
+ interface TCRelayerUnshieldOptions {
425
+ mode: 'relayer';
426
+ preferredRelayersEns?: string[];
427
+ }
428
+ interface TCPaymasterUnshieldOptions {
429
+ mode: 'paymaster';
430
+ delegation?: DelegationConfig;
431
+ }
432
+ type TCPrepareUnshieldOptions = TCRelayerUnshieldOptions | TCPaymasterUnshieldOptions;
433
+ interface TCPrepareShieldOptions {
434
+ strategy: DepositStrategy;
435
+ }
436
+ type TCInstance = PluginInstance<TCAddress, {
437
+ features: {
438
+ prepareShield: true;
439
+ prepareUnshield: true;
440
+ };
441
+ assetAmounts: {
442
+ input: TCAssetAmount;
443
+ internal: TCAssetAmount;
444
+ output: TCAssetAmount;
445
+ read: TCAssetBalance;
446
+ };
447
+ extras: {
448
+ sync(): Promise<void>;
449
+ prepareShield(asset: TCAssetAmount, options: TCPrepareShieldOptions): Promise<TCPublicOperation>;
450
+ prepareUnshield(asset: TCAssetAmount, to: Address$1, options: TCRelayerUnshieldOptions): Promise<TCPrivateOperation<'relayer'>>;
451
+ prepareUnshield(asset: TCAssetAmount, to: Address$1, options: TCPaymasterUnshieldOptions): Promise<TCPrivateOperation<'paymaster'>>;
452
+ };
453
+ publicOp: TCPublicOperation;
454
+ privateOp: TCPrivateOperation;
455
+ }>;
456
+
457
+ declare const createTCBroadcaster: (host: Host, params?: TCBroadcasterParameters) => TCBroadcaster;
458
+ declare const createTCPlugin: (host: Host, params: TCPluginParameters) => TCInstance;
459
+
460
+ type RequireOnly<T, Keys extends keyof T> = Partial<T> & Pick<T, Keys>;
461
+ declare class TornadoCashProtocol implements TCInstance {
462
+ readonly host: Host;
463
+ private stateManager;
464
+ constructor(host: Host, { accountIndex, initialState, protocolConfig, artifactsLoader, stateManagerWorkerUrl, relayerConfig, paymasterConfig, relayerClientFactory }: RequireOnly<PrivacyPoolsV1ProtocolParams, 'protocolConfig'>);
465
+ instanceId: () => Promise<"0x1">;
466
+ /**
467
+ * Only process supported assets or error out?
468
+ * Returns the balances of the requested assets.
469
+ * The assets retain the provided order. If an asset is not supported its balance will be 0
470
+ */
471
+ balance(assets?: ERC20AssetId[]): Promise<TCAssetBalance[]>;
472
+ prepareShield(assets: TCAssetAmount, options?: TCPrepareShieldOptions | `0x${string}`): Promise<TCPublicOperation>;
473
+ prepareUnshield(assets: AssetAmount, to: AccountId, options?: TCRelayerUnshieldOptions): Promise<TCPrivateOperation<'relayer'>>;
474
+ prepareUnshield(assets: AssetAmount, to: AccountId, options?: TCPaymasterUnshieldOptions): Promise<TCPrivateOperation<'paymaster'>>;
475
+ sync(): Promise<void>;
476
+ dumpState(): Promise<Record<`tornado-cash-state-${string}-${string}`, PublicRootState>>;
477
+ }
478
+
479
+ interface Commitment {
480
+ hash: string;
481
+ token: Address$2;
482
+ value: bigint;
483
+ randomness: Uint8Array;
484
+ spent: boolean;
485
+ index?: number;
486
+ }
487
+ interface Nullifier {
488
+ hash: string;
489
+ commitment: Commitment;
490
+ }
491
+
492
+ declare const E_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
493
+ declare const TornadoCashConfigs: {
494
+ readonly 1: {
495
+ readonly ensSubdomainKey: "mainnet-tornado";
496
+ readonly instanceRegistry: {
497
+ readonly address: 1016476918593216659678085511611900461079531923729n;
498
+ readonly deploymentBlock: 14173395n;
499
+ };
500
+ readonly relayerRegistry: {
501
+ readonly address: 507584191175595477754377491521282335005092363762n;
502
+ readonly deploymentBlock: 14173129n;
503
+ };
504
+ readonly aggregator: {
505
+ readonly address: 1329937909414098670091808248270266272594403334985n;
506
+ };
507
+ readonly weth: 1097077688018008265106216665536940668749033598146n;
508
+ readonly uniswapQuoterV2: 559478315000592720989748010348495519536007655966n;
509
+ };
510
+ readonly 11155111: {
511
+ readonly ensSubdomainKey: "sepolia-tornado";
512
+ readonly instanceRegistry: {
513
+ readonly address: 447664927873626138772898946646079239273904189887n;
514
+ readonly deploymentBlock: 5594611n;
515
+ };
516
+ readonly relayerRegistry: {
517
+ readonly address: 1224003368246423020781607736948693909640296222714n;
518
+ readonly deploymentBlock: 5594660n;
519
+ };
520
+ readonly aggregator: {
521
+ readonly address: 368418168928372787409224158240737522620871644738n;
522
+ };
523
+ readonly weth: 1461358721292675304620367034492138750323989506836n;
524
+ readonly uniswapQuoterV2: 1353730886217084326490181093487957540173111046067n;
525
+ };
526
+ };
527
+
528
+ export { type Commitment, DepositStrategy, E_ADDRESS, type ISecretManager, type Nullifier, SecretManager, type SecretManagerParams, type TCAddress, type TCAssetAmount, type TCAssetBalance, type TCBroadcaster, type TCBroadcasterParameters, type TCInstance, type TCPaymasterUnshieldOptions, type TCPluginParameters, type TCPrepareShieldOptions, type TCPrepareUnshieldOptions, type TCRelayerUnshieldOptions, TornadoCashConfigs, TornadoCashProtocol, createTCBroadcaster, createTCPlugin };