@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,12 +0,0 @@
1
- import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type BlockProposal, type P2PValidator, PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
- export declare class BlockProposalValidator implements P2PValidator<BlockProposal> {
4
- private epochCache;
5
- private logger;
6
- private txsPermitted;
7
- constructor(epochCache: EpochCacheInterface, opts: {
8
- txsPermitted: boolean;
9
- });
10
- validate(block: BlockProposal): Promise<PeerErrorSeverity | undefined>;
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdGLHFCQUFhLHNCQUF1QixZQUFXLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDeEUsT0FBTyxDQUFDLFVBQVUsQ0FBc0I7SUFDeEMsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsWUFBWSxDQUFVO0lBRTlCLFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUE7S0FBRSxFQUkzRTtJQUVLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsQ0ErRTNFO0NBQ0YifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/block_proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE7F,qBAAa,sBAAuB,YAAW,YAAY,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;IAE9B,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAI3E;IAEK,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA+E3E;CACF"}
@@ -1,82 +0,0 @@
1
- import { NoCommitteeError } from '@aztec/ethereum/contracts';
2
- import { createLogger } from '@aztec/foundation/log';
3
- import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
- export class BlockProposalValidator {
5
- epochCache;
6
- logger;
7
- txsPermitted;
8
- constructor(epochCache, opts){
9
- this.epochCache = epochCache;
10
- this.txsPermitted = opts.txsPermitted;
11
- this.logger = createLogger('p2p:block_proposal_validator');
12
- }
13
- async validate(block) {
14
- try {
15
- // Check signature validity first - invalid signatures are a high-severity issue
16
- const proposer = block.getSender();
17
- if (!proposer) {
18
- this.logger.debug(`Penalizing peer for block proposal with invalid signature`);
19
- return PeerErrorSeverity.MidToleranceError;
20
- }
21
- // Check if transactions are permitted when the proposal contains transaction hashes
22
- const embeddedTxCount = block.txs?.length ?? 0;
23
- if (!this.txsPermitted && (block.txHashes.length > 0 || embeddedTxCount > 0)) {
24
- this.logger.debug(`Penalizing peer for block proposal with ${block.txHashes.length} transaction(s) when transactions are not permitted`);
25
- return PeerErrorSeverity.MidToleranceError;
26
- }
27
- // If there are embedded txs, they must be listed in txHashes; if there are no txHashes, there must be no txs
28
- const hashSet = new Set(block.txHashes.map((h)=>h.toString()));
29
- const missingTxHashes = embeddedTxCount > 0 ? block.txs.filter((tx)=>!hashSet.has(tx.getTxHash().toString())).map((tx)=>tx.getTxHash().toString()) : [];
30
- if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
31
- this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
32
- embeddedTxCount,
33
- txHashesLength: block.txHashes.length,
34
- missingTxHashes
35
- });
36
- return PeerErrorSeverity.MidToleranceError;
37
- }
38
- const { currentProposer, nextProposer, currentSlot, nextSlot } = await this.epochCache.getProposerAttesterAddressInCurrentOrNextSlot();
39
- // Check that the attestation is for the current or next slot
40
- const slotNumber = block.payload.header.slotNumber;
41
- if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
42
- this.logger.debug(`Penalizing peer for invalid slot number ${slotNumber}`, {
43
- currentSlot,
44
- nextSlot
45
- });
46
- return PeerErrorSeverity.HighToleranceError;
47
- }
48
- // Check that the block proposal is from the current or next proposer
49
- if (slotNumber === currentSlot && currentProposer !== undefined && !proposer.equals(currentProposer)) {
50
- this.logger.debug(`Penalizing peer for invalid proposer for current slot ${slotNumber}`, {
51
- currentProposer,
52
- nextProposer,
53
- proposer: proposer.toString()
54
- });
55
- return PeerErrorSeverity.MidToleranceError;
56
- }
57
- if (slotNumber === nextSlot && nextProposer !== undefined && !proposer.equals(nextProposer)) {
58
- this.logger.debug(`Penalizing peer for invalid proposer for next slot ${slotNumber}`, {
59
- currentProposer,
60
- nextProposer,
61
- proposer: proposer.toString()
62
- });
63
- return PeerErrorSeverity.MidToleranceError;
64
- }
65
- // Validate tx hashes for all txs embedded in the proposal
66
- if (!(await Promise.all(block.txs?.map((tx)=>tx.validateTxHash()) ?? [])).every((v)=>v)) {
67
- this.logger.warn(`Penalizing peer for invalid tx hashes in block proposal`, {
68
- proposer,
69
- slotNumber
70
- });
71
- return PeerErrorSeverity.LowToleranceError;
72
- }
73
- return undefined;
74
- } catch (e) {
75
- // People shouldn't be sending us block proposals if the committee doesn't exist
76
- if (e instanceof NoCommitteeError) {
77
- return PeerErrorSeverity.LowToleranceError;
78
- }
79
- throw e;
80
- }
81
- }
82
- }
@@ -1,2 +0,0 @@
1
- export * from './block_proposal_validator.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9ibG9ja19wcm9wb3NhbF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQyJ9
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/block_proposal_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
@@ -1 +0,0 @@
1
- export * from './block_proposal_validator.js';
@@ -1,108 +0,0 @@
1
- import { createLogger } from '@aztec/foundation/log';
2
- import { ProtocolContractAddress } from '@aztec/protocol-contracts';
3
- import { GasFees } from '@aztec/stdlib/gas';
4
- import type { ReadonlyWorldStateAccess } from '@aztec/stdlib/interfaces/server';
5
- import { DatabasePublicStateSource, type MerkleTreeReadOperations } from '@aztec/stdlib/trees';
6
- import type { TxHash } from '@aztec/stdlib/tx';
7
-
8
- import { GasTxValidator } from '../../../msg_validators/index.js';
9
- import type { TxPoolOptions } from '../tx_pool.js';
10
- import {
11
- type EvictionContext,
12
- EvictionEvent,
13
- type EvictionResult,
14
- type EvictionRule,
15
- type PendingTxInfo,
16
- type TxPoolOperations,
17
- } from './eviction_strategy.js';
18
-
19
- export class InsufficientFeePayerBalanceRule implements EvictionRule {
20
- public readonly name = 'InsufficientFeePayerBalance';
21
- public readonly reason = 'insufficient_fee_juice';
22
-
23
- public constructor(private worldState: ReadonlyWorldStateAccess) {}
24
-
25
- private log = createLogger('p2p:mempool:tx_pool:insufficient_fee_payer_balance_rule');
26
-
27
- async evict(context: EvictionContext, txPool: TxPoolOperations): Promise<EvictionResult> {
28
- try {
29
- if (context.event === EvictionEvent.CHAIN_PRUNED) {
30
- const affectedTxs = await txPool.getPendingTxInfos();
31
- return this.evictTxs(affectedTxs, context.blockNumber, txPool);
32
- }
33
-
34
- if (context.event === EvictionEvent.BLOCK_MINED) {
35
- const affectedTxs = await txPool.getPendingTxsWithFeePayer(context.minedFeePayers);
36
-
37
- // TODO: fix this edge-case
38
- // This can lead to a race condition if we are catching up in the p2p client.
39
- // Let's say we have 3 txs for the same fee payer, which get mined in blocks 1, 2, 3.
40
- // Tx1 consumes fee juice, tx2 increases it, tx3 consumes it again. We see block1 with tx1 first, run this rule, and evict tx3.
41
- // But tx3 was valid (due to tx2) and mined on block3. And we have just removed from the mempool a tx we needed for proving/reexec.
42
- // -----
43
- // Proposed fix: evict only if node is synched
44
- return this.evictTxs(affectedTxs, context.block.getBlockNumber(), txPool);
45
- }
46
-
47
- return {
48
- reason: this.reason,
49
- success: true,
50
- txsEvicted: [],
51
- };
52
- } catch (err) {
53
- this.log.error('Failed to evict invalid transactions after mining', { err });
54
- return {
55
- reason: this.reason,
56
- success: false,
57
- txsEvicted: [],
58
- error: new Error('Failed to evict invalid txs after mining', { cause: err }),
59
- };
60
- }
61
- }
62
-
63
- private async evictTxs(
64
- candidateTxs: PendingTxInfo[],
65
- blockNumber: number,
66
- txPool: TxPoolOperations,
67
- ): Promise<EvictionResult> {
68
- const txsToEvict: TxHash[] = [];
69
- const gasValidator = this.createGasTxValidator(this.worldState.getSnapshot(blockNumber));
70
-
71
- for (const { txHash, isEvictable } of candidateTxs) {
72
- if (!isEvictable) {
73
- continue;
74
- }
75
-
76
- const tx = await txPool.getTxByHash(txHash);
77
- if (!tx) {
78
- continue;
79
- }
80
-
81
- this.log.debug(`Validating tx balance ${txHash}`);
82
-
83
- if ((await gasValidator.validateTxFee(tx)).result === 'invalid') {
84
- this.log.verbose(`Evicting tx ${txHash} from pool due to an insufficient fee payer balance`);
85
- txsToEvict.push(txHash);
86
- continue;
87
- }
88
- }
89
-
90
- if (txsToEvict.length > 0) {
91
- await txPool.deleteTxs(txsToEvict);
92
- }
93
-
94
- this.log.verbose(`Evicted ${txsToEvict.length} invalid txs after block mined`, { txsToEvict });
95
-
96
- return {
97
- reason: this.reason,
98
- success: true,
99
- txsEvicted: txsToEvict,
100
- };
101
- }
102
-
103
- private createGasTxValidator(db: MerkleTreeReadOperations): GasTxValidator {
104
- return new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, GasFees.empty());
105
- }
106
-
107
- updateConfig(_config: TxPoolOptions): void {}
108
- }
@@ -1,97 +0,0 @@
1
- import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { NoCommitteeError } from '@aztec/ethereum/contracts';
3
- import { type Logger, createLogger } from '@aztec/foundation/log';
4
- import { type BlockProposal, type P2PValidator, PeerErrorSeverity } from '@aztec/stdlib/p2p';
5
-
6
- export class BlockProposalValidator implements P2PValidator<BlockProposal> {
7
- private epochCache: EpochCacheInterface;
8
- private logger: Logger;
9
- private txsPermitted: boolean;
10
-
11
- constructor(epochCache: EpochCacheInterface, opts: { txsPermitted: boolean }) {
12
- this.epochCache = epochCache;
13
- this.txsPermitted = opts.txsPermitted;
14
- this.logger = createLogger('p2p:block_proposal_validator');
15
- }
16
-
17
- async validate(block: BlockProposal): Promise<PeerErrorSeverity | undefined> {
18
- try {
19
- // Check signature validity first - invalid signatures are a high-severity issue
20
- const proposer = block.getSender();
21
- if (!proposer) {
22
- this.logger.debug(`Penalizing peer for block proposal with invalid signature`);
23
- return PeerErrorSeverity.MidToleranceError;
24
- }
25
-
26
- // Check if transactions are permitted when the proposal contains transaction hashes
27
- const embeddedTxCount = block.txs?.length ?? 0;
28
- if (!this.txsPermitted && (block.txHashes.length > 0 || embeddedTxCount > 0)) {
29
- this.logger.debug(
30
- `Penalizing peer for block proposal with ${block.txHashes.length} transaction(s) when transactions are not permitted`,
31
- );
32
- return PeerErrorSeverity.MidToleranceError;
33
- }
34
-
35
- // If there are embedded txs, they must be listed in txHashes; if there are no txHashes, there must be no txs
36
- const hashSet = new Set(block.txHashes.map(h => h.toString()));
37
- const missingTxHashes =
38
- embeddedTxCount > 0
39
- ? block.txs!.filter(tx => !hashSet.has(tx.getTxHash().toString())).map(tx => tx.getTxHash().toString())
40
- : [];
41
- if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
42
- this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
43
- embeddedTxCount,
44
- txHashesLength: block.txHashes.length,
45
- missingTxHashes,
46
- });
47
- return PeerErrorSeverity.MidToleranceError;
48
- }
49
-
50
- const { currentProposer, nextProposer, currentSlot, nextSlot } =
51
- await this.epochCache.getProposerAttesterAddressInCurrentOrNextSlot();
52
-
53
- // Check that the attestation is for the current or next slot
54
- const slotNumber = block.payload.header.slotNumber;
55
- if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
56
- this.logger.debug(`Penalizing peer for invalid slot number ${slotNumber}`, { currentSlot, nextSlot });
57
- return PeerErrorSeverity.HighToleranceError;
58
- }
59
-
60
- // Check that the block proposal is from the current or next proposer
61
- if (slotNumber === currentSlot && currentProposer !== undefined && !proposer.equals(currentProposer)) {
62
- this.logger.debug(`Penalizing peer for invalid proposer for current slot ${slotNumber}`, {
63
- currentProposer,
64
- nextProposer,
65
- proposer: proposer.toString(),
66
- });
67
- return PeerErrorSeverity.MidToleranceError;
68
- }
69
-
70
- if (slotNumber === nextSlot && nextProposer !== undefined && !proposer.equals(nextProposer)) {
71
- this.logger.debug(`Penalizing peer for invalid proposer for next slot ${slotNumber}`, {
72
- currentProposer,
73
- nextProposer,
74
- proposer: proposer.toString(),
75
- });
76
- return PeerErrorSeverity.MidToleranceError;
77
- }
78
-
79
- // Validate tx hashes for all txs embedded in the proposal
80
- if (!(await Promise.all(block.txs?.map(tx => tx.validateTxHash()) ?? [])).every(v => v)) {
81
- this.logger.warn(`Penalizing peer for invalid tx hashes in block proposal`, {
82
- proposer,
83
- slotNumber,
84
- });
85
- return PeerErrorSeverity.LowToleranceError;
86
- }
87
-
88
- return undefined;
89
- } catch (e) {
90
- // People shouldn't be sending us block proposals if the committee doesn't exist
91
- if (e instanceof NoCommitteeError) {
92
- return PeerErrorSeverity.LowToleranceError;
93
- }
94
- throw e;
95
- }
96
- }
97
- }
@@ -1 +0,0 @@
1
- export * from './block_proposal_validator.js';