Built files

This commit is contained in:
Tornado Contrib 2024-04-29 00:36:26 +00:00
parent 0d8c3cc7a4
commit 7dcd41c2c3
Signed by: tornadocontrib
GPG Key ID: 60B4DF1A076C64B1
25 changed files with 83335 additions and 6060 deletions

23743
dist/cli.js vendored

File diff suppressed because one or more lines are too long

2649
dist/index.js vendored

File diff suppressed because it is too large Load Diff

2621
dist/index.mjs vendored

File diff suppressed because it is too large Load Diff

30345
dist/index.umd.js vendored

File diff suppressed because one or more lines are too long

9
dist/program.d.ts vendored

@ -1,13 +1,14 @@
import 'dotenv/config'; import 'dotenv/config';
import { Command } from 'commander'; import { Command } from 'commander';
import { JsonRpcProvider, Provider, TransactionLike, Wallet, VoidSigner, BigNumberish } from 'ethers'; import { JsonRpcProvider, Provider, TransactionLike, Wallet, VoidSigner } from 'ethers';
import { getProviderOptions, TornadoWallet, TornadoVoidSigner, Relayer, RelayerInfo, RelayerError, RelayerClient, fetchDataOptions, Config } from './services'; import { getProviderOptions, TornadoWallet, TornadoVoidSigner, Relayer, RelayerInfo, RelayerError, RelayerClient, fetchDataOptions, NetIdType, Config } from './services';
export type commonProgramOptions = { export type commonProgramOptions = {
rpc?: string; rpc?: string;
ethRpc?: string; ethRpc?: string;
graph?: string; graph?: string;
ethGraph?: string; ethGraph?: string;
disableGraph?: boolean; disableGraph?: boolean;
accountKey?: string;
relayer?: string; relayer?: string;
walletWithdrawal?: boolean; walletWithdrawal?: boolean;
torPort?: number; torPort?: number;
@ -29,7 +30,7 @@ export declare function getProgramOptions(options: commonProgramOptions): Promis
fetchDataOptions: fetchDataOptions; fetchDataOptions: fetchDataOptions;
}>; }>;
export declare function getProgramGraphAPI(options: commonProgramOptions, config: Config): string; export declare function getProgramGraphAPI(options: commonProgramOptions, config: Config): string;
export declare function getProgramProvider(netId: BigNumberish, rpcUrl: string | undefined, config: Config, providerOptions?: getProviderOptions): JsonRpcProvider; export declare function getProgramProvider(netId: NetIdType, rpcUrl: string | undefined, config: Config, providerOptions?: getProviderOptions): JsonRpcProvider;
export declare function getProgramSigner({ options, provider, }: { export declare function getProgramSigner({ options, provider, }: {
options: commonProgramOptions; options: commonProgramOptions;
provider: Provider; provider: Provider;
@ -37,7 +38,7 @@ export declare function getProgramSigner({ options, provider, }: {
export declare function getProgramRelayer({ options, fetchDataOptions, netId, }: { export declare function getProgramRelayer({ options, fetchDataOptions, netId, }: {
options: commonProgramOptions; options: commonProgramOptions;
fetchDataOptions?: fetchDataOptions; fetchDataOptions?: fetchDataOptions;
netId: number | string; netId: NetIdType;
}): Promise<{ }): Promise<{
validRelayers?: RelayerInfo[] | Relayer[]; validRelayers?: RelayerInfo[] | Relayer[];
invalidRelayers?: RelayerError[]; invalidRelayers?: RelayerError[];

@ -3,10 +3,10 @@ import { BaseEvents, MinimalEvents } from './events';
export declare function existsAsync(fileOrDir: string): Promise<boolean>; export declare function existsAsync(fileOrDir: string): Promise<boolean>;
export declare function zipAsync(file: AsyncZippable): Promise<Uint8Array>; export declare function zipAsync(file: AsyncZippable): Promise<Uint8Array>;
export declare function unzipAsync(data: Uint8Array): Promise<Unzipped>; export declare function unzipAsync(data: Uint8Array): Promise<Unzipped>;
export declare function saveEvents<T extends MinimalEvents>({ name, userDirectory, events, }: { export declare function saveUserFile({ fileName, userDirectory, dataString, }: {
name: string; fileName: string;
userDirectory: string; userDirectory: string;
events: T[]; dataString: string;
}): Promise<void>; }): Promise<void>;
export declare function loadSavedEvents<T extends MinimalEvents>({ name, userDirectory, deployedBlock, }: { export declare function loadSavedEvents<T extends MinimalEvents>({ name, userDirectory, deployedBlock, }: {
name: string; name: string;

@ -1,7 +1,8 @@
import type { NetIdType } from './networkConfig';
export type DepositType = { export type DepositType = {
currency: string; currency: string;
amount: string; amount: string;
netId: string | number; netId: NetIdType;
}; };
export type createDepositParams = { export type createDepositParams = {
nullifier: bigint; nullifier: bigint;
@ -34,7 +35,7 @@ export declare function createDeposit({ nullifier, secret }: createDepositParams
export interface DepositConstructor { export interface DepositConstructor {
currency: string; currency: string;
amount: string; amount: string;
netId: number; netId: NetIdType;
nullifier: bigint; nullifier: bigint;
secret: bigint; secret: bigint;
note: string; note: string;
@ -46,7 +47,7 @@ export interface DepositConstructor {
export declare class Deposit { export declare class Deposit {
currency: string; currency: string;
amount: string; amount: string;
netId: number; netId: NetIdType;
nullifier: bigint; nullifier: bigint;
secret: bigint; secret: bigint;
note: string; note: string;
@ -65,7 +66,7 @@ export type parsedInvoiceExec = DepositType & {
export declare class Invoice { export declare class Invoice {
currency: string; currency: string;
amount: string; amount: string;
netId: number; netId: NetIdType;
commitment: string; commitment: string;
invoice: string; invoice: string;
constructor(invoiceString: string); constructor(invoiceString: string);

48
dist/services/encryptedNotes.d.ts vendored Normal file

@ -0,0 +1,48 @@
import { EthEncryptedData } from '@metamask/eth-sig-util';
import { Echoer } from '@tornado/contracts';
import { Wallet } from 'ethers';
import { EchoEvents, EncryptedNotesEvents } from './events';
import type { NetIdType } from './networkConfig';
export interface NoteToEncrypt {
address: string;
noteHex: string;
}
export interface DecryptedNotes {
blockNumber: number;
address: string;
noteHex: string;
}
export declare function packEncryptedMessage({ nonce, ephemPublicKey, ciphertext }: EthEncryptedData): string;
export declare function unpackEncryptedMessage(encryptedMessage: string): EthEncryptedData & {
messageBuff: string;
};
export interface NoteAccountConstructor {
netId: NetIdType;
blockNumber?: number;
recoveryKey?: string;
Echoer: Echoer;
}
export declare class NoteAccount {
netId: NetIdType;
blockNumber?: number;
recoveryKey: string;
recoveryAddress: string;
recoveryPublicKey: string;
Echoer: Echoer;
constructor({ netId, blockNumber, recoveryKey, Echoer }: NoteAccountConstructor);
/**
* Intends to mock eth_getEncryptionPublicKey behavior from MetaMask
* In order to make the recoveryKey retrival from Echoer possible from the bare private key
*/
static getWalletPublicKey(wallet: Wallet): string;
getEncryptedAccount(walletPublicKey: string): {
encryptedData: EthEncryptedData;
data: string;
};
/**
* Decrypt Echoer backuped note encryption account with private keys
*/
decryptAccountsWithWallet(wallet: Wallet, events: EchoEvents[]): NoteAccount[];
decryptNotes(events: EncryptedNotesEvents[]): DecryptedNotes[];
encryptNote({ address, noteHex }: NoteToEncrypt): string;
}

@ -1,12 +1,13 @@
import { BaseContract, Provider, EventLog, ContractEventName } from 'ethers'; import { BaseContract, Provider, EventLog, ContractEventName } from 'ethers';
import type { Tornado, TornadoRouter, TornadoProxyLight, Governance, RelayerRegistry } from '@tornado/contracts'; import type { Tornado, TornadoRouter, TornadoProxyLight, Governance, RelayerRegistry, Echoer } from '@tornado/contracts';
import { BatchEventsService, BatchBlockService, BatchTransactionService, BatchEventOnProgress, BatchBlockOnProgress } from '../batch'; import { BatchEventsService, BatchBlockService, BatchTransactionService, BatchEventOnProgress, BatchBlockOnProgress } from '../batch';
import { fetchDataOptions } from '../providers'; import { fetchDataOptions } from '../providers';
import type { BaseEvents, MinimalEvents, DepositsEvents, WithdrawalsEvents, EncryptedNotesEvents, GovernanceProposalCreatedEvents, GovernanceVotedEvents, GovernanceDelegatedEvents, GovernanceUndelegatedEvents, RegistersEvents } from './types'; import type { NetIdType } from '../networkConfig';
import type { BaseEvents, MinimalEvents, DepositsEvents, WithdrawalsEvents, EncryptedNotesEvents, AllGovernanceEvents, RegistersEvents, EchoEvents } from './types';
export declare const DEPOSIT = "deposit"; export declare const DEPOSIT = "deposit";
export declare const WITHDRAWAL = "withdrawal"; export declare const WITHDRAWAL = "withdrawal";
export type BaseEventsServiceConstructor = { export type BaseEventsServiceConstructor = {
netId: number | string; netId: NetIdType;
provider: Provider; provider: Provider;
graphApi?: string; graphApi?: string;
subgraphName?: string; subgraphName?: string;
@ -28,7 +29,7 @@ export type BaseGraphParams = {
onProgress?: BatchGraphOnProgress; onProgress?: BatchGraphOnProgress;
}; };
export declare class BaseEventsService<EventType extends MinimalEvents> { export declare class BaseEventsService<EventType extends MinimalEvents> {
netId: number | string; netId: NetIdType;
provider: Provider; provider: Provider;
graphApi?: string; graphApi?: string;
subgraphName?: string; subgraphName?: string;
@ -81,7 +82,7 @@ export declare class BaseEventsService<EventType extends MinimalEvents> {
}>; }>;
} }
export type BaseDepositsServiceConstructor = { export type BaseDepositsServiceConstructor = {
netId: number | string; netId: NetIdType;
provider: Provider; provider: Provider;
graphApi?: string; graphApi?: string;
subgraphName?: string; subgraphName?: string;
@ -110,8 +111,27 @@ export declare class BaseDepositsService extends BaseEventsService<DepositsEvent
events: (DepositsEvents | WithdrawalsEvents)[]; events: (DepositsEvents | WithdrawalsEvents)[];
}): void; }): void;
} }
export type BaseEchoServiceConstructor = {
netId: NetIdType;
provider: Provider;
graphApi?: string;
subgraphName?: string;
Echoer: Echoer;
deployedBlock?: number;
fetchDataOptions?: fetchDataOptions;
};
export declare class BaseEchoService extends BaseEventsService<EchoEvents> {
constructor({ netId, provider, graphApi, subgraphName, Echoer, deployedBlock, fetchDataOptions, }: BaseEchoServiceConstructor);
getInstanceName(): string;
getType(): string;
getGraphMethod(): string;
formatEvents(events: EventLog[]): Promise<EchoEvents[]>;
getEventsFromGraph({ fromBlock }: {
fromBlock: number;
}): Promise<BaseEvents<EchoEvents>>;
}
export type BaseEncryptedNotesServiceConstructor = { export type BaseEncryptedNotesServiceConstructor = {
netId: number | string; netId: NetIdType;
provider: Provider; provider: Provider;
graphApi?: string; graphApi?: string;
subgraphName?: string; subgraphName?: string;
@ -126,9 +146,8 @@ export declare class BaseEncryptedNotesService extends BaseEventsService<Encrypt
getGraphMethod(): string; getGraphMethod(): string;
formatEvents(events: EventLog[]): Promise<EncryptedNotesEvents[]>; formatEvents(events: EventLog[]): Promise<EncryptedNotesEvents[]>;
} }
export type BaseGovernanceEventTypes = GovernanceProposalCreatedEvents | GovernanceVotedEvents | GovernanceDelegatedEvents | GovernanceUndelegatedEvents;
export type BaseGovernanceServiceConstructor = { export type BaseGovernanceServiceConstructor = {
netId: number | string; netId: NetIdType;
provider: Provider; provider: Provider;
graphApi?: string; graphApi?: string;
subgraphName?: string; subgraphName?: string;
@ -136,19 +155,19 @@ export type BaseGovernanceServiceConstructor = {
deployedBlock?: number; deployedBlock?: number;
fetchDataOptions?: fetchDataOptions; fetchDataOptions?: fetchDataOptions;
}; };
export declare class BaseGovernanceService extends BaseEventsService<BaseGovernanceEventTypes> { export declare class BaseGovernanceService extends BaseEventsService<AllGovernanceEvents> {
batchTransactionService: BatchTransactionService; batchTransactionService: BatchTransactionService;
constructor({ netId, provider, graphApi, subgraphName, Governance, deployedBlock, fetchDataOptions, }: BaseGovernanceServiceConstructor); constructor({ netId, provider, graphApi, subgraphName, Governance, deployedBlock, fetchDataOptions, }: BaseGovernanceServiceConstructor);
getInstanceName(): string; getInstanceName(): string;
getType(): string; getType(): string;
getGraphMethod(): string; getGraphMethod(): string;
formatEvents(events: EventLog[]): Promise<BaseGovernanceEventTypes[]>; formatEvents(events: EventLog[]): Promise<AllGovernanceEvents[]>;
getEventsFromGraph({ fromBlock }: { getEventsFromGraph({ fromBlock }: {
fromBlock: number; fromBlock: number;
}): Promise<BaseEvents<BaseGovernanceEventTypes>>; }): Promise<BaseEvents<AllGovernanceEvents>>;
} }
export type BaseRegistryServiceConstructor = { export type BaseRegistryServiceConstructor = {
netId: number | string; netId: NetIdType;
provider: Provider; provider: Provider;
graphApi?: string; graphApi?: string;
subgraphName?: string; subgraphName?: string;

@ -1,6 +1,6 @@
import { BatchBlockOnProgress, BatchEventOnProgress } from '../batch'; import { BatchBlockOnProgress, BatchEventOnProgress } from '../batch';
import { BaseDepositsService, BaseEncryptedNotesService, BaseGovernanceService, BaseRegistryService, BaseDepositsServiceConstructor, BaseEncryptedNotesServiceConstructor, BaseGovernanceServiceConstructor, BaseRegistryServiceConstructor, BaseGovernanceEventTypes } from './base'; import { BaseDepositsService, BaseEncryptedNotesService, BaseGovernanceService, BaseRegistryService, BaseDepositsServiceConstructor, BaseEncryptedNotesServiceConstructor, BaseGovernanceServiceConstructor, BaseRegistryServiceConstructor, BaseEchoServiceConstructor, BaseEchoService } from './base';
import type { BaseEvents, DepositsEvents, WithdrawalsEvents, EncryptedNotesEvents, RegistersEvents } from './types'; import type { BaseEvents, DepositsEvents, WithdrawalsEvents, EncryptedNotesEvents, RegistersEvents, AllGovernanceEvents, EchoEvents } from './types';
export type NodeDepositsServiceConstructor = BaseDepositsServiceConstructor & { export type NodeDepositsServiceConstructor = BaseDepositsServiceConstructor & {
cacheDirectory?: string; cacheDirectory?: string;
userDirectory?: string; userDirectory?: string;
@ -17,6 +17,20 @@ export declare class NodeDepositsService extends BaseDepositsService {
getEventsFromCache(): Promise<BaseEvents<DepositsEvents | WithdrawalsEvents>>; getEventsFromCache(): Promise<BaseEvents<DepositsEvents | WithdrawalsEvents>>;
saveEvents({ events, lastBlock }: BaseEvents<DepositsEvents | WithdrawalsEvents>): Promise<void>; saveEvents({ events, lastBlock }: BaseEvents<DepositsEvents | WithdrawalsEvents>): Promise<void>;
} }
export type NodeEchoServiceConstructor = BaseEchoServiceConstructor & {
cacheDirectory?: string;
userDirectory?: string;
};
export declare class NodeEchoService extends BaseEchoService {
cacheDirectory?: string;
userDirectory?: string;
constructor({ netId, provider, graphApi, subgraphName, Echoer, deployedBlock, fetchDataOptions, cacheDirectory, userDirectory, }: NodeEchoServiceConstructor);
updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
getEventsFromDB(): Promise<BaseEvents<EchoEvents>>;
getEventsFromCache(): Promise<BaseEvents<EchoEvents>>;
saveEvents({ events, lastBlock }: BaseEvents<EchoEvents>): Promise<void>;
}
export type NodeEncryptedNotesServiceConstructor = BaseEncryptedNotesServiceConstructor & { export type NodeEncryptedNotesServiceConstructor = BaseEncryptedNotesServiceConstructor & {
cacheDirectory?: string; cacheDirectory?: string;
userDirectory?: string; userDirectory?: string;
@ -42,9 +56,9 @@ export declare class NodeGovernanceService extends BaseGovernanceService {
updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void; updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void; updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
updateTransactionProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]): void; updateTransactionProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]): void;
getEventsFromDB(): Promise<BaseEvents<BaseGovernanceEventTypes>>; getEventsFromDB(): Promise<BaseEvents<AllGovernanceEvents>>;
getEventsFromCache(): Promise<BaseEvents<BaseGovernanceEventTypes>>; getEventsFromCache(): Promise<BaseEvents<AllGovernanceEvents>>;
saveEvents({ events, lastBlock }: BaseEvents<BaseGovernanceEventTypes>): Promise<void>; saveEvents({ events, lastBlock }: BaseEvents<AllGovernanceEvents>): Promise<void>;
} }
export type NodeRegistryServiceConstructor = BaseRegistryServiceConstructor & { export type NodeRegistryServiceConstructor = BaseRegistryServiceConstructor & {
cacheDirectory?: string; cacheDirectory?: string;

@ -39,6 +39,7 @@ export type GovernanceUndelegatedEvents = GovernanceEvents & {
account: string; account: string;
delegateFrom: string; delegateFrom: string;
}; };
export type AllGovernanceEvents = GovernanceProposalCreatedEvents | GovernanceVotedEvents | GovernanceDelegatedEvents | GovernanceUndelegatedEvents;
export type RegistersEvents = MinimalEvents & RelayerParams; export type RegistersEvents = MinimalEvents & RelayerParams;
export type DepositsEvents = MinimalEvents & { export type DepositsEvents = MinimalEvents & {
commitment: string; commitment: string;
@ -52,6 +53,10 @@ export type WithdrawalsEvents = MinimalEvents & {
fee: string; fee: string;
timestamp: number; timestamp: number;
}; };
export type EchoEvents = MinimalEvents & {
address: string;
encryptedAccount: string;
};
export type EncryptedNotesEvents = MinimalEvents & { export type EncryptedNotesEvents = MinimalEvents & {
encryptedNote: string; encryptedNote: string;
}; };

@ -1,5 +1,5 @@
import { fetchDataOptions } from '../providers'; import { fetchDataOptions } from '../providers';
import type { BaseGraphEvents, RegistersEvents, DepositsEvents, WithdrawalsEvents, EncryptedNotesEvents, BatchGraphOnProgress } from '../events'; import type { BaseGraphEvents, RegistersEvents, DepositsEvents, WithdrawalsEvents, EncryptedNotesEvents, BatchGraphOnProgress, EchoEvents, AllGovernanceEvents } from '../events';
export * from './queries'; export * from './queries';
export type queryGraphParams = { export type queryGraphParams = {
graphApi: string; graphApi: string;
@ -165,6 +165,29 @@ export interface getNoteAccountsReturns {
lastSyncBlock: null | number; lastSyncBlock: null | number;
} }
export declare function getNoteAccounts({ graphApi, subgraphName, address, fetchDataOptions, }: getNoteAccountsParams): Promise<getNoteAccountsReturns>; export declare function getNoteAccounts({ graphApi, subgraphName, address, fetchDataOptions, }: getNoteAccountsParams): Promise<getNoteAccountsReturns>;
export interface GraphEchoEvents {
noteAccounts: {
id: string;
blockNumber: string;
address: string;
encryptedAccount: string;
}[];
_meta: {
block: {
number: number;
};
hasIndexingErrors: boolean;
};
}
export interface getGraphEchoEventsParams {
graphApi: string;
subgraphName: string;
fromBlock: number;
fetchDataOptions?: fetchDataOptions;
onProgress?: BatchGraphOnProgress;
}
export declare function getGraphEchoEvents({ graphApi, subgraphName, fromBlock, fetchDataOptions, }: getGraphEchoEventsParams): Promise<GraphEchoEvents>;
export declare function getAllGraphEchoEvents({ graphApi, subgraphName, fromBlock, fetchDataOptions, onProgress, }: getGraphEchoEventsParams): Promise<BaseGraphEvents<EchoEvents>>;
export interface GraphEncryptedNotes { export interface GraphEncryptedNotes {
encryptedNotes: { encryptedNotes: {
blockNumber: string; blockNumber: string;
@ -188,3 +211,56 @@ export interface getEncryptedNotesParams {
} }
export declare function getEncryptedNotes({ graphApi, subgraphName, fromBlock, fetchDataOptions, }: getEncryptedNotesParams): Promise<GraphEncryptedNotes>; export declare function getEncryptedNotes({ graphApi, subgraphName, fromBlock, fetchDataOptions, }: getEncryptedNotesParams): Promise<GraphEncryptedNotes>;
export declare function getAllEncryptedNotes({ graphApi, subgraphName, fromBlock, fetchDataOptions, onProgress, }: getEncryptedNotesParams): Promise<BaseGraphEvents<EncryptedNotesEvents>>; export declare function getAllEncryptedNotes({ graphApi, subgraphName, fromBlock, fetchDataOptions, onProgress, }: getEncryptedNotesParams): Promise<BaseGraphEvents<EncryptedNotesEvents>>;
export interface GraphGovernanceEvents {
proposals: {
blockNumber: number;
logIndex: number;
transactionHash: string;
proposalId: number;
proposer: string;
target: string;
startTime: number;
endTime: number;
description: string;
}[];
votes: {
blockNumber: number;
logIndex: number;
transactionHash: string;
proposalId: number;
voter: string;
support: boolean;
votes: string;
from: string;
input: string;
}[];
delegates: {
blockNumber: number;
logIndex: number;
transactionHash: string;
account: string;
delegateTo: string;
}[];
undelegates: {
blockNumber: number;
logIndex: number;
transactionHash: string;
account: string;
delegateFrom: string;
}[];
_meta: {
block: {
number: number;
};
hasIndexingErrors: boolean;
};
}
export interface getGovernanceEventsParams {
graphApi: string;
subgraphName: string;
fromBlock: number;
fetchDataOptions?: fetchDataOptions;
onProgress?: BatchGraphOnProgress;
}
export declare function getGovernanceEvents({ graphApi, subgraphName, fromBlock, fetchDataOptions, }: getGovernanceEventsParams): Promise<GraphGovernanceEvents>;
export declare function getAllGovernanceEvents({ graphApi, subgraphName, fromBlock, fetchDataOptions, onProgress, }: getGovernanceEventsParams): Promise<BaseGraphEvents<AllGovernanceEvents>>;

@ -4,4 +4,7 @@ export declare const GET_REGISTERED = "\n query getRegistered($first: Int, $fro
export declare const GET_DEPOSITS = "\n query getDeposits($currency: String!, $amount: String!, $first: Int, $fromBlock: Int) {\n deposits(first: $first, orderBy: index, orderDirection: asc, where: { \n amount: $amount,\n currency: $currency,\n blockNumber_gte: $fromBlock\n }) {\n id\n blockNumber\n commitment\n index\n timestamp\n from\n }\n _meta {\n block {\n number\n }\n hasIndexingErrors\n }\n }\n"; export declare const GET_DEPOSITS = "\n query getDeposits($currency: String!, $amount: String!, $first: Int, $fromBlock: Int) {\n deposits(first: $first, orderBy: index, orderDirection: asc, where: { \n amount: $amount,\n currency: $currency,\n blockNumber_gte: $fromBlock\n }) {\n id\n blockNumber\n commitment\n index\n timestamp\n from\n }\n _meta {\n block {\n number\n }\n hasIndexingErrors\n }\n }\n";
export declare const GET_WITHDRAWALS = "\n query getWithdrawals($currency: String!, $amount: String!, $first: Int, $fromBlock: Int!) {\n withdrawals(first: $first, orderBy: blockNumber, orderDirection: asc, where: { \n currency: $currency,\n amount: $amount,\n blockNumber_gte: $fromBlock\n }) {\n id\n blockNumber\n nullifier\n to\n fee\n timestamp\n }\n _meta {\n block {\n number\n }\n hasIndexingErrors\n }\n }\n"; export declare const GET_WITHDRAWALS = "\n query getWithdrawals($currency: String!, $amount: String!, $first: Int, $fromBlock: Int!) {\n withdrawals(first: $first, orderBy: blockNumber, orderDirection: asc, where: { \n currency: $currency,\n amount: $amount,\n blockNumber_gte: $fromBlock\n }) {\n id\n blockNumber\n nullifier\n to\n fee\n timestamp\n }\n _meta {\n block {\n number\n }\n hasIndexingErrors\n }\n }\n";
export declare const GET_NOTE_ACCOUNTS = "\n query getNoteAccount($address: String!) {\n noteAccounts(where: { address: $address }) {\n id\n index\n address\n encryptedAccount\n }\n _meta {\n block {\n number\n }\n hasIndexingErrors\n }\n }\n"; export declare const GET_NOTE_ACCOUNTS = "\n query getNoteAccount($address: String!) {\n noteAccounts(where: { address: $address }) {\n id\n index\n address\n encryptedAccount\n }\n _meta {\n block {\n number\n }\n hasIndexingErrors\n }\n }\n";
export declare const GET_ECHO_EVENTS = "\n query getNoteAccounts($first: Int, $fromBlock: Int) {\n noteAccounts(first: $first, orderBy: blockNumber, orderDirection: asc, where: { blockNumber_gte: $fromBlock }) {\n id\n blockNumber\n address\n encryptedAccount\n }\n _meta {\n block {\n number\n }\n hasIndexingErrors\n }\n }\n";
export declare const GET_ENCRYPTED_NOTES = "\n query getEncryptedNotes($first: Int, $fromBlock: Int) {\n encryptedNotes(first: $first, orderBy: blockNumber, orderDirection: asc, where: { blockNumber_gte: $fromBlock }) {\n blockNumber\n index\n transactionHash\n encryptedNote\n }\n _meta {\n block {\n number\n }\n hasIndexingErrors\n }\n }\n"; export declare const GET_ENCRYPTED_NOTES = "\n query getEncryptedNotes($first: Int, $fromBlock: Int) {\n encryptedNotes(first: $first, orderBy: blockNumber, orderDirection: asc, where: { blockNumber_gte: $fromBlock }) {\n blockNumber\n index\n transactionHash\n encryptedNote\n }\n _meta {\n block {\n number\n }\n hasIndexingErrors\n }\n }\n";
export declare const GET_GOVERNANCE_EVENTS = "\n query getGovernanceEvents($first: Int, $fromBlock: Int) {\n proposals(first: $first, orderBy: blockNumber, orderDirection: asc, where: { blockNumber_gte: $fromBlock }) {\n blockNumber\n logIndex\n transactionHash\n proposalId\n proposer\n target\n startTime\n endTime\n description\n }\n votes(first: $first, orderBy: blockNumber, orderDirection: asc, where: { blockNumber_gte: $fromBlock }) {\n blockNumber\n logIndex\n transactionHash\n proposalId\n voter\n support\n votes\n from\n input\n }\n delegates(first: $first, orderBy: blockNumber, orderDirection: asc, where: { blockNumber_gte: $fromBlock }) {\n blockNumber\n logIndex\n transactionHash\n account\n delegateTo\n }\n undelegates(first: $first, orderBy: blockNumber, orderDirection: asc, where: { blockNumber_gte: $fromBlock }) {\n blockNumber\n logIndex\n transactionHash\n account\n delegateFrom\n }\n _meta {\n block {\n number\n }\n hasIndexingErrors\n }\n }\n";
export declare const GET_GOVERNANCE_APY = "\n stakeDailyBurns(first: 30, orderBy: date, orderDirection: desc) {\n id\n date\n dailyAmountBurned\n }\n";

@ -4,6 +4,7 @@ export * from './schemas';
export * from './batch'; export * from './batch';
export * from './data'; export * from './data';
export * from './deposits'; export * from './deposits';
export * from './encryptedNotes';
export * from './fees'; export * from './fees';
export * from './merkleTree'; export * from './merkleTree';
export * from './mimc'; export * from './mimc';
@ -15,5 +16,6 @@ export * from './prices';
export * from './providers'; export * from './providers';
export * from './relayerClient'; export * from './relayerClient';
export * from './tokens'; export * from './tokens';
export * from './treeCache';
export * from './utils'; export * from './utils';
export * from './websnark'; export * from './websnark';

@ -1,10 +1,11 @@
import { MerkleTree, Element } from '@tornado/fixed-merkle-tree'; import { MerkleTree, PartialMerkleTree, Element, TreeEdge } from '@tornado/fixed-merkle-tree';
import type { Tornado } from '@tornado/contracts'; import type { Tornado } from '@tornado/contracts';
import type { DepositType } from './deposits'; import type { DepositType } from './deposits';
import type { DepositsEvents } from './events'; import type { DepositsEvents } from './events';
import type { NetIdType } from './networkConfig';
export type MerkleTreeConstructor = DepositType & { export type MerkleTreeConstructor = DepositType & {
Tornado: Tornado; Tornado: Tornado;
commitment?: string; commitmentHex?: string;
merkleTreeHeight?: number; merkleTreeHeight?: number;
emptyElement?: string; emptyElement?: string;
merkleWorkerPath?: string; merkleWorkerPath?: string;
@ -12,18 +13,18 @@ export type MerkleTreeConstructor = DepositType & {
export declare class MerkleTreeService { export declare class MerkleTreeService {
currency: string; currency: string;
amount: string; amount: string;
netId: number; netId: NetIdType;
Tornado: Tornado; Tornado: Tornado;
commitment?: string; commitmentHex?: string;
instanceName: string; instanceName: string;
merkleTreeHeight: number; merkleTreeHeight: number;
emptyElement: string; emptyElement: string;
merkleWorkerPath?: string; merkleWorkerPath?: string;
constructor({ netId, amount, currency, Tornado, commitment, merkleTreeHeight, emptyElement, merkleWorkerPath, }: MerkleTreeConstructor); constructor({ netId, amount, currency, Tornado, commitmentHex, merkleTreeHeight, emptyElement, merkleWorkerPath, }: MerkleTreeConstructor);
createTree({ events }: { createTree(events: Element[]): Promise<MerkleTree>;
events: Element[]; createPartialTree({ edge, elements }: {
}): Promise<MerkleTree>; edge: TreeEdge;
verifyTree({ events }: { elements: Element[];
events: DepositsEvents[]; }): Promise<PartialMerkleTree>;
}): Promise<MerkleTree>; verifyTree(events: DepositsEvents[]): Promise<MerkleTree>;
} }

@ -1,3 +1,17 @@
/**
* Type of default supported networks
*/
export declare enum NetId {
MAINNET = 1,
BSC = 56,
POLYGON = 137,
OPTIMISM = 10,
ARBITRUM = 42161,
GNOSIS = 100,
AVALANCHE = 43114,
SEPOLIA = 11155111
}
export type NetIdType = NetId | number;
export interface RpcUrl { export interface RpcUrl {
name: string; name: string;
url: string; url: string;
@ -37,20 +51,20 @@ export type Config = {
}; };
nativeCurrency: string; nativeCurrency: string;
currencyName: string; currencyName: string;
explorerUrl: { explorerUrl: string;
tx: string;
address: string;
block: string;
};
merkleTreeHeight: number; merkleTreeHeight: number;
emptyElement: string; emptyElement: string;
networkName: string; networkName: string;
deployedBlock: number; deployedBlock: number;
rpcUrls: RpcUrls; rpcUrls: RpcUrls;
multicall: string; multicallContract: string;
routerContract: string; routerContract: string;
registryContract?: string;
echoContract: string; echoContract: string;
offchainOracleContract?: string;
tornContract?: string;
governanceContract?: string;
stakingRewardsContract?: string;
registryContract?: string;
aggregatorContract?: string; aggregatorContract?: string;
reverseRecordsContract?: string; reverseRecordsContract?: string;
gasPriceOracleContract?: string; gasPriceOracleContract?: string;
@ -58,6 +72,7 @@ export type Config = {
ovmGasPriceOracleContract?: string; ovmGasPriceOracleContract?: string;
tornadoSubgraph: string; tornadoSubgraph: string;
registrySubgraph?: string; registrySubgraph?: string;
governanceSubgraph?: string;
subgraphs: SubgraphUrls; subgraphs: SubgraphUrls;
tokens: TokenInstances; tokens: TokenInstances;
optionalTokens?: string[]; optionalTokens?: string[];
@ -70,17 +85,32 @@ export type Config = {
REGISTRY_BLOCK?: number; REGISTRY_BLOCK?: number;
MINING_BLOCK_TIME?: number; MINING_BLOCK_TIME?: number;
}; };
'torn.contract.tornadocash.eth'?: string;
'governance.contract.tornadocash.eth'?: string;
'staking-rewards.contract.tornadocash.eth'?: string;
'tornado-router.contract.tornadocash.eth'?: string;
'tornado-proxy-light.contract.tornadocash.eth'?: string;
}; };
export type networkConfig = { export type networkConfig = {
[key in string]: Config; [key in NetIdType]: Config;
}; };
export declare const blockSyncInterval = 10000; export declare const defaultConfig: networkConfig;
export declare const enabledChains: string[]; export declare const enabledChains: number[];
export declare const networkConfig: networkConfig; /**
export declare const subdomains: string[]; * Custom config object to extend default config
export default networkConfig; *
* Inspired by getUrlFunc from ethers.js
* https://github.com/ethers-io/ethers.js/blob/v6/src.ts/utils/fetch.ts#L59
*/
export declare let customConfig: networkConfig;
/**
* Add or override existing network config object
*
* Could be also called on the UI hook so that the UI could allow people to use custom privacy pools
*/
export declare function addNetwork(newConfig: networkConfig): void;
export declare function getNetworkConfig(): networkConfig;
export declare function getConfig(netId: NetIdType): Config;
export declare function getInstanceByAddress({ netId, address }: {
netId: NetIdType;
address: string;
}): {
amount: string;
currency: string;
} | undefined;
export declare function getSubdomains(): string[];

@ -4,3 +4,7 @@ export declare function parseRelayer(value?: string): string;
export declare function parseAddress(value?: string): string; export declare function parseAddress(value?: string): string;
export declare function parseMnemonic(value?: string): string; export declare function parseMnemonic(value?: string): string;
export declare function parseKey(value?: string): string; export declare function parseKey(value?: string): string;
/**
* Recovery key shouldn't have a 0x prefix (Also this is how the UI generates)
*/
export declare function parseRecoveryKey(value?: string): string;

@ -3,9 +3,9 @@
/// <reference types="node" /> /// <reference types="node" />
import type { EventEmitter } from 'stream'; import type { EventEmitter } from 'stream';
import type { RequestOptions } from 'http'; import type { RequestOptions } from 'http';
import { JsonRpcApiProvider, JsonRpcProvider, Wallet, FetchGetUrlFunc, Provider, SigningKey, TransactionRequest, JsonRpcSigner, BrowserProvider, Networkish, Eip1193Provider, VoidSigner, FetchUrlFeeDataNetworkPlugin, BigNumberish } from 'ethers'; import { JsonRpcApiProvider, JsonRpcProvider, Wallet, FetchGetUrlFunc, Provider, SigningKey, TransactionRequest, JsonRpcSigner, BrowserProvider, Networkish, Eip1193Provider, VoidSigner, FetchUrlFeeDataNetworkPlugin } from 'ethers';
import type { RequestInfo, RequestInit, Response, HeadersInit } from 'node-fetch'; import type { RequestInfo, RequestInit, Response, HeadersInit } from 'node-fetch';
import type { Config } from './networkConfig'; import type { Config, NetIdType } from './networkConfig';
declare global { declare global {
interface Window { interface Window {
ethereum?: Eip1193Provider & EventEmitter; ethereum?: Eip1193Provider & EventEmitter;
@ -41,7 +41,7 @@ export type getProviderOptions = fetchDataOptions & {
}; };
export declare function getGasOraclePlugin(networkKey: string, fetchOptions?: getProviderOptions): FetchUrlFeeDataNetworkPlugin; export declare function getGasOraclePlugin(networkKey: string, fetchOptions?: getProviderOptions): FetchUrlFeeDataNetworkPlugin;
export declare function getProvider(rpcUrl: string, fetchOptions?: getProviderOptions): Promise<JsonRpcProvider>; export declare function getProvider(rpcUrl: string, fetchOptions?: getProviderOptions): Promise<JsonRpcProvider>;
export declare function getProviderWithNetId(netId: BigNumberish, rpcUrl: string, config: Config, fetchOptions?: getProviderOptions): JsonRpcProvider; export declare function getProviderWithNetId(netId: NetIdType, rpcUrl: string, config: Config, fetchOptions?: getProviderOptions): JsonRpcProvider;
export declare const populateTransaction: (signer: TornadoWallet | TornadoVoidSigner | TornadoRpcSigner, tx: TransactionRequest) => Promise<TransactionRequest>; export declare const populateTransaction: (signer: TornadoWallet | TornadoVoidSigner | TornadoRpcSigner, tx: TransactionRequest) => Promise<TransactionRequest>;
export type TornadoWalletOptions = { export type TornadoWalletOptions = {
gasPriceBump?: number; gasPriceBump?: number;
@ -80,7 +80,7 @@ export declare class TornadoRpcSigner extends JsonRpcSigner {
export type connectWalletFunc = (...args: any[]) => Promise<void>; export type connectWalletFunc = (...args: any[]) => Promise<void>;
export type handleWalletFunc = (...args: any[]) => void; export type handleWalletFunc = (...args: any[]) => void;
export type TornadoBrowserProviderOptions = TornadoWalletOptions & { export type TornadoBrowserProviderOptions = TornadoWalletOptions & {
webChainId?: BigNumberish; webChainId?: NetIdType;
connectWallet?: connectWalletFunc; connectWallet?: connectWalletFunc;
handleNetworkChanges?: handleWalletFunc; handleNetworkChanges?: handleWalletFunc;
handleAccountChanges?: handleWalletFunc; handleAccountChanges?: handleWalletFunc;

@ -1,6 +1,6 @@
import type { Aggregator } from '@tornado/contracts'; import type { Aggregator } from '@tornado/contracts';
import type { RelayerStructOutput } from '@tornado/contracts/dist/contracts/Governance/Aggregator/Aggregator'; import type { RelayerStructOutput } from '@tornado/contracts/dist/contracts/Governance/Aggregator/Aggregator';
import type { Config } from './networkConfig'; import { NetIdType, Config } from './networkConfig';
import { fetchDataOptions } from './providers'; import { fetchDataOptions } from './providers';
import type { snarkProofs } from './websnark'; import type { snarkProofs } from './websnark';
export declare const MIN_STAKE_BALANCE: bigint; export declare const MIN_STAKE_BALANCE: bigint;
@ -9,20 +9,22 @@ export interface RelayerParams {
relayerAddress?: string; relayerAddress?: string;
} }
export interface Relayer { export interface Relayer {
netId: number; netId: NetIdType;
url: string; url: string;
hostname: string;
rewardAccount: string; rewardAccount: string;
instances: string[];
gasPrice?: number;
ethPrices?: {
[key in string]: string;
};
currentQueue: number; currentQueue: number;
tornadoServiceFee: number; tornadoServiceFee: number;
} }
export type RelayerInfo = Relayer & { export type RelayerInfo = Relayer & {
hostname: string;
ensName: string; ensName: string;
stakeBalance: bigint; stakeBalance: bigint;
relayerAddress: string; relayerAddress: string;
ethPrices?: {
[key in string]: string;
};
}; };
export type RelayerError = { export type RelayerError = {
hostname: string; hostname: string;
@ -46,7 +48,7 @@ export interface RelayerStatus {
fast: number; fast: number;
additionalProperties?: number; additionalProperties?: number;
}; };
netId: number; netId: NetIdType;
ethPrices?: { ethPrices?: {
[key in string]: string; [key in string]: string;
}; };
@ -84,12 +86,20 @@ export interface semanticVersion {
buildmetadata?: string; buildmetadata?: string;
} }
export declare function parseSemanticVersion(version: string): semanticVersion; export declare function parseSemanticVersion(version: string): semanticVersion;
export declare function isRelayerUpdated(relayerVersion: string, netId: number | string): boolean; export declare function isRelayerUpdated(relayerVersion: string, netId: NetIdType): boolean;
export declare function calculateScore({ stakeBalance, tornadoServiceFee }: RelayerInfo, minFee?: number, maxFee?: number): bigint; export declare function calculateScore({ stakeBalance, tornadoServiceFee }: RelayerInfo, minFee?: number, maxFee?: number): bigint;
export declare function getWeightRandom(weightsScores: bigint[], random: bigint): number; export declare function getWeightRandom(weightsScores: bigint[], random: bigint): number;
export declare function pickWeightedRandomRelayer(relayers: RelayerInfo[], netId: string | number): RelayerInfo; export type RelayerInstanceList = {
[key in string]: {
instanceAddress: {
[key in string]: string;
};
};
};
export declare function getSupportedInstances(instanceList: RelayerInstanceList): string[];
export declare function pickWeightedRandomRelayer(relayers: RelayerInfo[], netId: NetIdType): RelayerInfo;
export interface RelayerClientConstructor { export interface RelayerClientConstructor {
netId: number | string; netId: NetIdType;
config: Config; config: Config;
Aggregator: Aggregator; Aggregator: Aggregator;
fetchDataOptions?: fetchDataOptions; fetchDataOptions?: fetchDataOptions;
@ -98,7 +108,7 @@ export type RelayerClientWithdraw = snarkProofs & {
contract: string; contract: string;
}; };
export declare class RelayerClient { export declare class RelayerClient {
netId: number; netId: NetIdType;
config: Config; config: Config;
Aggregator: Aggregator; Aggregator: Aggregator;
selectedRelayer?: Relayer; selectedRelayer?: Relayer;

@ -1,4 +1,4 @@
import type { Config } from '../networkConfig'; import { Config, NetIdType } from '../networkConfig';
export type statusInstanceType = { export type statusInstanceType = {
type: string; type: string;
properties: { properties: {
@ -88,5 +88,5 @@ declare const bnType: {
type: string; type: string;
BN: boolean; BN: boolean;
}; };
export declare function getStatusSchema(netId: number | string, config: Config): statusSchema; export declare function getStatusSchema(netId: NetIdType, config: Config): statusSchema;
export {}; export {};

35
dist/services/treeCache.d.ts vendored Normal file

@ -0,0 +1,35 @@
/**
* Create tree cache file from node.js
*
* Only works for node.js, modified from https://github.com/tornadocash/tornado-classic-ui/blob/master/scripts/updateTree.js
*/
import { MerkleTree } from '@tornado/fixed-merkle-tree';
import { DepositsEvents } from './events';
import type { NetIdType } from './networkConfig';
export interface TreeCacheConstructor {
netId: NetIdType;
amount: string;
currency: string;
userDirectory: string;
PARTS_COUNT?: number;
LEAVES?: number;
zeroElement?: string;
}
export interface treeMetadata {
blockNumber: number;
logIndex: number;
transactionHash: string;
timestamp: number;
from: string;
leafIndex: number;
}
export declare class TreeCache {
netId: NetIdType;
amount: string;
currency: string;
userDirectory: string;
PARTS_COUNT: number;
constructor({ netId, amount, currency, userDirectory, PARTS_COUNT }: TreeCacheConstructor);
getInstanceName(): string;
createTree(events: DepositsEvents[], tree: MerkleTree): Promise<void>;
}

@ -1,15 +1,20 @@
/// <reference types="node" /> /// <reference types="node" />
/// <reference types="node" />
import { webcrypto } from 'crypto';
import BN from 'bn.js'; import BN from 'bn.js';
import type { BigNumberish } from 'ethers'; import type { BigNumberish } from 'ethers';
type bnInput = number | string | number[] | Uint8Array | Buffer | BN; type bnInput = number | string | number[] | Uint8Array | Buffer | BN;
export declare const isNode: boolean; export declare const isNode: boolean;
export declare const crypto: webcrypto.Crypto;
export declare const chunk: <T>(arr: T[], size: number) => T[][]; export declare const chunk: <T>(arr: T[], size: number) => T[][];
export declare function sleep(ms: number): Promise<unknown>; export declare function sleep(ms: number): Promise<unknown>;
export declare function validateUrl(url: string, protocols?: string[]): boolean; export declare function validateUrl(url: string, protocols?: string[]): boolean;
export declare function concatBytes(...arrays: Uint8Array[]): Uint8Array;
export declare function bufferToBytes(b: Buffer): Uint8Array; export declare function bufferToBytes(b: Buffer): Uint8Array;
export declare function bytesToBase64(bytes: Uint8Array): string; export declare function bytesToBase64(bytes: Uint8Array): string;
export declare function base64ToBytes(base64: string): Uint8Array; export declare function base64ToBytes(base64: string): Uint8Array;
export declare function bytesToHex(bytes: Uint8Array): string; export declare function bytesToHex(bytes: Uint8Array): string;
export declare function hexToBytes(hexString: string): Uint8Array;
export declare function bytesToBN(bytes: Uint8Array): bigint; export declare function bytesToBN(bytes: Uint8Array): bigint;
export declare function bnToBytes(bigint: bigint | string): Uint8Array; export declare function bnToBytes(bigint: bigint | string): Uint8Array;
export declare function leBuff2Int(bytes: Uint8Array): BN; export declare function leBuff2Int(bytes: Uint8Array): BN;

@ -16,7 +16,7 @@
"lint": "eslint src/**/*.ts --ext .ts --ignore-pattern src/typechain", "lint": "eslint src/**/*.ts --ext .ts --ignore-pattern src/typechain",
"build:node": "ts-node scripts/fflate.ts && rollup -c", "build:node": "ts-node scripts/fflate.ts && rollup -c",
"build:web": "webpack", "build:web": "webpack",
"build": "yarn build:node && yarn build:web", "build": "yarn types && yarn build:node && yarn build:web",
"start": "ts-node src/cli.ts", "start": "ts-node src/cli.ts",
"startHelp": "ts-node src/cli.ts help", "startHelp": "ts-node src/cli.ts help",
"createDeposit": "ts-node src/cli.ts create", "createDeposit": "ts-node src/cli.ts create",

@ -19824,5 +19824,5 @@ if (isNode && threads) {
postMessage(merkleTree.toString()); postMessage(merkleTree.toString());
})); }));
} else { } else {
throw new Error("This browser / environment doesn't support workers!"); throw new Error("This browser / environment does not support workers!");
} }

File diff suppressed because one or more lines are too long