@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.d3ec352c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/client/factory.d.ts +1 -1
- package/dest/client/index.d.ts +1 -1
- package/dest/client/interface.d.ts +4 -2
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +8 -26
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +22 -16
- package/dest/config.d.ts +60 -54
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +11 -1
- package/dest/enr/generate-enr.d.ts +1 -1
- package/dest/enr/index.d.ts +1 -1
- package/dest/errors/attestation-pool.error.d.ts +7 -0
- package/dest/errors/attestation-pool.error.d.ts.map +1 -0
- package/dest/errors/attestation-pool.error.js +12 -0
- package/dest/errors/reqresp.error.d.ts +1 -1
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/index.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +28 -6
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +33 -32
- package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +13 -6
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +40 -17
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +11 -6
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +30 -8
- package/dest/mem_pools/attestation_pool/mocks.d.ts +224 -3
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +1 -1
- package/dest/mem_pools/index.d.ts +1 -1
- package/dest/mem_pools/instrumentation.d.ts +3 -1
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +11 -2
- package/dest/mem_pools/interface.d.ts +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +4 -38
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/index.d.ts +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +4 -3
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +1 -0
- package/dest/mem_pools/tx_pool/priority.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +4 -3
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +5 -4
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -3
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +11 -11
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +67 -0
- package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
- package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/index.js +1 -0
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +1 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +21 -9
- package/dest/msg_validators/block_proposal_validator/index.d.ts +1 -1
- package/dest/msg_validators/index.d.ts +1 -1
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
- package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.d.ts +1 -1
- package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.d.ts +3 -2
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/index.d.ts +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +3 -1
- package/dest/msg_validators/tx_validator/test_utils.d.ts +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
- package/dest/services/data_store.d.ts +1 -1
- package/dest/services/data_store.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.d.ts +1 -1
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/dummy_service.d.ts +1 -1
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/gossipsub/scoring.d.ts +1 -1
- package/dest/services/index.d.ts +1 -1
- package/dest/services/libp2p/instrumentation.d.ts +3 -1
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +9 -2
- package/dest/services/libp2p/libp2p_service.d.ts +11 -67
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +227 -57
- package/dest/services/peer-manager/interface.d.ts +1 -1
- package/dest/services/peer-manager/metrics.d.ts +3 -1
- package/dest/services/peer-manager/metrics.d.ts.map +1 -1
- package/dest/services/peer-manager/metrics.js +11 -0
- package/dest/services/peer-manager/peer_manager.d.ts +1 -32
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +2 -0
- package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +40 -2
- package/dest/services/reqresp/config.d.ts +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -4
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
- package/dest/services/reqresp/index.d.ts +1 -1
- package/dest/services/reqresp/interface.d.ts +1 -1
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/metrics.d.ts +1 -1
- package/dest/services/reqresp/metrics.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/auth.d.ts +1 -1
- package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.d.ts +1 -1
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block.js +2 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +3 -5
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/index.d.ts +1 -1
- package/dest/services/reqresp/protocols/ping.d.ts +1 -1
- package/dest/services/reqresp/protocols/status.d.ts +6 -5
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/status.js +4 -3
- package/dest/services/reqresp/protocols/tx.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
- package/dest/services/reqresp/reqresp.d.ts +1 -41
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/status.d.ts +2 -2
- package/dest/services/reqresp/status.d.ts.map +1 -1
- package/dest/services/service.d.ts +1 -1
- package/dest/services/tx_collection/config.d.ts +1 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts +4 -9
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/index.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts +1 -1
- package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
- package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/slow_tx_collection.js +2 -1
- package/dest/services/tx_collection/tx_collection.d.ts +9 -9
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +1 -1
- package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_source.d.ts +1 -1
- package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
- package/dest/services/tx_provider.d.ts +5 -4
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts +1 -1
- package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts +1 -1
- package/dest/test-helpers/get-ports.d.ts.map +1 -1
- package/dest/test-helpers/index.d.ts +1 -1
- package/dest/test-helpers/make-enrs.d.ts +1 -1
- package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.d.ts +4 -4
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
- package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +11 -8
- package/dest/testbench/parse_log_file.d.ts +1 -1
- package/dest/testbench/testbench.d.ts +1 -1
- package/dest/testbench/worker_client_manager.d.ts +1 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/types/index.d.ts +1 -1
- package/dest/util.d.ts +2 -1
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +11 -2
- package/dest/versioning.d.ts +1 -1
- package/package.json +19 -18
- package/src/client/interface.ts +4 -1
- package/src/client/p2p_client.ts +37 -29
- package/src/config.ts +18 -1
- package/src/errors/attestation-pool.error.ts +13 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +29 -5
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +45 -32
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +65 -23
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +50 -16
- package/src/mem_pools/attestation_pool/mocks.ts +1 -1
- package/src/mem_pools/instrumentation.ts +13 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +7 -6
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +8 -6
- package/src/mem_pools/tx_pool/tx_pool.ts +3 -2
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +5 -4
- package/src/msg_validators/attestation_validator/attestation_validator.ts +13 -15
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +91 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +25 -9
- package/src/msg_validators/tx_validator/factory.ts +2 -1
- package/src/msg_validators/tx_validator/phases_validator.ts +3 -1
- package/src/msg_validators/tx_validator/timestamp_validator.ts +2 -1
- package/src/services/libp2p/instrumentation.ts +10 -1
- package/src/services/libp2p/libp2p_service.ts +255 -66
- package/src/services/peer-manager/metrics.ts +10 -0
- package/src/services/peer-manager/peer_manager.ts +2 -0
- package/src/services/peer-manager/peer_scoring.ts +46 -3
- package/src/services/reqresp/protocols/block.ts +2 -1
- package/src/services/reqresp/protocols/status.ts +9 -8
- package/src/services/tx_collection/fast_tx_collection.ts +3 -2
- package/src/services/tx_collection/slow_tx_collection.ts +5 -4
- package/src/services/tx_collection/tx_collection.ts +9 -8
- package/src/services/tx_provider.ts +4 -3
- package/src/testbench/p2p_client_testbench_worker.ts +8 -5
- package/src/util.ts +12 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
2
3
|
import { toArray } from '@aztec/foundation/iterable';
|
|
3
4
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
@@ -37,7 +38,7 @@ export class AztecKVTxPool extends (EventEmitter as new () => TypedEventEmitter<
|
|
|
37
38
|
txPoolOverflowFactor: number = 1;
|
|
38
39
|
|
|
39
40
|
/** Index from tx hash to the block number in which they were mined, filtered by mined txs. */
|
|
40
|
-
#minedTxHashToBlock: AztecAsyncMap<string,
|
|
41
|
+
#minedTxHashToBlock: AztecAsyncMap<string, BlockNumber>;
|
|
41
42
|
|
|
42
43
|
/** Index from tx priority (stored as hex) to its tx hash, filtered by pending txs. */
|
|
43
44
|
#pendingTxPriorityToHash: AztecAsyncMultiMap<string, string>;
|
|
@@ -49,10 +50,10 @@ export class AztecKVTxPool extends (EventEmitter as new () => TypedEventEmitter<
|
|
|
49
50
|
#pendingTxHashToHeaderHash: AztecAsyncMap<string, string>;
|
|
50
51
|
|
|
51
52
|
/** Map from tx hash to the block number it was originally mined in (for soft-deleted txs). */
|
|
52
|
-
#deletedMinedTxHashes: AztecAsyncMap<string,
|
|
53
|
+
#deletedMinedTxHashes: AztecAsyncMap<string, BlockNumber>;
|
|
53
54
|
|
|
54
55
|
/** MultiMap from block number to deleted mined tx hashes for efficient cleanup. */
|
|
55
|
-
#blockToDeletedMinedTxHash: AztecAsyncMultiMap<
|
|
56
|
+
#blockToDeletedMinedTxHash: AztecAsyncMultiMap<BlockNumber, string>;
|
|
56
57
|
|
|
57
58
|
/** The cumulative tx size in bytes that the pending txs in the pool take up. */
|
|
58
59
|
#pendingTxSize: AztecAsyncSingleton<number>;
|
|
@@ -222,7 +223,7 @@ export class AztecKVTxPool extends (EventEmitter as new () => TypedEventEmitter<
|
|
|
222
223
|
return vals.map(TxHash.fromString);
|
|
223
224
|
}
|
|
224
225
|
|
|
225
|
-
public async getMinedTxHashes(): Promise<[TxHash,
|
|
226
|
+
public async getMinedTxHashes(): Promise<[TxHash, BlockNumber][]> {
|
|
226
227
|
const vals = await toArray(this.#minedTxHashToBlock.entriesAsync());
|
|
227
228
|
return vals.map(([txHash, blockNumber]) => [TxHash.fromString(txHash), blockNumber]);
|
|
228
229
|
}
|
|
@@ -441,10 +442,10 @@ export class AztecKVTxPool extends (EventEmitter as new () => TypedEventEmitter<
|
|
|
441
442
|
* @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
|
|
442
443
|
* @returns The number of transactions permanently deleted.
|
|
443
444
|
*/
|
|
444
|
-
public async cleanupDeletedMinedTxs(blockNumber:
|
|
445
|
+
public async cleanupDeletedMinedTxs(blockNumber: BlockNumber): Promise<number> {
|
|
445
446
|
let deletedCount = 0;
|
|
446
447
|
const txHashesToDelete: string[] = [];
|
|
447
|
-
const blocksToDelete:
|
|
448
|
+
const blocksToDelete: BlockNumber[] = [];
|
|
448
449
|
|
|
449
450
|
await this.#store.transactionAsync(async () => {
|
|
450
451
|
// Iterate through all entries and check block numbers
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
3
4
|
import type { TxAddedToPoolStats } from '@aztec/stdlib/stats';
|
|
@@ -18,10 +19,11 @@ export class InMemoryTxPool extends (EventEmitter as new () => TypedEventEmitter
|
|
|
18
19
|
* Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
|
|
19
20
|
*/
|
|
20
21
|
private txs: Map<bigint, Tx>;
|
|
21
|
-
private minedTxs: Map<bigint,
|
|
22
|
+
private minedTxs: Map<bigint, BlockNumber>;
|
|
22
23
|
private pendingTxs: Set<bigint>;
|
|
23
|
-
private deletedMinedTxHashes: Map<bigint,
|
|
24
|
-
|
|
24
|
+
private deletedMinedTxHashes: Map<bigint, BlockNumber>;
|
|
25
|
+
// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
|
|
26
|
+
private blockToDeletedMinedTxHash: Map<BlockNumber, Set<bigint>>;
|
|
25
27
|
|
|
26
28
|
private metrics: PoolInstrumentation<Tx>;
|
|
27
29
|
|
|
@@ -108,7 +110,7 @@ export class InMemoryTxPool extends (EventEmitter as new () => TypedEventEmitter
|
|
|
108
110
|
});
|
|
109
111
|
}
|
|
110
112
|
|
|
111
|
-
public getMinedTxHashes(): Promise<[TxHash,
|
|
113
|
+
public getMinedTxHashes(): Promise<[TxHash, BlockNumber][]> {
|
|
112
114
|
return Promise.resolve(
|
|
113
115
|
Array.from(this.minedTxs.entries()).map(([txHash, blockNumber]) => [TxHash.fromBigInt(txHash), blockNumber]),
|
|
114
116
|
);
|
|
@@ -253,9 +255,9 @@ export class InMemoryTxPool extends (EventEmitter as new () => TypedEventEmitter
|
|
|
253
255
|
* @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
|
|
254
256
|
* @returns The number of transactions permanently deleted.
|
|
255
257
|
*/
|
|
256
|
-
public cleanupDeletedMinedTxs(blockNumber:
|
|
258
|
+
public cleanupDeletedMinedTxs(blockNumber: BlockNumber): Promise<number> {
|
|
257
259
|
let deletedCount = 0;
|
|
258
|
-
const blocksToDelete:
|
|
260
|
+
const blocksToDelete: BlockNumber[] = [];
|
|
259
261
|
|
|
260
262
|
// Find all blocks up to the specified block number
|
|
261
263
|
for (const [block, txHashes] of this.blockToDeletedMinedTxHash.entries()) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import type { TypedEventEmitter } from '@aztec/foundation/types';
|
|
2
3
|
import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
3
4
|
|
|
@@ -102,7 +103,7 @@ export interface TxPool extends TypedEventEmitter<TxPoolEvents> {
|
|
|
102
103
|
* Gets the hashes of mined transactions currently in the tx pool.
|
|
103
104
|
* @returns An array of mined transaction hashes found in the tx pool.
|
|
104
105
|
*/
|
|
105
|
-
getMinedTxHashes(): Promise<[tx: TxHash, blockNumber:
|
|
106
|
+
getMinedTxHashes(): Promise<[tx: TxHash, blockNumber: BlockNumber][]>;
|
|
106
107
|
|
|
107
108
|
/**
|
|
108
109
|
* Returns whether the given tx hash is flagged as pending, mined, or deleted.
|
|
@@ -131,5 +132,5 @@ export interface TxPool extends TypedEventEmitter<TxPoolEvents> {
|
|
|
131
132
|
* @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
|
|
132
133
|
* @returns The number of transactions permanently deleted.
|
|
133
134
|
*/
|
|
134
|
-
cleanupDeletedMinedTxs(blockNumber:
|
|
135
|
+
cleanupDeletedMinedTxs(blockNumber: BlockNumber): Promise<number>;
|
|
135
136
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { unfreeze } from '@aztec/foundation/types';
|
|
2
3
|
import { GasFees } from '@aztec/stdlib/gas';
|
|
3
4
|
import { mockTx } from '@aztec/stdlib/testing';
|
|
@@ -13,7 +14,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
|
|
|
13
14
|
let pool: TxPool;
|
|
14
15
|
|
|
15
16
|
const minedBlockHeader = BlockHeader.empty({
|
|
16
|
-
globalVariables: GlobalVariables.empty({ blockNumber: 1, timestamp: 0n }),
|
|
17
|
+
globalVariables: GlobalVariables.empty({ blockNumber: BlockNumber(1), timestamp: 0n }),
|
|
17
18
|
});
|
|
18
19
|
|
|
19
20
|
beforeEach(() => {
|
|
@@ -261,7 +262,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
|
|
|
261
262
|
await pool.deleteTxs([txs[0].getTxHash(), txs[1].getTxHash()]);
|
|
262
263
|
|
|
263
264
|
// Clean up deleted mined txs from block 1 and earlier
|
|
264
|
-
const deletedCount = await pool.cleanupDeletedMinedTxs(1);
|
|
265
|
+
const deletedCount = await pool.cleanupDeletedMinedTxs(BlockNumber(1));
|
|
265
266
|
|
|
266
267
|
// Verify old transactions are permanently deleted
|
|
267
268
|
expect(deletedCount).toBe(2);
|
|
@@ -276,7 +277,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
|
|
|
276
277
|
|
|
277
278
|
// Mark as mined in block 2
|
|
278
279
|
const laterBlockHeader = BlockHeader.empty({
|
|
279
|
-
globalVariables: GlobalVariables.empty({ blockNumber: 2, timestamp: 0n }),
|
|
280
|
+
globalVariables: GlobalVariables.empty({ blockNumber: BlockNumber(2), timestamp: 0n }),
|
|
280
281
|
});
|
|
281
282
|
await pool.markAsMined([txs[0].getTxHash()], laterBlockHeader);
|
|
282
283
|
|
|
@@ -284,7 +285,7 @@ export function describeTxPool(getTxPool: () => TxPool) {
|
|
|
284
285
|
await pool.deleteTxs([txs[0].getTxHash()]);
|
|
285
286
|
|
|
286
287
|
// Try to clean up with block 1 (before the mined block)
|
|
287
|
-
const deletedCount = await pool.cleanupDeletedMinedTxs(1);
|
|
288
|
+
const deletedCount = await pool.cleanupDeletedMinedTxs(BlockNumber(1));
|
|
288
289
|
|
|
289
290
|
// Verify no transactions were cleaned up
|
|
290
291
|
expect(deletedCount).toBe(0);
|
|
@@ -4,8 +4,8 @@ import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
|
4
4
|
import { type BlockAttestation, type P2PValidator, PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
5
5
|
|
|
6
6
|
export class AttestationValidator implements P2PValidator<BlockAttestation> {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
protected epochCache: EpochCacheInterface;
|
|
8
|
+
protected logger: Logger;
|
|
9
9
|
|
|
10
10
|
constructor(epochCache: EpochCacheInterface) {
|
|
11
11
|
this.epochCache = epochCache;
|
|
@@ -13,47 +13,45 @@ export class AttestationValidator implements P2PValidator<BlockAttestation> {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
async validate(message: BlockAttestation): Promise<PeerErrorSeverity | undefined> {
|
|
16
|
-
const
|
|
16
|
+
const slotNumber = message.payload.header.slotNumber;
|
|
17
17
|
|
|
18
18
|
try {
|
|
19
19
|
const { currentProposer, nextProposer, currentSlot, nextSlot } =
|
|
20
20
|
await this.epochCache.getProposerAttesterAddressInCurrentOrNextSlot();
|
|
21
21
|
|
|
22
|
-
if (
|
|
23
|
-
this.logger.warn(
|
|
24
|
-
`Attestation slot ${slotNumberBigInt} is not current (${currentSlot}) or next (${nextSlot}) slot`,
|
|
25
|
-
);
|
|
22
|
+
if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
|
|
23
|
+
this.logger.warn(`Attestation slot ${slotNumber} is not current (${currentSlot}) or next (${nextSlot}) slot`);
|
|
26
24
|
return PeerErrorSeverity.HighToleranceError;
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
// Verify the signature is valid
|
|
30
28
|
const attester = message.getSender();
|
|
31
29
|
if (attester === undefined) {
|
|
32
|
-
this.logger.warn(`Invalid signature in attestation for slot ${
|
|
30
|
+
this.logger.warn(`Invalid signature in attestation for slot ${slotNumber}`);
|
|
33
31
|
return PeerErrorSeverity.LowToleranceError;
|
|
34
32
|
}
|
|
35
33
|
|
|
36
34
|
// Verify the attester is in the committee for this slot
|
|
37
|
-
if (!(await this.epochCache.isInCommittee(
|
|
38
|
-
this.logger.warn(`Attester ${attester.toString()} is not in committee for slot ${
|
|
35
|
+
if (!(await this.epochCache.isInCommittee(slotNumber, attester))) {
|
|
36
|
+
this.logger.warn(`Attester ${attester.toString()} is not in committee for slot ${slotNumber}`);
|
|
39
37
|
return PeerErrorSeverity.HighToleranceError;
|
|
40
38
|
}
|
|
41
39
|
|
|
42
40
|
// Verify the proposer signature matches the expected proposer for this slot
|
|
43
41
|
const proposer = message.getProposer();
|
|
44
|
-
const expectedProposer =
|
|
42
|
+
const expectedProposer = slotNumber === currentSlot ? currentProposer : nextProposer;
|
|
45
43
|
if (!expectedProposer) {
|
|
46
|
-
this.logger.warn(`No proposer defined for slot ${
|
|
44
|
+
this.logger.warn(`No proposer defined for slot ${slotNumber}`);
|
|
47
45
|
return PeerErrorSeverity.HighToleranceError;
|
|
48
46
|
}
|
|
49
47
|
if (!proposer) {
|
|
50
|
-
this.logger.warn(`Invalid proposer signature in attestation for slot ${
|
|
48
|
+
this.logger.warn(`Invalid proposer signature in attestation for slot ${slotNumber}`);
|
|
51
49
|
return PeerErrorSeverity.LowToleranceError;
|
|
52
50
|
}
|
|
53
51
|
if (!proposer.equals(expectedProposer)) {
|
|
54
52
|
this.logger.warn(
|
|
55
53
|
`Proposer signature mismatch in attestation. ` +
|
|
56
|
-
`Expected ${expectedProposer?.toString() ?? 'none'} but got ${proposer.toString()} for slot ${
|
|
54
|
+
`Expected ${expectedProposer?.toString() ?? 'none'} but got ${proposer.toString()} for slot ${slotNumber}`,
|
|
57
55
|
);
|
|
58
56
|
return PeerErrorSeverity.HighToleranceError;
|
|
59
57
|
}
|
|
@@ -62,7 +60,7 @@ export class AttestationValidator implements P2PValidator<BlockAttestation> {
|
|
|
62
60
|
} catch (e) {
|
|
63
61
|
// People shouldn't be sending us attestations if the committee doesn't exist
|
|
64
62
|
if (e instanceof NoCommitteeError) {
|
|
65
|
-
this.logger.warn(`No committee exists for attestation for slot ${
|
|
63
|
+
this.logger.warn(`No committee exists for attestation for slot ${slotNumber}`);
|
|
66
64
|
return PeerErrorSeverity.LowToleranceError;
|
|
67
65
|
}
|
|
68
66
|
throw e;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import { type BlockAttestation, PeerErrorSeverity } from '@aztec/stdlib/p2p';
|
|
3
|
+
import { Attributes, Metrics, type TelemetryClient, ValueType } from '@aztec/telemetry-client';
|
|
4
|
+
|
|
5
|
+
import type { AttestationPool } from '../../mem_pools/attestation_pool/attestation_pool.js';
|
|
6
|
+
import { AttestationValidator } from './attestation_validator.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* FishermanAttestationValidator extends the base AttestationValidator to add
|
|
10
|
+
* additional validation for fisherman nodes: verifying that attestations sign
|
|
11
|
+
* the same payload as the original proposal.
|
|
12
|
+
* Invalid attestations are rejected (not propagated), but peer penalization is
|
|
13
|
+
* handled by LibP2PService based on the fishermanMode config to ensure a better
|
|
14
|
+
* view of the network.
|
|
15
|
+
*/
|
|
16
|
+
export class FishermanAttestationValidator extends AttestationValidator {
|
|
17
|
+
private invalidAttestationCounter;
|
|
18
|
+
|
|
19
|
+
constructor(
|
|
20
|
+
epochCache: EpochCacheInterface,
|
|
21
|
+
private attestationPool: AttestationPool,
|
|
22
|
+
telemetryClient: TelemetryClient,
|
|
23
|
+
) {
|
|
24
|
+
super(epochCache);
|
|
25
|
+
this.logger = this.logger.createChild('[FISHERMAN]');
|
|
26
|
+
|
|
27
|
+
const meter = telemetryClient.getMeter('FishermanAttestationValidator');
|
|
28
|
+
this.invalidAttestationCounter = meter.createUpDownCounter(Metrics.VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT, {
|
|
29
|
+
description: 'The number of invalid attestations received',
|
|
30
|
+
valueType: ValueType.INT,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
override async validate(message: BlockAttestation): Promise<PeerErrorSeverity | undefined> {
|
|
35
|
+
// First run the standard validation
|
|
36
|
+
const baseValidationResult = await super.validate(message);
|
|
37
|
+
if (baseValidationResult !== undefined) {
|
|
38
|
+
// Track base validation failures (invalid signature, wrong committee, etc.)
|
|
39
|
+
this.invalidAttestationCounter.add(1, {
|
|
40
|
+
[Attributes.ERROR_TYPE]: 'base_validation_failed',
|
|
41
|
+
});
|
|
42
|
+
return baseValidationResult;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// fisherman validation: verify attestation payload matches proposal payload
|
|
46
|
+
const slotNumberBigInt = message.payload.header.slotNumber;
|
|
47
|
+
const attester = message.getSender();
|
|
48
|
+
const proposer = message.getProposer();
|
|
49
|
+
|
|
50
|
+
if (!attester || !proposer) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const proposalId = message.archive.toString();
|
|
55
|
+
const proposal = await this.attestationPool.getBlockProposal(proposalId);
|
|
56
|
+
|
|
57
|
+
if (proposal) {
|
|
58
|
+
// Compare the attestation payload with the proposal payload
|
|
59
|
+
if (!message.payload.equals(proposal.payload)) {
|
|
60
|
+
this.logger.error(
|
|
61
|
+
`Attestation payload mismatch for slot ${slotNumberBigInt}! ` +
|
|
62
|
+
`Attester ${attester.toString()} signed different data than the proposal.`,
|
|
63
|
+
{
|
|
64
|
+
slot: slotNumberBigInt.toString(),
|
|
65
|
+
attester: attester.toString(),
|
|
66
|
+
proposer: proposer.toString(),
|
|
67
|
+
proposalArchive: proposal.archive.toString(),
|
|
68
|
+
attestationArchive: message.archive.toString(),
|
|
69
|
+
proposalHeader: proposal.payload.header.hash().toString(),
|
|
70
|
+
attestationHeader: message.payload.header.hash().toString(),
|
|
71
|
+
},
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
// Track invalid attestation metric
|
|
75
|
+
this.invalidAttestationCounter.add(1, {
|
|
76
|
+
[Attributes.ERROR_TYPE]: 'payload_mismatch',
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// Return error to reject the message, but LibP2PService won't penalize in fisherman mode
|
|
80
|
+
return PeerErrorSeverity.LowToleranceError;
|
|
81
|
+
}
|
|
82
|
+
} else {
|
|
83
|
+
// We might receive attestations before proposals in some cases
|
|
84
|
+
this.logger.debug(
|
|
85
|
+
`Received attestation for slot ${slotNumberBigInt} but proposal not found yet. ` + `Proposal ID: ${proposalId}`,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -24,26 +24,42 @@ export class BlockProposalValidator implements P2PValidator<BlockProposal> {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
// Check if transactions are permitted when the proposal contains transaction hashes
|
|
27
|
-
|
|
27
|
+
const embeddedTxCount = block.txs?.length ?? 0;
|
|
28
|
+
if (!this.txsPermitted && (block.txHashes.length > 0 || embeddedTxCount > 0)) {
|
|
28
29
|
this.logger.debug(
|
|
29
30
|
`Penalizing peer for block proposal with ${block.txHashes.length} transaction(s) when transactions are not permitted`,
|
|
30
31
|
);
|
|
31
32
|
return PeerErrorSeverity.MidToleranceError;
|
|
32
33
|
}
|
|
33
34
|
|
|
35
|
+
// If there are embedded txs, they must be listed in txHashes; if there are no txHashes, there must be no txs
|
|
36
|
+
const hashSet = new Set(block.txHashes.map(h => h.toString()));
|
|
37
|
+
const missingTxHashes =
|
|
38
|
+
embeddedTxCount > 0
|
|
39
|
+
? block.txs!.filter(tx => !hashSet.has(tx.getTxHash().toString())).map(tx => tx.getTxHash().toString())
|
|
40
|
+
: [];
|
|
41
|
+
if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
|
|
42
|
+
this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
|
|
43
|
+
embeddedTxCount,
|
|
44
|
+
txHashesLength: block.txHashes.length,
|
|
45
|
+
missingTxHashes,
|
|
46
|
+
});
|
|
47
|
+
return PeerErrorSeverity.MidToleranceError;
|
|
48
|
+
}
|
|
49
|
+
|
|
34
50
|
const { currentProposer, nextProposer, currentSlot, nextSlot } =
|
|
35
51
|
await this.epochCache.getProposerAttesterAddressInCurrentOrNextSlot();
|
|
36
52
|
|
|
37
53
|
// Check that the attestation is for the current or next slot
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
40
|
-
this.logger.debug(`Penalizing peer for invalid slot number ${
|
|
54
|
+
const slotNumber = block.payload.header.slotNumber;
|
|
55
|
+
if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
|
|
56
|
+
this.logger.debug(`Penalizing peer for invalid slot number ${slotNumber}`, { currentSlot, nextSlot });
|
|
41
57
|
return PeerErrorSeverity.HighToleranceError;
|
|
42
58
|
}
|
|
43
59
|
|
|
44
60
|
// Check that the block proposal is from the current or next proposer
|
|
45
|
-
if (
|
|
46
|
-
this.logger.debug(`Penalizing peer for invalid proposer for current slot ${
|
|
61
|
+
if (slotNumber === currentSlot && currentProposer !== undefined && !proposer.equals(currentProposer)) {
|
|
62
|
+
this.logger.debug(`Penalizing peer for invalid proposer for current slot ${slotNumber}`, {
|
|
47
63
|
currentProposer,
|
|
48
64
|
nextProposer,
|
|
49
65
|
proposer: proposer.toString(),
|
|
@@ -51,8 +67,8 @@ export class BlockProposalValidator implements P2PValidator<BlockProposal> {
|
|
|
51
67
|
return PeerErrorSeverity.MidToleranceError;
|
|
52
68
|
}
|
|
53
69
|
|
|
54
|
-
if (
|
|
55
|
-
this.logger.debug(`Penalizing peer for invalid proposer for next slot ${
|
|
70
|
+
if (slotNumber === nextSlot && nextProposer !== undefined && !proposer.equals(nextProposer)) {
|
|
71
|
+
this.logger.debug(`Penalizing peer for invalid proposer for next slot ${slotNumber}`, {
|
|
56
72
|
currentProposer,
|
|
57
73
|
nextProposer,
|
|
58
74
|
proposer: proposer.toString(),
|
|
@@ -64,7 +80,7 @@ export class BlockProposalValidator implements P2PValidator<BlockProposal> {
|
|
|
64
80
|
if (!(await Promise.all(block.txs?.map(tx => tx.validateTxHash()) ?? [])).every(v => v)) {
|
|
65
81
|
this.logger.warn(`Penalizing peer for invalid tx hashes in block proposal`, {
|
|
66
82
|
proposer,
|
|
67
|
-
slotNumber
|
|
83
|
+
slotNumber,
|
|
68
84
|
});
|
|
69
85
|
return PeerErrorSeverity.LowToleranceError;
|
|
70
86
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { Fr } from '@aztec/foundation/fields';
|
|
2
3
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
3
4
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
@@ -33,7 +34,7 @@ export interface MessageValidator {
|
|
|
33
34
|
|
|
34
35
|
export function createTxMessageValidators(
|
|
35
36
|
timestamp: UInt64,
|
|
36
|
-
blockNumber:
|
|
37
|
+
blockNumber: BlockNumber,
|
|
37
38
|
worldStateSynchronizer: WorldStateSynchronizer,
|
|
38
39
|
gasFees: GasFees,
|
|
39
40
|
l1ChainId: number,
|
|
@@ -26,10 +26,12 @@ export class PhasesTxValidator implements TxValidator<Tx> {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
async validateTx(tx: Tx): Promise<TxValidationResult> {
|
|
29
|
+
this.contractsDB.createCheckpoint();
|
|
29
30
|
try {
|
|
30
31
|
// TODO(@spalladino): We add this just to handle public authwit-check calls during setup
|
|
31
32
|
// which are needed for public FPC flows, but fail if the account contract hasnt been deployed yet,
|
|
32
33
|
// which is what we're trying to do as part of the current txs.
|
|
34
|
+
// We only need to create/revert checkpoint here because of this addNewContracts call.
|
|
33
35
|
await this.contractsDB.addNewContracts(tx);
|
|
34
36
|
|
|
35
37
|
if (!tx.data.forPublic) {
|
|
@@ -58,7 +60,7 @@ export class PhasesTxValidator implements TxValidator<Tx> {
|
|
|
58
60
|
this.#log.error(`Error validating phases for tx`, err);
|
|
59
61
|
return { result: 'invalid', reason: [TX_ERROR_DURING_VALIDATION] };
|
|
60
62
|
} finally {
|
|
61
|
-
this.contractsDB.
|
|
63
|
+
this.contractsDB.revertCheckpoint();
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
66
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import {
|
|
3
4
|
type AnyTx,
|
|
@@ -17,7 +18,7 @@ export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
|
|
|
17
18
|
// being built.
|
|
18
19
|
timestamp: UInt64;
|
|
19
20
|
// Block number in which the tx is considered to be included.
|
|
20
|
-
blockNumber:
|
|
21
|
+
blockNumber: BlockNumber;
|
|
21
22
|
},
|
|
22
23
|
) {}
|
|
23
24
|
|
|
@@ -17,6 +17,7 @@ export class P2PInstrumentation {
|
|
|
17
17
|
private messageValidationDuration: Histogram;
|
|
18
18
|
private messagePrevalidationCount: UpDownCounter;
|
|
19
19
|
private messageLatency: Histogram;
|
|
20
|
+
private txReceivedCount: UpDownCounter;
|
|
20
21
|
|
|
21
22
|
private aggLatencyHisto = new Map<TopicType, RecordableHistogram>();
|
|
22
23
|
private aggValidationHisto = new Map<TopicType, RecordableHistogram>();
|
|
@@ -44,6 +45,10 @@ export class P2PInstrumentation {
|
|
|
44
45
|
valueType: ValueType.INT,
|
|
45
46
|
});
|
|
46
47
|
|
|
48
|
+
this.txReceivedCount = meter.createUpDownCounter(Metrics.P2P_GOSSIP_TX_RECEIVED_COUNT, {
|
|
49
|
+
description: 'The number of txs received from the p2p network',
|
|
50
|
+
});
|
|
51
|
+
|
|
47
52
|
this.aggLatencyMetrics = {
|
|
48
53
|
avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_AVG, {
|
|
49
54
|
valueType: ValueType.DOUBLE,
|
|
@@ -119,6 +124,10 @@ export class P2PInstrumentation {
|
|
|
119
124
|
validationHistogram.record(Math.max(ms, 1));
|
|
120
125
|
}
|
|
121
126
|
|
|
127
|
+
public incrementTxReceived(count: number) {
|
|
128
|
+
this.txReceivedCount.add(count);
|
|
129
|
+
}
|
|
130
|
+
|
|
122
131
|
public incMessagePrevalidationStatus(passed: boolean, topicName: TopicType | undefined) {
|
|
123
132
|
this.messagePrevalidationCount.add(1, { [Attributes.TOPIC_NAME]: topicName, [Attributes.OK]: passed });
|
|
124
133
|
}
|
|
@@ -129,7 +138,7 @@ export class P2PInstrumentation {
|
|
|
129
138
|
|
|
130
139
|
let latencyHistogram = this.aggLatencyHisto.get(topicName);
|
|
131
140
|
if (!latencyHistogram) {
|
|
132
|
-
latencyHistogram = createHistogram({ min: 1, max:
|
|
141
|
+
latencyHistogram = createHistogram({ min: 1, max: 60 * 1000 }); // Max: 1 minute
|
|
133
142
|
this.aggLatencyHisto.set(topicName, latencyHistogram);
|
|
134
143
|
}
|
|
135
144
|
|