@aztec/p2p 0.0.1-commit.fcb71a6 → 0.0.1-commit.fffb133c

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 (213) hide show
  1. package/dest/client/interface.d.ts +18 -5
  2. package/dest/client/interface.d.ts.map +1 -1
  3. package/dest/client/p2p_client.d.ts +10 -13
  4. package/dest/client/p2p_client.d.ts.map +1 -1
  5. package/dest/client/p2p_client.js +449 -118
  6. package/dest/config.js +2 -2
  7. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
  8. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  9. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  10. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  11. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +237 -263
  12. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
  13. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  14. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +113 -108
  15. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
  16. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  17. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
  18. package/dest/mem_pools/attestation_pool/mocks.d.ts +9 -6
  19. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  20. package/dest/mem_pools/attestation_pool/mocks.js +16 -12
  21. package/dest/mem_pools/instrumentation.d.ts +1 -1
  22. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  23. package/dest/mem_pools/instrumentation.js +4 -13
  24. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +15 -10
  25. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  26. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +91 -50
  27. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +19 -5
  28. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
  29. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +59 -3
  30. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +79 -5
  31. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
  32. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +47 -0
  33. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  34. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  35. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  36. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +2 -2
  37. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  38. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +4 -4
  39. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
  41. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +2 -2
  42. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  44. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  45. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  46. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
  47. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  48. package/dest/msg_validators/attestation_validator/attestation_validator.js +51 -18
  49. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  50. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  51. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -14
  52. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  53. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  54. package/dest/msg_validators/clock_tolerance.js +37 -0
  55. package/dest/msg_validators/index.d.ts +2 -2
  56. package/dest/msg_validators/index.d.ts.map +1 -1
  57. package/dest/msg_validators/index.js +1 -1
  58. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  59. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  60. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  61. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  62. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  63. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  64. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  65. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  66. package/dest/msg_validators/proposal_validator/index.js +3 -0
  67. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  68. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  69. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  70. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  71. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  72. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  73. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +1 -1
  74. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  75. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  76. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  77. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  79. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  80. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  81. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  82. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/tx_validator/gas_validator.js +8 -14
  84. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  85. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  86. package/dest/msg_validators/tx_validator/index.js +1 -0
  87. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  88. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/tx_validator/size_validator.d.ts +6 -0
  90. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  91. package/dest/msg_validators/tx_validator/size_validator.js +20 -0
  92. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +1 -1
  93. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  94. package/dest/services/dummy_service.d.ts +6 -2
  95. package/dest/services/dummy_service.d.ts.map +1 -1
  96. package/dest/services/dummy_service.js +3 -0
  97. package/dest/services/encoding.d.ts +1 -1
  98. package/dest/services/encoding.d.ts.map +1 -1
  99. package/dest/services/encoding.js +6 -5
  100. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  101. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  102. package/dest/services/libp2p/instrumentation.js +20 -73
  103. package/dest/services/libp2p/libp2p_service.d.ts +28 -11
  104. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  105. package/dest/services/libp2p/libp2p_service.js +711 -152
  106. package/dest/services/peer-manager/metrics.d.ts +1 -1
  107. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  108. package/dest/services/peer-manager/metrics.js +6 -26
  109. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  110. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  111. package/dest/services/peer-manager/peer_manager.js +0 -10
  112. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  113. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  114. package/dest/services/peer-manager/peer_scoring.js +2 -5
  115. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -1
  116. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  117. package/dest/services/reqresp/constants.d.ts +12 -0
  118. package/dest/services/reqresp/constants.d.ts.map +1 -0
  119. package/dest/services/reqresp/constants.js +7 -0
  120. package/dest/services/reqresp/metrics.d.ts +1 -1
  121. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  122. package/dest/services/reqresp/metrics.js +5 -21
  123. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
  124. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  125. package/dest/services/reqresp/protocols/block_txs/bitvector.js +7 -0
  126. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  127. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  128. package/dest/services/reqresp/protocols/status.js +4 -1
  129. package/dest/services/reqresp/reqresp.js +402 -24
  130. package/dest/services/service.d.ts +16 -3
  131. package/dest/services/service.d.ts.map +1 -1
  132. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  133. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  134. package/dest/services/tx_collection/instrumentation.js +4 -14
  135. package/dest/services/tx_collection/slow_tx_collection.d.ts +3 -3
  136. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  137. package/dest/services/tx_collection/tx_collection.d.ts +5 -5
  138. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  139. package/dest/services/tx_provider.d.ts +3 -3
  140. package/dest/services/tx_provider.d.ts.map +1 -1
  141. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  142. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  143. package/dest/services/tx_provider_instrumentation.js +6 -19
  144. package/dest/testbench/p2p_client_testbench_worker.js +30 -17
  145. package/dest/testbench/worker_client_manager.d.ts +1 -1
  146. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  147. package/dest/testbench/worker_client_manager.js +6 -1
  148. package/package.json +16 -16
  149. package/src/client/interface.ts +19 -4
  150. package/src/client/p2p_client.ts +82 -132
  151. package/src/config.ts +2 -2
  152. package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
  153. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +239 -287
  154. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +162 -140
  155. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
  156. package/src/mem_pools/attestation_pool/mocks.ts +19 -13
  157. package/src/mem_pools/instrumentation.ts +9 -18
  158. package/src/mem_pools/tx_pool/README.md +28 -13
  159. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
  160. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
  161. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
  162. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  163. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  164. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  165. package/src/msg_validators/attestation_validator/attestation_validator.ts +36 -21
  166. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +13 -16
  167. package/src/msg_validators/clock_tolerance.ts +51 -0
  168. package/src/msg_validators/index.ts +1 -1
  169. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  170. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  171. package/src/msg_validators/proposal_validator/index.ts +3 -0
  172. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  173. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  174. package/src/msg_validators/tx_validator/block_header_validator.ts +3 -1
  175. package/src/msg_validators/tx_validator/data_validator.ts +12 -4
  176. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  177. package/src/msg_validators/tx_validator/gas_validator.ts +8 -25
  178. package/src/msg_validators/tx_validator/index.ts +1 -0
  179. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  180. package/src/msg_validators/tx_validator/size_validator.ts +18 -0
  181. package/src/msg_validators/tx_validator/timestamp_validator.ts +3 -1
  182. package/src/services/dummy_service.ts +6 -0
  183. package/src/services/encoding.ts +5 -4
  184. package/src/services/libp2p/instrumentation.ts +19 -73
  185. package/src/services/libp2p/libp2p_service.ts +351 -115
  186. package/src/services/peer-manager/metrics.ts +5 -26
  187. package/src/services/peer-manager/peer_manager.ts +1 -2
  188. package/src/services/peer-manager/peer_scoring.ts +1 -5
  189. package/src/services/reqresp/connection-sampler/connection_sampler.ts +3 -1
  190. package/src/services/reqresp/constants.ts +14 -0
  191. package/src/services/reqresp/metrics.ts +7 -23
  192. package/src/services/reqresp/protocols/block_txs/bitvector.ts +9 -0
  193. package/src/services/reqresp/protocols/status.ts +7 -4
  194. package/src/services/service.ts +19 -4
  195. package/src/services/tx_collection/instrumentation.ts +4 -21
  196. package/src/services/tx_collection/slow_tx_collection.ts +2 -2
  197. package/src/services/tx_collection/tx_collection.ts +4 -4
  198. package/src/services/tx_provider.ts +2 -2
  199. package/src/services/tx_provider_instrumentation.ts +11 -24
  200. package/src/testbench/p2p_client_testbench_worker.ts +40 -21
  201. package/src/testbench/worker_client_manager.ts +6 -1
  202. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
  203. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
  204. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
  205. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  206. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  207. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  208. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  209. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  210. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  211. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
  212. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  213. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,60 +1,93 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
2
  import { getTelemetryClient } from '@aztec/telemetry-client';
3
+ import { ProposalSlotCapExceededError } from '../../errors/attestation-pool.error.js';
3
4
  import { PoolInstrumentation, PoolName } from '../instrumentation.js';
4
5
  import { ATTESTATION_CAP_BUFFER, MAX_PROPOSALS_PER_SLOT } from './kv_attestation_pool.js';
5
6
  export class InMemoryAttestationPool {
6
7
  log;
7
8
  metrics;
8
- // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
9
- attestations;
10
9
  proposals;
10
+ // Checkpoint attestations
11
+ // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
12
+ checkpointAttestations;
13
+ checkpointProposals;
11
14
  constructor(telemetry = getTelemetryClient(), log = createLogger('p2p:attestation_pool')){
12
15
  this.log = log;
13
16
  this.poolStats = ()=>{
14
17
  return Promise.resolve({
15
- itemCount: this.attestations.size
18
+ itemCount: this.checkpointAttestations.size
16
19
  });
17
20
  };
18
- this.attestations = new Map();
19
21
  this.proposals = new Map();
22
+ this.checkpointAttestations = new Map();
23
+ this.checkpointProposals = new Map();
20
24
  this.metrics = new PoolInstrumentation(telemetry, PoolName.ATTESTATION_POOL, this.poolStats);
21
25
  }
22
26
  poolStats;
23
27
  isEmpty() {
24
- return Promise.resolve(this.attestations.size === 0);
28
+ return Promise.resolve(this.checkpointAttestations.size === 0 && this.proposals.size === 0);
25
29
  }
26
- getAttestationsForSlot(slot) {
27
- return Promise.resolve(Array.from(this.attestations.get(slot)?.values() ?? []).flatMap((proposalAttestationMap)=>Array.from(proposalAttestationMap.values())));
30
+ addBlockProposal(blockProposal) {
31
+ // Strip signedTxs before storing to avoid holding full tx data in memory
32
+ this.proposals.set(blockProposal.archive.toString(), blockProposal.withoutSignedTxs());
33
+ return Promise.resolve();
28
34
  }
29
- getAttestationsForSlotAndProposal(slot, proposalId) {
30
- const slotAttestationMap = this.attestations.get(slot);
31
- if (slotAttestationMap) {
32
- const proposalAttestationMap = slotAttestationMap.get(proposalId);
33
- if (proposalAttestationMap) {
34
- return Promise.resolve(Array.from(proposalAttestationMap.values()));
35
- }
35
+ getBlockProposal(id) {
36
+ return Promise.resolve(this.proposals.get(id));
37
+ }
38
+ hasBlockProposal(idOrProposal) {
39
+ const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.archive.toString();
40
+ return Promise.resolve(this.proposals.has(id));
41
+ }
42
+ canAddProposal(_block) {
43
+ // TODO(palla/mbps): See when to allow
44
+ return Promise.resolve(true);
45
+ }
46
+ // Checkpoint attestation methods
47
+ async addCheckpointProposal(proposal) {
48
+ if (!await this.canAddCheckpointProposal(proposal)) {
49
+ throw new ProposalSlotCapExceededError(`Maximum checkpoint proposals per slot reached: slot=${proposal.slotNumber} cap=${MAX_PROPOSALS_PER_SLOT} proposal=${proposal.archive.toString()}`);
36
50
  }
37
- return Promise.resolve([]);
51
+ // Extract and validate the block proposal if present
52
+ const blockProposal = proposal.getBlockProposal();
53
+ if (blockProposal && !await this.canAddProposal(blockProposal)) {
54
+ throw new ProposalSlotCapExceededError(`Maximum block proposals per slot reached when extracting from checkpoint: slot=${proposal.slotNumber} proposal=${blockProposal.archive.toString()}`);
55
+ }
56
+ const slotProposalMapping = getCheckpointSlotOrDefault(this.checkpointAttestations, proposal.slotNumber);
57
+ slotProposalMapping.set(proposal.archive.toString(), new Map());
58
+ // Store the checkpoint proposal as core (without lastBlock) to avoid duplication
59
+ this.checkpointProposals.set(proposal.archive.toString(), proposal.toCore());
60
+ // Store the extracted block proposal separately
61
+ if (blockProposal) {
62
+ this.proposals.set(blockProposal.archive.toString(), blockProposal.withoutSignedTxs());
63
+ }
64
+ return Promise.resolve();
65
+ }
66
+ getCheckpointProposal(id) {
67
+ return Promise.resolve(this.checkpointProposals.get(id));
38
68
  }
39
- addAttestations(attestations) {
69
+ hasCheckpointProposal(idOrProposal) {
70
+ const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.archive.toString();
71
+ return Promise.resolve(this.checkpointProposals.has(id));
72
+ }
73
+ addCheckpointAttestations(attestations) {
40
74
  for (const attestation of attestations){
41
- // Perf: order and group by slot before insertion
42
75
  const slotNumber = attestation.payload.header.slotNumber;
43
76
  const proposalId = attestation.archive.toString();
44
77
  const sender = attestation.getSender();
45
78
  // Skip attestations with invalid signatures
46
79
  if (!sender) {
47
- this.log.warn(`Skipping attestation with invalid signature for slot ${slotNumber}`, {
80
+ this.log.warn(`Skipping checkpoint attestation with invalid signature for slot ${slotNumber}`, {
48
81
  signature: attestation.signature.toString(),
49
82
  slotNumber,
50
83
  proposalId
51
84
  });
52
85
  continue;
53
86
  }
54
- const slotAttestationMap = getSlotOrDefault(this.attestations, slotNumber);
55
- const proposalAttestationMap = getProposalOrDefault(slotAttestationMap, proposalId);
87
+ const slotAttestationMap = getCheckpointSlotOrDefault(this.checkpointAttestations, slotNumber);
88
+ const proposalAttestationMap = getCheckpointProposalOrDefault(slotAttestationMap, proposalId);
56
89
  proposalAttestationMap.set(sender.toString(), attestation);
57
- this.log.verbose(`Added attestation for slot ${slotNumber} from ${sender}`, {
90
+ this.log.verbose(`Added checkpoint attestation for slot ${slotNumber} from ${sender}`, {
58
91
  signature: attestation.signature.toString(),
59
92
  slotNumber,
60
93
  address: sender,
@@ -63,22 +96,22 @@ export class InMemoryAttestationPool {
63
96
  }
64
97
  return Promise.resolve();
65
98
  }
66
- #getNumberOfAttestationsInSlot(slot) {
67
- let total = 0;
68
- const slotAttestationMap = getSlotOrDefault(this.attestations, slot);
99
+ getCheckpointAttestationsForSlot(slot) {
100
+ return Promise.resolve(Array.from(this.checkpointAttestations.get(slot)?.values() ?? []).flatMap((proposalAttestationMap)=>Array.from(proposalAttestationMap.values())));
101
+ }
102
+ getCheckpointAttestationsForSlotAndProposal(slot, proposalId) {
103
+ const slotAttestationMap = this.checkpointAttestations.get(slot);
69
104
  if (slotAttestationMap) {
70
- for (const proposalAttestationMap of slotAttestationMap.values() ?? []){
71
- total += proposalAttestationMap.size;
105
+ const proposalAttestationMap = slotAttestationMap.get(proposalId);
106
+ if (proposalAttestationMap) {
107
+ return Promise.resolve(Array.from(proposalAttestationMap.values()));
72
108
  }
73
109
  }
74
- return total;
110
+ return Promise.resolve([]);
75
111
  }
76
- async deleteAttestationsOlderThan(oldestSlot) {
112
+ deleteCheckpointAttestationsOlderThan(oldestSlot) {
77
113
  const olderThan = [];
78
- // Entries are iterated in insertion order, so we can break as soon as we find a slot that is older than the oldestSlot.
79
- // Note: this will only prune correctly if attestations are added in order of rising slot, it is important that we do not allow
80
- // insertion of attestations that are old. #(https://github.com/AztecProtocol/aztec-packages/issues/10322)
81
- const slots = this.attestations.keys();
114
+ const slots = this.checkpointAttestations.keys();
82
115
  for (const slot of slots){
83
116
  if (slot < oldestSlot) {
84
117
  olderThan.push(slot);
@@ -87,57 +120,32 @@ export class InMemoryAttestationPool {
87
120
  }
88
121
  }
89
122
  for (const oldSlot of olderThan){
90
- await this.deleteAttestationsForSlot(oldSlot);
123
+ const proposalIds = this.checkpointAttestations.get(oldSlot)?.keys();
124
+ proposalIds?.forEach((proposalId)=>this.checkpointProposals.delete(proposalId));
125
+ this.checkpointAttestations.delete(oldSlot);
91
126
  }
92
127
  return Promise.resolve();
93
128
  }
94
- deleteAttestationsForSlot(slot) {
95
- // We count the number of attestations we are removing
96
- const numberOfAttestations = this.#getNumberOfAttestationsInSlot(slot);
97
- const proposalIdsToDelete = this.attestations.get(slot)?.keys();
98
- let proposalIdsToDeleteCount = 0;
99
- proposalIdsToDelete?.forEach((proposalId)=>{
100
- this.proposals.delete(proposalId);
101
- proposalIdsToDeleteCount++;
102
- });
103
- this.attestations.delete(slot);
104
- this.log.verbose(`Removed ${numberOfAttestations} attestations and ${proposalIdsToDeleteCount} proposals for slot ${slot}`);
105
- return Promise.resolve();
129
+ hasReachedCheckpointProposalCap(slot) {
130
+ const slotAttestationMap = this.checkpointAttestations.get(slot);
131
+ const proposalCount = slotAttestationMap?.size ?? 0;
132
+ return Promise.resolve(proposalCount >= MAX_PROPOSALS_PER_SLOT);
106
133
  }
107
- deleteAttestationsForSlotAndProposal(slot, proposalId) {
108
- const slotAttestationMap = getSlotOrDefault(this.attestations, slot);
109
- if (slotAttestationMap) {
110
- if (slotAttestationMap.has(proposalId)) {
111
- const numberOfAttestations = slotAttestationMap.get(proposalId)?.size ?? 0;
112
- slotAttestationMap.delete(proposalId);
113
- this.log.verbose(`Removed ${numberOfAttestations} attestations for slot ${slot} and proposal ${proposalId}`);
114
- }
115
- }
116
- this.proposals.delete(proposalId);
117
- return Promise.resolve();
134
+ hasReachedCheckpointAttestationCap(slot, proposalId, committeeSize) {
135
+ const limit = committeeSize + ATTESTATION_CAP_BUFFER;
136
+ const count = this.checkpointAttestations.get(slot)?.get(proposalId)?.size ?? 0;
137
+ return Promise.resolve(limit <= 0 || count >= limit);
118
138
  }
119
- deleteAttestations(attestations) {
120
- for (const attestation of attestations){
121
- const slotNumber = attestation.payload.header.slotNumber;
122
- const slotAttestationMap = this.attestations.get(slotNumber);
123
- if (slotAttestationMap) {
124
- const proposalId = attestation.archive.toString();
125
- const proposalAttestationMap = getProposalOrDefault(slotAttestationMap, proposalId);
126
- if (proposalAttestationMap) {
127
- const sender = attestation.getSender();
128
- // Skip attestations with invalid signatures
129
- if (!sender) {
130
- this.log.warn(`Skipping deletion of attestation with invalid signature for slot ${slotNumber}`);
131
- continue;
132
- }
133
- proposalAttestationMap.delete(sender.toString());
134
- this.log.debug(`Deleted attestation for slot ${slotNumber} from ${sender}`);
135
- }
136
- }
137
- }
138
- return Promise.resolve();
139
+ async canAddCheckpointProposal(proposal) {
140
+ return this.checkpointProposals.has(proposal.archive.toString()) || !await this.hasReachedCheckpointProposalCap(proposal.slotNumber);
139
141
  }
140
- hasAttestation(attestation) {
142
+ async canAddCheckpointAttestation(attestation, committeeSize) {
143
+ const sender = attestation.getSender();
144
+ const slot = attestation.payload.header.slotNumber;
145
+ const pid = attestation.archive.toString();
146
+ return !!sender && ((this.checkpointAttestations.get(slot)?.get(pid)?.has(sender.toString()) ?? false) || !await this.hasReachedCheckpointAttestationCap(slot, pid, committeeSize));
147
+ }
148
+ hasCheckpointAttestation(attestation) {
141
149
  const slotNumber = attestation.payload.header.slotNumber;
142
150
  const proposalId = attestation.archive.toString();
143
151
  const sender = attestation.getSender();
@@ -145,7 +153,7 @@ export class InMemoryAttestationPool {
145
153
  if (!sender) {
146
154
  return Promise.resolve(false);
147
155
  }
148
- const slotAttestationMap = this.attestations.get(slotNumber);
156
+ const slotAttestationMap = this.checkpointAttestations.get(slotNumber);
149
157
  if (!slotAttestationMap) {
150
158
  return Promise.resolve(false);
151
159
  }
@@ -155,63 +163,16 @@ export class InMemoryAttestationPool {
155
163
  }
156
164
  return Promise.resolve(proposalAttestationMap.has(sender.toString()));
157
165
  }
158
- addBlockProposal(blockProposal) {
159
- // We initialize slot-proposal mapping if it does not exist
160
- // This is important to ensure we can delete this proposal if there were not attestations for it
161
- const slotProposalMapping = getSlotOrDefault(this.attestations, blockProposal.slotNumber);
162
- slotProposalMapping.set(blockProposal.payload.archive.toString(), new Map());
163
- this.proposals.set(blockProposal.payload.archive.toString(), blockProposal);
164
- return Promise.resolve();
165
- }
166
- getBlockProposal(id) {
167
- return Promise.resolve(this.proposals.get(id));
168
- }
169
- hasBlockProposal(idOrProposal) {
170
- const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.payload.archive.toString();
171
- return Promise.resolve(this.proposals.has(id));
172
- }
173
- hasReachedProposalCap(slot) {
174
- const slotAttestationMap = this.attestations.get(slot);
175
- const proposalCount = slotAttestationMap?.size ?? 0;
176
- return Promise.resolve(proposalCount >= MAX_PROPOSALS_PER_SLOT);
177
- }
178
- hasReachedAttestationCap(slot, proposalId, committeeSize) {
179
- const limit = committeeSize + ATTESTATION_CAP_BUFFER;
180
- const count = this.attestations.get(slot)?.get(proposalId)?.size ?? 0;
181
- return Promise.resolve(limit <= 0 || count >= limit);
182
- }
183
- async canAddProposal(block) {
184
- return this.proposals.has(block.archive.toString()) || !await this.hasReachedProposalCap(block.slotNumber);
185
- }
186
- async canAddAttestation(attestation, committeeSize) {
187
- const sender = attestation.getSender();
188
- const slot = attestation.payload.header.slotNumber;
189
- const pid = attestation.archive.toString();
190
- return !!sender && ((this.attestations.get(slot)?.get(pid)?.has(sender.toString()) ?? false) || !await this.hasReachedAttestationCap(slot, pid, committeeSize));
191
- }
192
166
  }
193
- /**
194
- * Get Slot or Default
195
- *
196
- * Fetch the slot mapping, if it does not exist, then create a mapping and return it
197
- * @param map - The map to fetch from
198
- * @param slot - The slot to fetch
199
- * @returns The slot mapping
200
- */ function getSlotOrDefault(// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
167
+ // Checkpoint attestation helper functions
168
+ function getCheckpointSlotOrDefault(// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
201
169
  map, slot) {
202
170
  if (!map.has(slot)) {
203
171
  map.set(slot, new Map());
204
172
  }
205
173
  return map.get(slot);
206
174
  }
207
- /**
208
- * Get Proposal or Default
209
- *
210
- * Fetch the proposal mapping, if it does not exist, then create a mapping and return it
211
- * @param map - The map to fetch from
212
- * @param proposalId - The proposal id to fetch
213
- * @returns The proposal mapping
214
- */ function getProposalOrDefault(map, proposalId) {
175
+ function getCheckpointProposalOrDefault(map, proposalId) {
215
176
  if (!map.has(proposalId)) {
216
177
  map.set(proposalId, new Map());
217
178
  }
@@ -1,6 +1,7 @@
1
1
  import type { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
2
2
  import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { BlockAttestation } from '@aztec/stdlib/p2p';
3
+ import { CheckpointAttestation } from '@aztec/stdlib/p2p';
4
+ import { CheckpointHeader } from '@aztec/stdlib/rollup';
4
5
  /** Generate Account
5
6
  *
6
7
  * Create a random signer
@@ -229,11 +230,13 @@ export declare const generateAccount: () => {
229
230
  source: string;
230
231
  type: "local";
231
232
  };
232
- /** Mock Attestation
233
+ /** Mock Checkpoint Attestation
233
234
  *
234
- * @param signer A viem signer to create a signature
235
+ * @param signer A Secp256k1Signer to create a signature
235
236
  * @param slot The slot number the attestation is for
236
- * @returns A Block Attestation
237
+ * @param archive The archive root (defaults to random)
238
+ * @param header The checkpoint header (defaults to random with given slot)
239
+ * @returns A Checkpoint Attestation
237
240
  */
238
- export declare const mockAttestation: (signer: Secp256k1Signer, slot?: number, archive?: Fr) => BlockAttestation;
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvYXR0ZXN0YXRpb25fcG9vbC9tb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUNMLGdCQUFnQixFQUlqQixNQUFNLG1CQUFtQixDQUFDO0FBSzNCOzs7O0dBSUc7QUFDSCxlQUFPLE1BQU0sZUFBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBRzNCLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILGVBQU8sTUFBTSxlQUFlLDRFQWdCM0IsQ0FBQyJ9
241
+ export declare const mockCheckpointAttestation: (signer: Secp256k1Signer, slot?: number, archive?: Fr, header?: CheckpointHeader | undefined) => CheckpointAttestation;
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvYXR0ZXN0YXRpb25fcG9vbC9tb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUNMLHFCQUFxQixFQUl0QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSXhEOzs7O0dBSUc7QUFDSCxlQUFPLE1BQU0sZUFBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBRzNCLENBQUM7QUFFRjs7Ozs7OztHQU9HO0FBQ0gsZUFBTyxNQUFNLHlCQUF5Qix3SEFtQnJDLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EACL,gBAAgB,EAIjB,MAAM,mBAAmB,CAAC;AAK3B;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG3B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,4EAgB3B,CAAC"}
1
+ {"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/mocks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EACL,qBAAqB,EAItB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIxD;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG3B,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,wHAmBrC,CAAC"}
@@ -1,6 +1,7 @@
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
1
2
  import { Fr } from '@aztec/foundation/curves/bn254';
2
- import { BlockAttestation, ConsensusPayload, SignatureDomainSeparator, getHashedSignaturePayloadEthSignedMessage } from '@aztec/stdlib/p2p';
3
- import { makeL2BlockHeader } from '@aztec/stdlib/testing';
3
+ import { CheckpointAttestation, ConsensusPayload, SignatureDomainSeparator, getHashedSignaturePayloadEthSignedMessage } from '@aztec/stdlib/p2p';
4
+ import { CheckpointHeader } from '@aztec/stdlib/rollup';
4
5
  import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
5
6
  /** Generate Account
6
7
  *
@@ -10,18 +11,21 @@ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
10
11
  const privateKey = generatePrivateKey();
11
12
  return privateKeyToAccount(privateKey);
12
13
  };
13
- /** Mock Attestation
14
+ /** Mock Checkpoint Attestation
14
15
  *
15
- * @param signer A viem signer to create a signature
16
+ * @param signer A Secp256k1Signer to create a signature
16
17
  * @param slot The slot number the attestation is for
17
- * @returns A Block Attestation
18
- */ export const mockAttestation = (signer, slot = 0, archive = Fr.random())=>{
19
- // Use arbitrary numbers for all other than slot
20
- const header = makeL2BlockHeader(1, 2, slot);
21
- const payload = new ConsensusPayload(header.toCheckpointHeader(), archive);
22
- const attestationHash = getHashedSignaturePayloadEthSignedMessage(payload, SignatureDomainSeparator.blockAttestation);
18
+ * @param archive The archive root (defaults to random)
19
+ * @param header The checkpoint header (defaults to random with given slot)
20
+ * @returns A Checkpoint Attestation
21
+ */ export const mockCheckpointAttestation = (signer, slot = 0, archive = Fr.random(), header)=>{
22
+ header = header ?? CheckpointHeader.random({
23
+ slotNumber: SlotNumber(slot)
24
+ });
25
+ const payload = new ConsensusPayload(header, archive);
26
+ const attestationHash = getHashedSignaturePayloadEthSignedMessage(payload, SignatureDomainSeparator.checkpointAttestation);
23
27
  const attestationSignature = signer.sign(attestationHash);
24
- const proposalHash = getHashedSignaturePayloadEthSignedMessage(payload, SignatureDomainSeparator.blockProposal);
28
+ const proposalHash = getHashedSignaturePayloadEthSignedMessage(payload, SignatureDomainSeparator.checkpointProposal);
25
29
  const proposerSignature = signer.sign(proposalHash);
26
- return new BlockAttestation(payload, attestationSignature, proposerSignature);
30
+ return new CheckpointAttestation(payload, attestationSignature, proposerSignature);
27
31
  };
@@ -31,4 +31,4 @@ export declare class PoolInstrumentation<PoolObject extends Gossipable> {
31
31
  transactionsRemoved(hashes: Iterable<bigint> | Iterable<string>): void;
32
32
  private observeStats;
33
33
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWVtX3Bvb2xzL2luc3RydW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzQyxPQUFPLEVBS0wsS0FBSyxpQkFBaUIsRUFLdEIsS0FBSyxlQUFlLEVBRXJCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsb0JBQVksUUFBUTtJQUNsQixPQUFPLFdBQVc7SUFDbEIsZ0JBQWdCLG9CQUFvQjtDQUNyQztBQWtDRCxNQUFNLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxPQUFPLENBQUM7SUFDNUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQzVDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gscUJBQWEsbUJBQW1CLENBQUMsVUFBVSxTQUFTLFVBQVU7SUFtQjFELE9BQU8sQ0FBQyxTQUFTO0lBbEJuQix1Q0FBdUM7SUFDdkMsT0FBTyxDQUFDLGdCQUFnQixDQUFrQjtJQUMxQyxPQUFPLENBQUMsZ0JBQWdCLENBQWdCO0lBQ3hDLHFCQUFxQjtJQUNyQixPQUFPLENBQUMsVUFBVSxDQUFZO0lBQzlCLHdEQUF3RDtJQUN4RCxPQUFPLENBQUMsVUFBVSxDQUFZO0lBRTlCLE9BQU8sQ0FBQyxTQUFTLENBQWM7SUFFL0IsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0lBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQVE7SUFFckIsT0FBTyxDQUFDLGdCQUFnQixDQUFrRDtJQUUxRSxZQUNFLFNBQVMsRUFBRSxlQUFlLEVBQzFCLElBQUksRUFBRSxRQUFRLEVBQ04sU0FBUyxFQUFFLGlCQUFpQixFQUNwQyxPQUFPLENBQUMsRUFBRSxpQkFBaUIsRUFpQzVCO0lBRU0sVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLFFBRXZDO0lBRU0scUJBQXFCLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFekM7SUFFTSxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLFFBSzFDO0lBRU0sbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBWXJFO0lBRUQsT0FBTyxDQUFDLFlBQVksQ0FZbEI7Q0FDSCJ9
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWVtX3Bvb2xzL2luc3RydW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzQyxPQUFPLEVBS0wsS0FBSyxpQkFBaUIsRUFLdEIsS0FBSyxlQUFlLEVBRXJCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsb0JBQVksUUFBUTtJQUNsQixPQUFPLFdBQVc7SUFDbEIsZ0JBQWdCLG9CQUFvQjtDQUNyQztBQWtDRCxNQUFNLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxPQUFPLENBQUM7SUFDNUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQzVDLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gscUJBQWEsbUJBQW1CLENBQUMsVUFBVSxTQUFTLFVBQVU7SUFtQjFELE9BQU8sQ0FBQyxTQUFTO0lBbEJuQix1Q0FBdUM7SUFDdkMsT0FBTyxDQUFDLGdCQUFnQixDQUFrQjtJQUMxQyxPQUFPLENBQUMsZ0JBQWdCLENBQWdCO0lBQ3hDLHFCQUFxQjtJQUNyQixPQUFPLENBQUMsVUFBVSxDQUFZO0lBQzlCLHdEQUF3RDtJQUN4RCxPQUFPLENBQUMsVUFBVSxDQUFZO0lBRTlCLE9BQU8sQ0FBQyxTQUFTLENBQWM7SUFFL0IsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0lBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQVE7SUFFckIsT0FBTyxDQUFDLGdCQUFnQixDQUFrRDtJQUUxRSxZQUNFLFNBQVMsRUFBRSxlQUFlLEVBQzFCLElBQUksRUFBRSxRQUFRLEVBQ04sU0FBUyxFQUFFLGlCQUFpQixFQUNwQyxPQUFPLENBQUMsRUFBRSxpQkFBaUIsRUF3QjVCO0lBRU0sVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLFFBRXZDO0lBRU0scUJBQXFCLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFekM7SUFFTSxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLFFBSzFDO0lBRU0sbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBWXJFO0lBRUQsT0FBTyxDQUFDLFlBQVksQ0FZbEI7Q0FDSCJ9
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/mem_pools/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAKL,KAAK,iBAAiB,EAKtB,KAAK,eAAe,EAErB,MAAM,yBAAyB,CAAC;AAEjC,oBAAY,QAAQ;IAClB,OAAO,WAAW;IAClB,gBAAgB,oBAAoB;CACrC;AAkCD,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC;IAC5C,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C,CAAC,CAAC;AAEH;;GAEG;AACH,qBAAa,mBAAmB,CAAC,UAAU,SAAS,UAAU;IAmB1D,OAAO,CAAC,SAAS;IAlBnB,uCAAuC;IACvC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,gBAAgB,CAAgB;IACxC,qBAAqB;IACrB,OAAO,CAAC,UAAU,CAAY;IAC9B,wDAAwD;IACxD,OAAO,CAAC,UAAU,CAAY;IAE9B,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,iBAAiB,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,gBAAgB,CAAkD;IAE1E,YACE,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,QAAQ,EACN,SAAS,EAAE,iBAAiB,EACpC,OAAO,CAAC,EAAE,iBAAiB,EAiC5B;IAEM,UAAU,CAAC,UAAU,EAAE,UAAU,QAEvC;IAEM,qBAAqB,CAAC,KAAK,EAAE,MAAM,QAEzC;IAEM,iBAAiB,CAAC,YAAY,EAAE,EAAE,EAAE,QAK1C;IAEM,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,QAYrE;IAED,OAAO,CAAC,YAAY,CAYlB;CACH"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/mem_pools/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAKL,KAAK,iBAAiB,EAKtB,KAAK,eAAe,EAErB,MAAM,yBAAyB,CAAC;AAEjC,oBAAY,QAAQ;IAClB,OAAO,WAAW;IAClB,gBAAgB,oBAAoB;CACrC;AAkCD,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC;IAC5C,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C,CAAC,CAAC;AAEH;;GAEG;AACH,qBAAa,mBAAmB,CAAC,UAAU,SAAS,UAAU;IAmB1D,OAAO,CAAC,SAAS;IAlBnB,uCAAuC;IACvC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,gBAAgB,CAAgB;IACxC,qBAAqB;IACrB,OAAO,CAAC,UAAU,CAAY;IAC9B,wDAAwD;IACxD,OAAO,CAAC,UAAU,CAAY;IAE9B,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,iBAAiB,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,gBAAgB,CAAkD;IAE1E,YACE,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,QAAQ,EACN,SAAS,EAAE,iBAAiB,EACpC,OAAO,CAAC,EAAE,iBAAiB,EAwB5B;IAEM,UAAU,CAAC,UAAU,EAAE,UAAU,QAEvC;IAEM,qBAAqB,CAAC,KAAK,EAAE,MAAM,QAEzC;IAEM,iBAAiB,CAAC,YAAY,EAAE,EAAE,EAAE,QAK1C;IAEM,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,QAYrE;IAED,OAAO,CAAC,YAAY,CAYlB;CACH"}
@@ -59,22 +59,13 @@ export var PoolName = /*#__PURE__*/ function(PoolName) {
59
59
  [Attributes.POOL_NAME]: name
60
60
  };
61
61
  const metricsLabels = getMetricsLabels(name);
62
- this.objectsInMempool = this.meter.createObservableGauge(metricsLabels.objectInMempool, {
63
- description: 'The current number of transactions in the mempool'
64
- });
65
- this.objectSize = this.meter.createHistogram(metricsLabels.objectSize, {
66
- unit: 'By',
67
- description: 'The size of transactions in the mempool'
68
- });
62
+ this.objectsInMempool = this.meter.createObservableGauge(metricsLabels.objectInMempool);
63
+ this.objectSize = this.meter.createHistogram(metricsLabels.objectSize);
69
64
  this.dbMetrics = new LmdbMetrics(this.meter, {
70
65
  [Attributes.DB_DATA_TYPE]: 'tx-pool'
71
66
  }, dbStats);
72
- this.addObjectCounter = this.meter.createUpDownCounter(metricsLabels.itemsAdded, {
73
- description: 'The number of transactions added to the mempool'
74
- });
75
- this.minedDelay = this.meter.createHistogram(metricsLabels.itemMinedDelay, {
76
- description: 'Delay between transaction added and evicted from the mempool'
77
- });
67
+ this.addObjectCounter = this.meter.createUpDownCounter(metricsLabels.itemsAdded);
68
+ this.minedDelay = this.meter.createHistogram(metricsLabels.itemMinedDelay);
78
69
  this.meter.addBatchObservableCallback(this.observeStats, [
79
70
  this.objectsInMempool
80
71
  ]);
@@ -3,12 +3,12 @@ import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { type Logger } from '@aztec/foundation/log';
4
4
  import type { TypedEventEmitter } from '@aztec/foundation/types';
5
5
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
6
- import type { AztecAddress } from '@aztec/stdlib/aztec-address';
7
- import type { MerkleTreeReadOperations, ReadonlyWorldStateAccess } from '@aztec/stdlib/interfaces/server';
6
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
7
+ import type { MerkleTreeReadOperations, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
8
8
  import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
9
9
  import { type TelemetryClient } from '@aztec/telemetry-client';
10
10
  import { ArchiveCache } from '../../msg_validators/tx_validator/archive_cache.js';
11
- import type { PendingTxInfo, TxBlockReference, TxPoolOperations } from './eviction/eviction_strategy.js';
11
+ import { FeePayerTxInfo, type PendingTxInfo, type TxBlockReference, type TxPoolOperations } from './eviction/eviction_strategy.js';
12
12
  import type { TxPool, TxPoolEvents, TxPoolOptions } from './tx_pool.js';
13
13
  declare const AztecKVTxPool_base: new () => TypedEventEmitter<TxPoolEvents>;
14
14
  /**
@@ -24,7 +24,7 @@ export declare class AztecKVTxPool extends AztecKVTxPool_base implements TxPool,
24
24
  * @param archivedTxLimit - The number of txs to archive.
25
25
  * @param log - A logger.
26
26
  */
27
- constructor(store: AztecAsyncKVStore, archive: AztecAsyncKVStore, worldState: ReadonlyWorldStateAccess, telemetry?: TelemetryClient, config?: TxPoolOptions, log?: Logger);
27
+ constructor(store: AztecAsyncKVStore, archive: AztecAsyncKVStore, worldState: WorldStateSynchronizer, telemetry?: TelemetryClient, config?: TxPoolOptions, log?: Logger);
28
28
  private countTxs;
29
29
  isEmpty(): Promise<boolean>;
30
30
  /**
@@ -54,6 +54,8 @@ export declare class AztecKVTxPool extends AztecKVTxPool_base implements TxPool,
54
54
  getArchivedTxByHash(txHash: TxHash): Promise<Tx | undefined>;
55
55
  /**
56
56
  * Adds a list of transactions to the pool. Duplicates are ignored.
57
+ * Handles nullifier deduplication: if an incoming tx has a nullifier conflict with
58
+ * existing pending txs, it will either replace them (if higher fee) or be rejected.
57
59
  * @param txs - An array of txs to be added to the pool.
58
60
  * @returns count of added transactions
59
61
  */
@@ -70,7 +72,7 @@ export declare class AztecKVTxPool extends AztecKVTxPool_base implements TxPool,
70
72
  permanently?: boolean;
71
73
  }): Promise<void>;
72
74
  private deleteMinedTx;
73
- private deletePendingTx;
75
+ private deletePendingTxInDbTx;
74
76
  /**
75
77
  * Gets all the transactions stored in the pool.
76
78
  * @returns Array of tx objects in the order they were added to the pool.
@@ -84,7 +86,8 @@ export declare class AztecKVTxPool extends AztecKVTxPool_base implements TxPool,
84
86
  getPendingTxInfos(): Promise<PendingTxInfo[]>;
85
87
  private getPendingTxInfo;
86
88
  getPendingTxsReferencingBlocks(blockHashes: Fr[]): Promise<TxBlockReference[]>;
87
- getPendingTxsWithFeePayer(feePayers: AztecAddress[]): Promise<PendingTxInfo[]>;
89
+ getPendingFeePayers(): Promise<AztecAddress[]>;
90
+ getFeePayerTxInfos(feePayer: AztecAddress): AsyncIterable<FeePayerTxInfo>;
88
91
  getMinedTxHashes(): Promise<[TxHash, BlockNumber][]>;
89
92
  getPendingTxCount(): Promise<number>;
90
93
  getMinedTxCount(): Promise<number>;
@@ -104,17 +107,19 @@ export declare class AztecKVTxPool extends AztecKVTxPool_base implements TxPool,
104
107
  * @returns An ArchiveCache instance
105
108
  */
106
109
  protected createArchiveCache(db: MerkleTreeReadOperations): ArchiveCache;
107
- private getPendingTxByHash;
108
110
  private archiveTxs;
109
111
  private addPendingTxIndicesInDbTx;
110
- private addPendingTxIndices;
111
112
  private removePendingTxIndicesInDbTx;
112
- private removePendingTxIndices;
113
113
  /**
114
114
  * Returns up to `limit` lowest-priority evictable pending tx hashes without hydrating transactions.
115
115
  * Iterates the priority index in ascending order and skips non-evictable txs.
116
116
  */
117
117
  getLowestPriorityEvictable(limit: number): Promise<TxHash[]>;
118
+ /**
119
+ * Creates a PreAddPoolAccess object for use by pre-add eviction rules.
120
+ * Provides read-only access to pool state during addTxs transaction.
121
+ */
122
+ private getPreAddPoolAccess;
118
123
  }
119
124
  export {};
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfa3ZfdHhfcG9vbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sL2F6dGVjX2t2X3R4X3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUtuRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFHbEYsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNekcsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRXhFOztHQUVHO0FBQ0gscUJBQWEsYUFDWCxTQUFRLGtCQUNSLFlBQVcsTUFBTSxFQUFFLGdCQUFnQjs7SUErQ25DOzs7Ozs7O09BT0c7SUFDSCxZQUNFLEtBQUssRUFBRSxpQkFBaUIsRUFDeEIs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
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfa3ZfdHhfcG9vbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sL2F6dGVjX2t2X3R4X3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUd4RyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFLbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBR2xGLE9BQU8sRUFDTCxjQUFjLEVBQ2QsS0FBSyxhQUFhLEVBRWxCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0saUNBQWlDLENBQUM7QUFPekMsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRXhFOztHQUVHO0FBQ0gscUJBQWEsYUFDWCxTQUFRLGtCQUNSLFlBQVcsTUFBTSxFQUFFLGdCQUFnQjs7SUFrRG5DOzs7Ozs7O09BT0c7SUFDSCxZQUNFLEtBQUss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
@@ -1 +1 @@
1
- {"version":3,"file":"aztec_kv_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/aztec_kv_tx_pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aztec_kv_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/aztec_kv_tx_pool.ts"],"names":[],"mappings":"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"}