From cc566409a2145c0e879e552bebe87d4af4ef8e05 Mon Sep 17 00:00:00 2001 From: Alexandre ABRIOUX Date: Wed, 11 Oct 2023 11:08:44 +0200 Subject: [PATCH] chore(currency): update aggregators (#1134) --- .../src/aggregators/arbitrum-one.json | 84 ++++++++++++ .../currency/src/aggregators/mainnet.json | 126 +++++++++++++++++- packages/toolbox/package.json | 1 - .../src/chainlinkConversionPathTools.ts | 42 +++--- .../src/commands/chainlink/addAggregator.ts | 4 +- .../commands/chainlink/aggregatorsUtils.ts | 59 ++++---- .../src/commands/chainlink/listAggregators.ts | 2 +- 7 files changed, 253 insertions(+), 65 deletions(-) create mode 100644 packages/currency/src/aggregators/arbitrum-one.json diff --git a/packages/currency/src/aggregators/arbitrum-one.json b/packages/currency/src/aggregators/arbitrum-one.json new file mode 100644 index 0000000000..2bdd752dc7 --- /dev/null +++ b/packages/currency/src/aggregators/arbitrum-one.json @@ -0,0 +1,84 @@ +{ + "0x0ee88324f875d378f9a06643830934cadff6b1e5": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": { + "0x0ee88324f875d378f9a06643830934cadff6b1e5": 1, + "0x17b4158805772ced11225e77339f90beb5aae968": 1, + "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1": 1, + "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8": 1, + "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9": 1, + "0x4f99f266506be1475e943b2f097827011bfa4e93": 1, + "0xfa6faefc053e6c8e393a73dcc12b09fcde019d25": 1, + "0xfac26e3fd40adcdc6652f705d983b4830c00716c": 1, + "0x013f29832cd6525c4c6df81c2aae8032a1ff2db2": 1, + "0xf68fb12aa78e5c2b3eebd71441a990cd5757055c": 1, + "0xe4dddfe67e7164b0fe14e218d80dc4c08edc01cb": 1, + "0x0bbb60891a1688271573e5ea4cba84f18cbc0f2d": 1, + "0x539bde0d7dbd336b79148aa742883198bbf60342": 1, + "0x2e9a6df78e42a30712c10a9dc4b1c8656f8f2879": 1, + "0xce80759e72fe1d3c07be79ffecc76a7a9b46c641": 1, + "0xd4d42f0b6def4ce0383636770ef773390d85c61a": 1, + "0xaf88d065e77c8cc2239327c5edb3a432268e5831": 1, + "0x912ce59144191c1204e64559fe8253a0e49e6548": 1, + "0xb50731ca2fd80afe3910a4800225d4845cad266f": 1, + "0xb7a41bb9ad3cdc5db0e35c12e78106fa3f21693d": 1 + }, + "0x17b4158805772ced11225e77339f90beb5aae968": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x4f99f266506be1475e943b2f097827011bfa4e93": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xfa6faefc053e6c8e393a73dcc12b09fcde019d25": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xfac26e3fd40adcdc6652f705d983b4830c00716c": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x013f29832cd6525c4c6df81c2aae8032a1ff2db2": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xf68fb12aa78e5c2b3eebd71441a990cd5757055c": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xe4dddfe67e7164b0fe14e218d80dc4c08edc01cb": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x0bbb60891a1688271573e5ea4cba84f18cbc0f2d": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x539bde0d7dbd336b79148aa742883198bbf60342": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x2e9a6df78e42a30712c10a9dc4b1c8656f8f2879": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xce80759e72fe1d3c07be79ffecc76a7a9b46c641": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xd4d42f0b6def4ce0383636770ef773390d85c61a": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xaf88d065e77c8cc2239327c5edb3a432268e5831": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x912ce59144191c1204e64559fe8253a0e49e6548": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xb50731ca2fd80afe3910a4800225d4845cad266f": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xb7a41bb9ad3cdc5db0e35c12e78106fa3f21693d": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + } +} diff --git a/packages/currency/src/aggregators/mainnet.json b/packages/currency/src/aggregators/mainnet.json index 07ecbee8b3..058a4fc394 100644 --- a/packages/currency/src/aggregators/mainnet.json +++ b/packages/currency/src/aggregators/mainnet.json @@ -20,7 +20,28 @@ "0x8ab7404063ec4dbcfd4598215992dc3f8ec853d7": 1, "0xdefa4e8a7bcba345f687a2f1456f5edd9ce97202": 1, "0x8f8221afbb33998d8584a2b05749ba73c37a938a": 1, - "0xe6c09adc89ff4467cea20bc7760e3e59e7c0671d": 1 + "0xe6c09adc89ff4467cea20bc7760e3e59e7c0671d": 1, + "0x0d8775f648430679a709e98d2b0cb6250d2887ef": 1, + "0x956f47f50a910163d8bf957cf5846d573e7f87ca": 1, + "0xf68fb12aa78e5c2b3eebd71441a990cd5757055c": 1, + "0x0bbb60891a1688271573e5ea4cba84f18cbc0f2d": 1, + "0xb50731ca2fd80afe3910a4800225d4845cad266f": 1, + "0xab6ce0b86d905929340c640e8bcba8751feea10e": 1, + "0xbc396689893d065f41bc2c6ecbee5e0085233447": 1, + "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2": 1, + "0xb7a41bb9ad3cdc5db0e35c12e78106fa3f21693d": 1, + "0x00a8b738e453ffd858a7edf03bccfe20412f0eb0": 1, + "0x1a4b46696b2bb4794eb3d4c26f1c55f9170fa4c5": 1, + "0xd46ba6d942050d489dbd938a2c909a5d5039a161": 1, + "0x77fba179c79de5b7653f68b5039af940ada60ce0": 1, + "0x4fabb145d64652a948d72533023f6e7a623c7c53": 1, + "0x853d955acef822db058eb8505911ed77f175b99e": 1, + "0x056fd409e1d7a124bd7017459dfea2f387b6d5cd": 1, + "0xe28b3b32b6c345a34ff64674606124dd5aceca30": 1, + "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0": 1, + "0x0000000000085d4780b73119b644ae5ecd22b376": 1, + "0x8e870d67f660d95d5be530380d0ec0bd388289e1": 1, + "0x6ea6803339cfeadd84b5b62820c548f53ff7d8e9": 1 }, "0xfa6faefc053e6c8e393a73dcc12b09fcde019d25": { "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 @@ -38,7 +59,20 @@ "0xc944e90c64b2c07662a292be6244bdf05cda44a7": 1, "0x967da4048cd07ab37855c090aaf366e4ce1b9f48": 1, "0x0f5d2fb29fb7d3cfee444a200298f468908cc942": 1, - "0xdefa4e8a7bcba345f687a2f1456f5edd9ce97202": 1 + "0xdefa4e8a7bcba345f687a2f1456f5edd9ce97202": 1, + "0x8f693ca8d21b157107184d29d398a8d082b38b76": 1, + "0xbb0e17ef65f82ab018d8edd776e8dd940327b28b": 1, + "0xde30da39c46104798bb5aa3fe8b9e0e1f348163f": 1, + "0x0d8775f648430679a709e98d2b0cb6250d2887ef": 1, + "0xb8c77482e45f1f44de1745f52c74426c631bdd52": 1, + "0x6810e776880c02933d47db1b9fc05908e5386b96": 1, + "0xbc396689893d065f41bc2c6ecbee5e0085233447": 1, + "0x607f4c5bb672230e8672085532f7e901544a7375": 1, + "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2": 1, + "0x4fabb145d64652a948d72533023f6e7a623c7c53": 1, + "0x853d955acef822db058eb8505911ed77f175b99e": 1, + "0x056fd409e1d7a124bd7017459dfea2f387b6d5cd": 1, + "0x0000000000085d4780b73119b644ae5ecd22b376": 1 }, "0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c": { "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1, @@ -108,5 +142,93 @@ }, "0xe6c09adc89ff4467cea20bc7760e3e59e7c0671d": { "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x8f693ca8d21b157107184d29d398a8d082b38b76": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1 + }, + "0xbb0e17ef65f82ab018d8edd776e8dd940327b28b": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1 + }, + "0xde30da39c46104798bb5aa3fe8b9e0e1f348163f": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1 + }, + "0x0d8775f648430679a709e98d2b0cb6250d2887ef": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1, + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x956f47f50a910163d8bf957cf5846d573e7f87ca": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xf68fb12aa78e5c2b3eebd71441a990cd5757055c": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x0bbb60891a1688271573e5ea4cba84f18cbc0f2d": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xb8c77482e45f1f44de1745f52c74426c631bdd52": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1 + }, + "0xb50731ca2fd80afe3910a4800225d4845cad266f": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x6810e776880c02933d47db1b9fc05908e5386b96": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1 + }, + "0xab6ce0b86d905929340c640e8bcba8751feea10e": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xbc396689893d065f41bc2c6ecbee5e0085233447": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1, + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x607f4c5bb672230e8672085532f7e901544a7375": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1 + }, + "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1, + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xb7a41bb9ad3cdc5db0e35c12e78106fa3f21693d": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x00a8b738e453ffd858a7edf03bccfe20412f0eb0": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x1a4b46696b2bb4794eb3d4c26f1c55f9170fa4c5": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xd46ba6d942050d489dbd938a2c909a5d5039a161": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x77fba179c79de5b7653f68b5039af940ada60ce0": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x4fabb145d64652a948d72533023f6e7a623c7c53": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1, + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x853d955acef822db058eb8505911ed77f175b99e": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1, + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x056fd409e1d7a124bd7017459dfea2f387b6d5cd": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1, + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0xe28b3b32b6c345a34ff64674606124dd5aceca30": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x0000000000085d4780b73119b644ae5ecd22b376": { + "0xf5af88e117747e87fc5929f2ff87221b1447652e": 1, + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x8e870d67f660d95d5be530380d0ec0bd388289e1": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 + }, + "0x6ea6803339cfeadd84b5b62820c548f53ff7d8e9": { + "0x775eb53d00dd0acd3ec1696472105d579b9b386b": 1 } } diff --git a/packages/toolbox/package.json b/packages/toolbox/package.json index eec30e35e7..c6332870d0 100644 --- a/packages/toolbox/package.json +++ b/packages/toolbox/package.json @@ -51,7 +51,6 @@ "@requestnetwork/types": "0.37.0", "@requestnetwork/utils": "0.37.0", "axios": "0.27.2", - "bluebird": "3.7.2", "ethers": "5.5.1", "inquirer": "8.2.0", "lodash": "4.17.21", diff --git a/packages/toolbox/src/chainlinkConversionPathTools.ts b/packages/toolbox/src/chainlinkConversionPathTools.ts index e3816684dd..6d165abaff 100644 --- a/packages/toolbox/src/chainlinkConversionPathTools.ts +++ b/packages/toolbox/src/chainlinkConversionPathTools.ts @@ -6,8 +6,6 @@ import { ChainlinkConversionPath__factory, } from '@requestnetwork/smart-contracts/types'; import { CurrencyManager, EvmChains, UnsupportedCurrencyError } from '@requestnetwork/currency'; -import Bluebird from 'bluebird'; -import chunk from 'lodash/chunk'; import { retry } from '@requestnetwork/utils'; import { CurrencyTypes } from '@requestnetwork/types'; @@ -32,7 +30,7 @@ class ChainlinkConversionPathTools { public chainLinkConversionPath: ChainlinkConversionPath; public creationBlockNumber: number; public provider: ethers.providers.Provider; - private maxRange?: number; + private maxRange: number; /** * @param network The Ethereum network to use @@ -56,7 +54,7 @@ class ChainlinkConversionPathTools { this.creationBlockNumber = chainlinkConversionPath.getCreationBlockNumber(this.network); - this.maxRange = options?.maxRange || 5000; + this.maxRange = options?.maxRange || 1000000; } /** @@ -64,29 +62,27 @@ class ChainlinkConversionPathTools { */ public async getAggregators(): Promise>> { const lastBlock = await this.provider.getBlockNumber(); - const chunks = chunk( - Array(lastBlock - this.creationBlockNumber) - .fill(0) - .map((_, i) => this.creationBlockNumber + i), - this.maxRange, - ); + let currentBlock = this.creationBlockNumber; // Get the fee proxy contract event logs - const logs = await Bluebird.map( - chunks, - (blocks) => { - console.error(`Fetching logs from ${blocks[0]} to ${blocks[blocks.length - 1]}`); - return retry(this.chainLinkConversionPath.queryFilter.bind(this.chainLinkConversionPath), { + const logs = []; + while (currentBlock <= lastBlock) { + const nextBlock = currentBlock + this.maxRange; + console.error( + `Fetching logs from ${currentBlock} to ${nextBlock} (progress: ${Math.round( + (currentBlock * 100) / lastBlock, + )}%)`, + ); + const chunkLogs = await retry( + this.chainLinkConversionPath.queryFilter.bind(this.chainLinkConversionPath), + { maxRetries: 3, retryDelay: 2000, - })( - this.chainLinkConversionPath.filters.AggregatorUpdated(), - blocks[0], - blocks[blocks.length - 1], - ); - }, - { concurrency: 20 }, - ).then((r) => r.flat()); + }, + )(this.chainLinkConversionPath.filters.AggregatorUpdated(), currentBlock, nextBlock); + logs.push(...chunkLogs); + currentBlock = nextBlock; + } // Parses, filters and creates the events from the logs with the payment reference const aggregatorsMaps = logs.reduce( diff --git a/packages/toolbox/src/commands/chainlink/addAggregator.ts b/packages/toolbox/src/commands/chainlink/addAggregator.ts index 27ed22fe9c..cdca3a748e 100644 --- a/packages/toolbox/src/commands/chainlink/addAggregator.ts +++ b/packages/toolbox/src/commands/chainlink/addAggregator.ts @@ -79,9 +79,9 @@ export const handler = async (args: Options): Promise => { } if (!aggregator.startsWith('0x')) { const aggregators = await getAllAggregators(network); - const newAggregator = aggregators.find((x) => x.pair === aggregator); + const newAggregator = aggregators.find((x) => x.name === aggregator); assert(newAggregator, `aggregator ${aggregator} not found`); - aggregator = newAggregator.proxy; + aggregator = newAggregator?.proxyAddress; } assert(aggregator); await runUpdate('updateAggregator', [input, output, aggregator], args); diff --git a/packages/toolbox/src/commands/chainlink/aggregatorsUtils.ts b/packages/toolbox/src/commands/chainlink/aggregatorsUtils.ts index 46071b459a..d2fcc8bd9d 100644 --- a/packages/toolbox/src/commands/chainlink/aggregatorsUtils.ts +++ b/packages/toolbox/src/commands/chainlink/aggregatorsUtils.ts @@ -2,23 +2,11 @@ import { AggregatorsMap, CurrencyInput, CurrencyManager } from '@requestnetwork/ import axios from 'axios'; import { CurrencyTypes, RequestLogicTypes } from '@requestnetwork/types'; -type Proxy = { - pair: string; - deviationThreshold: number; - heartbeat: string; - decimals: number; - proxy: string; -}; -type Network = { +type Feed = { name: string; - url: string; - proxies: Proxy[]; + proxyAddress: string; }; -type Feed = { - title: string; - networks: Network[]; -}; export type Aggregator = { name: string; input: string; @@ -29,35 +17,34 @@ export type Aggregator = { const feedMap: Partial< Record > = { - mainnet: ['ethereum', 'Ethereum Mainnet'], - goerli: ['ethereum', 'Goerli Testnet'], - rinkeby: ['ethereum', 'Rinkeby Testnet'], - fantom: ['fantom', 'Fantom Mainnet'], - matic: ['polygon', 'Polygon Mainnet'], - xdai: ['gnosis-chain', 'Gnosis Chain Mainnet'], - bsc: ['bnb-chain', 'BNB Chain Mainnet'], - avalanche: ['avalanche', 'Avalanche Mainnet'], - optimism: ['optimism', 'Optimism Mainnet'], - 'arbitrum-one': ['arbitrum', 'Arbitrum Mainnet'], - moonbeam: ['moonbeam', 'Moonbeam Mainnet'], + mainnet: ['mainnet', 'Ethereum Mainnet'], + goerli: ['goerli', 'Goerli Testnet'], + fantom: ['fantom-mainnet', 'Fantom Mainnet'], + matic: ['matic-mainnet', 'Polygon Mainnet'], + xdai: ['xdai-mainnet', 'Gnosis Chain Mainnet'], + bsc: ['bsc-mainnet', 'BNB Chain Mainnet'], + avalanche: ['avalanche-mainnet', 'Avalanche Mainnet'], + optimism: ['ethereum-mainnet-optimism-1', 'Optimism Mainnet'], + 'arbitrum-one': ['ethereum-mainnet-arbitrum-1', 'Arbitrum Mainnet'], + moonbeam: ['polkadot-mainnet-moonbeam', 'Moonbeam Mainnet'], }; -export const getAllAggregators = async (network: CurrencyTypes.EvmChainName): Promise => { +export const getAllAggregators = async (network: CurrencyTypes.EvmChainName): Promise => { const [feedName, networkName] = feedMap[network] || []; if (!feedName || !networkName) { throw new Error( `network ${network} not supported by feed provider. Is it supported by Chainlink?`, ); } - const { data } = await axios.get>( - 'https://cl-docs-addresses.web.app/addresses.json', + + const { data: feeds } = await axios.get( + `https://reference-data-directory.vercel.app/feeds-${feedName}.json`, ); - const proxies = data[feedName].networks.find((x) => x.name === networkName)?.proxies; - if (!proxies) { + if (!feeds) { throw new Error(`not proxies for feed ${feedName} > ${networkName}`); } - return proxies; + return feeds; }; export const getAvailableAggregators = async ( @@ -66,11 +53,11 @@ export const getAvailableAggregators = async ( pairs?: string[], listAll?: boolean, ): Promise => { - const proxies = await getAllAggregators(network); + const feeds = await getAllAggregators(network); const missingAggregators: Aggregator[] = []; - for (const proxy of proxies) { - const [from, to] = proxy.pair.split(' / '); + for (const feed of feeds) { + const [from, to] = feed.name.split(' / '); const fromCurrency = cm.from(from, network) || cm.from(from); const toCurrency = cm.from(to, network) || cm.from(to); if (pairs && !pairs.includes(`${from}-${to}`.toLowerCase())) { @@ -86,10 +73,10 @@ export const getAvailableAggregators = async ( (listAll || !cm.getConversionPath(fromCurrency, toCurrency, network)) ) { missingAggregators.push({ - name: proxy.pair, + name: feed.name, input: fromCurrency.hash, output: toCurrency.hash, - aggregator: proxy.proxy, + aggregator: feed.proxyAddress, }); } } diff --git a/packages/toolbox/src/commands/chainlink/listAggregators.ts b/packages/toolbox/src/commands/chainlink/listAggregators.ts index 9dfe575d34..be01022572 100644 --- a/packages/toolbox/src/commands/chainlink/listAggregators.ts +++ b/packages/toolbox/src/commands/chainlink/listAggregators.ts @@ -18,7 +18,7 @@ export const builder = (): yargs.Argv => maxRange: { demand: false, type: 'number', - desc: 'The maximum number of blocks to query in parallel. Defaults to 5000', + desc: 'The maximum number of blocks to query in parallel. Defaults to 1,000,000', }, }); export const handler = listAggregators;