|
1 | 1 | import { BlockInfo, ChronikClient, ConnectionStrategy, ScriptUtxo, Tx, WsConfig, WsEndpoint, WsMsgClient, WsSubScriptClient } from 'chronik-client' |
2 | 2 | import { encodeCashAddress, decodeCashAddress } from 'ecashaddrjs' |
3 | 3 | import { AddressWithTransaction, BlockchainInfo, TransactionDetails, ProcessedMessages, SubbedAddressesLog, SyncAndSubscriptionReturn, SubscriptionReturn, SimpleBlockInfo } from 'types/chronikTypes' |
4 | | -import { CHRONIK_MESSAGE_CACHE_DELAY, RESPONSE_MESSAGES, XEC_TIMESTAMP_THRESHOLD, XEC_NETWORK_ID, BCH_NETWORK_ID, BCH_TIMESTAMP_THRESHOLD, CHRONIK_FETCH_N_TXS_PER_PAGE, KeyValueT, NETWORK_IDS_FROM_SLUGS, SOCKET_MESSAGES, NETWORK_IDS, NETWORK_TICKERS, MainNetworkSlugsType, MAX_MEMPOOL_TXS_TO_PROCESS_AT_A_TIME, MEMPOOL_PROCESS_DELAY, CHRONIK_INITIALIZATION_DELAY, LATENCY_TEST_CHECK_DELAY, INITIAL_ADDRESS_SYNC_FETCH_CONCURRENTLY, TX_EMIT_BATCH_SIZE, DB_COMMIT_BATCH_SIZE } from 'constants/index' |
| 4 | +import { CHRONIK_MESSAGE_CACHE_DELAY, RESPONSE_MESSAGES, XEC_TIMESTAMP_THRESHOLD, XEC_NETWORK_ID, BCH_NETWORK_ID, BCH_TIMESTAMP_THRESHOLD, CHRONIK_FETCH_N_TXS_PER_PAGE, KeyValueT, NETWORK_IDS_FROM_SLUGS, SOCKET_MESSAGES, NETWORK_IDS, NETWORK_TICKERS, MainNetworkSlugsType, MAX_MEMPOOL_TXS_TO_PROCESS_AT_A_TIME, MEMPOOL_PROCESS_DELAY, CHRONIK_INITIALIZATION_DELAY, LATENCY_TEST_CHECK_DELAY, INITIAL_ADDRESS_SYNC_FETCH_CONCURRENTLY, TX_EMIT_BATCH_SIZE, DB_COMMIT_BATCH_SIZE, MAX_TXS_PER_ADDRESS } from 'constants/index' |
5 | 5 | import { productionAddresses } from 'prisma-local/seeds/addresses' |
6 | 6 | import { |
7 | 7 | TransactionWithAddressAndPrices, |
@@ -306,7 +306,15 @@ export class ChronikBlockchainClient { |
306 | 306 |
|
307 | 307 | public async getPaginatedTxs (addressString: string, page: number, pageSize: number): Promise<Tx[]> { |
308 | 308 | const { type, hash160 } = toHash160(addressString) |
309 | | - return (await this.chronik.script(type, hash160).history(page, pageSize)).txs |
| 309 | + const txsPage = (await this.chronik.script(type, hash160).history(page, pageSize)) |
| 310 | + |
| 311 | + // If there are too many txs, this might be too expensive to sync. Raise an |
| 312 | + // error to skip this address. |
| 313 | + if (txsPage.numTxs > MAX_TXS_PER_ADDRESS) { |
| 314 | + throw new Error(`Address ${addressString} has too many txs to sync (${txsPage.numTxs} > ${MAX_TXS_PER_ADDRESS}).`) |
| 315 | + } |
| 316 | + |
| 317 | + return txsPage.txs |
310 | 318 | } |
311 | 319 |
|
312 | 320 | /* |
|
0 commit comments