@aztec/p2p 0.0.1-commit.87a0206 → 0.0.1-commit.8f9871590

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/factory.d.ts +3 -3
  2. package/dest/client/factory.d.ts.map +1 -1
  3. package/dest/client/factory.js +42 -8
  4. package/dest/client/interface.d.ts +30 -15
  5. package/dest/client/interface.d.ts.map +1 -1
  6. package/dest/client/p2p_client.d.ts +33 -35
  7. package/dest/client/p2p_client.d.ts.map +1 -1
  8. package/dest/client/p2p_client.js +107 -137
  9. package/dest/config.d.ts +22 -4
  10. package/dest/config.d.ts.map +1 -1
  11. package/dest/config.js +16 -1
  12. package/dest/index.d.ts +2 -1
  13. package/dest/index.d.ts.map +1 -1
  14. package/dest/index.js +1 -0
  15. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +21 -12
  16. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  17. package/dest/mem_pools/attestation_pool/attestation_pool.js +67 -37
  18. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  19. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  20. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +53 -53
  21. package/dest/mem_pools/attestation_pool/index.d.ts +2 -2
  22. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  23. package/dest/mem_pools/attestation_pool/index.js +1 -1
  24. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  25. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  26. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  27. package/dest/mem_pools/index.d.ts +2 -1
  28. package/dest/mem_pools/index.d.ts.map +1 -1
  29. package/dest/mem_pools/interface.d.ts +3 -3
  30. package/dest/mem_pools/interface.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  32. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +102 -0
  33. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  34. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +242 -0
  35. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  36. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  37. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +3 -0
  38. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +5 -3
  39. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +3 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +3 -1
  43. package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -1
  44. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  45. package/dest/mem_pools/tx_pool_v2/index.js +1 -0
  46. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +7 -3
  47. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  49. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +28 -4
  50. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +37 -4
  52. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +8 -2
  53. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +15 -2
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  56. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -2
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +4 -2
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +110 -78
  61. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +3 -3
  62. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  63. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  64. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  66. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  67. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  69. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  70. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  71. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  72. package/dest/services/dummy_service.d.ts +6 -2
  73. package/dest/services/dummy_service.d.ts.map +1 -1
  74. package/dest/services/dummy_service.js +3 -0
  75. package/dest/services/encoding.d.ts +2 -2
  76. package/dest/services/encoding.d.ts.map +1 -1
  77. package/dest/services/encoding.js +2 -2
  78. package/dest/services/gossipsub/index.d.ts +3 -0
  79. package/dest/services/gossipsub/index.d.ts.map +1 -0
  80. package/dest/services/gossipsub/index.js +2 -0
  81. package/dest/services/gossipsub/scoring.d.ts +21 -3
  82. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  83. package/dest/services/gossipsub/scoring.js +24 -7
  84. package/dest/services/gossipsub/topic_score_params.d.ts +161 -0
  85. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  86. package/dest/services/gossipsub/topic_score_params.js +324 -0
  87. package/dest/services/libp2p/libp2p_service.d.ts +11 -3
  88. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  89. package/dest/services/libp2p/libp2p_service.js +91 -67
  90. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  91. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  92. package/dest/services/peer-manager/peer_scoring.js +25 -2
  93. package/dest/services/reqresp/interface.d.ts +10 -1
  94. package/dest/services/reqresp/interface.d.ts.map +1 -1
  95. package/dest/services/reqresp/interface.js +15 -1
  96. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +3 -3
  97. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  98. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +7 -1
  99. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  100. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +15 -0
  101. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  102. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  103. package/dest/services/reqresp/protocols/tx.js +20 -0
  104. package/dest/services/reqresp/reqresp.d.ts +1 -1
  105. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  106. package/dest/services/reqresp/reqresp.js +11 -4
  107. package/dest/services/service.d.ts +18 -1
  108. package/dest/services/service.d.ts.map +1 -1
  109. package/dest/services/tx_collection/config.d.ts +19 -1
  110. package/dest/services/tx_collection/config.d.ts.map +1 -1
  111. package/dest/services/tx_collection/config.js +46 -0
  112. package/dest/services/tx_collection/fast_tx_collection.d.ts +3 -1
  113. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  114. package/dest/services/tx_collection/fast_tx_collection.js +17 -3
  115. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  116. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  117. package/dest/services/tx_collection/file_store_tx_collection.js +165 -0
  118. package/dest/services/tx_collection/file_store_tx_source.d.ts +28 -0
  119. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  120. package/dest/services/tx_collection/file_store_tx_source.js +59 -0
  121. package/dest/services/tx_collection/index.d.ts +2 -1
  122. package/dest/services/tx_collection/index.d.ts.map +1 -1
  123. package/dest/services/tx_collection/index.js +1 -0
  124. package/dest/services/tx_collection/slow_tx_collection.d.ts +6 -2
  125. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  126. package/dest/services/tx_collection/slow_tx_collection.js +55 -23
  127. package/dest/services/tx_collection/tx_collection.d.ts +19 -7
  128. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  129. package/dest/services/tx_collection/tx_collection.js +75 -3
  130. package/dest/services/tx_collection/tx_collection_sink.d.ts +15 -6
  131. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  132. package/dest/services/tx_collection/tx_collection_sink.js +13 -7
  133. package/dest/services/tx_file_store/config.d.ts +1 -3
  134. package/dest/services/tx_file_store/config.d.ts.map +1 -1
  135. package/dest/services/tx_file_store/config.js +0 -4
  136. package/dest/services/tx_file_store/tx_file_store.d.ts +4 -3
  137. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  138. package/dest/services/tx_file_store/tx_file_store.js +8 -5
  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.js +5 -4
  142. package/dest/test-helpers/make-test-p2p-clients.d.ts +3 -3
  143. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  144. package/dest/test-helpers/mock-pubsub.d.ts +27 -1
  145. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  146. package/dest/test-helpers/mock-pubsub.js +97 -2
  147. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  148. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  149. package/dest/test-helpers/reqresp-nodes.js +2 -1
  150. package/dest/test-helpers/testbench-utils.d.ts +32 -24
  151. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  152. package/dest/test-helpers/testbench-utils.js +103 -36
  153. package/dest/testbench/p2p_client_testbench_worker.js +3 -3
  154. package/package.json +14 -14
  155. package/src/client/factory.ts +78 -9
  156. package/src/client/interface.ts +32 -13
  157. package/src/client/p2p_client.ts +135 -157
  158. package/src/config.ts +34 -2
  159. package/src/index.ts +1 -0
  160. package/src/mem_pools/attestation_pool/attestation_pool.ts +95 -44
  161. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +57 -53
  162. package/src/mem_pools/attestation_pool/index.ts +3 -3
  163. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  164. package/src/mem_pools/index.ts +3 -0
  165. package/src/mem_pools/interface.ts +2 -2
  166. package/src/mem_pools/tx_pool/README.md +1 -1
  167. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  168. package/src/mem_pools/tx_pool_v2/README.md +76 -10
  169. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +310 -0
  170. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +3 -0
  171. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +3 -3
  172. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +1 -1
  173. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +3 -1
  174. package/src/mem_pools/tx_pool_v2/index.ts +1 -0
  175. package/src/mem_pools/tx_pool_v2/interfaces.ts +8 -2
  176. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +57 -7
  177. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +18 -2
  178. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +7 -1
  179. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +122 -80
  180. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +2 -2
  181. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  182. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  183. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  184. package/src/services/dummy_service.ts +6 -0
  185. package/src/services/encoding.ts +2 -2
  186. package/src/services/gossipsub/README.md +626 -0
  187. package/src/services/gossipsub/index.ts +2 -0
  188. package/src/services/gossipsub/scoring.ts +29 -5
  189. package/src/services/gossipsub/topic_score_params.ts +451 -0
  190. package/src/services/libp2p/libp2p_service.ts +91 -70
  191. package/src/services/peer-manager/peer_scoring.ts +25 -0
  192. package/src/services/reqresp/interface.ts +26 -1
  193. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +2 -2
  194. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +17 -0
  195. package/src/services/reqresp/protocols/tx.ts +22 -0
  196. package/src/services/reqresp/reqresp.ts +13 -3
  197. package/src/services/service.ts +20 -0
  198. package/src/services/tx_collection/config.ts +68 -0
  199. package/src/services/tx_collection/fast_tx_collection.ts +14 -2
  200. package/src/services/tx_collection/file_store_tx_collection.ts +198 -0
  201. package/src/services/tx_collection/file_store_tx_source.ts +73 -0
  202. package/src/services/tx_collection/index.ts +1 -0
  203. package/src/services/tx_collection/slow_tx_collection.ts +64 -30
  204. package/src/services/tx_collection/tx_collection.ts +109 -13
  205. package/src/services/tx_collection/tx_collection_sink.ts +17 -7
  206. package/src/services/tx_file_store/config.ts +0 -6
  207. package/src/services/tx_file_store/tx_file_store.ts +9 -7
  208. package/src/services/tx_provider.ts +8 -7
  209. package/src/test-helpers/make-test-p2p-clients.ts +3 -3
  210. package/src/test-helpers/mock-pubsub.ts +133 -3
  211. package/src/test-helpers/reqresp-nodes.ts +2 -1
  212. package/src/test-helpers/testbench-utils.ts +117 -40
  213. package/src/testbench/p2p_client_testbench_worker.ts +3 -3
@@ -8,14 +8,18 @@ export type TryAddResult = {
8
8
  added: boolean;
9
9
  /** Whether the exact item already existed */
10
10
  alreadyExists: boolean;
11
- /** Total items for this position - used for duplicate detection */
12
- totalForPosition: number;
11
+ /** Count of items for the position. Meaning varies by method:
12
+ * - tryAddBlockProposal: proposals at (slot, indexWithinCheckpoint)
13
+ * - tryAddCheckpointProposal: proposals at slot
14
+ * - tryAddCheckpointAttestation: attestations by this signer for this slot */
15
+ count: number;
13
16
  };
14
- export declare const MAX_PROPOSALS_PER_SLOT = 5;
15
- export declare const MAX_PROPOSALS_PER_POSITION = 3;
16
- export declare const ATTESTATION_CAP_BUFFER = 10;
17
+ export declare const MAX_CHECKPOINT_PROPOSALS_PER_SLOT = 5;
18
+ export declare const MAX_BLOCK_PROPOSALS_PER_POSITION = 3;
19
+ /** Maximum attestations a single signer can make per slot before being rejected. */
20
+ export declare const MAX_ATTESTATIONS_PER_SLOT_AND_SIGNER = 3;
17
21
  /** Public API interface for attestation pools. Used for typing mocks and test implementations. */
18
- export type AttestationPoolApi = Pick<AttestationPool, 'tryAddBlockProposal' | 'getBlockProposal' | 'tryAddCheckpointProposal' | 'getCheckpointProposal' | 'addOwnCheckpointAttestations' | 'tryAddCheckpointAttestation' | 'deleteOlderThan' | 'getCheckpointAttestationsForSlot' | 'getCheckpointAttestationsForSlotAndProposal' | 'isEmpty'>;
22
+ export type AttestationPoolApi = Pick<AttestationPool, 'tryAddBlockProposal' | 'getBlockProposal' | 'tryAddCheckpointProposal' | 'getCheckpointProposal' | 'addOwnCheckpointAttestations' | 'tryAddCheckpointAttestation' | 'deleteOlderThan' | 'getCheckpointAttestationsForSlot' | 'getCheckpointAttestationsForSlotAndProposal' | 'hasBlockProposalsForSlot' | 'isEmpty'>;
19
23
  /**
20
24
  * Pool for storing attestations and proposals collected by a validator.
21
25
  *
@@ -31,6 +35,7 @@ export declare class AttestationPool {
31
35
  private checkpointProposalsForSlot;
32
36
  private blockProposals;
33
37
  private blockProposalsForSlotAndIndex;
38
+ private checkpointAttestationsPerSlotAndSigner;
34
39
  constructor(store: AztecAsyncKVStore, telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
35
40
  private poolStats;
36
41
  /** Returns whether the pool is empty. */
@@ -41,6 +46,8 @@ export declare class AttestationPool {
41
46
  private getAttestationKeyRangeForSlot;
42
47
  /** Returns range bounds for querying all attestations for a given (slot, proposalId). */
43
48
  private getAttestationKeyRangeForProposal;
49
+ /** Creates a key for the per-signer-per-slot attestation index. Uses padded slot for lexicographic ordering. */
50
+ private getSlotSignerKey;
44
51
  /** Number of bits reserved for indexWithinCheckpoint in position keys. */
45
52
  private static readonly INDEX_BITS;
46
53
  /** Maximum indexWithinCheckpoint value (2^10 - 1 = 1023). */
@@ -70,6 +77,8 @@ export declare class AttestationPool {
70
77
  * @return The block proposal if it exists, otherwise undefined.
71
78
  */
72
79
  getBlockProposal(id: string): Promise<BlockProposal | undefined>;
80
+ /** Checks if any block proposals exist for a given slot (at index 0). */
81
+ hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean>;
73
82
  /**
74
83
  * Attempts to add a checkpoint proposal to the pool.
75
84
  *
@@ -128,16 +137,16 @@ export declare class AttestationPool {
128
137
  *
129
138
  * This method performs validation and addition in a single call:
130
139
  * - Checks if the attestation already exists (returns alreadyExists: true if so)
131
- * - Checks if the (slot, proposalId) has reached the attestation cap (returns added: false if so)
140
+ * - Checks if this signer has reached the per-signer attestation cap for this slot
132
141
  * - Adds the attestation if validation passes
133
142
  *
134
143
  * @param attestation - The checkpoint attestation to add
135
- * @param committeeSize - Committee size for the attestation's slot
136
- * @returns Result indicating whether the attestation was added and existence info
144
+ * @returns Result indicating whether the attestation was added, existence info, and count of
145
+ * attestations by this signer for this slot (for equivocation detection)
137
146
  */
138
- tryAddCheckpointAttestation(attestation: CheckpointAttestation, committeeSize: number): Promise<TryAddResult>;
139
- private getAttestationCount;
147
+ tryAddCheckpointAttestation(attestation: CheckpointAttestation): Promise<TryAddResult>;
148
+ private getSignerAttestationCountForSlot;
140
149
  }
141
150
  /** Creates an AttestationPool backed by a temporary store for testing. */
142
151
  export declare function createTestAttestationPool(telemetry?: TelemetryClient): Promise<AttestationPool>;
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fcG9vbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy9hdHRlc3RhdGlvbl9wb29sL2F0dGVzdGF0aW9uX3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF5QixVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlwRixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQ0wsYUFBYSxFQUNiLHFCQUFxQixFQUVyQixLQUFLLHNCQUFzQixFQUM1QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUluRiw0RUFBNEU7QUFDNUUsTUFBTSxNQUFNLFlBQVksR0FBRztJQUN6QixpQ0FBaUM7SUFDakMsS0FBSyxFQUFFLE9BQU8sQ0FBQztJQUNmLDZDQUE2QztJQUM3QyxhQUFhLEVBQUUsT0FBTyxDQUFDO0lBQ3ZCLG1FQUFtRTtJQUNuRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7Q0FDMUIsQ0FBQztBQUVGLGVBQU8sTUFBTSxzQkFBc0IsSUFBSSxDQUFDO0FBQ3hDLGVBQU8sTUFBTSwwQkFBMEIsSUFBSSxDQUFDO0FBQzVDLGVBQU8sTUFBTSxzQkFBc0IsS0FBSyxDQUFDO0FBRXpDLGtHQUFrRztBQUNsRyxNQUFNLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUNuQyxlQUFlLEVBQ2IscUJBQXFCLEdBQ3JCLGtCQUFrQixHQUNsQiwwQkFBMEIsR0FDMUIsdUJBQXVCLEdBQ3ZCLDhCQUE4QixHQUM5Qiw2QkFBNkIsR0FDN0IsaUJBQWlCLEdBQ2pCLGtDQUFrQyxHQUNsQyw2Q0FBNkMsR0FDN0MsU0FBUyxDQUNaLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILHFCQUFhLGVBQWU7SUFzQnhCLE9BQU8sQ0FBQyxLQUFLO0lBRWIsT0FBTyxDQUFD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
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fcG9vbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy9hdHRlc3RhdGlvbl9wb29sL2F0dGVzdGF0aW9uX3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF5QixVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlwRixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQ0wsYUFBYSxFQUNiLHFCQUFxQixFQUVyQixLQUFLLHNCQUFzQixFQUM1QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUluRiw0RUFBNEU7QUFDNUUsTUFBTSxNQUFNLFlBQVksR0FBRztJQUN6QixpQ0FBaUM7SUFDakMsS0FBSyxFQUFFLE9BQU8sQ0FBQztJQUNmLDZDQUE2QztJQUM3QyxhQUFhLEVBQUUsT0FBTyxDQUFDO0lBQ3ZCOzs7bUZBRytFO0lBQy9FLEtBQUssRUFBRSxNQUFNLENBQUM7Q0FDZixDQUFDO0FBRUYsZUFBTyxNQUFNLGlDQUFpQyxJQUFJLENBQUM7QUFDbkQsZUFBTyxNQUFNLGdDQUFnQyxJQUFJLENBQUM7QUFDbEQsb0ZBQW9GO0FBQ3BGLGVBQU8sTUFBTSxvQ0FBb0MsSUFBSSxDQUFDO0FBRXRELGtHQUFrRztBQUNsRyxNQUFNLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUNuQyxlQUFlLEVBQ2IscUJBQXFCLEdBQ3JCLGtCQUFrQixHQUNsQiwwQkFBMEIsR0FDMUIsdUJBQXVCLEdBQ3ZCLDhCQUE4QixHQUM5Qiw2QkFBNkIsR0FDN0IsaUJBQWlCLEdBQ2pCLGtDQUFrQyxHQUNsQyw2Q0FBNkMsR0FDN0MsMEJBQTBCLEdBQzFCLFNBQVMsQ0FDWixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxxQkFBYSxlQUFlO0lBMEJ4QixPQUFP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
@@ -1 +1 @@
1
- {"version":3,"file":"attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAIpF,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,aAAa,EACb,qBAAqB,EAErB,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAInF,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GAAG;IACzB,iCAAiC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,6CAA6C;IAC7C,aAAa,EAAE,OAAO,CAAC;IACvB;;;mFAG+E;IAC/E,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,oFAAoF;AACpF,eAAO,MAAM,oCAAoC,IAAI,CAAC;AAEtD,kGAAkG;AAClG,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,eAAe,EACb,qBAAqB,GACrB,kBAAkB,GAClB,0BAA0B,GAC1B,uBAAuB,GACvB,8BAA8B,GAC9B,6BAA6B,GAC7B,iBAAiB,GACjB,kCAAkC,GAClC,6CAA6C,GAC7C,0BAA0B,GAC1B,SAAS,CACZ,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,eAAe;IA0BxB,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,GAAG;IA3Bb,OAAO,CAAC,OAAO,CAA6C;IAI5D,OAAO,CAAC,sBAAsB,CAAgC;IAG9D,OAAO,CAAC,mBAAmB,CAAgC;IAI3D,OAAO,CAAC,0BAA0B,CAAqC;IAGvE,OAAO,CAAC,cAAc,CAAgC;IAItD,OAAO,CAAC,6BAA6B,CAAqC;IAI1E,OAAO,CAAC,sCAAsC,CAAqC;IAEnF,YACU,KAAK,EAAE,iBAAiB,EAChC,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAyC,EAerD;IAED,OAAO,CAAC,SAAS,CAIf;IAEF,yCAAyC;IAC5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAQvC;IAED,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAIzB,2EAA2E;IAC3E,OAAO,CAAC,6BAA6B;IAKrC,yFAAyF;IACzF,OAAO,CAAC,iCAAiC;IAKzC,gHAAgH;IAChH,OAAO,CAAC,gBAAgB;IAKxB,0EAA0E;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAM;IACxC,6DAA6D;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAyC;IAE1E,wFAAwF;IACxF,OAAO,CAAC,mBAAmB;IAS3B;;;;;;;;;;OAUG;IACU,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAsCpF;IAED,4FAA4F;IAC5F,OAAO,CAAC,gCAAgC;YAS1B,gBAAgB;IAU9B;;;;;;OAMG;IACU,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAW5E;IAED,yEAAyE;IAC5D,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAIxE;IAED;;;;;;;;;;;;;;OAcG;IACU,wBAAwB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CA2B7F;YAGa,qBAAqB;IAQnC;;;;;;;;OAQG;IACU,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAW1F;IAED;;;OAGG;IACU,4BAA4B,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC9F;IAED;;;;;OAKG;IACU,gCAAgC,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAShG;IAED;;;;;;OAMG;IACU,2CAA2C,CACtD,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CASlC;IAED;;;;OAIG;IACU,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDlE;IAED;;;;;;;;;;;OAWG;IACU,2BAA2B,CAAC,WAAW,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8DlG;YAGa,gCAAgC;CAI/C;AAED,0EAA0E;AAC1E,wBAAsB,yBAAyB,CAAC,SAAS,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAIrG"}
@@ -4,9 +4,9 @@ import { createLogger } from '@aztec/foundation/log';
4
4
  import { BlockProposal, CheckpointAttestation, CheckpointProposal } from '@aztec/stdlib/p2p';
5
5
  import { getTelemetryClient } from '@aztec/telemetry-client';
6
6
  import { PoolInstrumentation, PoolName } from '../instrumentation.js';
7
- export const MAX_PROPOSALS_PER_SLOT = 5;
8
- export const MAX_PROPOSALS_PER_POSITION = 3;
9
- export const ATTESTATION_CAP_BUFFER = 10;
7
+ export const MAX_CHECKPOINT_PROPOSALS_PER_SLOT = 5;
8
+ export const MAX_BLOCK_PROPOSALS_PER_POSITION = 3;
9
+ /** Maximum attestations a single signer can make per slot before being rejected. */ export const MAX_ATTESTATIONS_PER_SLOT_AND_SIGNER = 3;
10
10
  /**
11
11
  * Pool for storing attestations and proposals collected by a validator.
12
12
  *
@@ -29,6 +29,9 @@ export const ATTESTATION_CAP_BUFFER = 10;
29
29
  // Block proposals indexed by slot and index-within-checkpoint for duplicate detection
30
30
  // Key: (slot << 10) | indexWithinCheckpoint, Value: archive string
31
31
  blockProposalsForSlotAndIndex;
32
+ // Checkpoint attestations indexed by (slot, signer) for tracking attestations per (slot, signer) for duplicate detection
33
+ // Key: `${Fr(slot).toString()}-${signerAddress}` string (padded for lexicographic ordering), Value: `proposalId` strings
34
+ checkpointAttestationsPerSlotAndSigner;
32
35
  constructor(store, telemetry = getTelemetryClient(), log = createLogger('aztec:attestation_pool')){
33
36
  this.store = store;
34
37
  this.log = log;
@@ -42,6 +45,7 @@ export const ATTESTATION_CAP_BUFFER = 10;
42
45
  this.blockProposalsForSlotAndIndex = store.openMultiMap('block_proposals_for_slot_and_index');
43
46
  // Initialize checkpoint attestations storage
44
47
  this.checkpointAttestations = store.openMap('checkpoint_attestations');
48
+ this.checkpointAttestationsPerSlotAndSigner = store.openMultiMap('checkpoint_attestations_per_slot_and_signer');
45
49
  // Initialize checkpoint proposal storage
46
50
  this.checkpointProposals = store.openMap('checkpoint_proposals');
47
51
  this.checkpointProposalsForSlot = store.openMultiMap('checkpoint_proposals_for_slot');
@@ -79,6 +83,10 @@ export const ATTESTATION_CAP_BUFFER = 10;
79
83
  end: `${proposalKey}-Z`
80
84
  };
81
85
  }
86
+ /** Creates a key for the per-signer-per-slot attestation index. Uses padded slot for lexicographic ordering. */ getSlotSignerKey(slot, signerAddress) {
87
+ const slotStr = new Fr(slot).toString();
88
+ return `${slotStr}-${signerAddress}`;
89
+ }
82
90
  /** Number of bits reserved for indexWithinCheckpoint in position keys. */ static INDEX_BITS = 10;
83
91
  /** Maximum indexWithinCheckpoint value (2^10 - 1 = 1023). */ static MAX_INDEX = (1 << AttestationPool.INDEX_BITS) - 1;
84
92
  /** Creates a position key for block proposals: (slot << 10) | indexWithinCheckpoint. */ getBlockPositionKey(slot, indexWithinCheckpoint) {
@@ -103,20 +111,20 @@ export const ATTESTATION_CAP_BUFFER = 10;
103
111
  // Check if already exists
104
112
  const alreadyExists = await this.blockProposals.hasAsync(proposalId);
105
113
  if (alreadyExists) {
106
- const totalForPosition = await this.getBlockProposalCountForPosition(blockProposal.slotNumber, blockProposal.indexWithinCheckpoint);
114
+ const count = await this.getBlockProposalCountForPosition(blockProposal.slotNumber, blockProposal.indexWithinCheckpoint);
107
115
  return {
108
116
  added: false,
109
117
  alreadyExists: true,
110
- totalForPosition
118
+ count
111
119
  };
112
120
  }
113
121
  // Get current count for position and check cap, do not add if exceeded
114
- const totalForPosition = await this.getBlockProposalCountForPosition(blockProposal.slotNumber, blockProposal.indexWithinCheckpoint);
115
- if (totalForPosition >= MAX_PROPOSALS_PER_POSITION) {
122
+ const count = await this.getBlockProposalCountForPosition(blockProposal.slotNumber, blockProposal.indexWithinCheckpoint);
123
+ if (count >= MAX_BLOCK_PROPOSALS_PER_POSITION) {
116
124
  return {
117
125
  added: false,
118
126
  alreadyExists: false,
119
- totalForPosition
127
+ count
120
128
  };
121
129
  }
122
130
  // Add the proposal
@@ -129,7 +137,7 @@ export const ATTESTATION_CAP_BUFFER = 10;
129
137
  return {
130
138
  added: true,
131
139
  alreadyExists: false,
132
- totalForPosition: totalForPosition + 1
140
+ count: count + 1
133
141
  };
134
142
  });
135
143
  }
@@ -162,6 +170,11 @@ export const ATTESTATION_CAP_BUFFER = 10;
162
170
  }
163
171
  return undefined;
164
172
  }
173
+ /** Checks if any block proposals exist for a given slot (at index 0). */ async hasBlockProposalsForSlot(slot) {
174
+ const positionKey = this.getBlockPositionKey(slot, 0);
175
+ const count = await this.blockProposalsForSlotAndIndex.getValueCountAsync(positionKey);
176
+ return count > 0;
177
+ }
165
178
  /**
166
179
  * Attempts to add a checkpoint proposal to the pool.
167
180
  *
@@ -182,20 +195,20 @@ export const ATTESTATION_CAP_BUFFER = 10;
182
195
  // Check if already exists
183
196
  const alreadyExists = await this.checkpointProposals.hasAsync(proposalId);
184
197
  if (alreadyExists) {
185
- const totalForPosition = await this.checkpointProposalsForSlot.getValueCountAsync(proposal.slotNumber);
198
+ const count = await this.checkpointProposalsForSlot.getValueCountAsync(proposal.slotNumber);
186
199
  return {
187
200
  added: false,
188
201
  alreadyExists: true,
189
- totalForPosition
202
+ count
190
203
  };
191
204
  }
192
205
  // Get current count for slot and check cap
193
- const totalForPosition = await this.checkpointProposalsForSlot.getValueCountAsync(proposal.slotNumber);
194
- if (totalForPosition >= MAX_PROPOSALS_PER_SLOT) {
206
+ const count = await this.checkpointProposalsForSlot.getValueCountAsync(proposal.slotNumber);
207
+ if (count >= MAX_CHECKPOINT_PROPOSALS_PER_SLOT) {
195
208
  return {
196
209
  added: false,
197
210
  alreadyExists: false,
198
- totalForPosition
211
+ count
199
212
  };
200
213
  }
201
214
  // Add the proposal if cap not exceeded
@@ -207,7 +220,7 @@ export const ATTESTATION_CAP_BUFFER = 10;
207
220
  return {
208
221
  added: true,
209
222
  alreadyExists: false,
210
- totalForPosition: totalForPosition + 1
223
+ count: count + 1
211
224
  };
212
225
  });
213
226
  }
@@ -310,6 +323,15 @@ export const ATTESTATION_CAP_BUFFER = 10;
310
323
  await this.checkpointAttestations.delete(key);
311
324
  numberOfAttestations++;
312
325
  }
326
+ // Clean up per-signer-per-slot index. Keys are formatted as `${Fr(slot).toString()}-${signerAddress}`.
327
+ // Since Fr pads to fixed-width hex, Fr(oldestSlot) is lexicographically greater than any key with
328
+ // a smaller slot (even with the signer suffix), so using it as the exclusive end bound is correct.
329
+ const slotSignerEndKey = new Fr(oldestSlot).toString();
330
+ for await (const key of this.checkpointAttestationsPerSlotAndSigner.keysAsync({
331
+ end: slotSignerEndKey
332
+ })){
333
+ await this.checkpointAttestationsPerSlotAndSigner.delete(key);
334
+ }
313
335
  // Delete checkpoint proposals for slots < oldestSlot, using checkpointProposalsForSlot as index
314
336
  for await (const slot of this.checkpointProposalsForSlot.keysAsync({
315
337
  end: oldestSlot
@@ -347,13 +369,13 @@ export const ATTESTATION_CAP_BUFFER = 10;
347
369
  *
348
370
  * This method performs validation and addition in a single call:
349
371
  * - Checks if the attestation already exists (returns alreadyExists: true if so)
350
- * - Checks if the (slot, proposalId) has reached the attestation cap (returns added: false if so)
372
+ * - Checks if this signer has reached the per-signer attestation cap for this slot
351
373
  * - Adds the attestation if validation passes
352
374
  *
353
375
  * @param attestation - The checkpoint attestation to add
354
- * @param committeeSize - Committee size for the attestation's slot
355
- * @returns Result indicating whether the attestation was added and existence info
356
- */ async tryAddCheckpointAttestation(attestation, committeeSize) {
376
+ * @returns Result indicating whether the attestation was added, existence info, and count of
377
+ * attestations by this signer for this slot (for equivocation detection)
378
+ */ async tryAddCheckpointAttestation(attestation) {
357
379
  const slotNumber = attestation.payload.header.slotNumber;
358
380
  const proposalId = attestation.archive.toString();
359
381
  const sender = attestation.getSender();
@@ -361,50 +383,58 @@ export const ATTESTATION_CAP_BUFFER = 10;
361
383
  return {
362
384
  added: false,
363
385
  alreadyExists: false,
364
- totalForPosition: 0
386
+ count: 0
365
387
  };
366
388
  }
389
+ const signerAddress = sender.toString();
367
390
  return await this.store.transactionAsync(async ()=>{
368
- const key = this.getAttestationKey(slotNumber, proposalId, sender.toString());
391
+ const key = this.getAttestationKey(slotNumber, proposalId, signerAddress);
369
392
  const alreadyExists = await this.checkpointAttestations.hasAsync(key);
393
+ // Get count of attestations by this signer for this slot (for duplicate detection)
394
+ const signerAttestationCount = await this.getSignerAttestationCountForSlot(slotNumber, signerAddress);
370
395
  if (alreadyExists) {
371
- const total = await this.getAttestationCount(slotNumber, proposalId);
372
396
  return {
373
397
  added: false,
374
398
  alreadyExists: true,
375
- totalForPosition: total
399
+ count: signerAttestationCount
376
400
  };
377
401
  }
378
- const limit = committeeSize + ATTESTATION_CAP_BUFFER;
379
- const currentCount = await this.getAttestationCount(slotNumber, proposalId);
380
- if (currentCount >= limit) {
402
+ // Check if this signer has exceeded the per-signer cap for this slot
403
+ if (signerAttestationCount >= MAX_ATTESTATIONS_PER_SLOT_AND_SIGNER) {
404
+ this.log.debug(`Rejecting attestation: signer ${signerAddress} exceeded per-slot cap for slot ${slotNumber}`, {
405
+ slotNumber,
406
+ signerAddress,
407
+ proposalId,
408
+ signerAttestationCount
409
+ });
381
410
  return {
382
411
  added: false,
383
412
  alreadyExists: false,
384
- totalForPosition: currentCount
413
+ count: signerAttestationCount
385
414
  };
386
415
  }
416
+ // Add the attestation
387
417
  await this.checkpointAttestations.set(key, attestation.toBuffer());
388
- this.log.debug(`Added checkpoint attestation for slot ${slotNumber} from ${sender.toString()}`, {
418
+ // Track this attestation in the per-signer-per-slot index for duplicate detection
419
+ const slotSignerKey = this.getSlotSignerKey(slotNumber, signerAddress);
420
+ await this.checkpointAttestationsPerSlotAndSigner.set(slotSignerKey, proposalId);
421
+ this.log.debug(`Added checkpoint attestation for slot ${slotNumber} from ${signerAddress}`, {
389
422
  signature: attestation.signature.toString(),
390
423
  slotNumber,
391
- address: sender.toString(),
424
+ address: signerAddress,
392
425
  proposalId
393
426
  });
427
+ // Return the new count
394
428
  return {
395
429
  added: true,
396
430
  alreadyExists: false,
397
- totalForPosition: currentCount + 1
431
+ count: signerAttestationCount + 1
398
432
  };
399
433
  });
400
434
  }
401
- /** Gets the count of attestations for a given (slot, proposalId). */ async getAttestationCount(slot, proposalId) {
402
- const range = this.getAttestationKeyRangeForProposal(slot, proposalId);
403
- let count = 0;
404
- for await (const _ of this.checkpointAttestations.keysAsync(range)){
405
- count++;
406
- }
407
- return count;
435
+ /** Gets the count of attestations by a specific signer for a given slot. */ async getSignerAttestationCountForSlot(slot, signerAddress) {
436
+ const slotSignerKey = this.getSlotSignerKey(slot, signerAddress);
437
+ return await this.checkpointAttestationsPerSlotAndSigner.getValueCountAsync(slotSignerKey);
408
438
  }
409
439
  }
410
440
  /** Creates an AttestationPool backed by a temporary store for testing. */ export async function createTestAttestationPool(telemetry) {
@@ -1,3 +1,3 @@
1
1
  import { type AttestationPool } from './attestation_pool.js';
2
2
  export declare function describeAttestationPool(getAttestationPool: () => AttestationPool): void;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fcG9vbF90ZXN0X3N1aXRlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWVtX3Bvb2xzL2F0dGVzdGF0aW9uX3Bvb2wvYXR0ZXN0YXRpb25fcG9vbF90ZXN0X3N1aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0QsTUFBTSx1QkFBdUIsQ0FBQztBQUtqSCx3QkFBZ0IsdUJBQXVCLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLFFBMnJCaEYifQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fcG9vbF90ZXN0X3N1aXRlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWVtX3Bvb2xzL2F0dGVzdGF0aW9uX3Bvb2wvYXR0ZXN0YXRpb25fcG9vbF90ZXN0X3N1aXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFHckIsTUFBTSx1QkFBdUIsQ0FBQztBQUsvQix3QkFBZ0IsdUJBQXVCLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLFFBMnJCaEYifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"attestation_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool_test_suite.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,eAAe,EAAsD,MAAM,uBAAuB,CAAC;AAKjH,wBAAgB,uBAAuB,CAAC,kBAAkB,EAAE,MAAM,eAAe,QA2rBhF"}
1
+ {"version":3,"file":"attestation_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool_test_suite.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,uBAAuB,CAAC;AAK/B,wBAAgB,uBAAuB,CAAC,kBAAkB,EAAE,MAAM,eAAe,QA2rBhF"}