@aztec/p2p 3.0.0-nightly.20251128 → 3.0.0-nightly.20251202

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.
Files changed (37) hide show
  1. package/dest/client/p2p_client.d.ts +3 -2
  2. package/dest/client/p2p_client.d.ts.map +1 -1
  3. package/dest/client/p2p_client.js +5 -4
  4. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +7 -6
  5. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  6. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  7. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  8. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +33 -32
  9. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +9 -8
  10. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  11. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +19 -20
  12. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +9 -8
  13. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  14. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +12 -10
  15. package/dest/mem_pools/attestation_pool/mocks.js +1 -1
  16. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  17. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  18. package/dest/msg_validators/attestation_validator/attestation_validator.js +11 -11
  19. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +1 -1
  20. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +8 -8
  21. package/dest/services/libp2p/libp2p_service.d.ts +1 -1
  22. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  23. package/dest/services/libp2p/libp2p_service.js +14 -13
  24. package/dest/testbench/p2p_client_testbench_worker.js +5 -5
  25. package/package.json +14 -14
  26. package/src/client/p2p_client.ts +6 -5
  27. package/src/mem_pools/attestation_pool/attestation_pool.ts +6 -5
  28. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +45 -32
  29. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +28 -29
  30. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +26 -22
  31. package/src/mem_pools/attestation_pool/mocks.ts +1 -1
  32. package/src/msg_validators/attestation_validator/attestation_validator.ts +11 -13
  33. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +1 -1
  34. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +8 -8
  35. package/src/services/libp2p/libp2p_service.ts +14 -13
  36. package/src/services/tx_collection/slow_tx_collection.ts +2 -2
  37. package/src/testbench/p2p_client_testbench_worker.ts +5 -5
@@ -51,15 +51,15 @@ export class BlockProposalValidator implements P2PValidator<BlockProposal> {
51
51
  await this.epochCache.getProposerAttesterAddressInCurrentOrNextSlot();
52
52
 
53
53
  // Check that the attestation is for the current or next slot
54
- const slotNumberBigInt = block.payload.header.slotNumber.toBigInt();
55
- if (slotNumberBigInt !== currentSlot && slotNumberBigInt !== nextSlot) {
56
- this.logger.debug(`Penalizing peer for invalid slot number ${slotNumberBigInt}`, { currentSlot, nextSlot });
54
+ const slotNumber = block.payload.header.slotNumber;
55
+ if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
56
+ this.logger.debug(`Penalizing peer for invalid slot number ${slotNumber}`, { currentSlot, nextSlot });
57
57
  return PeerErrorSeverity.HighToleranceError;
58
58
  }
59
59
 
60
60
  // Check that the block proposal is from the current or next proposer
61
- if (slotNumberBigInt === currentSlot && currentProposer !== undefined && !proposer.equals(currentProposer)) {
62
- this.logger.debug(`Penalizing peer for invalid proposer for current slot ${slotNumberBigInt}`, {
61
+ if (slotNumber === currentSlot && currentProposer !== undefined && !proposer.equals(currentProposer)) {
62
+ this.logger.debug(`Penalizing peer for invalid proposer for current slot ${slotNumber}`, {
63
63
  currentProposer,
64
64
  nextProposer,
65
65
  proposer: proposer.toString(),
@@ -67,8 +67,8 @@ export class BlockProposalValidator implements P2PValidator<BlockProposal> {
67
67
  return PeerErrorSeverity.MidToleranceError;
68
68
  }
69
69
 
70
- if (slotNumberBigInt === nextSlot && nextProposer !== undefined && !proposer.equals(nextProposer)) {
71
- this.logger.debug(`Penalizing peer for invalid proposer for next slot ${slotNumberBigInt}`, {
70
+ if (slotNumber === nextSlot && nextProposer !== undefined && !proposer.equals(nextProposer)) {
71
+ this.logger.debug(`Penalizing peer for invalid proposer for next slot ${slotNumber}`, {
72
72
  currentProposer,
73
73
  nextProposer,
74
74
  proposer: proposer.toString(),
@@ -80,7 +80,7 @@ export class BlockProposalValidator implements P2PValidator<BlockProposal> {
80
80
  if (!(await Promise.all(block.txs?.map(tx => tx.validateTxHash()) ?? [])).every(v => v)) {
81
81
  this.logger.warn(`Penalizing peer for invalid tx hashes in block proposal`, {
82
82
  proposer,
83
- slotNumber: slotNumberBigInt,
83
+ slotNumber,
84
84
  });
85
85
  return PeerErrorSeverity.LowToleranceError;
86
86
  }
@@ -1,4 +1,5 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
3
  import { randomInt } from '@aztec/foundation/crypto';
3
4
  import { Fr } from '@aztec/foundation/fields';
4
5
  import { type Logger, createLibp2pComponentLogger, createLogger } from '@aztec/foundation/log';
@@ -192,7 +193,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
192
193
 
193
194
  this.blockReceivedCallback = async (block: BlockProposal): Promise<BlockAttestation[] | undefined> => {
194
195
  this.logger.debug(
195
- `Handler not yet registered: Block received callback not set. Received block for slot ${block.slotNumber.toNumber()} from peer.`,
196
+ `Handler not yet registered: Block received callback not set. Received block for slot ${block.slotNumber} from peer.`,
196
197
  { p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier() },
197
198
  );
198
199
  return undefined;
@@ -814,7 +815,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
814
815
 
815
816
  let canAdd = true;
816
817
  if (isValid && !exists) {
817
- const slot = attestation.payload.header.slotNumber.toBigInt();
818
+ const slot = attestation.payload.header.slotNumber;
818
819
  const { committee } = await this.epochCache.getCommittee(slot);
819
820
  const committeeSize = committee?.length ?? 0;
820
821
  canAdd = await pool.canAddAttestation(attestation, committeeSize);
@@ -856,10 +857,10 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
856
857
  }
857
858
 
858
859
  this.logger.debug(
859
- `Received attestation for slot ${attestation.slotNumber.toNumber()} from external peer ${source.toString()}`,
860
+ `Received attestation for slot ${attestation.slotNumber} from external peer ${source.toString()}`,
860
861
  {
861
862
  p2pMessageIdentifier: await attestation.p2pMessageLoggingIdentifier(),
862
- slot: attestation.slotNumber.toNumber(),
863
+ slot: attestation.slotNumber,
863
864
  archive: attestation.archive.toString(),
864
865
  source: source.toString(),
865
866
  },
@@ -920,16 +921,16 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
920
921
 
921
922
  // REVIEW: callback pattern https://github.com/AztecProtocol/aztec-packages/issues/7963
922
923
  @trackSpan('Libp2pService.processValidBlockProposal', async block => ({
923
- [Attributes.SLOT_NUMBER]: block.slotNumber.toNumber(),
924
+ [Attributes.SLOT_NUMBER]: block.slotNumber,
924
925
  [Attributes.BLOCK_ARCHIVE]: block.archive.toString(),
925
926
  [Attributes.P2P_ID]: await block.p2pMessageLoggingIdentifier().then(i => i.toString()),
926
927
  }))
927
928
  private async processValidBlockProposal(block: BlockProposal, sender: PeerId) {
928
- const slot = block.slotNumber.toBigInt();
929
- const previousSlot = slot - 1n;
929
+ const slot = block.slotNumber;
930
+ const previousSlot = SlotNumber(slot - 1);
930
931
  this.logger.verbose(`Received block proposal for slot ${slot} from external peer ${sender.toString()}.`, {
931
932
  p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier(),
932
- slot: block.slotNumber.toNumber(),
933
+ slot: block.slotNumber,
933
934
  archive: block.archive.toString(),
934
935
  source: sender.toString(),
935
936
  });
@@ -945,7 +946,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
945
946
  // Drop proposals if we hit per-slot cap in the attestation pool; rethrow unknown errors
946
947
  if (err instanceof ProposalSlotCapExceededError) {
947
948
  this.logger.warn(`Dropping block proposal due to per-slot proposal cap`, {
948
- slot: slot.toString(),
949
+ slot: String(slot),
949
950
  archive: block.archive.toString(),
950
951
  error: (err as Error).message,
951
952
  });
@@ -960,9 +961,9 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
960
961
  // The attestation can be undefined if no handler is registered / the validator deems the block invalid / in fisherman mode
961
962
  if (attestations?.length) {
962
963
  for (const attestation of attestations) {
963
- this.logger.verbose(`Broadcasting attestation for slot ${attestation.slotNumber.toNumber()}`, {
964
+ this.logger.verbose(`Broadcasting attestation for slot ${attestation.slotNumber}`, {
964
965
  p2pMessageIdentifier: await attestation.p2pMessageLoggingIdentifier(),
965
- slot: attestation.slotNumber.toNumber(),
966
+ slot: attestation.slotNumber,
966
967
  archive: attestation.archive.toString(),
967
968
  });
968
969
  await this.broadcastAttestation(attestation);
@@ -975,7 +976,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
975
976
  * @param attestation - The attestation to broadcast.
976
977
  */
977
978
  @trackSpan('Libp2pService.broadcastAttestation', async attestation => ({
978
- [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber.toNumber(),
979
+ [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber,
979
980
  [Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
980
981
  [Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then(i => i.toString()),
981
982
  }))
@@ -1371,7 +1372,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1371
1372
  * @returns True if the attestation is valid, false otherwise.
1372
1373
  */
1373
1374
  @trackSpan('Libp2pService.validateAttestation', async (_, attestation) => ({
1374
- [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber.toNumber(),
1375
+ [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber,
1375
1376
  [Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
1376
1377
  [Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then(i => i.toString()),
1377
1378
  }))
@@ -1,4 +1,4 @@
1
- import { EpochNumber } from '@aztec/foundation/branded-types';
1
+ import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
2
  import { chunk } from '@aztec/foundation/collection';
3
3
  import { type Logger, createLogger } from '@aztec/foundation/log';
4
4
  import { boundInclusive } from '@aztec/foundation/number';
@@ -224,7 +224,7 @@ export class SlowTxCollection {
224
224
  }
225
225
 
226
226
  /** Computes the proof submission deadline for a given slot, a tx mined in this slot is no longer interesting after this deadline */
227
- private getDeadlineForSlot(slotNumber: bigint): Date {
227
+ private getDeadlineForSlot(slotNumber: SlotNumber): Date {
228
228
  const epoch = getEpochAtSlot(slotNumber, this.constants);
229
229
  const submissionEndEpoch = EpochNumber(epoch + this.constants.proofSubmissionEpochs);
230
230
  const submissionEndTimestamp = getTimestampRangeForEpoch(submissionEndEpoch, this.constants)[1];
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { MockL2BlockSource } from '@aztec/archiver/test';
7
7
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
8
- import { EpochNumber } from '@aztec/foundation/branded-types';
8
+ import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
9
9
  import { EthAddress } from '@aztec/foundation/eth-address';
10
10
  import { createLogger } from '@aztec/foundation/log';
11
11
  import { sleep } from '@aztec/foundation/sleep';
@@ -84,16 +84,16 @@ function mockEpochCache(): EpochCacheInterface {
84
84
  return {
85
85
  getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO }),
86
86
  getProposerIndexEncoding: () => '0x' as `0x${string}`,
87
- getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: 0n, ts: 0n }),
87
+ getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n }),
88
88
  computeProposerIndex: () => 0n,
89
89
  getProposerAttesterAddressInCurrentOrNextSlot: () =>
90
90
  Promise.resolve({
91
91
  currentProposer: EthAddress.ZERO,
92
92
  nextProposer: EthAddress.ZERO,
93
- currentSlot: 0n,
94
- nextSlot: 0n,
93
+ currentSlot: SlotNumber.ZERO,
94
+ nextSlot: SlotNumber.ZERO,
95
95
  }),
96
- getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: 0n, ts: 0n, now: 0n }),
96
+ getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
97
97
  isInCommittee: () => Promise.resolve(false),
98
98
  getRegisteredValidators: () => Promise.resolve([]),
99
99
  filterInCommittee: () => Promise.resolve([]),