@aztec/p2p 0.0.1-commit.f2ce05ee → 0.0.1-commit.f8ca9b2f3
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/client/factory.d.ts +3 -3
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +38 -7
- package/dest/client/interface.d.ts +26 -15
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +31 -35
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +97 -138
- package/dest/config.d.ts +10 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +9 -0
- package/dest/index.d.ts +2 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +18 -11
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +62 -37
- 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 +53 -53
- package/dest/mem_pools/attestation_pool/index.d.ts +2 -2
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/index.js +1 -1
- package/dest/mem_pools/index.d.ts +2 -1
- package/dest/mem_pools/index.d.ts.map +1 -1
- package/dest/mem_pools/interface.d.ts +3 -3
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +87 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +180 -0
- package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -1
- package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/index.js +1 -0
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +25 -3
- package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_metadata.js +36 -4
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +77 -74
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +3 -3
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
- package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
- package/dest/services/dummy_service.d.ts +6 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +3 -0
- package/dest/services/encoding.d.ts +2 -2
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +2 -2
- package/dest/services/libp2p/libp2p_service.d.ts +11 -3
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +71 -35
- package/dest/services/reqresp/interface.d.ts +10 -1
- package/dest/services/reqresp/interface.d.ts.map +1 -1
- package/dest/services/reqresp/interface.js +15 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +3 -3
- package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +7 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +15 -0
- package/dest/services/reqresp/protocols/tx.d.ts +7 -1
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
- package/dest/services/reqresp/protocols/tx.js +20 -0
- package/dest/services/reqresp/reqresp.d.ts +1 -1
- package/dest/services/reqresp/reqresp.d.ts.map +1 -1
- package/dest/services/reqresp/reqresp.js +11 -4
- package/dest/services/service.d.ts +18 -1
- package/dest/services/service.d.ts.map +1 -1
- package/dest/services/tx_collection/config.d.ts +7 -1
- package/dest/services/tx_collection/config.d.ts.map +1 -1
- package/dest/services/tx_collection/config.js +16 -0
- package/dest/services/tx_collection/fast_tx_collection.d.ts +3 -1
- package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/fast_tx_collection.js +17 -3
- package/dest/services/tx_collection/file_store_tx_collection.d.ts +44 -0
- package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_collection.js +118 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts +27 -0
- package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
- package/dest/services/tx_collection/file_store_tx_source.js +57 -0
- package/dest/services/tx_collection/index.d.ts +2 -1
- package/dest/services/tx_collection/index.d.ts.map +1 -1
- package/dest/services/tx_collection/index.js +1 -0
- package/dest/services/tx_collection/slow_tx_collection.d.ts +3 -1
- package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/slow_tx_collection.js +48 -19
- package/dest/services/tx_collection/tx_collection.d.ts +17 -7
- package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection.js +58 -2
- package/dest/services/tx_collection/tx_collection_sink.d.ts +15 -6
- package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
- package/dest/services/tx_collection/tx_collection_sink.js +13 -7
- package/dest/services/tx_file_store/config.d.ts +1 -3
- package/dest/services/tx_file_store/config.d.ts.map +1 -1
- package/dest/services/tx_file_store/config.js +0 -4
- package/dest/services/tx_file_store/tx_file_store.d.ts +3 -3
- package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
- package/dest/services/tx_provider.d.ts +3 -3
- package/dest/services/tx_provider.d.ts.map +1 -1
- package/dest/services/tx_provider.js +5 -4
- package/dest/test-helpers/make-test-p2p-clients.d.ts +3 -3
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.d.ts +27 -1
- package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
- package/dest/test-helpers/mock-pubsub.js +97 -2
- package/dest/test-helpers/testbench-utils.d.ts +30 -24
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +87 -35
- package/dest/testbench/p2p_client_testbench_worker.js +1 -1
- package/package.json +14 -14
- package/src/client/factory.ts +65 -8
- package/src/client/interface.ts +26 -13
- package/src/client/p2p_client.ts +123 -158
- package/src/config.ts +16 -0
- package/src/index.ts +1 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +87 -44
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +57 -53
- package/src/mem_pools/attestation_pool/index.ts +3 -3
- package/src/mem_pools/index.ts +3 -0
- package/src/mem_pools/interface.ts +2 -2
- package/src/mem_pools/tx_pool_v2/README.md +59 -9
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +234 -0
- package/src/mem_pools/tx_pool_v2/index.ts +1 -0
- package/src/mem_pools/tx_pool_v2/interfaces.ts +2 -2
- package/src/mem_pools/tx_pool_v2/tx_metadata.ts +51 -5
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +90 -77
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +2 -2
- package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
- package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
- package/src/msg_validators/tx_validator/timestamp_validator.ts +19 -14
- package/src/services/dummy_service.ts +6 -0
- package/src/services/encoding.ts +2 -2
- package/src/services/libp2p/libp2p_service.ts +70 -37
- package/src/services/reqresp/interface.ts +26 -1
- package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +2 -2
- package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +17 -0
- package/src/services/reqresp/protocols/tx.ts +22 -0
- package/src/services/reqresp/reqresp.ts +13 -3
- package/src/services/service.ts +20 -0
- package/src/services/tx_collection/config.ts +26 -0
- package/src/services/tx_collection/fast_tx_collection.ts +14 -2
- package/src/services/tx_collection/file_store_tx_collection.ts +152 -0
- package/src/services/tx_collection/file_store_tx_source.ts +70 -0
- package/src/services/tx_collection/index.ts +1 -0
- package/src/services/tx_collection/slow_tx_collection.ts +55 -26
- package/src/services/tx_collection/tx_collection.ts +78 -12
- package/src/services/tx_collection/tx_collection_sink.ts +17 -7
- package/src/services/tx_file_store/config.ts +0 -6
- package/src/services/tx_file_store/tx_file_store.ts +4 -4
- package/src/services/tx_provider.ts +8 -7
- package/src/test-helpers/make-test-p2p-clients.ts +3 -3
- package/src/test-helpers/mock-pubsub.ts +133 -3
- package/src/test-helpers/testbench-utils.ts +100 -40
- package/src/testbench/p2p_client_testbench_worker.ts +1 -1
|
@@ -374,6 +374,7 @@ var _dec, _dec1, _initProto;
|
|
|
374
374
|
import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
|
|
375
375
|
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
376
376
|
import { createLogger } from '@aztec/foundation/log';
|
|
377
|
+
import { RunningPromise } from '@aztec/foundation/promise';
|
|
377
378
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
378
379
|
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
379
380
|
import { L2BlockStream } from '@aztec/stdlib/block';
|
|
@@ -402,6 +403,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
402
403
|
p2pService;
|
|
403
404
|
txCollection;
|
|
404
405
|
txFileStore;
|
|
406
|
+
epochCache;
|
|
405
407
|
_dateProvider;
|
|
406
408
|
telemetry;
|
|
407
409
|
log;
|
|
@@ -434,15 +436,10 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
434
436
|
blockStream;
|
|
435
437
|
txProvider;
|
|
436
438
|
validatorAddresses;
|
|
437
|
-
/**
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
* @param txPool - The client's instance of a transaction pool. Defaults to in-memory implementation.
|
|
442
|
-
* @param p2pService - The concrete instance of p2p networking to use.
|
|
443
|
-
* @param log - A logger.
|
|
444
|
-
*/ constructor(_clientType, store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
|
|
445
|
-
super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this.txFileStore = txFileStore, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = (_initProto(this), P2PClientState.IDLE), this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [];
|
|
439
|
+
/** Tracks the last slot for which we called prepareForSlot */ lastSlotProcessed;
|
|
440
|
+
/** Polls for slot changes and calls prepareForSlot on the tx pool */ slotMonitor;
|
|
441
|
+
constructor(_clientType, store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, epochCache, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
|
|
442
|
+
super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this.txFileStore = txFileStore, this.epochCache = epochCache, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = (_initProto(this), P2PClientState.IDLE), this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [], this.lastSlotProcessed = SlotNumber.ZERO;
|
|
446
443
|
this.config = {
|
|
447
444
|
...getP2PDefaultConfig(),
|
|
448
445
|
...config
|
|
@@ -497,10 +494,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
497
494
|
getL2BlockHash(number) {
|
|
498
495
|
return this.l2Tips.getL2BlockHash(number);
|
|
499
496
|
}
|
|
500
|
-
updateP2PConfig(config) {
|
|
501
|
-
this.txPool.updateConfig(config);
|
|
497
|
+
async updateP2PConfig(config) {
|
|
498
|
+
await this.txPool.updateConfig(config);
|
|
502
499
|
this.p2pService.updateConfig(config);
|
|
503
|
-
return Promise.resolve();
|
|
504
500
|
}
|
|
505
501
|
getL2Tips() {
|
|
506
502
|
return this.l2Tips.getL2Tips();
|
|
@@ -527,7 +523,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
527
523
|
break;
|
|
528
524
|
case 'chain-pruned':
|
|
529
525
|
this.txCollection.stopCollectingForBlocksAfter(event.block.number);
|
|
530
|
-
await this.handlePruneL2Blocks(event.block
|
|
526
|
+
await this.handlePruneL2Blocks(event.block);
|
|
531
527
|
break;
|
|
532
528
|
case 'chain-checkpointed':
|
|
533
529
|
break;
|
|
@@ -542,7 +538,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
542
538
|
await this.startServiceIfSynched();
|
|
543
539
|
}
|
|
544
540
|
#assertIsReady() {
|
|
545
|
-
// this.log.info('Checking if p2p client is ready, current state: ', this.currentState);
|
|
546
541
|
if (!this.isReady()) {
|
|
547
542
|
throw new Error('P2P client not ready');
|
|
548
543
|
}
|
|
@@ -557,6 +552,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
557
552
|
if (this.currentState !== P2PClientState.IDLE) {
|
|
558
553
|
return this.syncPromise;
|
|
559
554
|
}
|
|
555
|
+
// Start the tx pool first, as it needs to hydrate state from persistence
|
|
556
|
+
await this.txPool.start();
|
|
560
557
|
// get the current latest block numbers
|
|
561
558
|
const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
|
|
562
559
|
this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
|
|
@@ -600,6 +597,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
600
597
|
this.blockStream.start();
|
|
601
598
|
await this.txCollection.start();
|
|
602
599
|
this.txFileStore?.start();
|
|
600
|
+
// Start slot monitor to call prepareForSlot when the slot changes
|
|
601
|
+
this.slotMonitor = new RunningPromise(()=>this.maybeCallPrepareForSlot(), this.log, this.config.slotCheckIntervalMS);
|
|
602
|
+
this.slotMonitor.start();
|
|
603
603
|
return this.syncPromise;
|
|
604
604
|
}
|
|
605
605
|
addReqRespSubProtocol(subProtocol, handler, validator) {
|
|
@@ -620,6 +620,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
620
620
|
* 'ready' will now return 'false' and the running promise that keeps the client synced is interrupted.
|
|
621
621
|
*/ async stop() {
|
|
622
622
|
this.log.debug('Stopping p2p client...');
|
|
623
|
+
await this.slotMonitor?.stop();
|
|
624
|
+
this.log.debug('Stopped slot monitor');
|
|
623
625
|
await tryStop(this.txCollection);
|
|
624
626
|
this.log.debug('Stopped tx collection service');
|
|
625
627
|
await this.txFileStore?.stop();
|
|
@@ -628,6 +630,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
628
630
|
this.log.debug('Stopped p2p service');
|
|
629
631
|
await this.blockStream?.stop();
|
|
630
632
|
this.log.debug('Stopped block downloader');
|
|
633
|
+
await this.txPool.stop();
|
|
634
|
+
this.log.debug('Stopped tx pool');
|
|
631
635
|
await this.runningPromise;
|
|
632
636
|
this.setCurrentState(P2PClientState.STOPPED);
|
|
633
637
|
this.log.info('P2P client stopped');
|
|
@@ -639,9 +643,17 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
639
643
|
async broadcastProposal(proposal) {
|
|
640
644
|
this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
|
|
641
645
|
// Store our own proposal so we can respond to req/resp requests for it
|
|
642
|
-
const {
|
|
643
|
-
if (
|
|
644
|
-
|
|
646
|
+
const { count } = await this.attestationPool.tryAddBlockProposal(proposal);
|
|
647
|
+
if (count > 1) {
|
|
648
|
+
if (this.config.broadcastEquivocatedProposals) {
|
|
649
|
+
this.log.warn(`Broadcasting equivocated block proposal for slot ${proposal.slotNumber}`, {
|
|
650
|
+
slot: proposal.slotNumber,
|
|
651
|
+
archive: proposal.archive.toString(),
|
|
652
|
+
count
|
|
653
|
+
});
|
|
654
|
+
} else {
|
|
655
|
+
throw new Error(`Attempted to broadcast a duplicate block proposal for slot ${proposal.slotNumber}`);
|
|
656
|
+
}
|
|
645
657
|
}
|
|
646
658
|
return this.p2pService.propagate(proposal);
|
|
647
659
|
}
|
|
@@ -675,6 +687,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
675
687
|
registerDuplicateProposalCallback(callback) {
|
|
676
688
|
this.p2pService.registerDuplicateProposalCallback(callback);
|
|
677
689
|
}
|
|
690
|
+
registerDuplicateAttestationCallback(callback) {
|
|
691
|
+
this.p2pService.registerDuplicateAttestationCallback(callback);
|
|
692
|
+
}
|
|
678
693
|
/**
|
|
679
694
|
* Uses the batched Request Response protocol to request a set of transactions from the network.
|
|
680
695
|
*/ async requestTxsByHash(txHashes, pinnedPeerId) {
|
|
@@ -685,73 +700,41 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
685
700
|
const txBatches = await this.p2pService.sendBatchRequest(ReqRespSubProtocol.TX, requests, pinnedPeerId, timeoutMs, maxPeers, maxRetryAttempts);
|
|
686
701
|
const txs = txBatches.flat();
|
|
687
702
|
if (txs.length > 0) {
|
|
688
|
-
await this.txPool.
|
|
703
|
+
await this.txPool.addPendingTxs(txs);
|
|
689
704
|
}
|
|
690
705
|
const txHashesStr = txHashes.map((tx)=>tx.toString()).join(', ');
|
|
691
706
|
this.log.debug(`Requested txs ${txHashesStr} (${txs.length} / ${txHashes.length}) from peers`);
|
|
692
707
|
// We return all transactions, even the not found ones to the caller, such they can handle missing items themselves.
|
|
693
708
|
return txs;
|
|
694
709
|
}
|
|
695
|
-
getPendingTxs(limit, after) {
|
|
696
|
-
return this.getTxs('pending', limit, after);
|
|
697
|
-
}
|
|
698
|
-
getPendingTxCount() {
|
|
699
|
-
return this.txPool.getPendingTxCount();
|
|
700
|
-
}
|
|
701
|
-
async *iteratePendingTxs() {
|
|
702
|
-
for (const txHash of (await this.txPool.getPendingTxHashes())){
|
|
703
|
-
const tx = await this.txPool.getTxByHash(txHash);
|
|
704
|
-
if (tx) {
|
|
705
|
-
yield tx;
|
|
706
|
-
}
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
/**
|
|
710
|
-
* Returns all transactions in the transaction pool.
|
|
711
|
-
* @param filter - The type of txs to return
|
|
712
|
-
* @param limit - How many txs to return
|
|
713
|
-
* @param after - If paginating, the last known tx hash. Will return txs after this hash
|
|
714
|
-
* @returns An array of Txs.
|
|
715
|
-
*/ async getTxs(filter, limit, after) {
|
|
710
|
+
async getPendingTxs(limit, after) {
|
|
716
711
|
if (limit !== undefined && limit <= 0) {
|
|
717
712
|
throw new TypeError('limit must be greater than 0');
|
|
718
713
|
}
|
|
719
|
-
let
|
|
720
|
-
let txHashes;
|
|
721
|
-
if (filter === 'all') {
|
|
722
|
-
txs = await this.txPool.getAllTxs();
|
|
723
|
-
txHashes = await Promise.all(txs.map((tx)=>tx.getTxHash()));
|
|
724
|
-
} else if (filter === 'mined') {
|
|
725
|
-
const minedTxHashes = await this.txPool.getMinedTxHashes();
|
|
726
|
-
txHashes = minedTxHashes.map(([txHash])=>txHash);
|
|
727
|
-
} else if (filter === 'pending') {
|
|
728
|
-
txHashes = await this.txPool.getPendingTxHashes();
|
|
729
|
-
} else {
|
|
730
|
-
const _ = filter;
|
|
731
|
-
throw new Error(`Unknown filter ${filter}`);
|
|
732
|
-
}
|
|
714
|
+
let txHashes = await this.txPool.getPendingTxHashes();
|
|
733
715
|
let startIndex = 0;
|
|
734
|
-
let endIndex = undefined;
|
|
735
716
|
if (after) {
|
|
736
717
|
startIndex = txHashes.findIndex((txHash)=>after.equals(txHash));
|
|
737
|
-
// if we can't find the last tx in our set then return an empty array as pagination is no longer valid.
|
|
738
718
|
if (startIndex === -1) {
|
|
739
719
|
return [];
|
|
740
720
|
}
|
|
741
|
-
// increment by one because we don't want to return the same tx again
|
|
742
721
|
startIndex++;
|
|
743
722
|
}
|
|
744
|
-
|
|
745
|
-
endIndex = startIndex + limit;
|
|
746
|
-
}
|
|
723
|
+
const endIndex = limit !== undefined ? startIndex + limit : undefined;
|
|
747
724
|
txHashes = txHashes.slice(startIndex, endIndex);
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
725
|
+
const maybeTxs = await Promise.all(txHashes.map((txHash)=>this.txPool.getTxByHash(txHash)));
|
|
726
|
+
return maybeTxs.filter((tx)=>!!tx);
|
|
727
|
+
}
|
|
728
|
+
getPendingTxCount() {
|
|
729
|
+
return this.txPool.getPendingTxCount();
|
|
730
|
+
}
|
|
731
|
+
async *iteratePendingTxs() {
|
|
732
|
+
for (const txHash of (await this.txPool.getPendingTxHashes())){
|
|
733
|
+
const tx = await this.txPool.getTxByHash(txHash);
|
|
734
|
+
if (tx) {
|
|
735
|
+
yield tx;
|
|
736
|
+
}
|
|
753
737
|
}
|
|
754
|
-
return txs;
|
|
755
738
|
}
|
|
756
739
|
/**
|
|
757
740
|
* Returns a transaction in the transaction pool by its hash.
|
|
@@ -814,16 +797,18 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
814
797
|
return this.txPool.getArchivedTxByHash(txHash);
|
|
815
798
|
}
|
|
816
799
|
/**
|
|
817
|
-
*
|
|
818
|
-
* @param tx - The tx to
|
|
800
|
+
* Accepts a transaction, adds it to local tx pool and forwards it to other peers.
|
|
801
|
+
* @param tx - The tx to send.
|
|
819
802
|
* @returns Empty promise.
|
|
820
803
|
**/ async sendTx(tx) {
|
|
821
|
-
|
|
804
|
+
this.#assertIsReady();
|
|
805
|
+
const result = await this.txPool.addPendingTxs([
|
|
822
806
|
tx
|
|
823
807
|
]);
|
|
824
|
-
|
|
825
|
-
if (txAddedSuccessfully) {
|
|
808
|
+
if (result.accepted.length === 1) {
|
|
826
809
|
await this.p2pService.propagate(tx);
|
|
810
|
+
} else {
|
|
811
|
+
this.log.warn(`Tx ${tx.getTxHash()} not propagated: accepted=${result.accepted.length} ignored=${result.ignored.length} rejected=${result.rejected.length}`);
|
|
827
812
|
}
|
|
828
813
|
}
|
|
829
814
|
/**
|
|
@@ -831,14 +816,15 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
831
816
|
* @param txs - The transactions.
|
|
832
817
|
**/ async addTxsToPool(txs) {
|
|
833
818
|
this.#assertIsReady();
|
|
834
|
-
return await this.txPool.
|
|
819
|
+
return (await this.txPool.addPendingTxs(txs)).accepted.length;
|
|
835
820
|
}
|
|
836
821
|
/**
|
|
837
822
|
* Returns whether the given tx hash is flagged as pending or mined.
|
|
838
823
|
* @param txHash - Hash of the tx to query.
|
|
839
824
|
* @returns Pending or mined depending on its status, or undefined if not found.
|
|
840
|
-
*/ getTxStatus(txHash) {
|
|
841
|
-
|
|
825
|
+
*/ async getTxStatus(txHash) {
|
|
826
|
+
const status = await this.txPool.getTxStatus(txHash);
|
|
827
|
+
return status === 'protected' ? 'pending' : status;
|
|
842
828
|
}
|
|
843
829
|
getEnr() {
|
|
844
830
|
return this.p2pService.getEnr();
|
|
@@ -847,13 +833,11 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
847
833
|
return Promise.resolve(this.p2pService.getEnr()?.encodeTxt());
|
|
848
834
|
}
|
|
849
835
|
/**
|
|
850
|
-
*
|
|
851
|
-
*
|
|
852
|
-
|
|
853
|
-
* @returns Empty promise.
|
|
854
|
-
**/ async deleteTxs(txHashes) {
|
|
836
|
+
* Handles failed transaction execution by removing txs from the pool.
|
|
837
|
+
* @param txHashes - Hashes of the transactions that failed execution.
|
|
838
|
+
**/ async handleFailedExecution(txHashes) {
|
|
855
839
|
this.#assertIsReady();
|
|
856
|
-
await this.txPool.
|
|
840
|
+
await this.txPool.handleFailedExecution(txHashes);
|
|
857
841
|
}
|
|
858
842
|
/**
|
|
859
843
|
* Public function to check if the p2p client is fully synced and ready to receive txs.
|
|
@@ -897,13 +881,12 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
897
881
|
};
|
|
898
882
|
}
|
|
899
883
|
/**
|
|
900
|
-
*
|
|
884
|
+
* Handles mined blocks by marking the txs in them as mined.
|
|
901
885
|
* @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
|
|
902
886
|
* @returns Empty promise.
|
|
903
|
-
*/ async
|
|
887
|
+
*/ async handleMinedBlocks(blocks) {
|
|
904
888
|
for (const block of blocks){
|
|
905
|
-
|
|
906
|
-
await this.txPool.markAsMined(txHashes, block.header);
|
|
889
|
+
await this.txPool.handleMinedBlock(block);
|
|
907
890
|
}
|
|
908
891
|
}
|
|
909
892
|
/**
|
|
@@ -912,14 +895,13 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
912
895
|
* @returns Empty promise.
|
|
913
896
|
*/ async handleLatestL2Blocks(blocks) {
|
|
914
897
|
if (!blocks.length) {
|
|
915
|
-
return
|
|
898
|
+
return;
|
|
916
899
|
}
|
|
917
|
-
await this.
|
|
918
|
-
await this.
|
|
900
|
+
await this.handleMinedBlocks(blocks);
|
|
901
|
+
await this.maybeCallPrepareForSlot();
|
|
919
902
|
await this.startCollectingMissingTxs(blocks);
|
|
920
903
|
const lastBlock = blocks.at(-1);
|
|
921
904
|
await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
|
|
922
|
-
this.log.verbose(`Synched to latest block ${lastBlock.number}`);
|
|
923
905
|
}
|
|
924
906
|
/** Request txs for unproven blocks so the prover node has more chances to get them. */ async startCollectingMissingTxs(blocks) {
|
|
925
907
|
try {
|
|
@@ -953,59 +935,26 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
953
935
|
* @returns Empty promise.
|
|
954
936
|
*/ async handleFinalizedL2Blocks(blocks) {
|
|
955
937
|
if (!blocks.length) {
|
|
956
|
-
return
|
|
938
|
+
return;
|
|
957
939
|
}
|
|
958
|
-
|
|
959
|
-
const
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
this.log.debug(`Deleting ${txHashes.length} txs from pool from finalized blocks up to ${lastBlockNum}`);
|
|
963
|
-
await this.txPool.deleteTxs(txHashes, {
|
|
964
|
-
permanently: true
|
|
965
|
-
});
|
|
966
|
-
await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
|
|
967
|
-
await this.attestationPool.deleteOlderThan(lastBlockSlot);
|
|
968
|
-
this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
|
|
940
|
+
// Finalization is monotonic, so we only need to call with the last block
|
|
941
|
+
const lastBlock = blocks.at(-1);
|
|
942
|
+
await this.txPool.handleFinalizedBlock(lastBlock.header);
|
|
943
|
+
await this.attestationPool.deleteOlderThan(lastBlock.header.getSlot());
|
|
969
944
|
}
|
|
970
945
|
/**
|
|
971
946
|
* Updates the tx pool after a chain prune.
|
|
972
|
-
* @param latestBlock - The block
|
|
947
|
+
* @param latestBlock - The block ID the chain was pruned to.
|
|
973
948
|
*/ async handlePruneL2Blocks(latestBlock) {
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
const txHash = tx.getTxHash();
|
|
981
|
-
txsToDelete.set(txHash.toString(), txHash);
|
|
982
|
-
}
|
|
983
|
-
}
|
|
984
|
-
this.log.info(`Detected chain prune. Removing ${txsToDelete.size} txs built against pruned blocks.`, {
|
|
985
|
-
newLatestBlock: latestBlock,
|
|
986
|
-
previousLatestBlock: await this.getSyncedLatestBlockNum(),
|
|
987
|
-
txsToDelete: Array.from(txsToDelete.keys())
|
|
988
|
-
});
|
|
989
|
-
// delete invalid txs (both pending and mined)
|
|
990
|
-
await this.txPool.deleteTxs(Array.from(txsToDelete.values()));
|
|
991
|
-
// everything left in the mined set was built against a block on the proven chain so its still valid
|
|
992
|
-
// move back to pending the txs that were reorged out of the chain, unless txPoolDeleteTxsAfterReorg is set,
|
|
993
|
-
// in which case we clean them up to avoid potential reorg loops
|
|
994
|
-
// NOTE: we can't move _all_ txs back to pending because the tx pool could keep hold of mined txs for longer
|
|
995
|
-
// (see this.keepProvenTxsFor)
|
|
996
|
-
const minedTxsFromReorg = [];
|
|
997
|
-
for (const [txHash, blockNumber] of minedTxs){
|
|
998
|
-
// We keep the txsToDelete out of this list as they have already been deleted above
|
|
999
|
-
if (blockNumber > latestBlock && !txsToDelete.has(txHash.toString())) {
|
|
1000
|
-
minedTxsFromReorg.push(txHash);
|
|
1001
|
-
}
|
|
1002
|
-
}
|
|
1003
|
-
if (this.config.txPoolDeleteTxsAfterReorg) {
|
|
1004
|
-
this.log.info(`Deleting ${minedTxsFromReorg.length} mined txs from reorg`);
|
|
1005
|
-
await this.txPool.deleteTxs(minedTxsFromReorg);
|
|
1006
|
-
} else {
|
|
1007
|
-
await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
|
|
949
|
+
await this.txPool.handlePrunedBlocks(latestBlock);
|
|
950
|
+
}
|
|
951
|
+
/** Checks if the slot has changed and calls prepareForSlot if so. */ async maybeCallPrepareForSlot() {
|
|
952
|
+
const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
|
|
953
|
+
if (currentSlot <= this.lastSlotProcessed) {
|
|
954
|
+
return;
|
|
1008
955
|
}
|
|
956
|
+
this.lastSlotProcessed = currentSlot;
|
|
957
|
+
await this.txPool.prepareForSlot(currentSlot);
|
|
1009
958
|
}
|
|
1010
959
|
async startServiceIfSynched() {
|
|
1011
960
|
if (this.currentState !== P2PClientState.SYNCHING) {
|
|
@@ -1040,10 +989,20 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
1040
989
|
return this.p2pService.validate(txs);
|
|
1041
990
|
}
|
|
1042
991
|
/**
|
|
1043
|
-
*
|
|
1044
|
-
*
|
|
1045
|
-
|
|
1046
|
-
|
|
992
|
+
* Protects existing transactions by hash for a given slot.
|
|
993
|
+
* Returns hashes of transactions that weren't found in the pool.
|
|
994
|
+
* @param txHashes - Hashes of the transactions to protect.
|
|
995
|
+
* @param blockHeader - The block header providing slot context.
|
|
996
|
+
* @returns Hashes of transactions not found in the pool.
|
|
997
|
+
*/ protectTxs(txHashes, blockHeader) {
|
|
998
|
+
return this.txPool.protectTxs(txHashes, blockHeader);
|
|
999
|
+
}
|
|
1000
|
+
/**
|
|
1001
|
+
* Prepares the pool for a new slot.
|
|
1002
|
+
* Unprotects transactions from earlier slots and validates them.
|
|
1003
|
+
* @param slotNumber - The slot number to prepare for
|
|
1004
|
+
*/ async prepareForSlot(slotNumber) {
|
|
1005
|
+
await this.txPool.prepareForSlot(slotNumber);
|
|
1047
1006
|
}
|
|
1048
1007
|
handleAuthRequestFromPeer(authRequest, peerId) {
|
|
1049
1008
|
return this.p2pService.handleAuthRequestFromPeer(authRequest, peerId);
|
package/dest/config.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, Cha
|
|
|
13
13
|
p2pEnabled: boolean;
|
|
14
14
|
/** The frequency in which to check for new L2 blocks. */
|
|
15
15
|
blockCheckIntervalMS: number;
|
|
16
|
+
/** The frequency in which to check for new L2 slots. */
|
|
17
|
+
slotCheckIntervalMS: number;
|
|
16
18
|
/** The number of blocks to fetch in a single batch. */
|
|
17
19
|
blockRequestBatchSize: number;
|
|
18
20
|
/** DEBUG: Disable colocation penalty - for testing purposes only */
|
|
@@ -107,6 +109,8 @@ export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, Cha
|
|
|
107
109
|
debugP2PInstrumentMessages: boolean;
|
|
108
110
|
/** Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus */
|
|
109
111
|
fishermanMode: boolean;
|
|
112
|
+
/** Broadcast block proposals even when a conflicting proposal for the same slot already exists in the pool (for testing purposes only). */
|
|
113
|
+
broadcastEquivocatedProposals?: boolean;
|
|
110
114
|
}
|
|
111
115
|
export declare const DEFAULT_P2P_PORT = 40400;
|
|
112
116
|
export declare const p2pConfigMappings: ConfigMappingsType<P2PConfig>;
|
|
@@ -132,6 +136,7 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
132
136
|
bootstrapNodeEnrVersionCheck: unknown;
|
|
133
137
|
bootstrapNodes: unknown;
|
|
134
138
|
bootstrapNodesAsFullPeers: unknown;
|
|
139
|
+
broadcastEquivocatedProposals: unknown;
|
|
135
140
|
dataDirectory: unknown;
|
|
136
141
|
dataStoreMapSizeKb: unknown;
|
|
137
142
|
debugDisableColocationPenalty: unknown;
|
|
@@ -181,11 +186,15 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
181
186
|
queryForIp: unknown;
|
|
182
187
|
rollupVersion: unknown;
|
|
183
188
|
seenMessageCacheSize: unknown;
|
|
189
|
+
slotCheckIntervalMS: unknown;
|
|
184
190
|
trustedPeers: unknown;
|
|
185
191
|
txCollectionDisableSlowDuringFastRequests: unknown;
|
|
186
192
|
txCollectionFastMaxParallelRequestsPerNode: unknown;
|
|
187
193
|
txCollectionFastNodeIntervalMs: unknown;
|
|
188
194
|
txCollectionFastNodesTimeoutBeforeReqRespMs: unknown;
|
|
195
|
+
txCollectionFileStoreFastDelayMs: unknown;
|
|
196
|
+
txCollectionFileStoreSlowDelayMs: unknown;
|
|
197
|
+
txCollectionFileStoreUrls: unknown;
|
|
189
198
|
txCollectionMissingTxsCollectorType: unknown;
|
|
190
199
|
txCollectionNodeRpcMaxBatchSize: unknown;
|
|
191
200
|
txCollectionNodeRpcUrls: unknown;
|
|
@@ -193,7 +202,6 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
193
202
|
txCollectionSlowNodesIntervalMs: unknown;
|
|
194
203
|
txCollectionSlowReqRespIntervalMs: unknown;
|
|
195
204
|
txCollectionSlowReqRespTimeoutMs: unknown;
|
|
196
|
-
txFileStoreDownloadUrl: unknown;
|
|
197
205
|
txFileStoreEnabled: unknown;
|
|
198
206
|
txFileStoreMaxQueueSize: unknown;
|
|
199
207
|
txFileStoreUploadConcurrency: unknown;
|
|
@@ -213,4 +221,4 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
213
221
|
* @returns A list of allowed elements
|
|
214
222
|
*/
|
|
215
223
|
export declare function parseAllowList(value: string): AllowedElement[];
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUN2QixXQUFXLEVBUVosTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFHbEYsT0FBTyxFQUNMLEtBQUssY0FBYyxFQUNuQixLQUFLLFdBQVcsRUFDaEIsS0FBSyxlQUFlLEVBR3JCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0saURBQWlELENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQTRCLE1BQU0sOEJBQThCLENBQUM7QUFDL0YsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQThCLE1BQU0sb0NBQW9DLENBQUM7QUFDekcsT0FBTyxFQUFFLEtBQUssaUJBQWlCLEVBQTZCLE1BQU0sb0NBQW9DLENBQUM7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLFdBQVcsU0FDZixTQUFRLGdCQUFnQixFQUN0QixzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQztJQUMxQyxvRUFBb0U7SUFDcEUsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUVwQix5REFBeUQ7SUFDekQsb0JBQW9CLEVBQUUsTUFBTSxDQUFDO0lBRTdCLHdEQUF3RDtJQUN4RCxtQkFBbUIsRUFBRSxNQUFNLENBQUM7SUFFNUIsdURBQXVEO0lBQ3ZELHFCQUFxQixFQUFFLE1BQU0sQ0FBQztJQUU5QixvRUFBb0U7SUFDcEUsNkJBQTZCLEVBQUUsT0FBTyxDQUFDO0lBRXZDLHFEQUFxRDtJQUNyRCxtQkFBbUIsRUFBRSxNQUFNLENBQUM7SUFFNUIsMkNBQTJDO0lBQzNDLFdBQVcsRUFB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
|
package/dest/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EACvB,WAAW,EAQZ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAGlF,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,EAGrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,oCAAoC,CAAC;AACzG,OAAO,EAAE,KAAK,iBAAiB,EAA6B,MAAM,oCAAoC,CAAC;AAEvG;;GAEG;AACH,MAAM,WAAW,SACf,SAAQ,gBAAgB,EACtB,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC;IAC1C,oEAAoE;IACpE,UAAU,EAAE,OAAO,CAAC;IAEpB,yDAAyD;IACzD,oBAAoB,EAAE,MAAM,CAAC;IAE7B,uDAAuD;IACvD,qBAAqB,EAAE,MAAM,CAAC;IAE9B,oEAAoE;IACpE,6BAA6B,EAAE,OAAO,CAAC;IAEvC,qDAAqD;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAE5B,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IAEpB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAEhB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IAEtB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAEvC,4IAA4I;IAC5I,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,+CAA+C;IAC/C,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,sEAAsE;IACtE,4BAA4B,EAAE,OAAO,CAAC;IAEtC,iGAAiG;IACjG,yBAAyB,EAAE,OAAO,CAAC;IAEnC,8GAA8G;IAC9G,YAAY,EAAE,MAAM,CAAC;IAErB,+HAA+H;IAC/H,UAAU,EAAE,OAAO,CAAC;IAEpB,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAE1B,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IAEnB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IAErB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IAErB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IAEvB,qEAAqE;IACrE,qBAAqB,EAAE,OAAO,CAAC;IAE/B,sEAAsE;IACtE,qBAAqB,EAAE,MAAM,CAAC;IAE9B,iFAAiF;IACjF,qBAAqB,EAAE,MAAM,CAAC;IAE9B,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IAEzB,gHAAgH;IAChH,kCAAkC,EAAE,MAAM,CAAC;IAE3C,gKAAgK;IAChK,sBAAsB,EAAE,MAAM,CAAC;IAE/B,iFAAiF;IACjF,yCAAyC,EAAE,MAAM,CAAC;IAElD,2GAA2G;IAC3G,wCAAwC,EAAE,MAAM,CAAC;IAEjD,oIAAoI;IACpI,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAE5B,sIAAsI;IACtI,eAAe,EAAE,MAAM,CAAC;IAExB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,iCAAiC;IACjC,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,gGAAgG;IAChG,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,iEAAiE;IACjE,sBAAsB,EAAE,cAAc,EAAE,CAAC;IAEzC,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAE1B,4CAA4C;IAC5C,oBAAoB,EAAE,MAAM,CAAC;IAE7B,8DAA8D;IAC9D,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC,gDAAgD;IAChD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iFAAiF;IACjF,+BAA+B,EAAE,MAAM,CAAC;IAExC,2HAA2H;IAC3H,mBAAmB,EAAE,OAAO,CAAC;IAE7B,2EAA2E;IAC3E,gBAAgB,EAAE,OAAO,CAAC;IAE1B,mFAAmF;IACnF,2BAA2B,EAAE,MAAM,CAAC;IAEpC,yGAAyG;IACzG,yBAAyB,EAAE,OAAO,CAAC;IAEnC,oGAAoG;IACpG,0BAA0B,EAAE,OAAO,CAAC;IAEpC,iJAAiJ;IACjJ,aAAa,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dest/config.js
CHANGED
|
@@ -25,6 +25,11 @@ export const p2pConfigMappings = {
|
|
|
25
25
|
description: 'The frequency in which to check for new L2 blocks.',
|
|
26
26
|
...numberConfigHelper(100)
|
|
27
27
|
},
|
|
28
|
+
slotCheckIntervalMS: {
|
|
29
|
+
env: 'P2P_SLOT_CHECK_INTERVAL_MS',
|
|
30
|
+
description: 'The frequency in which to check for new L2 slots.',
|
|
31
|
+
...numberConfigHelper(1000)
|
|
32
|
+
},
|
|
28
33
|
debugDisableColocationPenalty: {
|
|
29
34
|
env: 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY',
|
|
30
35
|
description: 'DEBUG: Disable colocation penalty - NEVER set to true in production',
|
|
@@ -264,6 +269,10 @@ export const p2pConfigMappings = {
|
|
|
264
269
|
description: 'Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus.',
|
|
265
270
|
...booleanConfigHelper(false)
|
|
266
271
|
},
|
|
272
|
+
broadcastEquivocatedProposals: {
|
|
273
|
+
description: 'Broadcast block proposals even when a conflicting proposal for the same slot already exists in the pool (for testing purposes only).',
|
|
274
|
+
...booleanConfigHelper(false)
|
|
275
|
+
},
|
|
267
276
|
...sharedSequencerConfigMappings,
|
|
268
277
|
...p2pReqRespConfigMappings,
|
|
269
278
|
...batchTxRequesterConfigMappings,
|
package/dest/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export * from './enr/index.js';
|
|
|
6
6
|
export * from './config.js';
|
|
7
7
|
export * from './mem_pools/attestation_pool/index.js';
|
|
8
8
|
export * from './mem_pools/tx_pool/index.js';
|
|
9
|
+
export * from './mem_pools/tx_pool_v2/index.js';
|
|
9
10
|
export * from './msg_validators/index.js';
|
|
10
11
|
export * from './services/index.js';
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHFCQUFxQixDQUFDIn0=
|
package/dest/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC"}
|
package/dest/index.js
CHANGED
|
@@ -5,5 +5,6 @@ export * from './enr/index.js';
|
|
|
5
5
|
export * from './config.js';
|
|
6
6
|
export * from './mem_pools/attestation_pool/index.js';
|
|
7
7
|
export * from './mem_pools/tx_pool/index.js';
|
|
8
|
+
export * from './mem_pools/tx_pool_v2/index.js';
|
|
8
9
|
export * from './msg_validators/index.js';
|
|
9
10
|
export * from './services/index.js';
|
|
@@ -8,12 +8,16 @@ export type TryAddResult = {
|
|
|
8
8
|
added: boolean;
|
|
9
9
|
/** Whether the exact item already existed */
|
|
10
10
|
alreadyExists: boolean;
|
|
11
|
-
/**
|
|
12
|
-
|
|
11
|
+
/** Count of items for the position. Meaning varies by method:
|
|
12
|
+
* - tryAddBlockProposal: proposals at (slot, indexWithinCheckpoint)
|
|
13
|
+
* - tryAddCheckpointProposal: proposals at slot
|
|
14
|
+
* - tryAddCheckpointAttestation: attestations by this signer for this slot */
|
|
15
|
+
count: number;
|
|
13
16
|
};
|
|
14
|
-
export declare const
|
|
15
|
-
export declare const
|
|
16
|
-
|
|
17
|
+
export declare const MAX_CHECKPOINT_PROPOSALS_PER_SLOT = 5;
|
|
18
|
+
export declare const MAX_BLOCK_PROPOSALS_PER_POSITION = 3;
|
|
19
|
+
/** Maximum attestations a single signer can make per slot before being rejected. */
|
|
20
|
+
export declare const MAX_ATTESTATIONS_PER_SLOT_AND_SIGNER = 3;
|
|
17
21
|
/** Public API interface for attestation pools. Used for typing mocks and test implementations. */
|
|
18
22
|
export type AttestationPoolApi = Pick<AttestationPool, 'tryAddBlockProposal' | 'getBlockProposal' | 'tryAddCheckpointProposal' | 'getCheckpointProposal' | 'addOwnCheckpointAttestations' | 'tryAddCheckpointAttestation' | 'deleteOlderThan' | 'getCheckpointAttestationsForSlot' | 'getCheckpointAttestationsForSlotAndProposal' | 'isEmpty'>;
|
|
19
23
|
/**
|
|
@@ -31,6 +35,7 @@ export declare class AttestationPool {
|
|
|
31
35
|
private checkpointProposalsForSlot;
|
|
32
36
|
private blockProposals;
|
|
33
37
|
private blockProposalsForSlotAndIndex;
|
|
38
|
+
private checkpointAttestationsPerSlotAndSigner;
|
|
34
39
|
constructor(store: AztecAsyncKVStore, telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
|
|
35
40
|
private poolStats;
|
|
36
41
|
/** Returns whether the pool is empty. */
|
|
@@ -41,6 +46,8 @@ export declare class AttestationPool {
|
|
|
41
46
|
private getAttestationKeyRangeForSlot;
|
|
42
47
|
/** Returns range bounds for querying all attestations for a given (slot, proposalId). */
|
|
43
48
|
private getAttestationKeyRangeForProposal;
|
|
49
|
+
/** Creates a key for the per-signer-per-slot attestation index. Uses padded slot for lexicographic ordering. */
|
|
50
|
+
private getSlotSignerKey;
|
|
44
51
|
/** Number of bits reserved for indexWithinCheckpoint in position keys. */
|
|
45
52
|
private static readonly INDEX_BITS;
|
|
46
53
|
/** Maximum indexWithinCheckpoint value (2^10 - 1 = 1023). */
|
|
@@ -128,16 +135,16 @@ export declare class AttestationPool {
|
|
|
128
135
|
*
|
|
129
136
|
* This method performs validation and addition in a single call:
|
|
130
137
|
* - Checks if the attestation already exists (returns alreadyExists: true if so)
|
|
131
|
-
* - Checks if
|
|
138
|
+
* - Checks if this signer has reached the per-signer attestation cap for this slot
|
|
132
139
|
* - Adds the attestation if validation passes
|
|
133
140
|
*
|
|
134
141
|
* @param attestation - The checkpoint attestation to add
|
|
135
|
-
* @
|
|
136
|
-
*
|
|
142
|
+
* @returns Result indicating whether the attestation was added, existence info, and count of
|
|
143
|
+
* attestations by this signer for this slot (for equivocation detection)
|
|
137
144
|
*/
|
|
138
|
-
tryAddCheckpointAttestation(attestation: CheckpointAttestation
|
|
139
|
-
private
|
|
145
|
+
tryAddCheckpointAttestation(attestation: CheckpointAttestation): Promise<TryAddResult>;
|
|
146
|
+
private getSignerAttestationCountForSlot;
|
|
140
147
|
}
|
|
141
148
|
/** Creates an AttestationPool backed by a temporary store for testing. */
|
|
142
149
|
export declare function createTestAttestationPool(telemetry?: TelemetryClient): Promise<AttestationPool>;
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fcG9vbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy9hdHRlc3RhdGlvbl9wb29sL2F0dGVzdGF0aW9uX3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF5QixVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlwRixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQ0wsYUFBYSxFQUNiLHFCQUFxQixFQUVyQixLQUFLLHNCQUFzQixFQUM1QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUluRiw0RUFBNEU7QUFDNUUsTUFBTSxNQUFNLFlBQVksR0FBRztJQUN6QixpQ0FBaUM7SUFDakMsS0FBSyxFQUFFLE9BQU8sQ0FBQztJQUNmLDZDQUE2QztJQUM3QyxhQUFhLEVBQUUsT0FBTyxDQUFDO0lBQ3ZCOzs7bUZBRytFO0lBQy9FLEtBQUssRUFBRSxNQUFNLENBQUM7Q0FDZixDQUFDO0FBRUYsZUFBTyxNQUFNLGlDQUFpQyxJQUFJLENBQUM7QUFDbkQsZUFBTyxNQUFNLGdDQUFnQyxJQUFJLENBQUM7QUFDbEQsb0ZBQW9GO0FBQ3BGLGVBQU8sTUFBTSxvQ0FBb0MsSUFBSSxDQUFDO0FBRXRELGtHQUFrRztBQUNsRyxNQUFNLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUNuQyxlQUFlLEVBQ2IscUJBQXFCLEdBQ3JCLGtCQUFrQixHQUNsQiwwQkFBMEIsR0FDMUIsdUJBQXVCLEdBQ3ZCLDhCQUE4QixHQUM5Qiw2QkFBNkIsR0FDN0IsaUJBQWlCLEdBQ2pCLGtDQUFrQyxHQUNsQyw2Q0FBNkMsR0FDN0MsU0FBUyxDQUNaLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILHFCQUFhLGVBQWU7SUEwQnhCLE9BQU8sQ0FBQyxLQUFLO0lBRWIsT0FBTyxDQUFDLEdBQUc7SUEzQmIsT0FBTyxDQUFDLE9BQU8sQ0FBNkM7SUFJNUQsT0FBTyxDQUFDLHNCQUFzQixDQUFnQztJQUc5RCxPQUFPLENBQUMsbUJBQW1CLENBQWdDO0lBSTNELE9BQU8sQ0FBQywwQkFBMEIsQ0FBcUM7SUFHdkUsT0FBTyxDQUFDLGNBQWMsQ0FBZ0M7SUFJdEQsT0FBTyxDQUFDLDZCQUE2QixDQUFxQztJQUkxRSxPQUFPLENBQUMsc0NBQXNDLENBQXFDO0lBRW5GLFlBQ1UsS0FBSyxFQUFFLGlCQUFpQixFQUNoQyxTQUFTLEdBQUUsZUFBc0MsRUFDekMsR0FBRyx5Q0FBeUMsRUFlckQ7SUFFRCxPQUFPLENBQUMsU0FBUyxDQUlmO0lBRUYseUNBQXlDO0lBQzVCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBUXZDO0lBRUQsT0FBTyxDQUFDLGNBQWM7SUFZdEIsT0FBTyxDQUFDLGlCQUFpQjtJQUl6QiwyRUFBMkU7SUFDM0UsT0FBTyxDQUFDLDZCQUE2QjtJQUtyQyx5RkFBeUY7SUFDekYsT0FBTyxDQUFDLGlDQUFpQztJQUt6QyxnSEFBZ0g7SUFDaEgsT0FBTyxDQUFDLGdCQUFnQjtJQUt4QiwwRUFBMEU7SUFDMUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFNO0lBQ3hDLDZEQUE2RDtJQUM3RCxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQXlDO0lBRTFFLHdGQUF3RjtJQUN4RixPQUFPLENBQUMsbUJBQW1CO0lBUzNCOzs7Ozs7Ozs7O09BVUc7SUFDVSxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FzQ3BGO0lBRUQsNEZBQTRGO0lBQzVGLE9BQU8sQ0FBQyxnQ0FBZ0M7WUFTMUIsZ0JBQWdCO0lBVTlCOzs7Ozs7T0FNRztJQUNVLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FXNUU7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNVLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBMkI3RjtZQUdhLHFCQUFxQjtJQVFuQzs7Ozs7Ozs7T0FRRztJQUNVLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxDQVcxRjtJQUVEOzs7T0FHRztJQUNVLDRCQUE0QixDQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FnQzlGO0lBRUQ7Ozs7O09BS0c7SUFDVSxnQ0FBZ0MsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBU2hHO0lBRUQ7Ozs7OztPQU1HO0lBQ1UsMkNBQTJDLENBQ3RELElBQUksRUFBRSxVQUFVLEVBQ2hCLFVBQVUsRUFBRSxNQUFNLEdBQ2pCLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBU2xDO0lBRUQ7Ozs7T0FJRztJQUNVLGVBQWUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FtRGxFO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDVSwyQkFBMkIsQ0FBQyxXQUFXLEVBQUUscUJBQXFCLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQThEbEc7WUFHYSxnQ0FBZ0M7Q0FJL0M7QUFFRCwwRUFBMEU7QUFDMUUsd0JBQXNCLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxFQUFFLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBSXJHIn0=
|