Compare commits
No commits in common. "development" and "v1.0.4" have entirely different histories.
developmen
...
v1.0.4
89
.eslintrc.js
89
.eslintrc.js
@ -1,44 +1,65 @@
|
||||
module.exports = {
|
||||
env: {
|
||||
es2021: true,
|
||||
node: true,
|
||||
"env": {
|
||||
"es2021": true,
|
||||
"node": true
|
||||
},
|
||||
extends: [
|
||||
'prettier',
|
||||
'eslint:recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:import/recommended',
|
||||
'plugin:import/typescript',
|
||||
'plugin:prettier/recommended',
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:import/recommended",
|
||||
"plugin:import/typescript",
|
||||
"prettier",
|
||||
"plugin:prettier/recommended",
|
||||
],
|
||||
overrides: [
|
||||
"overrides": [
|
||||
{
|
||||
env: {
|
||||
node: true,
|
||||
},
|
||||
files: ['.eslintrc.{js,cjs}'],
|
||||
parserOptions: {
|
||||
sourceType: 'script',
|
||||
},
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"files": [
|
||||
".eslintrc.{js,cjs}"
|
||||
],
|
||||
parser: '@typescript-eslint/parser',
|
||||
parserOptions: {
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module',
|
||||
"parserOptions": {
|
||||
"sourceType": "script"
|
||||
}
|
||||
}
|
||||
],
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"parserOptions": {
|
||||
"ecmaVersion": "latest",
|
||||
"sourceType": "module"
|
||||
},
|
||||
plugins: ['@typescript-eslint', 'prettier'],
|
||||
rules: {
|
||||
'prettier/prettier': [
|
||||
'error',
|
||||
"plugins": [
|
||||
"@typescript-eslint",
|
||||
"prettier"
|
||||
],
|
||||
"rules": {
|
||||
"prettier/prettier": [
|
||||
"error",
|
||||
{
|
||||
tabWidth: 4,
|
||||
printWidth: 120,
|
||||
singleQuote: true,
|
||||
},
|
||||
printWidth: 120
|
||||
}
|
||||
],
|
||||
'import/order': ['error'],
|
||||
'@typescript-eslint/no-unused-vars': ['warn'],
|
||||
'@typescript-eslint/no-unused-expressions': ['off'],
|
||||
},
|
||||
};
|
||||
"import/order": ["error"],
|
||||
/**
|
||||
"indent": [
|
||||
"error",
|
||||
2
|
||||
],
|
||||
**/
|
||||
"linebreak-style": [
|
||||
"error",
|
||||
"unix"
|
||||
],
|
||||
"quotes": [
|
||||
"error",
|
||||
"single"
|
||||
],
|
||||
"semi": [
|
||||
"error",
|
||||
"always"
|
||||
],
|
||||
"@typescript-eslint/no-unused-vars": ["warn"]
|
||||
}
|
||||
}
|
||||
|
||||
1
.npmrc
1
.npmrc
@ -1 +0,0 @@
|
||||
@tornado:registry=https://git.tornado.ws/api/packages/tornado-packages/npm/
|
||||
30017
dist/cli.js
vendored
30017
dist/cli.js
vendored
File diff suppressed because one or more lines are too long
30
dist/program.d.ts
vendored
30
dist/program.d.ts
vendored
@ -1,11 +1,13 @@
|
||||
import 'dotenv/config';
|
||||
import { Command } from 'commander';
|
||||
import { JsonRpcProvider, Provider, TransactionLike, Wallet, VoidSigner } from 'ethers';
|
||||
import { getProviderOptions, TornadoWallet, TornadoVoidSigner, RelayerInfo, RelayerError, RelayerClient, fetchDataOptions, NetIdType, TovarishClient, TovarishInfo } from '@tornado/core';
|
||||
export interface commonProgramOptions {
|
||||
import { getProviderOptions, TornadoWallet, TornadoVoidSigner, RelayerInfo, RelayerError, RelayerClient, fetchDataOptions, NetIdType, Config } from '@tornado/core';
|
||||
export type commonProgramOptions = {
|
||||
rpc?: string;
|
||||
ethRpc?: string;
|
||||
disableTovarish?: boolean;
|
||||
graph?: string;
|
||||
ethGraph?: string;
|
||||
disableGraph?: boolean;
|
||||
accountKey?: string;
|
||||
relayer?: string;
|
||||
walletWithdrawal?: boolean;
|
||||
@ -17,7 +19,7 @@ export interface commonProgramOptions {
|
||||
privateKey?: string;
|
||||
nonInteractive?: boolean;
|
||||
localRpc?: boolean;
|
||||
}
|
||||
};
|
||||
export declare function promptConfirmation(nonInteractive?: boolean): Promise<void>;
|
||||
export declare function getIPAddress(fetchDataOptions: fetchDataOptions): Promise<{
|
||||
ip: any;
|
||||
@ -27,7 +29,8 @@ export declare function getProgramOptions(options: commonProgramOptions): Promis
|
||||
options: commonProgramOptions;
|
||||
fetchDataOptions: fetchDataOptions;
|
||||
}>;
|
||||
export declare function getProgramProvider(rpcUrl: string | undefined, providerOptions: getProviderOptions): Promise<JsonRpcProvider>;
|
||||
export declare function getProgramGraphAPI(options: commonProgramOptions, config: Config): string;
|
||||
export declare function getProgramProvider(netId: NetIdType, rpcUrl: string | undefined, config: Config, providerOptions?: getProviderOptions): JsonRpcProvider;
|
||||
export declare function getProgramSigner({ options, provider, }: {
|
||||
options: commonProgramOptions;
|
||||
provider: Provider;
|
||||
@ -37,22 +40,13 @@ export declare function getProgramRelayer({ options, fetchDataOptions, netId, }:
|
||||
fetchDataOptions?: fetchDataOptions;
|
||||
netId: NetIdType;
|
||||
}): Promise<{
|
||||
validRelayers: RelayerInfo[];
|
||||
invalidRelayers: RelayerError[];
|
||||
relayerClient: RelayerClient;
|
||||
}>;
|
||||
export declare function getTovarishRelayer({ options, fetchDataOptions, netId, }: {
|
||||
options: commonProgramOptions;
|
||||
fetchDataOptions?: fetchDataOptions;
|
||||
netId: NetIdType;
|
||||
}): Promise<{
|
||||
validRelayers: TovarishInfo[];
|
||||
invalidRelayers: RelayerError[];
|
||||
relayerClient: TovarishClient;
|
||||
validRelayers?: RelayerInfo[];
|
||||
invalidRelayers?: RelayerError[];
|
||||
relayerClient?: RelayerClient;
|
||||
}>;
|
||||
export declare function programSendTransaction({ signer, options, populatedTransaction, }: {
|
||||
signer: VoidSigner | Wallet;
|
||||
options: commonProgramOptions;
|
||||
populatedTransaction: TransactionLike;
|
||||
}): Promise<import("ethers").TransactionResponse | undefined>;
|
||||
}): Promise<void>;
|
||||
export declare function tornadoProgram(): Command;
|
||||
|
||||
6
dist/services/data.d.ts
vendored
6
dist/services/data.d.ts
vendored
@ -1,9 +1,12 @@
|
||||
import { AsyncZippable, Unzipped } from 'fflate';
|
||||
import { BaseEvents, CachedEvents, MinimalEvents } from '@tornado/core';
|
||||
export declare function existsAsync(fileOrDir: string): Promise<boolean>;
|
||||
/**
|
||||
* Supports legacy gz format for legacy UI
|
||||
*/
|
||||
export declare function deflateAsync(data: Uint8Array): Promise<Buffer>;
|
||||
export declare function zipAsync(file: AsyncZippable): Promise<Uint8Array>;
|
||||
export declare function unzipAsync(data: Uint8Array): Promise<Unzipped>;
|
||||
export declare function saveLegacyFile({ fileName, userDirectory, dataString, }: {
|
||||
fileName: string;
|
||||
userDirectory: string;
|
||||
@ -14,9 +17,10 @@ export declare function saveUserFile({ fileName, userDirectory, dataString, }: {
|
||||
userDirectory: string;
|
||||
dataString: string;
|
||||
}): Promise<void>;
|
||||
export declare function loadSavedEvents<T extends MinimalEvents>({ name, userDirectory, }: {
|
||||
export declare function loadSavedEvents<T extends MinimalEvents>({ name, userDirectory, deployedBlock, }: {
|
||||
name: string;
|
||||
userDirectory: string;
|
||||
deployedBlock: number;
|
||||
}): Promise<BaseEvents<T>>;
|
||||
export declare function download({ name, cacheDirectory }: {
|
||||
name: string;
|
||||
|
||||
94
dist/services/nodeEvents.d.ts
vendored
94
dist/services/nodeEvents.d.ts
vendored
@ -1,82 +1,78 @@
|
||||
import { BatchBlockOnProgress, BatchEventOnProgress, BaseTornadoService, BaseEncryptedNotesService, BaseGovernanceService, BaseRegistryService, BaseRevenueService, BaseTornadoServiceConstructor, BaseEncryptedNotesServiceConstructor, BaseGovernanceServiceConstructor, BaseRegistryServiceConstructor, BaseRevenueServiceConstructor, BaseEchoServiceConstructor, BaseEchoService, CachedRelayers, BaseEvents, DepositsEvents, WithdrawalsEvents, EncryptedNotesEvents, AllRelayerRegistryEvents, AllGovernanceEvents, EchoEvents, StakeBurnedEvents } from '@tornado/core';
|
||||
import { TreeCache } from './treeCache';
|
||||
export type NodeServiceConstructor = {
|
||||
cacheDirectory: string;
|
||||
userDirectory: string;
|
||||
};
|
||||
export type NodeTornadoServiceConstructor = BaseTornadoServiceConstructor & NodeServiceConstructor & {
|
||||
nativeCurrency: string;
|
||||
treeCache?: TreeCache;
|
||||
import { BatchBlockOnProgress, BatchEventOnProgress, BaseTornadoService, BaseEncryptedNotesService, BaseGovernanceService, BaseRegistryService, BaseTornadoServiceConstructor, BaseEncryptedNotesServiceConstructor, BaseGovernanceServiceConstructor, BaseRegistryServiceConstructor, BaseEchoServiceConstructor, BaseEchoService, CachedRelayers } from '@tornado/core';
|
||||
import type { BaseEvents, DepositsEvents, WithdrawalsEvents, EncryptedNotesEvents, RegistersEvents, AllGovernanceEvents, EchoEvents } from '@tornado/core';
|
||||
export type NodeTornadoServiceConstructor = BaseTornadoServiceConstructor & {
|
||||
cacheDirectory?: string;
|
||||
userDirectory?: string;
|
||||
};
|
||||
export declare class NodeTornadoService extends BaseTornadoService {
|
||||
cacheDirectory: string;
|
||||
userDirectory: string;
|
||||
nativeCurrency: string;
|
||||
treeCache?: TreeCache;
|
||||
constructor(serviceConstructor: NodeTornadoServiceConstructor);
|
||||
cacheDirectory?: string;
|
||||
userDirectory?: string;
|
||||
constructor({ netId, provider, graphApi, subgraphName, Tornado, type, amount, currency, deployedBlock, fetchDataOptions, cacheDirectory, userDirectory, }: NodeTornadoServiceConstructor);
|
||||
updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
|
||||
updateTransactionProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]): void;
|
||||
updateBlockProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]): void;
|
||||
updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
|
||||
getEventsFromDB(): Promise<BaseEvents<DepositsEvents | WithdrawalsEvents>>;
|
||||
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<DepositsEvents | WithdrawalsEvents>>;
|
||||
validateEvents<S>({ events, lastBlock, hasNewEvents, }: BaseEvents<DepositsEvents | WithdrawalsEvents> & {
|
||||
hasNewEvents?: boolean;
|
||||
}): Promise<S>;
|
||||
saveEvents({ events, lastBlock }: BaseEvents<DepositsEvents | WithdrawalsEvents>): Promise<void>;
|
||||
}
|
||||
export type NodeEchoServiceConstructor = BaseEchoServiceConstructor & NodeServiceConstructor;
|
||||
export type NodeEchoServiceConstructor = BaseEchoServiceConstructor & {
|
||||
cacheDirectory?: string;
|
||||
userDirectory?: string;
|
||||
};
|
||||
export declare class NodeEchoService extends BaseEchoService {
|
||||
cacheDirectory: string;
|
||||
userDirectory: string;
|
||||
constructor(serviceConstructor: NodeEchoServiceConstructor);
|
||||
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<import("@tornado/core").CachedEvents<EchoEvents>>;
|
||||
saveEvents({ events, lastBlock }: BaseEvents<EchoEvents>): Promise<void>;
|
||||
}
|
||||
export type NodeEncryptedNotesServiceConstructor = BaseEncryptedNotesServiceConstructor & NodeServiceConstructor;
|
||||
export type NodeEncryptedNotesServiceConstructor = BaseEncryptedNotesServiceConstructor & {
|
||||
cacheDirectory?: string;
|
||||
userDirectory?: string;
|
||||
};
|
||||
export declare class NodeEncryptedNotesService extends BaseEncryptedNotesService {
|
||||
cacheDirectory: string;
|
||||
userDirectory: string;
|
||||
constructor(serviceConstructor: NodeEncryptedNotesServiceConstructor);
|
||||
cacheDirectory?: string;
|
||||
userDirectory?: string;
|
||||
constructor({ netId, provider, graphApi, subgraphName, Router, deployedBlock, fetchDataOptions, cacheDirectory, userDirectory, }: NodeEncryptedNotesServiceConstructor);
|
||||
updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
|
||||
updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
|
||||
getEventsFromDB(): Promise<BaseEvents<EncryptedNotesEvents>>;
|
||||
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<EncryptedNotesEvents>>;
|
||||
saveEvents({ events, lastBlock }: BaseEvents<EncryptedNotesEvents>): Promise<void>;
|
||||
}
|
||||
export type NodeGovernanceServiceConstructor = BaseGovernanceServiceConstructor & NodeServiceConstructor;
|
||||
export type NodeGovernanceServiceConstructor = BaseGovernanceServiceConstructor & {
|
||||
cacheDirectory?: string;
|
||||
userDirectory?: string;
|
||||
};
|
||||
export declare class NodeGovernanceService extends BaseGovernanceService {
|
||||
cacheDirectory: string;
|
||||
userDirectory: string;
|
||||
constructor(serviceConstructor: NodeGovernanceServiceConstructor);
|
||||
cacheDirectory?: string;
|
||||
userDirectory?: string;
|
||||
constructor({ netId, provider, graphApi, subgraphName, Governance, deployedBlock, fetchDataOptions, cacheDirectory, userDirectory, }: NodeGovernanceServiceConstructor);
|
||||
updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
|
||||
updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
|
||||
updateTransactionProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]): void;
|
||||
getEventsFromDB(): Promise<BaseEvents<AllGovernanceEvents>>;
|
||||
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<AllGovernanceEvents>>;
|
||||
saveEvents({ events, lastBlock }: BaseEvents<AllGovernanceEvents>): Promise<void>;
|
||||
}
|
||||
export type NodeRegistryServiceConstructor = BaseRegistryServiceConstructor & NodeServiceConstructor;
|
||||
export type NodeRegistryServiceConstructor = BaseRegistryServiceConstructor & {
|
||||
cacheDirectory?: string;
|
||||
userDirectory?: string;
|
||||
};
|
||||
export declare class NodeRegistryService extends BaseRegistryService {
|
||||
cacheDirectory: string;
|
||||
userDirectory: string;
|
||||
constructor(serviceConstructor: NodeRegistryServiceConstructor);
|
||||
cacheDirectory?: string;
|
||||
userDirectory?: string;
|
||||
constructor({ netId, provider, graphApi, subgraphName, RelayerRegistry, Aggregator, relayerEnsSubdomains, deployedBlock, fetchDataOptions, cacheDirectory, userDirectory, }: NodeRegistryServiceConstructor);
|
||||
updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
|
||||
getEventsFromDB(): Promise<BaseEvents<AllRelayerRegistryEvents>>;
|
||||
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<AllRelayerRegistryEvents>>;
|
||||
saveEvents({ events, lastBlock }: BaseEvents<AllRelayerRegistryEvents>): Promise<void>;
|
||||
updateGraphProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
|
||||
getEventsFromDB(): Promise<BaseEvents<RegistersEvents>>;
|
||||
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<RegistersEvents>>;
|
||||
saveEvents({ events, lastBlock }: BaseEvents<RegistersEvents>): Promise<void>;
|
||||
getRelayersFromDB(): Promise<CachedRelayers>;
|
||||
getRelayersFromCache(): Promise<CachedRelayers>;
|
||||
saveRelayers({ lastBlock, timestamp, relayers }: CachedRelayers): Promise<void>;
|
||||
}
|
||||
export type NodeRevenueServiceConstructor = BaseRevenueServiceConstructor & NodeServiceConstructor;
|
||||
export declare class NodeRevenueService extends BaseRevenueService {
|
||||
cacheDirectory: string;
|
||||
userDirectory: string;
|
||||
constructor(serviceConstructor: NodeRevenueServiceConstructor);
|
||||
updateEventProgress({ type, fromBlock, toBlock, count }: Parameters<BatchEventOnProgress>[0]): void;
|
||||
updateTransactionProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]): void;
|
||||
updateBlockProgress({ currentIndex, totalIndex }: Parameters<BatchBlockOnProgress>[0]): void;
|
||||
getEventsFromDB(): Promise<BaseEvents<StakeBurnedEvents>>;
|
||||
getEventsFromCache(): Promise<import("@tornado/core").CachedEvents<StakeBurnedEvents>>;
|
||||
saveEvents({ events, lastBlock }: BaseEvents<StakeBurnedEvents>): Promise<void>;
|
||||
saveRelayers({ timestamp, relayers }: CachedRelayers): Promise<void>;
|
||||
}
|
||||
|
||||
27
package.json
27
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@tornado/cli",
|
||||
"version": "1.0.11-alpha",
|
||||
"version": "1.0.4-alpha",
|
||||
"description": "Modern Toolsets for Privacy Pools on Ethereum",
|
||||
"main": "./dist/cli.js",
|
||||
"types": "./dist/cli.d.ts",
|
||||
@ -24,14 +24,11 @@
|
||||
"updateEvents": "ts-node src/cli.ts updateEvents",
|
||||
"relayers": "ts-node src/cli.ts relayers",
|
||||
"createAccount": "ts-node src/cli.ts createAccount",
|
||||
"decrypt": "ts-node src/cli.ts decrypt",
|
||||
"decryptNotes": "ts-node src/cli.ts decryptNotes",
|
||||
"send": "ts-node src/cli.ts send",
|
||||
"balance": "ts-node src/cli.ts balance",
|
||||
"sign": "ts-node src/cli.ts sign",
|
||||
"broadcast": "ts-node src/cli.ts broadcast",
|
||||
"proposals": "ts-node src/cli.ts proposals",
|
||||
"delegates": "ts-node src/cli.ts delegates",
|
||||
"apy": "ts-node src/cli.ts apy"
|
||||
"broadcast": "ts-node src/cli.ts broadcast"
|
||||
},
|
||||
"author": "",
|
||||
"license": "MIT",
|
||||
@ -53,12 +50,12 @@
|
||||
"dependencies": {},
|
||||
"optionalDependencies": {},
|
||||
"devDependencies": {
|
||||
"@colors/colors": "^1.6.0",
|
||||
"@tornado/core": "git+https://git.tornado.ws/tornadocontrib/tornado-core.git#092989ebaa2fcd84eff7d4aed66433e77c790c60",
|
||||
"@colors/colors": "1.5.0",
|
||||
"@tornado/core": "git+https://codeberg.org/tornadocash/tornado-core.git#ef56beb29b3dc8808167acefe2bd23c2680643b2",
|
||||
"@typechain/ethers-v6": "^0.5.1",
|
||||
"@types/figlet": "^1.7.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.11.0",
|
||||
"@typescript-eslint/parser": "^8.11.0",
|
||||
"@types/figlet": "^1.5.8",
|
||||
"@typescript-eslint/eslint-plugin": "^8.6.0",
|
||||
"@typescript-eslint/parser": "^8.6.0",
|
||||
"bloomfilter.js": "^1.0.2",
|
||||
"cli-table3": "^0.6.4",
|
||||
"commander": "^12.0.0",
|
||||
@ -67,9 +64,9 @@
|
||||
"eslint": "8.57.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-import-resolver-typescript": "^3.6.3",
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
"eslint-plugin-import": "^2.30.0",
|
||||
"eslint-plugin-prettier": "^5.2.1",
|
||||
"figlet": "^1.8.0",
|
||||
"figlet": "^1.7.0",
|
||||
"http-proxy-agent": "^7.0.2",
|
||||
"https-proxy-agent": "^7.0.4",
|
||||
"moment": "^2.30.1",
|
||||
@ -78,8 +75,8 @@
|
||||
"ts-node": "^10.9.2",
|
||||
"tsc": "^2.0.4",
|
||||
"typechain": "^8.3.2",
|
||||
"typescript": "^5.6.3",
|
||||
"webpack": "^5.95.0",
|
||||
"typescript": "^5.6.2",
|
||||
"webpack": "^5.94.0",
|
||||
"webpack-cli": "^5.1.4"
|
||||
}
|
||||
}
|
||||
|
||||
1400
src/program.ts
1400
src/program.ts
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,8 @@
|
||||
import path from 'path';
|
||||
import { deflate, constants } from 'zlib';
|
||||
import { stat, mkdir, readFile, writeFile } from 'fs/promises';
|
||||
import { BaseEvents, CachedEvents, MinimalEvents, zipAsync, unzipAsync } from '@tornado/core';
|
||||
import { zip, unzip, AsyncZippable, Unzipped } from 'fflate';
|
||||
import { BaseEvents, CachedEvents, MinimalEvents } from '@tornado/core';
|
||||
|
||||
export async function existsAsync(fileOrDir: string): Promise<boolean> {
|
||||
try {
|
||||
@ -35,6 +36,30 @@ export function deflateAsync(data: Uint8Array): Promise<Buffer> {
|
||||
});
|
||||
}
|
||||
|
||||
export function zipAsync(file: AsyncZippable): Promise<Uint8Array> {
|
||||
return new Promise((res, rej) => {
|
||||
zip(file, { mtime: new Date('1/1/1980') }, (err, data) => {
|
||||
if (err) {
|
||||
rej(err);
|
||||
return;
|
||||
}
|
||||
res(data);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function unzipAsync(data: Uint8Array): Promise<Unzipped> {
|
||||
return new Promise((res, rej) => {
|
||||
unzip(data, {}, (err, data) => {
|
||||
if (err) {
|
||||
rej(err);
|
||||
return;
|
||||
}
|
||||
res(data);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export async function saveLegacyFile({
|
||||
fileName,
|
||||
userDirectory,
|
||||
@ -85,16 +110,18 @@ export async function saveUserFile({
|
||||
export async function loadSavedEvents<T extends MinimalEvents>({
|
||||
name,
|
||||
userDirectory,
|
||||
deployedBlock,
|
||||
}: {
|
||||
name: string;
|
||||
userDirectory: string;
|
||||
deployedBlock: number;
|
||||
}): Promise<BaseEvents<T>> {
|
||||
const filePath = path.join(userDirectory, `${name}.json`.toLowerCase());
|
||||
|
||||
if (!(await existsAsync(filePath))) {
|
||||
return {
|
||||
events: [] as T[],
|
||||
lastBlock: 0,
|
||||
lastBlock: null,
|
||||
};
|
||||
}
|
||||
|
||||
@ -103,14 +130,14 @@ export async function loadSavedEvents<T extends MinimalEvents>({
|
||||
|
||||
return {
|
||||
events,
|
||||
lastBlock: events[events.length - 1]?.blockNumber || 0,
|
||||
lastBlock: events && events.length ? events[events.length - 1].blockNumber : deployedBlock,
|
||||
};
|
||||
} catch (err) {
|
||||
console.log('Method loadSavedEvents has error');
|
||||
console.log(err);
|
||||
return {
|
||||
events: [],
|
||||
lastBlock: 0,
|
||||
lastBlock: deployedBlock,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
static/events/registered_1.json.zip
Normal file
BIN
static/events/registered_1.json.zip
Normal file
Binary file not shown.
BIN
static/events/registered_11155111.json.zip
Normal file
BIN
static/events/registered_11155111.json.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,100 +1,262 @@
|
||||
{
|
||||
"lastBlock": 20874000,
|
||||
"timestamp": 1727826179,
|
||||
"timestamp": 1726890359,
|
||||
"relayers": [
|
||||
{
|
||||
"ensName": "tornadowithdraw.eth",
|
||||
"relayerAddress": "0x40c3d1656a26C9266f4A10fed0D87EFf79F54E64",
|
||||
"hostnames": {},
|
||||
"tovarishHost": "tornadowithdraw.com",
|
||||
"tovarishNetworks": [
|
||||
1,
|
||||
56,
|
||||
137,
|
||||
10,
|
||||
42161,
|
||||
100,
|
||||
43114,
|
||||
11155111
|
||||
]
|
||||
},
|
||||
{
|
||||
"ensName": "therelayer.eth",
|
||||
"relayerAddress": "0xA0F0287683E820FF4211e67C03cf46a87431f4E1",
|
||||
"ensName": "okrelayer.eth",
|
||||
"relayerAddress": "0x0e9D9a828247F5eed7f6D31D213A39805De52441",
|
||||
"isRegistered": true,
|
||||
"owner": "0xA0F0287683E820FF4211e67C03cf46a87431f4E1",
|
||||
"stakeBalance": "1335.888771359625809238",
|
||||
"owner": "0x0e9D9a828247F5eed7f6D31D213A39805De52441",
|
||||
"stakeBalance": "4666.679387946529032297",
|
||||
"hostnames": {
|
||||
"1": "mainnet.therelayer.xyz",
|
||||
"10": "optimism.therelayer.xyz",
|
||||
"56": "bsc.therelayer.xyz",
|
||||
"100": "xdai.therelayer.xyz",
|
||||
"137": "polygon.therelayer.xyz",
|
||||
"42161": "arbitrum.therelayer.xyz",
|
||||
"43114": "avalanche.therelayer.xyz"
|
||||
"1": "okrelayer.xyz",
|
||||
"56": "binance.okrelayer.xyz",
|
||||
"137": "polygon.okrelayer.xyz",
|
||||
"42161": "arb.okrelayer.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "cheap-relayer.eth",
|
||||
"relayerAddress": "0x076D4E32C6A5D888fC4658281539c94E778C796d",
|
||||
"ensName": "quick-relayer.eth",
|
||||
"relayerAddress": "0x187541D7D312F742040f270d0221B4Fe577934B0",
|
||||
"isRegistered": true,
|
||||
"owner": "0x076D4E32C6A5D888fC4658281539c94E778C796d",
|
||||
"stakeBalance": "500.878420081833044818",
|
||||
"owner": "0x187541D7D312F742040f270d0221B4Fe577934B0",
|
||||
"stakeBalance": "2931.033250737658918569",
|
||||
"hostnames": {
|
||||
"1": "mainnet-tornado.cheap-relayer.xyz",
|
||||
"56": "bsc-tornado.cheap-relayer.xyz",
|
||||
"137": "polygon-tornado.cheap-relayer.xyz",
|
||||
"43114": "avalanche-tornado.cheap-relayer.xyz"
|
||||
"1": "quick-relayer.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "lowcost.eth",
|
||||
"relayerAddress": "0x28907F21F43B419F34226d6f10aCbCf1832b1D4d",
|
||||
"ensName": "safety-relayer.eth",
|
||||
"relayerAddress": "0xF1F4F76c9969eFbFB5C9A90a6E44c0E3696D3EF8",
|
||||
"isRegistered": true,
|
||||
"owner": "0x28907F21F43B419F34226d6f10aCbCf1832b1D4d",
|
||||
"stakeBalance": "500.279638085962965981",
|
||||
"owner": "0xF1F4F76c9969eFbFB5C9A90a6E44c0E3696D3EF8",
|
||||
"stakeBalance": "500.879215977529089999",
|
||||
"hostnames": {
|
||||
"1": "mainnet-tornado.low-fee.xyz",
|
||||
"56": "bsc-tornado.low-fee.xyz",
|
||||
"137": "polygon-tornado.low-fee.xyz",
|
||||
"43114": "avalanche-tornado.low-fee.xyz"
|
||||
"1": "a-relayer.top",
|
||||
"56": "bsc.a-relayer.top",
|
||||
"137": "polygon.a-relayer.top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "relayernews.eth",
|
||||
"relayerAddress": "0x6289C8a70EE2Ed6914834CaEa431F9a82c7eAf70",
|
||||
"ensName": "k-relayer.eth",
|
||||
"relayerAddress": "0xC49415493eB3Ec64a0F13D8AA5056f1CfC4ce35c",
|
||||
"isRegistered": true,
|
||||
"owner": "0x6289C8a70EE2Ed6914834CaEa431F9a82c7eAf70",
|
||||
"stakeBalance": "1661.181918638614466424",
|
||||
"owner": "0xC49415493eB3Ec64a0F13D8AA5056f1CfC4ce35c",
|
||||
"stakeBalance": "2194.529689989084430299",
|
||||
"hostnames": {
|
||||
"1": "mainnet-tornado.relayernews.xyz",
|
||||
"56": "bsc-tornado.relayernews.xyz"
|
||||
"1": "black-hardy.com",
|
||||
"56": "bsc.black-hardy.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "on-sale.eth",
|
||||
"relayerAddress": "0x63606C4011e97a73BCd844Cde6a38D45a728BC0E",
|
||||
"ensName": "relayer007.eth",
|
||||
"relayerAddress": "0xa0109274F53609f6Be97ec5f3052C659AB80f012",
|
||||
"isRegistered": true,
|
||||
"owner": "0x63606C4011e97a73BCd844Cde6a38D45a728BC0E",
|
||||
"stakeBalance": "4476.543684932880020592",
|
||||
"owner": "0xa0109274F53609f6Be97ec5f3052C659AB80f012",
|
||||
"stakeBalance": "4989.637826137906607638",
|
||||
"hostnames": {
|
||||
"1": "mainnet-tornado.appleworld.club",
|
||||
"56": "bsc-tornado.appleworld.club"
|
||||
"1": "torn.relayersdao.finance",
|
||||
"56": "bsc.relayersdao.finance",
|
||||
"137": "matic.relayersdao.finance"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "em3tornado.eth",
|
||||
"relayerAddress": "0x3a1d526D09b7E59Fd88De4726f68A8246dDC2742",
|
||||
"ensName": "reltor.eth",
|
||||
"relayerAddress": "0x4750BCfcC340AA4B31be7e71fa072716d28c29C5",
|
||||
"isRegistered": true,
|
||||
"owner": "0x3a1d526D09b7E59Fd88De4726f68A8246dDC2742",
|
||||
"stakeBalance": "16864.242955629118561145",
|
||||
"owner": "0x4750BCfcC340AA4B31be7e71fa072716d28c29C5",
|
||||
"stakeBalance": "19999.983956326624881327",
|
||||
"hostnames": {
|
||||
"1": "em3torn.com",
|
||||
"10": "optimism.em3torn.com",
|
||||
"56": "bsc.em3torn.com",
|
||||
"137": "polygon.em3torn.com",
|
||||
"42161": "arbitrum.em3torn.com",
|
||||
"43114": "avax.em3torn.com"
|
||||
"1": "eth.reltor.su",
|
||||
"56": "binance.reltor.su",
|
||||
"137": "polygon.reltor.su"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "best-relay.eth",
|
||||
"relayerAddress": "0xe5A4c70113b90566BC5f80a3866935d0d52F990E",
|
||||
"isRegistered": true,
|
||||
"owner": "0xe5A4c70113b90566BC5f80a3866935d0d52F990E",
|
||||
"stakeBalance": "2002.0",
|
||||
"hostnames": {
|
||||
"1": "best-relay.gato-miaouw.xyz",
|
||||
"56": "bsc.gato-miaouw.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "crelayer.eth",
|
||||
"relayerAddress": "0x180c58B7305152357142b33Eea94cBB152058B61",
|
||||
"isRegistered": true,
|
||||
"owner": "0x180c58B7305152357142b33Eea94cBB152058B61",
|
||||
"stakeBalance": "1460.389956347917729137",
|
||||
"hostnames": {
|
||||
"1": "eth.crelayer.xyz",
|
||||
"56": "bsc.crelayer.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "torn-city.eth",
|
||||
"relayerAddress": "0xd04e9f0945DEA8373D882C730e2c93a74B591796",
|
||||
"isRegistered": true,
|
||||
"owner": "0xd04e9f0945DEA8373D882C730e2c93a74B591796",
|
||||
"stakeBalance": "6715.49550101901162633",
|
||||
"hostnames": {
|
||||
"1": "torn-city.com",
|
||||
"56": "bsc.torn-city.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "torrelayer.eth",
|
||||
"relayerAddress": "0x2Ee39Ff05643bC7cc9ed31B71e142429044A425C",
|
||||
"isRegistered": true,
|
||||
"owner": "0x2Ee39Ff05643bC7cc9ed31B71e142429044A425C",
|
||||
"stakeBalance": "3734.220945056618867324",
|
||||
"hostnames": {
|
||||
"1": "tornima.xyz",
|
||||
"56": "binance.tornima.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "tornxdo.eth",
|
||||
"relayerAddress": "0xB399aa4c2F1678f72529Cd125F82cEA2c2a823eD",
|
||||
"isRegistered": true,
|
||||
"owner": "0xB399aa4c2F1678f72529Cd125F82cEA2c2a823eD",
|
||||
"stakeBalance": "983.310689667160962345",
|
||||
"hostnames": {
|
||||
"1": "tornado.evmjunkie.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "0xgm777.eth",
|
||||
"relayerAddress": "0x94596B6A626392F5D972D6CC4D929a42c2f0008c",
|
||||
"isRegistered": true,
|
||||
"owner": "0x94596B6A626392F5D972D6CC4D929a42c2f0008c",
|
||||
"stakeBalance": "1979.261700994868938309",
|
||||
"hostnames": {
|
||||
"1": "main.gm777.xyz",
|
||||
"56": "bsc.gm777.xyz",
|
||||
"42161": "arb.gm777.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "relayer-secure.eth",
|
||||
"relayerAddress": "0xCEdac436cEA98E93F471331eCC693fF41D730921",
|
||||
"isRegistered": true,
|
||||
"owner": "0xCEdac436cEA98E93F471331eCC693fF41D730921",
|
||||
"stakeBalance": "548.198082306127582623",
|
||||
"hostnames": {
|
||||
"1": "relsecc-mainnet.moon-relayer.app"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "default-relayer.eth",
|
||||
"relayerAddress": "0x5555555731006f71f121144534Ca7C8799F66AA3",
|
||||
"isRegistered": true,
|
||||
"owner": "0x5555555731006f71f121144534Ca7C8799F66AA3",
|
||||
"stakeBalance": "5011.216884015043970278",
|
||||
"hostnames": {
|
||||
"1": "eth.default-relayer.com",
|
||||
"56": "bsc.default-relayer.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "t-relayer.eth",
|
||||
"relayerAddress": "0x000000Cd6521Ed1a65FAe0678eA15aF4EEAD74fe",
|
||||
"isRegistered": true,
|
||||
"owner": "0x000000Cd6521Ed1a65FAe0678eA15aF4EEAD74fe",
|
||||
"stakeBalance": "6079.008889316501226288",
|
||||
"hostnames": {
|
||||
"1": "eth.t-relayer.com",
|
||||
"56": "bsc.t-relayer.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "secure-relay.eth",
|
||||
"relayerAddress": "0x1036AF02bCDb2e3A4db2d3D40b29e5054EDc79BA",
|
||||
"isRegistered": true,
|
||||
"owner": "0x1036AF02bCDb2e3A4db2d3D40b29e5054EDc79BA",
|
||||
"stakeBalance": "6751.661507930994067422",
|
||||
"hostnames": {
|
||||
"1": "torn-relayer.duckdns.org"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "torntorn.eth",
|
||||
"relayerAddress": "0x1247749d7E28D357B4279110af0802603AC526cE",
|
||||
"isRegistered": true,
|
||||
"owner": "0x1247749d7E28D357B4279110af0802603AC526cE",
|
||||
"stakeBalance": "5535.435044583932530913",
|
||||
"hostnames": {
|
||||
"1": "eth.fsdhreu39jfk.com",
|
||||
"56": "bsc.fsdhreu39jfk.com",
|
||||
"100": "gnosis.tornad0.com",
|
||||
"137": "polygon.tornad0.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "bitah.eth",
|
||||
"relayerAddress": "0x7E3893725d4e238B4c8c83375bBAd024a66Ffa42",
|
||||
"isRegistered": true,
|
||||
"owner": "0x7E3893725d4e238B4c8c83375bBAd024a66Ffa42",
|
||||
"stakeBalance": "503.237718892072788154",
|
||||
"hostnames": {
|
||||
"1": "tornado.bitah.link",
|
||||
"56": "bsc-tornado.bitah.link",
|
||||
"137": "polygon-tornado.bitah.link"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "shadow-out.eth",
|
||||
"relayerAddress": "0x9Ee26a4bFd731E8e742B65bF955814EADdd7F151",
|
||||
"isRegistered": true,
|
||||
"owner": "0x9Ee26a4bFd731E8e742B65bF955814EADdd7F151",
|
||||
"stakeBalance": "3571.639136672079169166",
|
||||
"hostnames": {
|
||||
"1": "livetobecomeavillain",
|
||||
"56": "justarandomdude",
|
||||
"100": "everythingisburning"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "torn-eth.eth",
|
||||
"relayerAddress": "0x42FecB4137aFF76E0E85702ff4F339DbFe6D859E",
|
||||
"isRegistered": true,
|
||||
"owner": "0x42FecB4137aFF76E0E85702ff4F339DbFe6D859E",
|
||||
"stakeBalance": "978.62598484549460861",
|
||||
"hostnames": {
|
||||
"1": "mainnet-tornado.50swap.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "0xproxy.eth",
|
||||
"relayerAddress": "0x08657a1f4C1F06d657F31767831421EE7FaDf549",
|
||||
"isRegistered": true,
|
||||
"owner": "0x08657a1f4C1F06d657F31767831421EE7FaDf549",
|
||||
"stakeBalance": "705.605817336537209483",
|
||||
"hostnames": {
|
||||
"1": "mainnet.0x0relayer.xyz",
|
||||
"56": "bsc.0x0relayer.xyz",
|
||||
"137": "polygon.0x0relayer.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "wetez.eth",
|
||||
"relayerAddress": "0xe6184DA55174Cc0263a17eA2fc24E48511766505",
|
||||
"isRegistered": true,
|
||||
"owner": "0xe6184DA55174Cc0263a17eA2fc24E48511766505",
|
||||
"stakeBalance": "567.980734786905511868",
|
||||
"hostnames": {
|
||||
"1": "tornado-1.wetez.io"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "0xtorn.eth",
|
||||
"relayerAddress": "0x9Ffbd3f9eE795A4fDa880ED553A2A4BD6D45CE5B",
|
||||
"isRegistered": true,
|
||||
"owner": "0x9Ffbd3f9eE795A4fDa880ED553A2A4BD6D45CE5B",
|
||||
"stakeBalance": "4627.036617270139345308",
|
||||
"hostnames": {
|
||||
"1": "mainnet.al1n.cc",
|
||||
"56": "bsc-tornado.al1n.cc"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -113,271 +275,82 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "0xtorn.eth",
|
||||
"relayerAddress": "0x9Ffbd3f9eE795A4fDa880ED553A2A4BD6D45CE5B",
|
||||
"ensName": "em3tornado.eth",
|
||||
"relayerAddress": "0x3a1d526D09b7E59Fd88De4726f68A8246dDC2742",
|
||||
"isRegistered": true,
|
||||
"owner": "0x9Ffbd3f9eE795A4fDa880ED553A2A4BD6D45CE5B",
|
||||
"stakeBalance": "4627.036617270139345308",
|
||||
"owner": "0x3a1d526D09b7E59Fd88De4726f68A8246dDC2742",
|
||||
"stakeBalance": "16864.242955629118561145",
|
||||
"hostnames": {
|
||||
"1": "mainnet.al1n.cc",
|
||||
"56": "bsc-tornado.al1n.cc"
|
||||
"1": "em3torn.com",
|
||||
"10": "optimism.em3torn.com",
|
||||
"56": "bsc.em3torn.com",
|
||||
"137": "polygon.em3torn.com",
|
||||
"42161": "arbitrum.em3torn.com",
|
||||
"43114": "avax.em3torn.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "wetez.eth",
|
||||
"relayerAddress": "0xe6184DA55174Cc0263a17eA2fc24E48511766505",
|
||||
"ensName": "on-sale.eth",
|
||||
"relayerAddress": "0x63606C4011e97a73BCd844Cde6a38D45a728BC0E",
|
||||
"isRegistered": true,
|
||||
"owner": "0xe6184DA55174Cc0263a17eA2fc24E48511766505",
|
||||
"stakeBalance": "567.980734786905511868",
|
||||
"owner": "0x63606C4011e97a73BCd844Cde6a38D45a728BC0E",
|
||||
"stakeBalance": "4476.543684932880020592",
|
||||
"hostnames": {
|
||||
"1": "tornado-1.wetez.io"
|
||||
"1": "mainnet-tornado.appleworld.club",
|
||||
"56": "bsc-tornado.appleworld.club"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "0xproxy.eth",
|
||||
"relayerAddress": "0x08657a1f4C1F06d657F31767831421EE7FaDf549",
|
||||
"ensName": "relayernews.eth",
|
||||
"relayerAddress": "0x6289C8a70EE2Ed6914834CaEa431F9a82c7eAf70",
|
||||
"isRegistered": true,
|
||||
"owner": "0x08657a1f4C1F06d657F31767831421EE7FaDf549",
|
||||
"stakeBalance": "705.605817336537209483",
|
||||
"owner": "0x6289C8a70EE2Ed6914834CaEa431F9a82c7eAf70",
|
||||
"stakeBalance": "1661.181918638614466424",
|
||||
"hostnames": {
|
||||
"1": "mainnet.0x0relayer.xyz",
|
||||
"56": "bsc.0x0relayer.xyz",
|
||||
"137": "polygon.0x0relayer.xyz"
|
||||
"1": "mainnet-tornado.relayernews.xyz",
|
||||
"56": "bsc-tornado.relayernews.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "torn-eth.eth",
|
||||
"relayerAddress": "0x42FecB4137aFF76E0E85702ff4F339DbFe6D859E",
|
||||
"ensName": "lowcost.eth",
|
||||
"relayerAddress": "0x28907F21F43B419F34226d6f10aCbCf1832b1D4d",
|
||||
"isRegistered": true,
|
||||
"owner": "0x42FecB4137aFF76E0E85702ff4F339DbFe6D859E",
|
||||
"stakeBalance": "978.62598484549460861",
|
||||
"owner": "0x28907F21F43B419F34226d6f10aCbCf1832b1D4d",
|
||||
"stakeBalance": "500.279638085962965981",
|
||||
"hostnames": {
|
||||
"1": "mainnet-tornado.50swap.com"
|
||||
"1": "mainnet-tornado.low-fee.xyz",
|
||||
"56": "bsc-tornado.low-fee.xyz",
|
||||
"137": "polygon-tornado.low-fee.xyz",
|
||||
"43114": "avalanche-tornado.low-fee.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "shadow-out.eth",
|
||||
"relayerAddress": "0x9Ee26a4bFd731E8e742B65bF955814EADdd7F151",
|
||||
"ensName": "cheap-relayer.eth",
|
||||
"relayerAddress": "0x076D4E32C6A5D888fC4658281539c94E778C796d",
|
||||
"isRegistered": true,
|
||||
"owner": "0x9Ee26a4bFd731E8e742B65bF955814EADdd7F151",
|
||||
"stakeBalance": "3571.639136672079169166",
|
||||
"owner": "0x076D4E32C6A5D888fC4658281539c94E778C796d",
|
||||
"stakeBalance": "500.878420081833044818",
|
||||
"hostnames": {
|
||||
"1": "livetobecomeavillain",
|
||||
"56": "justarandomdude",
|
||||
"100": "everythingisburning"
|
||||
"1": "mainnet-tornado.cheap-relayer.xyz",
|
||||
"56": "bsc-tornado.cheap-relayer.xyz",
|
||||
"137": "polygon-tornado.cheap-relayer.xyz",
|
||||
"43114": "avalanche-tornado.cheap-relayer.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "bitah.eth",
|
||||
"relayerAddress": "0x7E3893725d4e238B4c8c83375bBAd024a66Ffa42",
|
||||
"ensName": "therelayer.eth",
|
||||
"relayerAddress": "0xA0F0287683E820FF4211e67C03cf46a87431f4E1",
|
||||
"isRegistered": true,
|
||||
"owner": "0x7E3893725d4e238B4c8c83375bBAd024a66Ffa42",
|
||||
"stakeBalance": "503.237718892072788154",
|
||||
"owner": "0xA0F0287683E820FF4211e67C03cf46a87431f4E1",
|
||||
"stakeBalance": "1335.888771359625809238",
|
||||
"hostnames": {
|
||||
"1": "tornado.bitah.link",
|
||||
"56": "bsc-tornado.bitah.link",
|
||||
"137": "polygon-tornado.bitah.link"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "torntorn.eth",
|
||||
"relayerAddress": "0x1247749d7E28D357B4279110af0802603AC526cE",
|
||||
"isRegistered": true,
|
||||
"owner": "0x1247749d7E28D357B4279110af0802603AC526cE",
|
||||
"stakeBalance": "5535.435044583932530913",
|
||||
"hostnames": {
|
||||
"1": "eth.fsdhreu39jfk.com",
|
||||
"56": "bsc.fsdhreu39jfk.com",
|
||||
"100": "gnosis.tornad0.com",
|
||||
"137": "polygon.tornad0.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "secure-relay.eth",
|
||||
"relayerAddress": "0x1036AF02bCDb2e3A4db2d3D40b29e5054EDc79BA",
|
||||
"isRegistered": true,
|
||||
"owner": "0x1036AF02bCDb2e3A4db2d3D40b29e5054EDc79BA",
|
||||
"stakeBalance": "6751.661507930994067422",
|
||||
"hostnames": {
|
||||
"1": "torn-relayer.duckdns.org"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "relayer007.eth",
|
||||
"relayerAddress": "0xa0109274F53609f6Be97ec5f3052C659AB80f012",
|
||||
"isRegistered": true,
|
||||
"owner": "0xa0109274F53609f6Be97ec5f3052C659AB80f012",
|
||||
"stakeBalance": "2075.677151387681021207",
|
||||
"hostnames": {
|
||||
"1": "torn.relayersdao.finance",
|
||||
"56": "bsc.relayersdao.finance",
|
||||
"137": "matic.relayersdao.finance"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "reltor.eth",
|
||||
"relayerAddress": "0x4750BCfcC340AA4B31be7e71fa072716d28c29C5",
|
||||
"isRegistered": true,
|
||||
"owner": "0x4750BCfcC340AA4B31be7e71fa072716d28c29C5",
|
||||
"stakeBalance": "17078.896444585792890283",
|
||||
"hostnames": {
|
||||
"1": "eth.reltor.su",
|
||||
"56": "binance.reltor.su",
|
||||
"137": "polygon.reltor.su"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "t-relayer.eth",
|
||||
"relayerAddress": "0x000000Cd6521Ed1a65FAe0678eA15aF4EEAD74fe",
|
||||
"isRegistered": true,
|
||||
"owner": "0x000000Cd6521Ed1a65FAe0678eA15aF4EEAD74fe",
|
||||
"stakeBalance": "9393.81613250700489948",
|
||||
"hostnames": {
|
||||
"1": "eth.t-relayer.com",
|
||||
"56": "bsc.t-relayer.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "default-relayer.eth",
|
||||
"relayerAddress": "0x5555555731006f71f121144534Ca7C8799F66AA3",
|
||||
"isRegistered": true,
|
||||
"owner": "0x5555555731006f71f121144534Ca7C8799F66AA3",
|
||||
"stakeBalance": "12244.203047120053584442",
|
||||
"hostnames": {
|
||||
"1": "eth.default-relayer.com",
|
||||
"56": "bsc.default-relayer.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "relayer-secure.eth",
|
||||
"relayerAddress": "0xCEdac436cEA98E93F471331eCC693fF41D730921",
|
||||
"isRegistered": true,
|
||||
"owner": "0xCEdac436cEA98E93F471331eCC693fF41D730921",
|
||||
"stakeBalance": "548.198082306127582623",
|
||||
"hostnames": {
|
||||
"1": "relsecc-mainnet.moon-relayer.app"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "0xgm777.eth",
|
||||
"relayerAddress": "0x94596B6A626392F5D972D6CC4D929a42c2f0008c",
|
||||
"isRegistered": true,
|
||||
"owner": "0x94596B6A626392F5D972D6CC4D929a42c2f0008c",
|
||||
"stakeBalance": "1649.22629774180421325",
|
||||
"hostnames": {
|
||||
"1": "main.gm777.xyz",
|
||||
"56": "bsc.gm777.xyz",
|
||||
"42161": "arb.gm777.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "k-relayer.eth",
|
||||
"relayerAddress": "0xC49415493eB3Ec64a0F13D8AA5056f1CfC4ce35c",
|
||||
"isRegistered": true,
|
||||
"owner": "0xC49415493eB3Ec64a0F13D8AA5056f1CfC4ce35c",
|
||||
"stakeBalance": "2392.026618435010858225",
|
||||
"hostnames": {
|
||||
"1": "black-hardy.com",
|
||||
"56": "bsc.black-hardy.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "tornxdo.eth",
|
||||
"relayerAddress": "0xB399aa4c2F1678f72529Cd125F82cEA2c2a823eD",
|
||||
"isRegistered": true,
|
||||
"owner": "0xB399aa4c2F1678f72529Cd125F82cEA2c2a823eD",
|
||||
"stakeBalance": "983.310689667160962345",
|
||||
"hostnames": {
|
||||
"1": "tornado.evmjunkie.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "torrelayer.eth",
|
||||
"relayerAddress": "0x2Ee39Ff05643bC7cc9ed31B71e142429044A425C",
|
||||
"isRegistered": true,
|
||||
"owner": "0x2Ee39Ff05643bC7cc9ed31B71e142429044A425C",
|
||||
"stakeBalance": "4150.327987173762878437",
|
||||
"hostnames": {
|
||||
"1": "tornima.xyz",
|
||||
"56": "binance.tornima.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "torn-city.eth",
|
||||
"relayerAddress": "0xd04e9f0945DEA8373D882C730e2c93a74B591796",
|
||||
"isRegistered": true,
|
||||
"owner": "0xd04e9f0945DEA8373D882C730e2c93a74B591796",
|
||||
"stakeBalance": "6636.564618899564311691",
|
||||
"hostnames": {
|
||||
"1": "torn-city.com",
|
||||
"56": "bsc.torn-city.com"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "crelayer.eth",
|
||||
"relayerAddress": "0x180c58B7305152357142b33Eea94cBB152058B61",
|
||||
"isRegistered": true,
|
||||
"owner": "0x180c58B7305152357142b33Eea94cBB152058B61",
|
||||
"stakeBalance": "1460.389956347917729137",
|
||||
"hostnames": {
|
||||
"1": "eth.crelayer.xyz",
|
||||
"56": "bsc.crelayer.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "best-relay.eth",
|
||||
"relayerAddress": "0xe5A4c70113b90566BC5f80a3866935d0d52F990E",
|
||||
"isRegistered": true,
|
||||
"owner": "0xe5A4c70113b90566BC5f80a3866935d0d52F990E",
|
||||
"stakeBalance": "2002.0",
|
||||
"hostnames": {
|
||||
"1": "best-relay.gato-miaouw.xyz",
|
||||
"56": "bsc.gato-miaouw.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "safety-relayer.eth",
|
||||
"relayerAddress": "0xF1F4F76c9969eFbFB5C9A90a6E44c0E3696D3EF8",
|
||||
"isRegistered": true,
|
||||
"owner": "0xF1F4F76c9969eFbFB5C9A90a6E44c0E3696D3EF8",
|
||||
"stakeBalance": "500.879215977529089999",
|
||||
"hostnames": {
|
||||
"1": "a-relayer.top",
|
||||
"56": "bsc.a-relayer.top",
|
||||
"137": "polygon.a-relayer.top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "quick-relayer.eth",
|
||||
"relayerAddress": "0x187541D7D312F742040f270d0221B4Fe577934B0",
|
||||
"isRegistered": true,
|
||||
"owner": "0x187541D7D312F742040f270d0221B4Fe577934B0",
|
||||
"stakeBalance": "2931.033250737658918569",
|
||||
"hostnames": {
|
||||
"1": "quick-relayer.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "okrelayer.eth",
|
||||
"relayerAddress": "0x0e9D9a828247F5eed7f6D31D213A39805De52441",
|
||||
"isRegistered": true,
|
||||
"owner": "0x0e9D9a828247F5eed7f6D31D213A39805De52441",
|
||||
"stakeBalance": "4668.726167448982243314",
|
||||
"hostnames": {
|
||||
"1": "okrelayer.xyz",
|
||||
"56": "binance.okrelayer.xyz",
|
||||
"137": "polygon.okrelayer.xyz",
|
||||
"42161": "arb.okrelayer.xyz"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ensName": "s-relayer.eth",
|
||||
"relayerAddress": "0xc6398b4e8B60720051ed33f5C5a692f9785f5580",
|
||||
"isRegistered": true,
|
||||
"owner": "0xc6398b4e8B60720051ed33f5C5a692f9785f5580",
|
||||
"stakeBalance": "5000.0",
|
||||
"hostnames": {
|
||||
"1": "s-relayer.xyz"
|
||||
"1": "mainnet.therelayer.xyz",
|
||||
"10": "optimism.therelayer.xyz",
|
||||
"56": "bsc.therelayer.xyz",
|
||||
"100": "xdai.therelayer.xyz",
|
||||
"137": "polygon.therelayer.xyz",
|
||||
"42161": "arbitrum.therelayer.xyz",
|
||||
"43114": "avalanche.therelayer.xyz"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user