@aztec/p2p 0.0.1-commit.2f68f620 → 0.0.1-commit.3100065
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/README.md +7 -6
- package/dest/bootstrap/bootstrap.d.ts +1 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +20 -12
- package/dest/client/factory.d.ts +2 -2
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +10 -5
- package/dest/client/interface.d.ts +36 -8
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +23 -12
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +38 -35
- package/dest/config.d.ts +19 -13
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +27 -26
- package/dest/errors/reqresp.error.d.ts +13 -1
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +14 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -2
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +9 -2
- 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 +43 -0
- package/dest/mem_pools/instrumentation.d.ts +9 -4
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +11 -8
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
- package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
- package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +30 -5
- package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +31 -0
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +9 -3
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +19 -8
- package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -4
- 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 +133 -34
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +6 -5
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +24 -26
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -4
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +4 -3
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +4 -3
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +19 -5
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
- package/dest/msg_validators/proposal_validator/proposal_validator.js +66 -30
- package/dest/msg_validators/tx_validator/factory.d.ts +9 -11
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +15 -6
- package/dest/msg_validators/tx_validator/gas_validator.d.ts +12 -7
- package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/gas_validator.js +15 -15
- package/dest/msg_validators/tx_validator/phases_validator.js +2 -2
- package/dest/services/discv5/discV5_service.d.ts +12 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -1
- package/dest/services/discv5/discV5_service.js +84 -15
- package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
- package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
- package/dest/services/discv5/persisted_enr_store.js +145 -0
- 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 +19 -6
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +25 -15
- package/dest/services/gossipsub/topic_score_params.d.ts +6 -23
- package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
- package/dest/services/gossipsub/topic_score_params.js +4 -31
- 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 +135 -53
- package/dest/services/peer-manager/peer_manager.d.ts +15 -2
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_manager.js +46 -18
- package/dest/services/peer-manager/peer_scoring.d.ts +28 -1
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
- package/dest/services/peer-manager/peer_scoring.js +70 -3
- package/dest/services/reqresp/config.d.ts +13 -1
- package/dest/services/reqresp/config.d.ts.map +1 -1
- package/dest/services/reqresp/config.js +11 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -3
- 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 +34 -3
- package/dest/services/service.d.ts +17 -1
- package/dest/services/service.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_collection/tx_source.js +4 -1
- package/dest/test-helpers/testbench-utils.d.ts +4 -1
- package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
- package/dest/test-helpers/testbench-utils.js +9 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +19 -2
- package/package.json +16 -17
- package/src/bootstrap/bootstrap.ts +15 -9
- package/src/client/factory.ts +9 -5
- package/src/client/interface.ts +29 -6
- package/src/client/p2p_client.ts +46 -48
- package/src/config.ts +50 -38
- package/src/errors/reqresp.error.ts +19 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +12 -2
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +40 -1
- package/src/mem_pools/instrumentation.ts +13 -11
- package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
- package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
- package/src/mem_pools/tx_pool_v2/interfaces.ts +28 -4
- package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +35 -0
- package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +22 -8
- package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +158 -33
- package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -26
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -3
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +4 -2
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +10 -2
- package/src/msg_validators/proposal_validator/proposal_validator.ts +69 -30
- package/src/msg_validators/tx_validator/README.md +2 -0
- package/src/msg_validators/tx_validator/factory.ts +19 -13
- package/src/msg_validators/tx_validator/gas_validator.ts +16 -20
- package/src/msg_validators/tx_validator/phases_validator.ts +2 -2
- package/src/services/discv5/discV5_service.ts +88 -9
- package/src/services/discv5/persisted_enr_store.ts +158 -0
- package/src/services/dummy_service.ts +6 -0
- package/src/services/encoding.ts +28 -20
- package/src/services/gossipsub/README.md +33 -11
- package/src/services/gossipsub/topic_score_params.ts +9 -50
- package/src/services/libp2p/libp2p_service.ts +159 -56
- package/src/services/peer-manager/peer_manager.ts +48 -17
- package/src/services/peer-manager/peer_scoring.ts +75 -3
- package/src/services/reqresp/README.md +2 -23
- package/src/services/reqresp/config.ts +17 -0
- package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -3
- package/src/services/reqresp/reqresp.ts +42 -2
- package/src/services/service.ts +19 -0
- package/src/services/tx_collection/tx_source.ts +2 -1
- package/src/test-helpers/testbench-utils.ts +12 -0
- package/src/testbench/p2p_client_testbench_worker.ts +22 -2
- package/dest/msg_validators/clock_tolerance.d.ts +0 -32
- package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
- package/dest/msg_validators/clock_tolerance.js +0 -90
- package/src/msg_validators/clock_tolerance.ts +0 -121
|
@@ -373,10 +373,9 @@ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
|
|
|
373
373
|
var _dec, _dec1, _initProto;
|
|
374
374
|
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
375
375
|
import { createLogger } from '@aztec/foundation/log';
|
|
376
|
-
import { RunningPromise } from '@aztec/foundation/promise';
|
|
377
376
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
378
377
|
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
379
|
-
import {
|
|
378
|
+
import { EventDrivenL2BlockStream } from '@aztec/stdlib/block';
|
|
380
379
|
import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
381
380
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
382
381
|
import { Attributes, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
@@ -435,7 +434,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
435
434
|
txProvider;
|
|
436
435
|
validatorAddresses;
|
|
437
436
|
/** Tracks the last slot for which we called prepareForSlot */ lastSlotProcessed;
|
|
438
|
-
/** Polls for slot changes and calls prepareForSlot on the tx pool */ slotMonitor;
|
|
439
437
|
constructor(store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, epochCache, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p'), initialBlockHash){
|
|
440
438
|
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;
|
|
441
439
|
this.config = {
|
|
@@ -504,10 +502,12 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
504
502
|
break;
|
|
505
503
|
case 'chain-pruned':
|
|
506
504
|
this.txCollection.stopCollectingForBlocksAfter(event.block.number);
|
|
507
|
-
await this.handlePruneL2Blocks(event.block, event.checkpoint);
|
|
505
|
+
await this.handlePruneL2Blocks(event.block, event.checkpointed.checkpoint);
|
|
508
506
|
break;
|
|
509
507
|
case 'chain-checkpointed':
|
|
510
508
|
break;
|
|
509
|
+
case 'chain-proposed':
|
|
510
|
+
break;
|
|
511
511
|
default:
|
|
512
512
|
{
|
|
513
513
|
const _ = event;
|
|
@@ -581,9 +581,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
581
581
|
}
|
|
582
582
|
this.blockStream.start();
|
|
583
583
|
this.txFileStore?.start();
|
|
584
|
-
// Start slot monitor to call prepareForSlot when the slot changes
|
|
585
|
-
this.slotMonitor = new RunningPromise(()=>this.maybeCallPrepareForSlot(), this.log, this.config.slotCheckIntervalMS);
|
|
586
|
-
this.slotMonitor.start();
|
|
587
584
|
return this.syncPromise;
|
|
588
585
|
}
|
|
589
586
|
addReqRespSubProtocol(subProtocol, handler) {
|
|
@@ -592,7 +589,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
592
589
|
initBlockStream(startingBlock) {
|
|
593
590
|
if (!this.blockStream) {
|
|
594
591
|
const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
|
|
595
|
-
this.blockStream = new
|
|
592
|
+
this.blockStream = new EventDrivenL2BlockStream(this.l2BlockSource, this, this, createLogger(`${this.log.module}:l2-block-stream`), {
|
|
596
593
|
batchSize,
|
|
597
594
|
pollIntervalMS,
|
|
598
595
|
startingBlock
|
|
@@ -604,8 +601,6 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
604
601
|
* 'ready' will now return 'false' and the running promise that keeps the client synced is interrupted.
|
|
605
602
|
*/ async stop() {
|
|
606
603
|
this.log.debug('Stopping p2p client...');
|
|
607
|
-
await this.slotMonitor?.stop();
|
|
608
|
-
this.log.debug('Stopped slot monitor');
|
|
609
604
|
await tryStop(this.txCollection);
|
|
610
605
|
this.log.debug('Stopped tx collection service');
|
|
611
606
|
await this.txFileStore?.stop();
|
|
@@ -683,6 +678,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
683
678
|
hasBlockProposalsForSlot(slot) {
|
|
684
679
|
return this.attestationPool.hasBlockProposalsForSlot(slot);
|
|
685
680
|
}
|
|
681
|
+
hasCheckpointProposalForSlot(slot) {
|
|
682
|
+
return this.attestationPool.hasCheckpointProposalForSlot(slot);
|
|
683
|
+
}
|
|
686
684
|
// REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
687
685
|
// ^ This pattern is not my favorite (md)
|
|
688
686
|
registerBlockProposalHandler(handler) {
|
|
@@ -697,13 +695,16 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
697
695
|
registerDuplicateProposalCallback(callback) {
|
|
698
696
|
this.p2pService.registerDuplicateProposalCallback(callback);
|
|
699
697
|
}
|
|
698
|
+
registerOversizedProposalCallback(callback) {
|
|
699
|
+
this.p2pService.registerOversizedProposalCallback(callback);
|
|
700
|
+
}
|
|
700
701
|
registerDuplicateAttestationCallback(callback) {
|
|
701
702
|
this.p2pService.registerDuplicateAttestationCallback(callback);
|
|
702
703
|
}
|
|
703
704
|
registerCheckpointAttestationCallback(callback) {
|
|
704
705
|
this.p2pService.registerCheckpointAttestationCallback(callback);
|
|
705
706
|
}
|
|
706
|
-
async getPendingTxs(limit, after) {
|
|
707
|
+
async getPendingTxs(limit, after, options) {
|
|
707
708
|
if (limit !== undefined && limit <= 0) {
|
|
708
709
|
throw new TypeError('limit must be greater than 0');
|
|
709
710
|
}
|
|
@@ -718,23 +719,30 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
718
719
|
}
|
|
719
720
|
const endIndex = limit !== undefined ? startIndex + limit : undefined;
|
|
720
721
|
txHashes = txHashes.slice(startIndex, endIndex);
|
|
721
|
-
|
|
722
|
+
// This is a public-facing API (exposed via both the node and the p2p RPC), so proofs are opt-in.
|
|
723
|
+
const includeProof = !!options?.includeProof;
|
|
724
|
+
const maybeTxs = await Promise.all(txHashes.map((txHash)=>this.txPool.getTxByHash(txHash, {
|
|
725
|
+
includeProof
|
|
726
|
+
})));
|
|
722
727
|
return maybeTxs.filter((tx)=>!!tx);
|
|
723
728
|
}
|
|
724
729
|
getPendingTxCount() {
|
|
725
730
|
return this.txPool.getPendingTxCount();
|
|
726
731
|
}
|
|
727
|
-
|
|
732
|
+
hasEligiblePendingTxs(minCount) {
|
|
733
|
+
return this.txPool.hasEligiblePendingTxs(minCount);
|
|
734
|
+
}
|
|
735
|
+
async *iteratePendingTxs(opts) {
|
|
728
736
|
for (const txHash of (await this.txPool.getPendingTxHashes())){
|
|
729
|
-
const tx = await this.txPool.getTxByHash(txHash);
|
|
737
|
+
const tx = await this.txPool.getTxByHash(txHash, opts);
|
|
730
738
|
if (tx) {
|
|
731
739
|
yield tx;
|
|
732
740
|
}
|
|
733
741
|
}
|
|
734
742
|
}
|
|
735
|
-
async *iterateEligiblePendingTxs() {
|
|
743
|
+
async *iterateEligiblePendingTxs(opts) {
|
|
736
744
|
for (const txHash of (await this.txPool.getEligiblePendingTxHashes())){
|
|
737
|
-
const tx = await this.txPool.getTxByHash(txHash);
|
|
745
|
+
const tx = await this.txPool.getTxByHash(txHash, opts);
|
|
738
746
|
if (tx) {
|
|
739
747
|
yield tx;
|
|
740
748
|
}
|
|
@@ -743,16 +751,18 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
743
751
|
/**
|
|
744
752
|
* Returns a transaction in the transaction pool by its hash.
|
|
745
753
|
* @param txHash - Hash of the transaction to look for in the pool.
|
|
754
|
+
* @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
|
|
746
755
|
* @returns A single tx or undefined.
|
|
747
|
-
*/ getTxByHashFromPool(txHash) {
|
|
748
|
-
return this.txPool.getTxByHash(txHash);
|
|
756
|
+
*/ getTxByHashFromPool(txHash, opts) {
|
|
757
|
+
return this.txPool.getTxByHash(txHash, opts);
|
|
749
758
|
}
|
|
750
759
|
/**
|
|
751
760
|
* Returns transactions in the transaction pool by hash.
|
|
752
761
|
* @param txHashes - Hashes of the transactions to look for.
|
|
762
|
+
* @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
|
|
753
763
|
* @returns The txs found, in the same order as the requested hashes. If a tx is not found, it will be undefined.
|
|
754
|
-
*/ getTxsByHashFromPool(txHashes) {
|
|
755
|
-
return this.txPool.getTxsByHash(txHashes);
|
|
764
|
+
*/ getTxsByHashFromPool(txHashes, opts) {
|
|
765
|
+
return this.txPool.getTxsByHash(txHashes, opts);
|
|
756
766
|
}
|
|
757
767
|
hasTxsInPool(txHashes) {
|
|
758
768
|
return this.txPool.hasTxs(txHashes);
|
|
@@ -868,11 +878,15 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
868
878
|
if (!blocks.length) {
|
|
869
879
|
return;
|
|
870
880
|
}
|
|
881
|
+
const lastBlock = blocks.at(-1);
|
|
882
|
+
const lastSlot = lastBlock.header.getSlot();
|
|
883
|
+
// Mark txs mined before releasing protections: a block landing at this slot supersedes any
|
|
884
|
+
// protection for txs it includes, so mined-marking must run first to keep just-landed txs from
|
|
885
|
+
// being unprotected into pending where they could be evicted before they are recorded as mined.
|
|
871
886
|
await this.handleMinedBlocks(blocks);
|
|
872
|
-
await this.maybeCallPrepareForSlot();
|
|
887
|
+
await this.maybeCallPrepareForSlot(lastSlot);
|
|
873
888
|
await this.collectingMissingTxs(blocks);
|
|
874
|
-
|
|
875
|
-
await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
|
|
889
|
+
await this.synchedLatestSlot.set(BigInt(lastSlot));
|
|
876
890
|
}
|
|
877
891
|
/** Request txs for unproven blocks so the prover node can prove. */ async collectingMissingTxs(blocks) {
|
|
878
892
|
try {
|
|
@@ -962,18 +976,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
962
976
|
}
|
|
963
977
|
return isEpochPrune;
|
|
964
978
|
}
|
|
965
|
-
/**
|
|
966
|
-
// If we have a proposed checkpoint available, we want to prepare the target slot - otherwise we prepare the current slot
|
|
967
|
-
const l2Tips = await this.l2Tips.getL2Tips();
|
|
968
|
-
const hasProposedCheckpoint = l2Tips.proposedCheckpoint.checkpoint.number > l2Tips.checkpointed.checkpoint.number;
|
|
969
|
-
let slot;
|
|
970
|
-
if (hasProposedCheckpoint) {
|
|
971
|
-
const { targetSlot } = this.epochCache.getTargetAndNextSlot();
|
|
972
|
-
slot = targetSlot;
|
|
973
|
-
} else {
|
|
974
|
-
const { currentSlot } = this.epochCache.getCurrentAndNextSlot();
|
|
975
|
-
slot = currentSlot;
|
|
976
|
-
}
|
|
979
|
+
/** Calls prepareForSlot for the given slot if it advances past the last slot we prepared for. */ async maybeCallPrepareForSlot(slot) {
|
|
977
980
|
if (slot <= this.lastSlotProcessed) {
|
|
978
981
|
return;
|
|
979
982
|
}
|
package/dest/config.d.ts
CHANGED
|
@@ -8,21 +8,15 @@ import { type TxFileStoreConfig } from './services/tx_file_store/config.js';
|
|
|
8
8
|
/**
|
|
9
9
|
* P2P client configuration values.
|
|
10
10
|
*/
|
|
11
|
-
export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, ChainConfig, TxCollectionConfig, TxFileStoreConfig, Pick<SequencerConfig, '
|
|
11
|
+
export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, ChainConfig, TxCollectionConfig, TxFileStoreConfig, Pick<SequencerConfig, 'expectedBlockProposalsPerSlot' | 'maxTxsPerBlock' | 'checkpointProposalSyncGraceSeconds' | 'maxBlocksPerCheckpoint'>, Required<Pick<SequencerConfig, 'blockDurationMs'>> {
|
|
12
12
|
/** Maximum transactions per block for validation. Overrides maxTxsPerBlock for gossip validation when set. */
|
|
13
13
|
validateMaxTxsPerBlock?: number;
|
|
14
14
|
/** Maximum transactions per checkpoint for validation. Used as fallback for maxTxsPerBlock when that is not set. */
|
|
15
15
|
validateMaxTxsPerCheckpoint?: number;
|
|
16
|
-
/** Maximum L2 gas per block for validation. When set, txs exceeding this limit are rejected. */
|
|
17
|
-
validateMaxL2BlockGas?: number;
|
|
18
|
-
/** Maximum DA gas per block for validation. When set, txs exceeding this limit are rejected. */
|
|
19
|
-
validateMaxDABlockGas?: number;
|
|
20
16
|
/** A flag dictating whether the P2P subsystem should be enabled. */
|
|
21
17
|
p2pEnabled: boolean;
|
|
22
18
|
/** The frequency in which to check for new L2 blocks. */
|
|
23
19
|
blockCheckIntervalMS: number;
|
|
24
|
-
/** The frequency in which to check for new L2 slots. */
|
|
25
|
-
slotCheckIntervalMS: number;
|
|
26
20
|
/** The number of blocks to fetch in a single batch. */
|
|
27
21
|
blockRequestBatchSize: number;
|
|
28
22
|
/** DEBUG: Disable colocation penalty - for testing purposes only */
|
|
@@ -77,6 +71,12 @@ export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, Cha
|
|
|
77
71
|
gossipsubMcacheGossip: number;
|
|
78
72
|
/** How long to keep message IDs in the seen cache (ms). */
|
|
79
73
|
gossipsubSeenTTL: number;
|
|
74
|
+
/**
|
|
75
|
+
* Maximum clock-disparity tolerance (ms) applied to proposal/attestation gossip receive windows. Both
|
|
76
|
+
* ends of each acceptance window are widened by this much so peers are not penalized for messages valid
|
|
77
|
+
* when sent but arriving slightly early or late due to clock skew (Ethereum's MAXIMUM_GOSSIP_CLOCK_DISPARITY).
|
|
78
|
+
*/
|
|
79
|
+
maxGossipClockDisparityMs: number;
|
|
80
80
|
/** The 'age' (in # of L2 blocks) of a processed tx after which we heavily penalize a peer for re-sending it. */
|
|
81
81
|
doubleSpendSeverePeerPenaltyWindow: number;
|
|
82
82
|
/** The weight of the tx topic for the gossipsub protocol. This determines how much the score for this specific topic contributes to the overall peer score. */
|
|
@@ -87,6 +87,8 @@ export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, Cha
|
|
|
87
87
|
gossipsubTxInvalidMessageDeliveriesDecay: number;
|
|
88
88
|
/** The values for the peer scoring system. Passed as a comma separated list of values in order: low, mid, high tolerance errors. */
|
|
89
89
|
peerPenaltyValues: number[];
|
|
90
|
+
/** How long (in seconds) a peer is banned for once its score drops below the ban threshold. */
|
|
91
|
+
peerBanDurationSeconds: number;
|
|
90
92
|
/** Limit of transactions to archive in the tx pool. Once the archived tx limit is reached, the oldest archived txs will be purged. */
|
|
91
93
|
archivedTxLimit: number;
|
|
92
94
|
/** A list of trusted peers. */
|
|
@@ -141,6 +143,11 @@ export interface P2PConfig extends P2PReqRespConfig, BatchTxRequesterConfig, Cha
|
|
|
141
143
|
p2pMissingTxCollectionDeadlineSlots?: number;
|
|
142
144
|
/** Minimum percentage fee increase required to replace an existing tx via RPC (0 = no bump). */
|
|
143
145
|
priceBumpPercentage: bigint;
|
|
146
|
+
/**
|
|
147
|
+
* Number of slots behind the finalized tip to keep finalized txs for before deleting them. 0 deletes
|
|
148
|
+
* at the finalized tip (default).
|
|
149
|
+
*/
|
|
150
|
+
keepFinalizedTxsForSlots: number;
|
|
144
151
|
/** Drop incoming block and checkpoint proposals at the libp2p dispatch layer (for testing only) */
|
|
145
152
|
skipIncomingProposals?: boolean;
|
|
146
153
|
/** Accept proposal gossip regardless of slot timing (for testing only). */
|
|
@@ -169,9 +176,8 @@ export type BootnodeConfig = Pick<P2PConfig, 'p2pIp' | 'p2pPort' | 'p2pBroadcast
|
|
|
169
176
|
export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
170
177
|
maxTxsPerBlock: number;
|
|
171
178
|
maxBlocksPerCheckpoint: number;
|
|
172
|
-
l1PublishingTime: number;
|
|
173
|
-
attestationPropagationTime: number;
|
|
174
179
|
blockDurationMs: number;
|
|
180
|
+
checkpointProposalSyncGraceSeconds: number;
|
|
175
181
|
expectedBlockProposalsPerSlot: number;
|
|
176
182
|
l1ChainId: number;
|
|
177
183
|
rollupVersion: number;
|
|
@@ -201,11 +207,8 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
201
207
|
txFileStoreEnabled: boolean;
|
|
202
208
|
validateMaxTxsPerBlock: number;
|
|
203
209
|
validateMaxTxsPerCheckpoint: number;
|
|
204
|
-
validateMaxL2BlockGas: number;
|
|
205
|
-
validateMaxDABlockGas: number;
|
|
206
210
|
p2pEnabled: boolean;
|
|
207
211
|
blockCheckIntervalMS: number;
|
|
208
|
-
slotCheckIntervalMS: number;
|
|
209
212
|
blockRequestBatchSize: number;
|
|
210
213
|
debugDisableColocationPenalty: boolean;
|
|
211
214
|
peerCheckIntervalMS: number;
|
|
@@ -232,11 +235,13 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
232
235
|
gossipsubMcacheLength: number;
|
|
233
236
|
gossipsubMcacheGossip: number;
|
|
234
237
|
gossipsubSeenTTL: number;
|
|
238
|
+
maxGossipClockDisparityMs: number;
|
|
235
239
|
doubleSpendSeverePeerPenaltyWindow: number;
|
|
236
240
|
gossipsubTxTopicWeight: number;
|
|
237
241
|
gossipsubTxInvalidMessageDeliveriesWeight: number;
|
|
238
242
|
gossipsubTxInvalidMessageDeliveriesDecay: number;
|
|
239
243
|
peerPenaltyValues: number[];
|
|
244
|
+
peerBanDurationSeconds: number;
|
|
240
245
|
archivedTxLimit: number;
|
|
241
246
|
trustedPeers: string[];
|
|
242
247
|
privatePeers: string[];
|
|
@@ -260,6 +265,7 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
260
265
|
slashDataWithholdingToleranceSlots: number;
|
|
261
266
|
p2pMissingTxCollectionDeadlineSlots: number;
|
|
262
267
|
priceBumpPercentage: bigint;
|
|
268
|
+
keepFinalizedTxsForSlots: number;
|
|
263
269
|
skipIncomingProposals: boolean;
|
|
264
270
|
skipProposalSlotValidation: boolean;
|
|
265
271
|
skipCheckpointProposalValidation: boolean;
|
|
@@ -279,4 +285,4 @@ export declare const bootnodeConfigMappings: ConfigMappingsType<Pick<{
|
|
|
279
285
|
* @returns A list of allowed elements
|
|
280
286
|
*/
|
|
281
287
|
export declare function parseAllowList(value: string): AllowedElement[];
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUN2QixXQUFXLEVBV1osTUFBTSwwQkFBMEIsQ0FBQztBQUlsQyxPQUFPLEVBQ0wsS0FBSyxjQUFjLEVBQ25CLEtBQUssV0FBVyxFQUNoQixLQUFLLGVBQWUsRUFHckIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFFbEYsT0FBTyxFQUNMLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0saURBQWlELENBQUM7QUFDekQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQTRCLE1BQU0sOEJBQThCLENBQUM7QUFDL0YsT0FBTyxFQUFFLEtBQUssa0JBQWtCLEVBQThCLE1BQU0sb0NBQW9DLENBQUM7QUFDekcsT0FBTyxFQUFFLEtBQUssaUJBQWlCLEVBQTZCLE1BQU0sb0NBQW9DLENBQUM7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLFdBQVcsU0FDZixTQUFRLGdCQUFnQixFQUN0QixzQkFBc0IsRUFDdEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsSUFBSSxDQUNGLGVBQWUsRUFDYiwrQkFBK0IsR0FDL0IsZ0JBQWdCLEdBQ2hCLG9DQUFvQyxHQUNwQyx3QkFBd0IsQ0FDM0IsRUFHRCxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BELDhHQUE4RztJQUM5RyxzQkFBc0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUVoQyxvSEFBb0g7SUFDcEgsMkJBQTJCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFckMsb0VBQW9FO0lBQ3BFLFVBQVUsRUFBRSxPQUFPLENBQUM7SUFFcEIseURBQXlEO0lBQ3pELG9CQUFvQixFQUFFLE1BQU0sQ0FBQztJQUU3Qix1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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,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dest/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { bigintConfigHelper, booleanConfigHelper, getConfigFromMappings, getDefaultConfig, numberConfigHelper, optionalNumberConfigHelper, percentageConfigHelper, pickConfigMappings, secretStringConfigHelper } from '@aztec/foundation/config';
|
|
1
|
+
import { bigintConfigHelper, booleanConfigHelper, floatConfigHelper, getConfigFromMappings, getDefaultConfig, numberConfigHelper, optionalNumberConfigHelper, percentageConfigHelper, pickConfigMappings, secretStringConfigHelper } from '@aztec/foundation/config';
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import { FunctionSelector } from '@aztec/stdlib/abi/function-selector';
|
|
4
4
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -26,16 +26,6 @@ export const p2pConfigMappings = {
|
|
|
26
26
|
description: 'Maximum transactions per checkpoint for validation. Used as fallback for maxTxsPerBlock when that is not set.',
|
|
27
27
|
...optionalNumberConfigHelper()
|
|
28
28
|
},
|
|
29
|
-
validateMaxL2BlockGas: {
|
|
30
|
-
env: 'VALIDATOR_MAX_L2_BLOCK_GAS',
|
|
31
|
-
description: 'Maximum L2 gas per block for validation. When set, txs exceeding this limit are rejected.',
|
|
32
|
-
...optionalNumberConfigHelper()
|
|
33
|
-
},
|
|
34
|
-
validateMaxDABlockGas: {
|
|
35
|
-
env: 'VALIDATOR_MAX_DA_BLOCK_GAS',
|
|
36
|
-
description: 'Maximum DA gas per block for validation. When set, txs exceeding this limit are rejected.',
|
|
37
|
-
...optionalNumberConfigHelper()
|
|
38
|
-
},
|
|
39
29
|
p2pEnabled: {
|
|
40
30
|
env: 'P2P_ENABLED',
|
|
41
31
|
description: 'A flag dictating whether the P2P subsystem should be enabled.',
|
|
@@ -51,11 +41,6 @@ export const p2pConfigMappings = {
|
|
|
51
41
|
description: 'The frequency in which to check for new L2 blocks.',
|
|
52
42
|
...numberConfigHelper(100)
|
|
53
43
|
},
|
|
54
|
-
slotCheckIntervalMS: {
|
|
55
|
-
env: 'P2P_SLOT_CHECK_INTERVAL_MS',
|
|
56
|
-
description: 'The frequency in which to check for new L2 slots.',
|
|
57
|
-
...numberConfigHelper(1000)
|
|
58
|
-
},
|
|
59
44
|
debugDisableColocationPenalty: {
|
|
60
45
|
env: 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY',
|
|
61
46
|
description: 'DEBUG: Disable colocation penalty - NEVER set to true in production',
|
|
@@ -180,20 +165,25 @@ export const p2pConfigMappings = {
|
|
|
180
165
|
description: 'How long to keep message IDs in the seen cache.',
|
|
181
166
|
...numberConfigHelper(20 * 60 * 1000)
|
|
182
167
|
},
|
|
168
|
+
maxGossipClockDisparityMs: {
|
|
169
|
+
env: 'P2P_MAX_GOSSIP_CLOCK_DISPARITY_MS',
|
|
170
|
+
description: 'Maximum clock-disparity tolerance (ms) applied to both ends of proposal/attestation gossip receive windows.',
|
|
171
|
+
...numberConfigHelper(500)
|
|
172
|
+
},
|
|
183
173
|
gossipsubTxTopicWeight: {
|
|
184
174
|
env: 'P2P_GOSSIPSUB_TX_TOPIC_WEIGHT',
|
|
185
175
|
description: 'The weight of the tx topic for the gossipsub protocol.',
|
|
186
|
-
...
|
|
176
|
+
...floatConfigHelper(1)
|
|
187
177
|
},
|
|
188
178
|
gossipsubTxInvalidMessageDeliveriesWeight: {
|
|
189
179
|
env: 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_WEIGHT',
|
|
190
180
|
description: 'The weight of the tx invalid message deliveries for the gossipsub protocol.',
|
|
191
|
-
...
|
|
181
|
+
...floatConfigHelper(-20)
|
|
192
182
|
},
|
|
193
183
|
gossipsubTxInvalidMessageDeliveriesDecay: {
|
|
194
184
|
env: 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_DECAY',
|
|
195
185
|
description: 'Determines how quickly the penalty for invalid message deliveries decays over time. Between 0 and 1.',
|
|
196
|
-
...
|
|
186
|
+
...floatConfigHelper(0.5)
|
|
197
187
|
},
|
|
198
188
|
peerPenaltyValues: {
|
|
199
189
|
env: 'P2P_PEER_PENALTY_VALUES',
|
|
@@ -205,6 +195,11 @@ export const p2pConfigMappings = {
|
|
|
205
195
|
50
|
|
206
196
|
]
|
|
207
197
|
},
|
|
198
|
+
peerBanDurationSeconds: {
|
|
199
|
+
env: 'P2P_PEER_BAN_DURATION_SECONDS',
|
|
200
|
+
description: 'How long (in seconds) a peer is banned for once its score drops below the ban threshold.',
|
|
201
|
+
...numberConfigHelper(24 * 60 * 60)
|
|
202
|
+
},
|
|
208
203
|
doubleSpendSeverePeerPenaltyWindow: {
|
|
209
204
|
env: 'P2P_DOUBLE_SPEND_SEVERE_PEER_PENALTY_WINDOW',
|
|
210
205
|
description: 'The "age" (in L2 blocks) of a tx after which we heavily penalize a peer for sending it.',
|
|
@@ -301,11 +296,6 @@ export const p2pConfigMappings = {
|
|
|
301
296
|
description: 'Alters the format of p2p messages to include things like broadcast timestamp FOR TESTING ONLY',
|
|
302
297
|
...booleanConfigHelper(false)
|
|
303
298
|
},
|
|
304
|
-
l1PublishingTime: {
|
|
305
|
-
env: 'SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT',
|
|
306
|
-
description: 'How much time (in seconds) we allow in the slot for publishing the L1 tx (defaults to 1 L1 slot).',
|
|
307
|
-
...optionalNumberConfigHelper()
|
|
308
|
-
},
|
|
309
299
|
fishermanMode: {
|
|
310
300
|
env: 'FISHERMAN_MODE',
|
|
311
301
|
description: 'Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus.',
|
|
@@ -347,7 +337,18 @@ export const p2pConfigMappings = {
|
|
|
347
337
|
description: 'Minimum percentage fee increase required to replace an existing tx via RPC. Even at 0%, replacement still requires paying at least 1 unit more.',
|
|
348
338
|
...bigintConfigHelper(10n)
|
|
349
339
|
},
|
|
350
|
-
|
|
340
|
+
keepFinalizedTxsForSlots: {
|
|
341
|
+
env: 'P2P_KEEP_FINALIZED_TXS_FOR_SLOTS',
|
|
342
|
+
description: 'Number of slots behind the finalized tip to keep finalized txs for before deleting them. 0 deletes at the finalized tip.',
|
|
343
|
+
...numberConfigHelper(0)
|
|
344
|
+
},
|
|
345
|
+
...pickConfigMappings(sharedSequencerConfigMappings, [
|
|
346
|
+
'expectedBlockProposalsPerSlot',
|
|
347
|
+
'maxTxsPerBlock',
|
|
348
|
+
'checkpointProposalSyncGraceSeconds',
|
|
349
|
+
'maxBlocksPerCheckpoint',
|
|
350
|
+
'blockDurationMs'
|
|
351
|
+
]),
|
|
351
352
|
...p2pReqRespConfigMappings,
|
|
352
353
|
...batchTxRequesterConfigMappings,
|
|
353
354
|
...chainConfigMappings,
|
|
@@ -434,7 +435,7 @@ export const bootnodeConfigMappings = pickConfigMappings({
|
|
|
434
435
|
const flags = flagsString ? parseFlags(flagsString, trimmed) : {};
|
|
435
436
|
if (typeString === 'I') {
|
|
436
437
|
entries.push({
|
|
437
|
-
address: AztecAddress.
|
|
438
|
+
address: AztecAddress.fromStringUnsafe(identifierString),
|
|
438
439
|
selector,
|
|
439
440
|
...flags
|
|
440
441
|
});
|
|
@@ -6,4 +6,16 @@
|
|
|
6
6
|
export declare class IndividualReqRespTimeoutError extends Error {
|
|
7
7
|
constructor();
|
|
8
8
|
}
|
|
9
|
-
|
|
9
|
+
/** Oversized reqresp request error
|
|
10
|
+
*
|
|
11
|
+
* Thrown locally (before dialing) when a request payload does not fit in a single muxer frame. Such a request would
|
|
12
|
+
* reach the responder split across multiple chunks, which are never reassembled into one request.
|
|
13
|
+
* @category Errors
|
|
14
|
+
*/
|
|
15
|
+
export declare class OversizedReqRespRequestError extends Error {
|
|
16
|
+
readonly subProtocol: string;
|
|
17
|
+
readonly payloadSizeBytes: number;
|
|
18
|
+
readonly maxSizeBytes: number;
|
|
19
|
+
constructor(subProtocol: string, payloadSizeBytes: number, maxSizeBytes: number);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxcmVzcC5lcnJvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vycm9ycy9yZXFyZXNwLmVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxxQkFBYSw2QkFBOEIsU0FBUSxLQUFLO0lBQ3RELGNBRUM7Q0FDRjtBQUVEOzs7OztHQUtHO0FBQ0gscUJBQWEsNEJBQTZCLFNBQVEsS0FBSzthQUVuQyxXQUFXLEVBQUUsTUFBTTthQUNuQixnQkFBZ0IsRUFBRSxNQUFNO2FBQ3hCLFlBQVksRUFBRSxNQUFNO0lBSHRDLFlBQ2tCLFdBQVcsRUFBRSxNQUFNLEVBQ25CLGdCQUFnQixFQUFFLE1BQU0sRUFDeEIsWUFBWSxFQUFFLE1BQU0sRUFNckM7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reqresp.error.d.ts","sourceRoot":"","sources":["../../src/errors/reqresp.error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,cAEC;CACF"}
|
|
1
|
+
{"version":3,"file":"reqresp.error.d.ts","sourceRoot":"","sources":["../../src/errors/reqresp.error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,cAEC;CACF;AAED;;;;;GAKG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;aAEnC,WAAW,EAAE,MAAM;aACnB,gBAAgB,EAAE,MAAM;aACxB,YAAY,EAAE,MAAM;IAHtC,YACkB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,MAAM,EAMrC;CACF"}
|
|
@@ -7,3 +7,17 @@
|
|
|
7
7
|
super(`Request to peer timed out`);
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
+
/** Oversized reqresp request error
|
|
11
|
+
*
|
|
12
|
+
* Thrown locally (before dialing) when a request payload does not fit in a single muxer frame. Such a request would
|
|
13
|
+
* reach the responder split across multiple chunks, which are never reassembled into one request.
|
|
14
|
+
* @category Errors
|
|
15
|
+
*/ export class OversizedReqRespRequestError extends Error {
|
|
16
|
+
subProtocol;
|
|
17
|
+
payloadSizeBytes;
|
|
18
|
+
maxSizeBytes;
|
|
19
|
+
constructor(subProtocol, payloadSizeBytes, maxSizeBytes){
|
|
20
|
+
super(`Request payload of ${payloadSizeBytes} bytes for ${subProtocol} exceeds the ${maxSizeBytes} byte limit of a single muxer frame`), this.subProtocol = subProtocol, this.payloadSizeBytes = payloadSizeBytes, this.maxSizeBytes = maxSizeBytes;
|
|
21
|
+
this.name = 'OversizedReqRespRequestError';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -23,7 +23,7 @@ export declare const MAX_BLOCK_PROPOSALS_PER_POSITION = 2;
|
|
|
23
23
|
/** Maximum attestations a single signer can make per slot before being rejected. */
|
|
24
24
|
export declare const MAX_ATTESTATIONS_PER_SLOT_AND_SIGNER = 2;
|
|
25
25
|
/** Public API interface for attestation pools. Used for typing mocks and test implementations. */
|
|
26
|
-
export type AttestationPoolApi = Pick<AttestationPool, 'tryAddBlockProposal' | 'getBlockProposalByArchive' | 'getProposalsForSlot' | 'tryAddCheckpointProposal' | 'getCheckpointProposal' | 'addOwnCheckpointAttestations' | 'tryAddCheckpointAttestation' | 'deleteOlderThan' | 'getCheckpointAttestationsForSlot' | 'getCheckpointAttestationsForSlotAndProposal' | 'hasBlockProposalsForSlot' | 'isEmpty'>;
|
|
26
|
+
export type AttestationPoolApi = Pick<AttestationPool, 'tryAddBlockProposal' | 'getBlockProposalByArchive' | 'getProposalsForSlot' | 'tryAddCheckpointProposal' | 'getCheckpointProposal' | 'hasCheckpointProposalForSlot' | 'addOwnCheckpointAttestations' | 'tryAddCheckpointAttestation' | 'deleteOlderThan' | 'getCheckpointAttestationsForSlot' | 'getCheckpointAttestationsForSlotAndProposal' | 'hasBlockProposalsForSlot' | 'isEmpty'>;
|
|
27
27
|
/**
|
|
28
28
|
* Pool for storing attestations and proposals collected by a validator.
|
|
29
29
|
*
|
|
@@ -139,6 +139,8 @@ export declare class AttestationPool {
|
|
|
139
139
|
* @return The checkpoint proposal core if one is stored, otherwise undefined.
|
|
140
140
|
*/
|
|
141
141
|
getCheckpointProposal(slot: SlotNumber): Promise<CheckpointProposalCore | undefined>;
|
|
142
|
+
/** Returns whether any checkpoint proposal is retained for the given slot. */
|
|
143
|
+
hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean>;
|
|
142
144
|
/**
|
|
143
145
|
* Adds own checkpoint attestations to the pool.
|
|
144
146
|
* Skips per-signer cap and equivocation tracking; the caller is trusted.
|
|
@@ -189,4 +191,4 @@ export declare class AttestationPool {
|
|
|
189
191
|
}
|
|
190
192
|
/** Creates an AttestationPool backed by a temporary store for testing. */
|
|
191
193
|
export declare function createTestAttestationPool(telemetry?: TelemetryClient): Promise<AttestationPool>;
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fcG9vbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy9hdHRlc3RhdGlvbl9wb29sL2F0dGVzdGF0aW9uX3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQXFCLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzdHLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFxQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVGLE9BQU8sRUFDTCxhQUFhLEVBQ2IscUJBQXFCLEVBRXJCLEtBQUssc0JBQXNCLEVBQzVCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzQixNQUFNLHlCQUF5QixDQUFDO0FBSW5GLDRFQUE0RTtBQUM1RSxNQUFNLE1BQU0sWUFBWSxHQUFHO0lBQ3pCLCtHQUErRztJQUMvRyxLQUFLLEVBQUUsT0FBTyxDQUFDO0lBQ2YsOEZBQThGO0lBQzlGLGFBQWEsRUFBRSxPQUFPLENBQUM7SUFDdkI7Ozs4RkFHMEY7SUFDMUYsS0FBSyxFQUFFLE1BQU0sQ0FBQztDQUNmLENBQUM7QUFFRixNQUFNLE1BQU0sZ0JBQWdCLEdBQUc7SUFDN0IsY0FBYyxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLENBQUM7Q0FDL0MsQ0FBQztBQUVGLGVBQU8sTUFBTSxpQ0FBaUMsSUFBSSxDQUFDO0FBQ25ELGVBQU8sTUFBTSxnQ0FBZ0MsSUFBSSxDQUFDO0FBQ2xELG9GQUFvRjtBQUNwRixlQUFPLE1BQU0sb0NBQW9DLElBQUksQ0FBQztBQUV0RCxrR0FBa0c7QUFDbEcsTUFBTSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FDbkMsZUFBZSxFQUNiLHFCQUFxQixHQUNyQiwyQkFBMkIsR0FDM0IscUJBQXFCLEdBQ3JCLDBCQUEwQixHQUMxQix1QkFBdUIsR0FDdkIs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,sBAAsB,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7G,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,aAAa,EACb,qBAAqB,EAErB,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAInF,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GAAG;IACzB,+GAA+G;IAC/G,KAAK,EAAE,OAAO,CAAC;IACf,8FAA8F;IAC9F,aAAa,EAAE,OAAO,CAAC;IACvB;;;8FAG0F;IAC1F,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,mBAAmB,EAAE,sBAAsB,EAAE,CAAC;CAC/C,CAAC;AAEF,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,oFAAoF;AACpF,eAAO,MAAM,oCAAoC,IAAI,CAAC;AAEtD,kGAAkG;AAClG,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,eAAe,EACb,qBAAqB,GACrB,2BAA2B,GAC3B,qBAAqB,GACrB,0BAA0B,GAC1B,uBAAuB,GACvB,8BAA8B,GAC9B,8BAA8B,GAC9B,6BAA6B,GAC7B,iBAAiB,GACjB,kCAAkC,GAClC,6CAA6C,GAC7C,0BAA0B,GAC1B,SAAS,CACZ,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAkCxB,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,GAAG;IAnCb,OAAO,CAAC,OAAO,CAA6C;IAM5D,OAAO,CAAC,2BAA2B,CAAgC;IAInE,OAAO,CAAC,iCAAiC,CAAqD;IAI9F,OAAO,CAAC,iCAAiC,CAAgC;IAKzE,OAAO,CAAC,+BAA+B,CAAqD;IAI5F,OAAO,CAAC,iCAAiC,CAAgC;IAIzE,OAAO,CAAC,kCAAkC,CAAgD;IAG1F,OAAO,CAAC,2BAA2B,CAAqC;IAExE,YACU,KAAK,EAAE,iBAAiB,EAChC,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAyC,EAgBrD;IAED,OAAO,CAAC,SAAS,CAIf;IAEF,yCAAyC;IAC5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAQvC;IAED,0EAA0E;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAM;IACxC,6DAA6D;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAyC;IAC1E;wEACkE;IAClE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAM;IAE7C,wEAAwE;IACxE,OAAO,CAAC,aAAa;IAIrB,yEAAyE;IACzE,OAAO,CAAC,cAAc;IAItB,wCAAwC;IACxC,OAAO,CAAC,mBAAmB;IAQ3B,+DAA+D;IAC/D,OAAO,CAAC,+BAA+B;IAIvC,6CAA6C;IAC7C,OAAO,CAAC,wBAAwB;IAIhC,oEAAoE;IACpE,OAAO,CAAC,oCAAoC;IAI5C,oFAAoF;IACpF,OAAO,CAAC,gBAAgB;IAIxB;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IAIrC;;6EAEyE;IACzE,OAAO,CAAC,mBAAmB;YAUb,gBAAgB;IAS9B;;;;;;;;;;OAUG;IACU,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAuCpF;IAED;;;;;;;;;OASG;IACU,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAgB9F;IAED,oDAAoD;IACvC,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyB5E;IAED,yEAAyE;IAC5D,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAIxE;IAED;;;;;;;;;;;;;;;OAeG;IACU,wBAAwB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8B7F;IAED;;;;;;;;;;OAUG;IACU,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAchG;IAED,8EAA8E;IACjE,4BAA4B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAE5E;IAED;;;;OAIG;IACU,4BAA4B,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC9F;IAED;;;;;;;;;OASG;IACU,gCAAgC,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAShG;IAED;;;;;;;OAOG;IACU,2CAA2C,CACtD,IAAI,EAAE,UAAU,EAChB,mBAAmB,EAAE,sBAAsB,GAC1C,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAGlC;IAED;;;;OAIG;IACU,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DlE;IAED;;;;;;;;;;;;;OAaG;IACU,2BAA2B,CAAC,WAAW,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAgElG;CACF;AAED,0EAA0E;AAC1E,wBAAsB,yBAAyB,CAAC,SAAS,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAIrG"}
|
|
@@ -301,6 +301,9 @@ export const MAX_BLOCK_PROPOSALS_PER_POSITION = 2;
|
|
|
301
301
|
}
|
|
302
302
|
return undefined;
|
|
303
303
|
}
|
|
304
|
+
/** Returns whether any checkpoint proposal is retained for the given slot. */ async hasCheckpointProposalForSlot(slot) {
|
|
305
|
+
return await this.getCheckpointProposal(slot) !== undefined;
|
|
306
|
+
}
|
|
304
307
|
/**
|
|
305
308
|
* Adds own checkpoint attestations to the pool.
|
|
306
309
|
* Skips per-signer cap and equivocation tracking; the caller is trusted.
|
|
@@ -322,7 +325,8 @@ export const MAX_BLOCK_PROPOSALS_PER_POSITION = 2;
|
|
|
322
325
|
const address = sender.toString();
|
|
323
326
|
const ownKey = this.getSlotSignerKey(slotNumber, address);
|
|
324
327
|
const payloadHash = attestation.getPayloadHash();
|
|
325
|
-
|
|
328
|
+
// Store the signature in canonical (v ∈ {27, 28}) form; see tryAddCheckpointAttestation.
|
|
329
|
+
await this.attestationPerSlotAndSigner.set(ownKey, attestation.withNormalizedSignature().toBuffer());
|
|
326
330
|
this.metrics.trackMempoolItemAdded(ownKey);
|
|
327
331
|
// Track our own payload hash so that an equivocating attestation from another
|
|
328
332
|
// peer at the same (slot, signer) is detected as a duplicate.
|
|
@@ -488,7 +492,10 @@ export const MAX_BLOCK_PROPOSALS_PER_POSITION = 2;
|
|
|
488
492
|
// equivocations are detected via the multimap but their bytes are not retained.
|
|
489
493
|
const alreadyHasStored = await this.attestationPerSlotAndSigner.hasAsync(slotSignerKey);
|
|
490
494
|
if (!alreadyHasStored) {
|
|
491
|
-
|
|
495
|
+
// Store the signature in canonical (v ∈ {27, 28}) form. `sender` recovered above, so the
|
|
496
|
+
// signature is non-empty and safe to normalize; this keeps a yParity-encoded (v = 0/1) variant
|
|
497
|
+
// from a malicious peer or an in-flight byte mutation out of the L1 bundle downstream.
|
|
498
|
+
await this.attestationPerSlotAndSigner.set(slotSignerKey, attestation.withNormalizedSignature().toBuffer());
|
|
492
499
|
this.metrics.trackMempoolItemAdded(slotSignerKey);
|
|
493
500
|
}
|
|
494
501
|
this.log.debug(`Added checkpoint attestation for slot ${slotNumber} from ${signerAddress}`, {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type AttestationPool } from './attestation_pool.js';
|
|
2
2
|
export declare function describeAttestationPool(getAttestationPool: () => AttestationPool): void;
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fcG9vbF90ZXN0X3N1aXRlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWVtX3Bvb2xzL2F0dGVzdGF0aW9uX3Bvb2wvYXR0ZXN0YXRpb25fcG9vbF90ZXN0X3N1aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBLE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFHckIsTUFBTSx1QkFBdUIsQ0FBQztBQUsvQix3QkFBZ0IsdUJBQXVCLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLFFBdzJCaEYifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attestation_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool_test_suite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attestation_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool_test_suite.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,uBAAuB,CAAC;AAK/B,wBAAgB,uBAAuB,CAAC,kBAAkB,EAAE,MAAM,eAAe,QAw2BhF"}
|