Tornado CLI 1.0.6-alpha

minor improvements
This commit is contained in:
Tornado Contrib 2024-09-22 06:06:10 +00:00
parent b5c7dace45
commit 083479bafc
Signed by: tornadocontrib
GPG Key ID: 60B4DF1A076C64B1
5 changed files with 783 additions and 840 deletions

72
dist/cli.js vendored

@ -176778,8 +176778,8 @@ function getSubdomains() {
}
function getRelayerEnsSubdomains() {
const allConfig = getNetworkConfig();
return Object.keys(allConfig).reduce((acc, chain) => {
acc[Number(chain)] = allConfig[Number(chain)].relayerEnsSubdomain;
return enabledChains.reduce((acc, chain) => {
acc[chain] = allConfig[chain].relayerEnsSubdomain;
return acc;
}, {});
}
@ -177333,12 +177333,6 @@ class BaseEventsService {
const events = yield this.formatEvents(
yield this.batchEventsService.getBatchEvents({ fromBlock, toBlock, type: this.getType() })
);
if (!events.length) {
return {
events,
lastBlock: toBlock
};
}
return {
events,
lastBlock: toBlock
@ -177354,16 +177348,12 @@ class BaseEventsService {
}
getLatestEvents(_0) {
return __async$8(this, arguments, function* ({ fromBlock }) {
const allEvents = [];
const graphEvents = yield this.getEventsFromGraph({ fromBlock });
const lastSyncBlock = graphEvents.lastBlock && graphEvents.lastBlock >= fromBlock ? graphEvents.lastBlock : fromBlock;
const rpcEvents = yield this.getEventsFromRpc({ fromBlock: lastSyncBlock });
allEvents.push(...graphEvents.events);
allEvents.push(...rpcEvents.events);
const lastBlock = rpcEvents ? rpcEvents.lastBlock : allEvents[allEvents.length - 1] ? allEvents[allEvents.length - 1].blockNumber : fromBlock;
return {
events: allEvents,
lastBlock
events: [...graphEvents.events, ...rpcEvents.events],
lastBlock: rpcEvents.lastBlock
};
});
}
@ -177383,6 +177373,7 @@ class BaseEventsService {
*/
updateEvents() {
return __async$8(this, null, function* () {
var _a;
const savedEvents = yield this.getSavedEvents();
let fromBlock = this.deployedBlock;
if (savedEvents && savedEvents.lastBlock) {
@ -177390,10 +177381,7 @@ class BaseEventsService {
}
const newEvents = yield this.getLatestEvents({ fromBlock });
const eventSet = /* @__PURE__ */ new Set();
let allEvents = [];
allEvents.push(...savedEvents.events);
allEvents.push(...newEvents.events);
allEvents = allEvents.sort((a, b) => {
const allEvents = [...savedEvents.events, ...newEvents.events].sort((a, b) => {
if (a.blockNumber === b.blockNumber) {
return a.logIndex - b.logIndex;
}
@ -177404,7 +177392,7 @@ class BaseEventsService {
eventSet.add(eventKey);
return !hasEvent;
});
const lastBlock = newEvents ? newEvents.lastBlock : allEvents[allEvents.length - 1] ? allEvents[allEvents.length - 1].blockNumber : null;
const lastBlock = newEvents.lastBlock || ((_a = allEvents[allEvents.length - 1]) == null ? void 0 : _a.blockNumber);
this.validateEvents({ events: allEvents, lastBlock });
if (savedEvents.fromCache || newEvents.events.length) {
yield this.saveEvents({ events: allEvents, lastBlock });
@ -177789,7 +177777,7 @@ class BaseRegistryService extends BaseEventsService {
const registerEvents = (yield this.updateEvents()).events;
const subdomains = Object.values(this.relayerEnsSubdomains);
const registerSet = /* @__PURE__ */ new Set();
const uniqueRegisters = registerEvents.reverse().filter(({ ensName }) => {
const uniqueRegisters = registerEvents.filter(({ ensName }) => {
if (!registerSet.has(ensName)) {
registerSet.add(ensName);
return true;
@ -177803,12 +177791,12 @@ class BaseRegistryService extends BaseEventsService {
]);
const relayers = relayersData.map(({ owner, balance: stakeBalance, records, isRegistered }, index) => {
const { ensName, relayerAddress } = uniqueRegisters[index];
const hostnames = {};
records.forEach((record, recordIndex) => {
const hostnames = records.reduce((acc, record, recordIndex) => {
if (record) {
hostnames[Number(Object.keys(this.relayerEnsSubdomains)[recordIndex])] = record;
acc[Number(Object.keys(this.relayerEnsSubdomains)[recordIndex])] = record;
}
});
return acc;
}, {});
const isOwner = !relayerAddress || relayerAddress === owner;
const hasMinBalance = stakeBalance >= MIN_STAKE_BALANCE;
const preCondition = Object.keys(hostnames).length && isOwner && isRegistered && hasMinBalance;
@ -181064,7 +181052,7 @@ function calculateSnarkProof(input, circuit, provingKey) {
;// CONCATENATED MODULE: ./package.json
const package_namespaceObject = /*#__PURE__*/JSON.parse('{"rE":"1.0.4-alpha","h_":"Modern Toolsets for Privacy Pools on Ethereum"}');
const package_namespaceObject = /*#__PURE__*/JSON.parse('{"rE":"1.0.5-alpha","h_":"Modern Toolsets for Privacy Pools on Ethereum"}');
var package_namespaceObject_0 = /*#__PURE__*/__webpack_require__.t(package_namespaceObject, 2);
;// CONCATENATED MODULE: external "module"
const external_module_namespaceObject = require("module");
@ -185538,18 +185526,7 @@ function tornadoProgram() {
merkleWorkerPath: MERKLE_WORKER_PATH
});
const depositEvents = (yield depositsService.updateEvents()).events;
const depositTreeInitiator = yield (() => program_async(this, null, function* () {
if (MERKLE_WORKER_PATH) {
return () => merkleTreeService.verifyTree(depositEvents);
}
return yield merkleTreeService.verifyTree(depositEvents);
}))();
let depositTreePromise;
if (typeof depositTreeInitiator === "function") {
depositTreePromise = depositTreeInitiator();
} else {
depositTreePromise = depositTreeInitiator;
}
const depositTreePromise = MERKLE_WORKER_PATH ? merkleTreeService.verifyTree(depositEvents) : yield merkleTreeService.verifyTree(depositEvents);
const withdrawalEvents = (yield withdrawalsService.updateEvents()).events;
const depositEvent = depositEvents.find(({ commitment }) => commitment === commitmentHex);
const withdrawalEvent = withdrawalEvents.find(({ nullifierHash }) => nullifierHash === nullifierHex);
@ -185782,15 +185759,10 @@ function tornadoProgram() {
merkleWorkerPath: MERKLE_WORKER_PATH
});
const depositEvents = (yield depositsService.updateEvents()).events;
const depositTreePromise = yield (() => program_async(this, null, function* () {
if (MERKLE_WORKER_PATH) {
return () => merkleTreeService.verifyTree(depositEvents);
}
return yield merkleTreeService.verifyTree(depositEvents);
}))();
const depositTreePromise = MERKLE_WORKER_PATH ? merkleTreeService.verifyTree(depositEvents) : yield merkleTreeService.verifyTree(depositEvents);
const [withdrawalEvents] = yield Promise.all([
withdrawalsService.updateEvents().then(({ events }) => events),
typeof depositTreePromise === "function" ? depositTreePromise() : depositTreePromise
depositTreePromise
]);
const depositEvent = depositEvents.find(({ commitment }) => commitment === commitmentHex);
const withdrawalEvent = withdrawalEvents.find(({ nullifierHash }) => nullifierHash === nullifierHex);
@ -185949,16 +185921,8 @@ function tornadoProgram() {
userDirectory: SAVED_TREE_DIR
});
const depositEvents = (yield depositsService.updateEvents()).events;
const depositTreePromise = yield (() => program_async(this, null, function* () {
if (MERKLE_WORKER_PATH) {
return () => merkleTreeService.verifyTree(depositEvents);
}
return yield merkleTreeService.verifyTree(depositEvents);
}))();
const [tree] = yield Promise.all([
typeof depositTreePromise === "function" ? depositTreePromise() : depositTreePromise,
withdrawalsService.updateEvents()
]);
const depositTreePromise = MERKLE_WORKER_PATH ? merkleTreeService.verifyTree(depositEvents) : yield merkleTreeService.verifyTree(depositEvents);
const [tree] = yield Promise.all([depositTreePromise, withdrawalsService.updateEvents()]);
if (nativeCurrency === currency) {
yield treeCache.createTree(depositEvents, tree);
}

@ -1,6 +1,6 @@
{
"name": "@tornado/cli",
"version": "1.0.5-alpha",
"version": "1.0.6-alpha",
"description": "Modern Toolsets for Privacy Pools on Ethereum",
"main": "./dist/cli.js",
"types": "./dist/cli.d.ts",
@ -51,7 +51,7 @@
"optionalDependencies": {},
"devDependencies": {
"@colors/colors": "1.5.0",
"@tornado/core": "git+https://git.tornado.ws/tornadocontrib/tornado-core.git#700426acb7a7de16884cb314c3a0220a51682d18",
"@tornado/core": "git+https://git.tornado.ws/tornadocontrib/tornado-core.git#d6cfea1d1990f07a8faca2e876c0a6ccea4f603f",
"@typechain/ethers-v6": "^0.5.1",
"@types/figlet": "^1.5.8",
"@typescript-eslint/eslint-plugin": "^8.6.0",

@ -30,7 +30,6 @@ import {
Transaction,
getAddress,
} from 'ethers';
import type MerkleTree from '@tornado/fixed-merkle-tree';
import {
ERC20,
ERC20__factory,
@ -892,20 +891,9 @@ export function tornadoProgram() {
const depositEvents = (await depositsService.updateEvents()).events as DepositsEvents[];
// If we have MERKLE_WORKER_PATH run worker at background otherwise resolve it here
const depositTreeInitiator = await (async () => {
if (MERKLE_WORKER_PATH) {
return () => merkleTreeService.verifyTree(depositEvents) as Promise<MerkleTree>;
}
return (await merkleTreeService.verifyTree(depositEvents)) as MerkleTree;
})();
let depositTreePromise: Promise<MerkleTree> | MerkleTree;
if (typeof depositTreeInitiator === 'function') {
depositTreePromise = depositTreeInitiator();
} else {
depositTreePromise = depositTreeInitiator;
}
const depositTreePromise = MERKLE_WORKER_PATH
? merkleTreeService.verifyTree(depositEvents)
: await merkleTreeService.verifyTree(depositEvents);
const withdrawalEvents = (await withdrawalsService.updateEvents()).events as WithdrawalsEvents[];
@ -1223,16 +1211,13 @@ export function tornadoProgram() {
const depositEvents = (await depositsService.updateEvents()).events as DepositsEvents[];
// If we have MERKLE_WORKER_PATH run worker at background otherwise resolve it here
const depositTreePromise = await (async () => {
if (MERKLE_WORKER_PATH) {
return () => merkleTreeService.verifyTree(depositEvents) as Promise<MerkleTree>;
}
return (await merkleTreeService.verifyTree(depositEvents)) as MerkleTree;
})();
const depositTreePromise = MERKLE_WORKER_PATH
? merkleTreeService.verifyTree(depositEvents)
: await merkleTreeService.verifyTree(depositEvents);
const [withdrawalEvents] = await Promise.all([
withdrawalsService.updateEvents().then(({ events }) => events as WithdrawalsEvents[]),
typeof depositTreePromise === 'function' ? depositTreePromise() : depositTreePromise,
depositTreePromise,
]);
const depositEvent = depositEvents.find(({ commitment }) => commitment === commitmentHex);
@ -1435,17 +1420,11 @@ export function tornadoProgram() {
const depositEvents = (await depositsService.updateEvents()).events as DepositsEvents[];
// If we have MERKLE_WORKER_PATH run worker at background otherwise resolve it here
const depositTreePromise = await (async () => {
if (MERKLE_WORKER_PATH) {
return () => merkleTreeService.verifyTree(depositEvents) as Promise<MerkleTree>;
}
return (await merkleTreeService.verifyTree(depositEvents)) as MerkleTree;
})();
const depositTreePromise = MERKLE_WORKER_PATH
? merkleTreeService.verifyTree(depositEvents)
: await merkleTreeService.verifyTree(depositEvents);
const [tree] = await Promise.all([
typeof depositTreePromise === 'function' ? depositTreePromise() : depositTreePromise,
withdrawalsService.updateEvents(),
]);
const [tree] = await Promise.all([depositTreePromise, withdrawalsService.updateEvents()]);
if (nativeCurrency === currency) {
await treeCache.createTree(depositEvents, tree);

@ -1,277 +1,68 @@
{
"timestamp": 1726890359,
"timestamp": 1726984895,
"relayers": [
{
"ensName": "okrelayer.eth",
"relayerAddress": "0x0e9D9a828247F5eed7f6D31D213A39805De52441",
"ensName": "therelayer.eth",
"relayerAddress": "0xA0F0287683E820FF4211e67C03cf46a87431f4E1",
"isRegistered": true,
"owner": "0x0e9D9a828247F5eed7f6D31D213A39805De52441",
"stakeBalance": "4666.679387946529032297",
"owner": "0xA0F0287683E820FF4211e67C03cf46a87431f4E1",
"stakeBalance": "1335.888771359625809238",
"hostnames": {
"1": "okrelayer.xyz",
"56": "binance.okrelayer.xyz",
"137": "polygon.okrelayer.xyz",
"42161": "arb.okrelayer.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"
}
},
{
"ensName": "quick-relayer.eth",
"relayerAddress": "0x187541D7D312F742040f270d0221B4Fe577934B0",
"ensName": "cheap-relayer.eth",
"relayerAddress": "0x076D4E32C6A5D888fC4658281539c94E778C796d",
"isRegistered": true,
"owner": "0x187541D7D312F742040f270d0221B4Fe577934B0",
"stakeBalance": "2931.033250737658918569",
"owner": "0x076D4E32C6A5D888fC4658281539c94E778C796d",
"stakeBalance": "500.878420081833044818",
"hostnames": {
"1": "quick-relayer.xyz"
"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": "safety-relayer.eth",
"relayerAddress": "0xF1F4F76c9969eFbFB5C9A90a6E44c0E3696D3EF8",
"ensName": "lowcost.eth",
"relayerAddress": "0x28907F21F43B419F34226d6f10aCbCf1832b1D4d",
"isRegistered": true,
"owner": "0xF1F4F76c9969eFbFB5C9A90a6E44c0E3696D3EF8",
"stakeBalance": "500.879215977529089999",
"owner": "0x28907F21F43B419F34226d6f10aCbCf1832b1D4d",
"stakeBalance": "500.279638085962965981",
"hostnames": {
"1": "a-relayer.top",
"56": "bsc.a-relayer.top",
"137": "polygon.a-relayer.top"
"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": "k-relayer.eth",
"relayerAddress": "0xC49415493eB3Ec64a0F13D8AA5056f1CfC4ce35c",
"ensName": "relayernews.eth",
"relayerAddress": "0x6289C8a70EE2Ed6914834CaEa431F9a82c7eAf70",
"isRegistered": true,
"owner": "0xC49415493eB3Ec64a0F13D8AA5056f1CfC4ce35c",
"stakeBalance": "2194.529689989084430299",
"owner": "0x6289C8a70EE2Ed6914834CaEa431F9a82c7eAf70",
"stakeBalance": "1661.181918638614466424",
"hostnames": {
"1": "black-hardy.com",
"56": "bsc.black-hardy.com"
"1": "mainnet-tornado.relayernews.xyz",
"56": "bsc-tornado.relayernews.xyz"
}
},
{
"ensName": "relayer007.eth",
"relayerAddress": "0xa0109274F53609f6Be97ec5f3052C659AB80f012",
"ensName": "on-sale.eth",
"relayerAddress": "0x63606C4011e97a73BCd844Cde6a38D45a728BC0E",
"isRegistered": true,
"owner": "0xa0109274F53609f6Be97ec5f3052C659AB80f012",
"stakeBalance": "4989.637826137906607638",
"owner": "0x63606C4011e97a73BCd844Cde6a38D45a728BC0E",
"stakeBalance": "4476.543684932880020592",
"hostnames": {
"1": "torn.relayersdao.finance",
"56": "bsc.relayersdao.finance",
"137": "matic.relayersdao.finance"
}
},
{
"ensName": "reltor.eth",
"relayerAddress": "0x4750BCfcC340AA4B31be7e71fa072716d28c29C5",
"isRegistered": true,
"owner": "0x4750BCfcC340AA4B31be7e71fa072716d28c29C5",
"stakeBalance": "19999.983956326624881327",
"hostnames": {
"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"
}
},
{
"ensName": "reslayer.eth",
"relayerAddress": "0x7Ba6781620c91676B070D319E7E894BFd4A9eC81",
"isRegistered": true,
"owner": "0x7Ba6781620c91676B070D319E7E894BFd4A9eC81",
"stakeBalance": "879.305690438201312145",
"hostnames": {
"1": "mainnet-tornado.reslayer.xyz",
"56": "bsc-tornado.reslayer.xyz",
"100": "gnosis-tornado.reslayer.xyz",
"137": "polygon-tornado.reslayer.xyz",
"42161": "arbitrum-tornado.reslayer.xyz",
"43114": "avalanche-tornado.reslayer.xyz"
"1": "mainnet-tornado.appleworld.club",
"56": "bsc-tornado.appleworld.club"
}
},
{
@ -290,67 +81,276 @@
}
},
{
"ensName": "on-sale.eth",
"relayerAddress": "0x63606C4011e97a73BCd844Cde6a38D45a728BC0E",
"ensName": "reslayer.eth",
"relayerAddress": "0x7Ba6781620c91676B070D319E7E894BFd4A9eC81",
"isRegistered": true,
"owner": "0x63606C4011e97a73BCd844Cde6a38D45a728BC0E",
"stakeBalance": "4476.543684932880020592",
"owner": "0x7Ba6781620c91676B070D319E7E894BFd4A9eC81",
"stakeBalance": "879.305690438201312145",
"hostnames": {
"1": "mainnet-tornado.appleworld.club",
"56": "bsc-tornado.appleworld.club"
"1": "mainnet-tornado.reslayer.xyz",
"56": "bsc-tornado.reslayer.xyz",
"100": "gnosis-tornado.reslayer.xyz",
"137": "polygon-tornado.reslayer.xyz",
"42161": "arbitrum-tornado.reslayer.xyz",
"43114": "avalanche-tornado.reslayer.xyz"
}
},
{
"ensName": "relayernews.eth",
"relayerAddress": "0x6289C8a70EE2Ed6914834CaEa431F9a82c7eAf70",
"ensName": "0xtorn.eth",
"relayerAddress": "0x9Ffbd3f9eE795A4fDa880ED553A2A4BD6D45CE5B",
"isRegistered": true,
"owner": "0x6289C8a70EE2Ed6914834CaEa431F9a82c7eAf70",
"stakeBalance": "1661.181918638614466424",
"owner": "0x9Ffbd3f9eE795A4fDa880ED553A2A4BD6D45CE5B",
"stakeBalance": "4627.036617270139345308",
"hostnames": {
"1": "mainnet-tornado.relayernews.xyz",
"56": "bsc-tornado.relayernews.xyz"
"1": "mainnet.al1n.cc",
"56": "bsc-tornado.al1n.cc"
}
},
{
"ensName": "lowcost.eth",
"relayerAddress": "0x28907F21F43B419F34226d6f10aCbCf1832b1D4d",
"ensName": "wetez.eth",
"relayerAddress": "0xe6184DA55174Cc0263a17eA2fc24E48511766505",
"isRegistered": true,
"owner": "0x28907F21F43B419F34226d6f10aCbCf1832b1D4d",
"stakeBalance": "500.279638085962965981",
"owner": "0xe6184DA55174Cc0263a17eA2fc24E48511766505",
"stakeBalance": "567.980734786905511868",
"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": "tornado-1.wetez.io"
}
},
{
"ensName": "cheap-relayer.eth",
"relayerAddress": "0x076D4E32C6A5D888fC4658281539c94E778C796d",
"ensName": "0xproxy.eth",
"relayerAddress": "0x08657a1f4C1F06d657F31767831421EE7FaDf549",
"isRegistered": true,
"owner": "0x076D4E32C6A5D888fC4658281539c94E778C796d",
"stakeBalance": "500.878420081833044818",
"owner": "0x08657a1f4C1F06d657F31767831421EE7FaDf549",
"stakeBalance": "705.605817336537209483",
"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": "mainnet.0x0relayer.xyz",
"56": "bsc.0x0relayer.xyz",
"137": "polygon.0x0relayer.xyz"
}
},
{
"ensName": "therelayer.eth",
"relayerAddress": "0xA0F0287683E820FF4211e67C03cf46a87431f4E1",
"ensName": "torn-eth.eth",
"relayerAddress": "0x42FecB4137aFF76E0E85702ff4F339DbFe6D859E",
"isRegistered": true,
"owner": "0xA0F0287683E820FF4211e67C03cf46a87431f4E1",
"stakeBalance": "1335.888771359625809238",
"owner": "0x42FecB4137aFF76E0E85702ff4F339DbFe6D859E",
"stakeBalance": "978.62598484549460861",
"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": "mainnet-tornado.50swap.com"
}
},
{
"ensName": "shadow-out.eth",
"relayerAddress": "0x9Ee26a4bFd731E8e742B65bF955814EADdd7F151",
"isRegistered": true,
"owner": "0x9Ee26a4bFd731E8e742B65bF955814EADdd7F151",
"stakeBalance": "3571.639136672079169166",
"hostnames": {
"1": "livetobecomeavillain",
"56": "justarandomdude",
"100": "everythingisburning"
}
},
{
"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": "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": "2378.32581329697947104",
"hostnames": {
"1": "torn.relayersdao.finance",
"56": "bsc.relayersdao.finance",
"137": "matic.relayersdao.finance"
}
},
{
"ensName": "reltor.eth",
"relayerAddress": "0x4750BCfcC340AA4B31be7e71fa072716d28c29C5",
"isRegistered": true,
"owner": "0x4750BCfcC340AA4B31be7e71fa072716d28c29C5",
"stakeBalance": "19959.537563477506888659",
"hostnames": {
"1": "eth.reltor.su",
"56": "binance.reltor.su",
"137": "polygon.reltor.su"
}
},
{
"ensName": "t-relayer.eth",
"relayerAddress": "0x000000Cd6521Ed1a65FAe0678eA15aF4EEAD74fe",
"isRegistered": true,
"owner": "0x000000Cd6521Ed1a65FAe0678eA15aF4EEAD74fe",
"stakeBalance": "6379.466188010824508431",
"hostnames": {
"1": "eth.t-relayer.com",
"56": "bsc.t-relayer.com"
}
},
{
"ensName": "default-relayer.eth",
"relayerAddress": "0x5555555731006f71f121144534Ca7C8799F66AA3",
"isRegistered": true,
"owner": "0x5555555731006f71f121144534Ca7C8799F66AA3",
"stakeBalance": "5611.417537369167166026",
"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": "1979.261700994868938309",
"hostnames": {
"1": "main.gm777.xyz",
"56": "bsc.gm777.xyz",
"42161": "arb.gm777.xyz"
}
},
{
"ensName": "k-relayer.eth",
"relayerAddress": "0xC49415493eB3Ec64a0F13D8AA5056f1CfC4ce35c",
"isRegistered": true,
"owner": "0xC49415493eB3Ec64a0F13D8AA5056f1CfC4ce35c",
"stakeBalance": "2743.886989359646966334",
"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": "1697.363238361952542846",
"hostnames": {
"1": "tornima.xyz",
"56": "binance.tornima.xyz"
}
},
{
"ensName": "torn-city.eth",
"relayerAddress": "0xd04e9f0945DEA8373D882C730e2c93a74B591796",
"isRegistered": true,
"owner": "0xd04e9f0945DEA8373D882C730e2c93a74B591796",
"stakeBalance": "6683.804986564144794348",
"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": "4086.387829537434113053",
"hostnames": {
"1": "okrelayer.xyz",
"56": "binance.okrelayer.xyz",
"137": "polygon.okrelayer.xyz",
"42161": "arb.okrelayer.xyz"
}
}
]

@ -781,9 +781,9 @@
"@openzeppelin/contracts-v3" "npm:@openzeppelin/contracts@3.2.0-rc.0"
ethers "^6.4.0"
"@tornado/core@git+https://git.tornado.ws/tornadocontrib/tornado-core.git#700426acb7a7de16884cb314c3a0220a51682d18":
version "1.0.7"
resolved "git+https://git.tornado.ws/tornadocontrib/tornado-core.git#700426acb7a7de16884cb314c3a0220a51682d18"
"@tornado/core@git+https://git.tornado.ws/tornadocontrib/tornado-core.git#d6cfea1d1990f07a8faca2e876c0a6ccea4f603f":
version "1.0.10"
resolved "git+https://git.tornado.ws/tornadocontrib/tornado-core.git#d6cfea1d1990f07a8faca2e876c0a6ccea4f603f"
dependencies:
"@metamask/eth-sig-util" "^7.0.3"
"@tornado/contracts" "^1.0.0"