@aztec/p2p 0.0.1-commit.181e2d196 → 0.0.1-commit.1a421b1a1

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 (120) hide show
  1. package/dest/client/factory.d.ts +2 -2
  2. package/dest/client/factory.d.ts.map +1 -1
  3. package/dest/client/factory.js +8 -2
  4. package/dest/client/p2p_client.d.ts +1 -1
  5. package/dest/client/p2p_client.d.ts.map +1 -1
  6. package/dest/client/p2p_client.js +8 -26
  7. package/dest/config.d.ts +18 -2
  8. package/dest/config.d.ts.map +1 -1
  9. package/dest/config.js +56 -7
  10. package/dest/mem_pools/tx_pool/priority.d.ts +2 -2
  11. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  12. package/dest/mem_pools/tx_pool/priority.js +4 -3
  13. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  14. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  15. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -1
  16. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  17. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  18. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  19. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  20. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  21. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  22. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  23. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  24. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +3 -1
  25. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  26. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  27. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +17 -9
  28. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  29. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +26 -9
  30. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  31. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  32. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -43
  33. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  34. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  35. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +10 -2
  36. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +5 -4
  37. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  38. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  39. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +5 -4
  40. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  41. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  42. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +12 -9
  43. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  44. package/dest/msg_validators/proposal_validator/proposal_validator.js +46 -44
  45. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  46. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  47. package/dest/msg_validators/tx_validator/allowed_public_setup.js +21 -32
  48. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  49. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  50. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  51. package/dest/msg_validators/tx_validator/factory.d.ts +15 -4
  52. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  53. package/dest/msg_validators/tx_validator/factory.js +13 -6
  54. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  55. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  56. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  57. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  58. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  59. package/dest/msg_validators/tx_validator/gas_validator.js +39 -9
  60. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  61. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  62. package/dest/msg_validators/tx_validator/index.js +1 -0
  63. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  64. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  66. package/dest/msg_validators/tx_validator/phases_validator.d.ts +1 -1
  67. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/tx_validator/phases_validator.js +21 -1
  69. package/dest/services/libp2p/libp2p_service.d.ts +1 -1
  70. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  71. package/dest/services/libp2p/libp2p_service.js +41 -16
  72. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  73. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  74. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  75. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  76. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  77. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  78. package/dest/test-helpers/testbench-utils.js +2 -1
  79. package/dest/testbench/p2p_client_testbench_worker.js +2 -1
  80. package/dest/testbench/worker_client_manager.d.ts +3 -1
  81. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  82. package/dest/testbench/worker_client_manager.js +6 -2
  83. package/dest/util.d.ts +1 -1
  84. package/package.json +14 -14
  85. package/src/client/factory.ts +8 -1
  86. package/src/client/p2p_client.ts +5 -26
  87. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +1 -1
  88. package/src/config.ts +75 -4
  89. package/src/mem_pools/tx_pool/priority.ts +6 -3
  90. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +3 -1
  91. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  92. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  93. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  94. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  95. package/src/mem_pools/tx_pool_v2/interfaces.ts +3 -0
  96. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +41 -11
  97. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  98. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +11 -2
  99. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +13 -3
  100. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +19 -6
  101. package/src/msg_validators/proposal_validator/proposal_validator.ts +57 -48
  102. package/src/msg_validators/tx_validator/allowed_public_setup.ts +16 -35
  103. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  104. package/src/msg_validators/tx_validator/factory.ts +15 -2
  105. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  106. package/src/msg_validators/tx_validator/gas_validator.ts +41 -8
  107. package/src/msg_validators/tx_validator/index.ts +1 -0
  108. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  109. package/src/msg_validators/tx_validator/phases_validator.ts +29 -0
  110. package/src/services/libp2p/libp2p_service.ts +39 -15
  111. package/src/test-helpers/make-test-p2p-clients.ts +1 -1
  112. package/src/test-helpers/reqresp-nodes.ts +1 -1
  113. package/src/test-helpers/testbench-utils.ts +1 -0
  114. package/src/testbench/p2p_client_testbench_worker.ts +2 -1
  115. package/src/testbench/worker_client_manager.ts +13 -5
  116. package/src/util.ts +1 -1
  117. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
  118. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  119. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -378
  120. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
@@ -28,16 +28,24 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
28
28
  validateTx(tx: T): Promise<TxValidationResult> {
29
29
  const errors = [];
30
30
  if (!this.#hasCorrectL1ChainId(tx)) {
31
- errors.push(TX_ERROR_INCORRECT_L1_CHAIN_ID);
31
+ errors.push(
32
+ `${TX_ERROR_INCORRECT_L1_CHAIN_ID} (tx: ${tx.data.constants.txContext.chainId.toNumber()}, expected: ${this.values.l1ChainId.toNumber()})`,
33
+ );
32
34
  }
33
35
  if (!this.#hasCorrectRollupVersion(tx)) {
34
- errors.push(TX_ERROR_INCORRECT_ROLLUP_VERSION);
36
+ errors.push(
37
+ `${TX_ERROR_INCORRECT_ROLLUP_VERSION} (tx: ${tx.data.constants.txContext.version.toNumber()}, expected: ${this.values.rollupVersion.toNumber()})`,
38
+ );
35
39
  }
36
40
  if (!this.#hasCorrectVkTreeRoot(tx)) {
37
- errors.push(TX_ERROR_INCORRECT_VK_TREE_ROOT);
41
+ errors.push(
42
+ `${TX_ERROR_INCORRECT_VK_TREE_ROOT} (tx: ${tx.data.constants.vkTreeRoot.toString()}, expected: ${this.values.vkTreeRoot.toString()})`,
43
+ );
38
44
  }
39
45
  if (!this.#hasCorrectprotocolContractsHash(tx)) {
40
- errors.push(TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH);
46
+ errors.push(
47
+ `${TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH} (tx: ${tx.data.constants.protocolContractsHash.toString()}, expected: ${this.values.protocolContractsHash.toString()})`,
48
+ );
41
49
  }
42
50
  return Promise.resolve(errors.length > 0 ? { result: 'invalid', reason: errors } : { result: 'valid' });
43
51
  }
@@ -1,5 +1,7 @@
1
+ import { NULL_MSG_SENDER_CONTRACT_ADDRESS } from '@aztec/constants';
1
2
  import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
3
  import { PublicContractsDB, getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
4
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
3
5
  import type { ContractDataSource } from '@aztec/stdlib/contract';
4
6
  import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
5
7
  import {
@@ -7,6 +9,9 @@ import {
7
9
  TX_ERROR_DURING_VALIDATION,
8
10
  TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED,
9
11
  TX_ERROR_SETUP_FUNCTION_UNKNOWN_CONTRACT,
12
+ TX_ERROR_SETUP_NULL_MSG_SENDER,
13
+ TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER,
14
+ TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH,
10
15
  Tx,
11
16
  TxExecutionPhase,
12
17
  type TxValidationResult,
@@ -84,6 +89,18 @@ export class PhasesTxValidator implements TxValidator<Tx> {
84
89
  for (const entry of allowList) {
85
90
  if ('address' in entry) {
86
91
  if (contractAddress.equals(entry.address) && entry.selector.equals(functionSelector)) {
92
+ if (entry.calldataLength !== undefined && publicCall.calldata.length !== entry.calldataLength) {
93
+ return TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH;
94
+ }
95
+ if (entry.onlySelf && !publicCall.request.msgSender.equals(contractAddress)) {
96
+ return TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER;
97
+ }
98
+ if (
99
+ entry.rejectNullMsgSender &&
100
+ publicCall.request.msgSender.equals(AztecAddress.fromBigInt(NULL_MSG_SENDER_CONTRACT_ADDRESS))
101
+ ) {
102
+ return TX_ERROR_SETUP_NULL_MSG_SENDER;
103
+ }
87
104
  return undefined;
88
105
  }
89
106
  }
@@ -105,6 +122,18 @@ export class PhasesTxValidator implements TxValidator<Tx> {
105
122
  }
106
123
 
107
124
  if (contractClassId.value === entry.classId.toString() && entry.selector.equals(functionSelector)) {
125
+ if (entry.calldataLength !== undefined && publicCall.calldata.length !== entry.calldataLength) {
126
+ return TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH;
127
+ }
128
+ if (entry.onlySelf && !publicCall.request.msgSender.equals(contractAddress)) {
129
+ return TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER;
130
+ }
131
+ if (
132
+ entry.rejectNullMsgSender &&
133
+ publicCall.request.msgSender.equals(AztecAddress.fromBigInt(NULL_MSG_SENDER_CONTRACT_ADDRESS))
134
+ ) {
135
+ return TX_ERROR_SETUP_NULL_MSG_SENDER;
136
+ }
108
137
  return undefined;
109
138
  }
110
139
  }
@@ -1,5 +1,6 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
2
  import { BlockNumber, type SlotNumber } from '@aztec/foundation/branded-types';
3
+ import { maxBy } from '@aztec/foundation/collection';
3
4
  import { Fr } from '@aztec/foundation/curves/bn254';
4
5
  import { type Logger, createLibp2pComponentLogger, createLogger } from '@aztec/foundation/log';
5
6
  import { RunningPromise } from '@aztec/foundation/running-promise';
@@ -19,6 +20,7 @@ import {
19
20
  P2PMessage,
20
21
  type ValidationResult as P2PValidationResult,
21
22
  PeerErrorSeverity,
23
+ PeerErrorSeverityByHarshness,
22
24
  TopicType,
23
25
  createTopicString,
24
26
  getTopicsForConfig,
@@ -222,14 +224,12 @@ export class LibP2PService extends WithTracer implements P2PService {
222
224
  this.protocolVersion,
223
225
  );
224
226
 
225
- this.blockProposalValidator = new BlockProposalValidator(epochCache, {
227
+ const proposalValidatorOpts = {
226
228
  txsPermitted: !config.disableTransactions,
227
- maxTxsPerBlock: config.maxTxsPerBlock,
228
- });
229
- this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, {
230
- txsPermitted: !config.disableTransactions,
231
- maxTxsPerBlock: config.maxTxsPerBlock,
232
- });
229
+ maxTxsPerBlock: config.validateMaxTxsPerBlock,
230
+ };
231
+ this.blockProposalValidator = new BlockProposalValidator(epochCache, proposalValidatorOpts);
232
+ this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, proposalValidatorOpts);
233
233
  this.checkpointAttestationValidator = config.fishermanMode
234
234
  ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry)
235
235
  : new CheckpointAttestationValidator(epochCache);
@@ -237,11 +237,11 @@ export class LibP2PService extends WithTracer implements P2PService {
237
237
  this.gossipSubEventHandler = this.handleGossipSubEvent.bind(this);
238
238
 
239
239
  this.blockReceivedCallback = async (block: BlockProposal): Promise<boolean> => {
240
- this.logger.debug(
241
- `Handler not yet registered: Block received callback not set. Received block for slot ${block.slotNumber} from peer.`,
240
+ this.logger.warn(
241
+ `Handler for block received not yet registered on P2P service. Received block ${block.blockNumber} for slot ${block.slotNumber} from peer.`,
242
242
  { p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier() },
243
243
  );
244
- return false;
244
+ return true;
245
245
  };
246
246
 
247
247
  this.checkpointReceivedCallback = (
@@ -754,6 +754,9 @@ export class LibP2PService extends WithTracer implements P2PService {
754
754
  if (!validator || !validator.addMessage(msgId)) {
755
755
  this.instrumentation.incMessagePrevalidationStatus(false, topicType);
756
756
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Ignore);
757
+ if (topicType === TopicType.tx) {
758
+ this.logger.verbose(`Ignoring already-seen tx gossip message`, { msgId, source: source.toString() });
759
+ }
757
760
  return { result: false, topicType };
758
761
  }
759
762
 
@@ -923,6 +926,11 @@ export class LibP2PService extends WithTracer implements P2PService {
923
926
  severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
924
927
  }
925
928
 
929
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 1 validation failed`, {
930
+ validator: name,
931
+ severity,
932
+ source: source.toString(),
933
+ });
926
934
  this.peerManager.penalizePeer(source, severity);
927
935
  return { result: TopicValidatorResult.Reject };
928
936
  }
@@ -930,6 +938,9 @@ export class LibP2PService extends WithTracer implements P2PService {
930
938
  // Pool pre-check: see if the pool would accept this tx before doing expensive proof verification
931
939
  const canAdd = await this.mempools.txPool.canAddPendingTx(tx);
932
940
  if (canAdd === 'ignored') {
941
+ this.logger.verbose(`Ignoring gossiped tx ${tx.getTxHash().toString()}: pool pre-check returned ignored`, {
942
+ source: source.toString(),
943
+ });
933
944
  return { result: TopicValidatorResult.Ignore, obj: tx };
934
945
  }
935
946
 
@@ -937,7 +948,12 @@ export class LibP2PService extends WithTracer implements P2PService {
937
948
  const secondStageValidators = this.createSecondStageMessageValidators();
938
949
  const secondStageOutcome = await this.runValidations(tx, secondStageValidators);
939
950
  if (!secondStageOutcome.allPassed) {
940
- const { severity } = secondStageOutcome.failure;
951
+ const { severity, name } = secondStageOutcome.failure;
952
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 2 validation failed`, {
953
+ validator: name,
954
+ severity,
955
+ source: source.toString(),
956
+ });
941
957
  this.peerManager.penalizePeer(source, severity);
942
958
  return { result: TopicValidatorResult.Reject };
943
959
  }
@@ -949,7 +965,7 @@ export class LibP2PService extends WithTracer implements P2PService {
949
965
  const wasAccepted = addResult.accepted.some(h => h.equals(txHash));
950
966
  const wasIgnored = addResult.ignored.some(h => h.equals(txHash));
951
967
 
952
- this.logger.trace(`Validate propagated tx`, {
968
+ this.logger.verbose(`Validate propagated tx ${txHash.toString()}`, {
953
969
  wasAccepted,
954
970
  wasIgnored,
955
971
  [Attributes.P2P_ID]: source.toString(),
@@ -1192,7 +1208,7 @@ export class LibP2PService extends WithTracer implements P2PService {
1192
1208
  // Note: Validators do NOT attest to individual blocks, only to checkpoint proposals.
1193
1209
  const isValid = await this.blockReceivedCallback(block, sender);
1194
1210
  if (!isValid) {
1195
- this.logger.warn(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1211
+ this.logger.info(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1196
1212
  }
1197
1213
  }
1198
1214
 
@@ -1626,6 +1642,7 @@ export class LibP2PService extends WithTracer implements P2PService {
1626
1642
  ...(this.config.txPublicSetupAllowListExtend ?? []),
1627
1643
  ];
1628
1644
  const blockNumber = BlockNumber(currentBlockNumber + 1);
1645
+ const l1Constants = await this.archiver.getL1Constants();
1629
1646
 
1630
1647
  return createFirstStageTxValidationsForGossipedTransactions(
1631
1648
  nextSlotTimestamp,
@@ -1639,6 +1656,11 @@ export class LibP2PService extends WithTracer implements P2PService {
1639
1656
  !this.config.disableTransactions,
1640
1657
  allowedInSetup,
1641
1658
  this.logger.getBindings(),
1659
+ {
1660
+ rollupManaLimit: l1Constants.rollupManaLimit,
1661
+ maxBlockL2Gas: this.config.validateMaxL2BlockGas,
1662
+ maxBlockDAGas: this.config.validateMaxDABlockGas,
1663
+ },
1642
1664
  );
1643
1665
  }
1644
1666
 
@@ -1664,8 +1686,10 @@ export class LibP2PService extends WithTracer implements P2PService {
1664
1686
 
1665
1687
  // A promise that resolves when all validations have been run
1666
1688
  const allValidations = await Promise.all(validationPromises);
1667
- const failed = allValidations.find(x => !x.isValid);
1668
- if (failed) {
1689
+ const failures = allValidations.filter(x => !x.isValid);
1690
+ if (failures.length > 0) {
1691
+ // Pick the most severe failure (lowest tolerance = harshest penalty)
1692
+ const failed = maxBy(failures, f => PeerErrorSeverityByHarshness.indexOf(f.severity))!;
1669
1693
  return {
1670
1694
  allPassed: false,
1671
1695
  failure: {
@@ -4,9 +4,9 @@ import { SecretValue } from '@aztec/foundation/config';
4
4
  import { type Logger, createLogger } from '@aztec/foundation/log';
5
5
  import { retryUntil } from '@aztec/foundation/retry';
6
6
  import { sleep } from '@aztec/foundation/sleep';
7
- import type { DataStoreConfig } from '@aztec/kv-store/config';
8
7
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
9
8
  import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
9
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
10
10
 
11
11
  import { createP2PClient } from '../client/index.js';
12
12
  import type { P2PClient } from '../client/p2p_client.js';
@@ -2,7 +2,6 @@ import type { EpochCache } from '@aztec/epoch-cache';
2
2
  import { timesParallel } from '@aztec/foundation/collection';
3
3
  import { SecretValue } from '@aztec/foundation/config';
4
4
  import { createLogger } from '@aztec/foundation/log';
5
- import type { DataStoreConfig } from '@aztec/kv-store/config';
6
5
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
7
6
  import type { L2BlockSource } from '@aztec/stdlib/block';
8
7
  import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
@@ -12,6 +11,7 @@ import type {
12
11
  IVCProofVerificationResult,
13
12
  WorldStateSynchronizer,
14
13
  } from '@aztec/stdlib/interfaces/server';
14
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
15
15
  import type { Tx } from '@aztec/stdlib/tx';
16
16
  import { compressComponentVersions } from '@aztec/stdlib/versioning';
17
17
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
@@ -292,6 +292,7 @@ export function createMockEpochCache(): EpochCacheInterface {
292
292
  ethereumSlotDuration: 1,
293
293
  proofSubmissionEpochs: 1,
294
294
  targetCommitteeSize: 48,
295
+ rollupManaLimit: Number.MAX_SAFE_INTEGER,
295
296
  }),
296
297
  };
297
298
  }
@@ -12,13 +12,13 @@ import { Fr } from '@aztec/foundation/curves/bn254';
12
12
  import { type Logger, createLogger } from '@aztec/foundation/log';
13
13
  import { sleep } from '@aztec/foundation/sleep';
14
14
  import { DateProvider, Timer } from '@aztec/foundation/timer';
15
- import type { DataStoreConfig } from '@aztec/kv-store/config';
16
15
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
17
16
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
18
17
  import { protocolContractsHash } from '@aztec/protocol-contracts';
19
18
  import type { L2BlockSource } from '@aztec/stdlib/block';
20
19
  import type { ContractDataSource } from '@aztec/stdlib/contract';
21
20
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
21
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
22
22
  import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
23
23
  import { ChonkProof } from '@aztec/stdlib/proofs';
24
24
  import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
@@ -340,6 +340,7 @@ process.on('message', async msg => {
340
340
  const config: P2PConfig = {
341
341
  ...rawConfig,
342
342
  peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
343
+ priceBumpPercentage: 10n,
343
344
  } as P2PConfig;
344
345
 
345
346
  workerConfig = config;
@@ -81,13 +81,15 @@ class WorkerClientManager {
81
81
  * Note: We send the raw peerIdPrivateKey string instead of SecretValue
82
82
  * because SecretValue.toJSON() returns '[Redacted]', losing the value.
83
83
  * The worker must re-wrap it in SecretValue.
84
+ * We also omit priceBumpPercentage since it's a bigint and can't be
85
+ * serialized over IPC (which uses JSON under the hood).
84
86
  */
85
87
  private createClientConfig(
86
88
  clientIndex: number,
87
89
  port: number,
88
90
  otherNodes: string[],
89
- ): Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
90
- return {
91
+ ): Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
92
+ const { priceBumpPercentage: _, ...config } = {
91
93
  ...getP2PDefaultConfig(),
92
94
  p2pEnabled: true,
93
95
  peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
@@ -96,7 +98,10 @@ class WorkerClientManager {
96
98
  p2pPort: port,
97
99
  bootstrapNodes: [...otherNodes],
98
100
  ...this.p2pConfig,
99
- } as Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>;
101
+ };
102
+ return config as Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
103
+ peerIdPrivateKey: string;
104
+ } & Partial<ChainConfig>;
100
105
  }
101
106
 
102
107
  /**
@@ -104,7 +109,9 @@ class WorkerClientManager {
104
109
  * Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
105
110
  */
106
111
  private spawnWorkerProcess(
107
- config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>,
112
+ config: Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
113
+ peerIdPrivateKey: string;
114
+ } & Partial<ChainConfig>,
108
115
  clientIndex: number,
109
116
  ): [ChildProcess, Promise<void>] {
110
117
  const useCompiled = existsSync(workerJsPath);
@@ -483,7 +490,8 @@ class WorkerClientManager {
483
490
  };
484
491
 
485
492
  this.processes[0].send(aggregatorCmd);
486
- const result = await this.waitForBenchResult(0, config.timeoutMs + 30000);
493
+ const aggregatorBudgetMs = config.timeoutMs + BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS + 30000;
494
+ const result = await this.waitForBenchResult(0, aggregatorBudgetMs);
487
495
 
488
496
  this.logger.info(
489
497
  `Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`,
package/src/util.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { SecretValue } from '@aztec/foundation/config';
2
2
  import type { Logger } from '@aztec/foundation/log';
3
3
  import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
4
- import type { DataStoreConfig } from '@aztec/kv-store/config';
4
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
5
5
 
6
6
  import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
7
7
  import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
@@ -1,24 +0,0 @@
1
- import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
3
- import type { EthAddress } from '@aztec/foundation/eth-address';
4
- import { type BlockProposal, type CheckpointProposal, type ValidationResult } from '@aztec/stdlib/p2p';
5
- import type { TxHash } from '@aztec/stdlib/tx';
6
- import type { MockProxy } from 'jest-mock-extended';
7
- export interface ProposalValidatorTestParams<TProposal extends BlockProposal | CheckpointProposal> {
8
- validatorFactory: (epochCache: EpochCacheInterface, opts: {
9
- txsPermitted: boolean;
10
- maxTxsPerBlock?: number;
11
- }) => {
12
- validate: (proposal: TProposal) => Promise<ValidationResult>;
13
- };
14
- makeProposal: (options?: any) => Promise<TProposal>;
15
- makeHeader: (epochNumber: number | bigint, slotNumber: number | bigint, blockNumber: number | bigint) => any;
16
- getSigner: () => Secp256k1Signer;
17
- getAddress: (signer?: Secp256k1Signer) => EthAddress;
18
- getSlot: (slot: number | bigint) => any;
19
- getTxHashes: (n: number) => TxHash[];
20
- getTxs: () => any[];
21
- epochCacheMock: () => MockProxy<EpochCacheInterface>;
22
- }
23
- export declare function sharedProposalValidatorTests<TProposal extends BlockProposal | CheckpointProposal>(params: ProposalValidatorTestParams<TProposal>): void;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yX3Rlc3Rfc3VpdGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvcHJvcG9zYWxfdmFsaWRhdG9yX3Rlc3Rfc3VpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxhQUFhLEVBQ2xCLEtBQUssa0JBQWtCLEVBRXZCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHL0MsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsTUFBTSxXQUFXLDJCQUEyQixDQUFDLFNBQVMsU0FBUyxhQUFhLEdBQUcsa0JBQWtCO0lBQy9GLGdCQUFnQixFQUFFLENBQ2hCLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEtBQ3JEO1FBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsS0FBSyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtLQUFFLENBQUM7SUFDdEUsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxVQUFVLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxHQUFHLE1BQU0sS0FBSyxHQUFHLENBQUM7SUFDN0csU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0lBQ2pDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLGVBQWUsS0FBSyxVQUFVLENBQUM7SUFDckQsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxNQUFNLEtBQUssR0FBRyxDQUFDO0lBQ3hDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDckMsTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDcEIsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Q0FDdEQ7QUFFRCx3QkFBZ0IsNEJBQTRCLENBQUMsU0FBUyxTQUFTLGFBQWEsR0FBRyxrQkFBa0IsRUFDL0YsTUFBTSxFQUFFLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxRQXFWL0MifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposal_validator_test_suite.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator_test_suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAEvB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,2BAA2B,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB;IAC/F,gBAAgB,EAAE,CAChB,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,KACrD;QAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;KAAE,CAAC;IACtE,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC;IAC7G,SAAS,EAAE,MAAM,eAAe,CAAC;IACjC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,UAAU,CAAC;IACrD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACrC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAC;CACtD;AAED,wBAAgB,4BAA4B,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB,EAC/F,MAAM,EAAE,2BAA2B,CAAC,SAAS,CAAC,QAqV/C"}