@aztec/p2p 0.76.4 → 0.77.0-testnet-ignition.21

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 (241) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +2 -2
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +55 -41
  4. package/dest/client/factory.d.ts +8 -6
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +8 -10
  7. package/dest/client/index.js +0 -1
  8. package/dest/client/p2p_client.d.ts +7 -4
  9. package/dest/client/p2p_client.d.ts.map +1 -1
  10. package/dest/client/p2p_client.js +492 -514
  11. package/dest/config.d.ts +8 -10
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +54 -47
  14. package/dest/enr/generate-enr.d.ts +9 -0
  15. package/dest/enr/generate-enr.d.ts.map +1 -0
  16. package/dest/enr/generate-enr.js +30 -0
  17. package/dest/enr/index.d.ts +2 -0
  18. package/dest/enr/index.d.ts.map +1 -0
  19. package/dest/enr/index.js +1 -0
  20. package/dest/errors/reqresp.error.js +6 -10
  21. package/dest/index.js +0 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -2
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +65 -33
  28. package/dest/mem_pools/attestation_pool/index.js +0 -1
  29. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +3 -3
  30. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +23 -20
  32. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +2 -2
  33. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +22 -26
  35. package/dest/mem_pools/attestation_pool/mocks.d.ts +3 -2
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  37. package/dest/mem_pools/attestation_pool/mocks.js +12 -7
  38. package/dest/mem_pools/index.d.ts +2 -2
  39. package/dest/mem_pools/index.d.ts.map +1 -1
  40. package/dest/mem_pools/index.js +1 -2
  41. package/dest/mem_pools/instrumentation.d.ts +1 -1
  42. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  43. package/dest/mem_pools/instrumentation.js +35 -39
  44. package/dest/mem_pools/interface.d.ts +3 -3
  45. package/dest/mem_pools/interface.d.ts.map +1 -1
  46. package/dest/mem_pools/interface.js +3 -2
  47. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +2 -2
  48. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +129 -136
  50. package/dest/mem_pools/tx_pool/index.js +0 -1
  51. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +2 -2
  52. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool/memory_tx_pool.js +46 -44
  54. package/dest/mem_pools/tx_pool/priority.d.ts +1 -1
  55. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool/priority.js +1 -3
  57. package/dest/mem_pools/tx_pool/tx_pool.d.ts +1 -1
  58. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool/tx_pool.js +3 -2
  60. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  61. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +109 -39
  63. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +2 -2
  64. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/attestation_validator/attestation_validator.js +4 -4
  66. package/dest/msg_validators/attestation_validator/index.js +0 -1
  67. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +2 -2
  68. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
  69. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +3 -3
  70. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  71. package/dest/msg_validators/index.js +0 -1
  72. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  73. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  74. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +9 -11
  75. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  76. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  77. package/dest/msg_validators/tx_validator/block_header_validator.js +18 -13
  78. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  79. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  80. package/dest/msg_validators/tx_validator/data_validator.js +102 -33
  81. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
  82. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/tx_validator/double_spend_validator.js +34 -20
  84. package/dest/msg_validators/tx_validator/index.js +0 -1
  85. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
  86. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  87. package/dest/msg_validators/tx_validator/metadata_validator.js +30 -27
  88. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  89. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  90. package/dest/msg_validators/tx_validator/tx_proof_validator.js +17 -12
  91. package/dest/services/data_store.js +57 -57
  92. package/dest/services/discv5/discV5_service.d.ts +2 -0
  93. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  94. package/dest/services/discv5/discV5_service.js +64 -36
  95. package/dest/services/dummy_service.d.ts +4 -2
  96. package/dest/services/dummy_service.d.ts.map +1 -1
  97. package/dest/services/dummy_service.js +41 -59
  98. package/dest/services/encoding.d.ts +3 -3
  99. package/dest/services/encoding.d.ts.map +1 -1
  100. package/dest/services/encoding.js +10 -9
  101. package/dest/services/gossipsub/scoring.d.ts +7 -0
  102. package/dest/services/gossipsub/scoring.d.ts.map +1 -0
  103. package/dest/services/gossipsub/scoring.js +10 -0
  104. package/dest/services/index.js +0 -1
  105. package/dest/services/libp2p/libp2p_service.d.ts +10 -33
  106. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  107. package/dest/services/libp2p/libp2p_service.js +682 -673
  108. package/dest/services/peer-manager/metrics.js +14 -7
  109. package/dest/services/peer-manager/peer_manager.d.ts +24 -6
  110. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  111. package/dest/services/peer-manager/peer_manager.js +390 -340
  112. package/dest/services/peer-manager/peer_scoring.d.ts +3 -3
  113. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  114. package/dest/services/peer-manager/peer_scoring.js +21 -19
  115. package/dest/services/reqresp/config.js +4 -5
  116. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +2 -2
  117. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  118. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +35 -28
  119. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -1
  120. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  121. package/dest/services/reqresp/connection-sampler/connection_sampler.js +67 -61
  122. package/dest/services/reqresp/index.js +1 -3
  123. package/dest/services/reqresp/interface.d.ts +2 -2
  124. package/dest/services/reqresp/interface.d.ts.map +1 -1
  125. package/dest/services/reqresp/interface.js +27 -31
  126. package/dest/services/reqresp/metrics.d.ts +1 -1
  127. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  128. package/dest/services/reqresp/metrics.js +23 -10
  129. package/dest/services/reqresp/protocols/block.d.ts +2 -2
  130. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  131. package/dest/services/reqresp/protocols/block.js +1 -2
  132. package/dest/services/reqresp/protocols/goodbye.d.ts +5 -5
  133. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  134. package/dest/services/reqresp/protocols/goodbye.js +36 -41
  135. package/dest/services/reqresp/protocols/index.js +1 -3
  136. package/dest/services/reqresp/protocols/ping.js +1 -3
  137. package/dest/services/reqresp/protocols/status.js +1 -3
  138. package/dest/services/reqresp/protocols/tx.d.ts +3 -3
  139. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  140. package/dest/services/reqresp/protocols/tx.js +6 -9
  141. package/dest/services/reqresp/rate-limiter/index.js +0 -1
  142. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +9 -9
  143. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  144. package/dest/services/reqresp/rate-limiter/rate_limiter.js +53 -46
  145. package/dest/services/reqresp/rate-limiter/rate_limits.js +16 -17
  146. package/dest/services/reqresp/reqresp.d.ts +4 -4
  147. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  148. package/dest/services/reqresp/reqresp.js +467 -464
  149. package/dest/services/reqresp/status.js +16 -17
  150. package/dest/services/service.d.ts +3 -2
  151. package/dest/services/service.d.ts.map +1 -1
  152. package/dest/services/service.js +3 -4
  153. package/dest/test-helpers/generate-peer-id-private-keys.js +2 -4
  154. package/dest/test-helpers/get-ports.js +3 -3
  155. package/dest/test-helpers/index.js +0 -1
  156. package/dest/test-helpers/make-enrs.d.ts +1 -1
  157. package/dest/test-helpers/make-enrs.d.ts.map +1 -1
  158. package/dest/test-helpers/make-enrs.js +3 -6
  159. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -6
  160. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  161. package/dest/test-helpers/make-test-p2p-clients.js +10 -12
  162. package/dest/test-helpers/reqresp-nodes.d.ts +18 -7
  163. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  164. package/dest/test-helpers/reqresp-nodes.js +64 -40
  165. package/dest/testbench/p2p_client_testbench_worker.js +61 -45
  166. package/dest/testbench/parse_log_file.d.ts +2 -0
  167. package/dest/testbench/parse_log_file.d.ts.map +1 -0
  168. package/dest/testbench/parse_log_file.js +131 -0
  169. package/dest/testbench/testbench.d.ts +2 -0
  170. package/dest/testbench/testbench.d.ts.map +1 -0
  171. package/dest/testbench/testbench.js +141 -0
  172. package/dest/{services/types.d.ts → types/index.d.ts} +1 -1
  173. package/dest/types/index.d.ts.map +1 -0
  174. package/dest/types/index.js +28 -0
  175. package/dest/util.d.ts +5 -5
  176. package/dest/util.d.ts.map +1 -1
  177. package/dest/util.js +23 -34
  178. package/dest/versioning.d.ts +3 -3
  179. package/dest/versioning.d.ts.map +1 -1
  180. package/dest/versioning.js +7 -12
  181. package/package.json +15 -13
  182. package/src/bootstrap/bootstrap.ts +30 -17
  183. package/src/client/factory.ts +9 -12
  184. package/src/client/p2p_client.ts +13 -24
  185. package/src/config.ts +14 -15
  186. package/src/enr/generate-enr.ts +39 -0
  187. package/src/enr/index.ts +1 -0
  188. package/src/mem_pools/attestation_pool/attestation_pool.ts +1 -1
  189. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +4 -3
  190. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +3 -3
  191. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +2 -2
  192. package/src/mem_pools/attestation_pool/mocks.ts +5 -5
  193. package/src/mem_pools/index.ts +2 -2
  194. package/src/mem_pools/instrumentation.ts +4 -3
  195. package/src/mem_pools/interface.ts +3 -3
  196. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +4 -4
  197. package/src/mem_pools/tx_pool/memory_tx_pool.ts +3 -3
  198. package/src/mem_pools/tx_pool/priority.ts +1 -1
  199. package/src/mem_pools/tx_pool/tx_pool.ts +1 -1
  200. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +4 -3
  201. package/src/msg_validators/attestation_validator/attestation_validator.ts +2 -2
  202. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +2 -2
  203. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +1 -1
  204. package/src/msg_validators/tx_validator/block_header_validator.ts +2 -2
  205. package/src/msg_validators/tx_validator/data_validator.ts +57 -4
  206. package/src/msg_validators/tx_validator/double_spend_validator.ts +17 -12
  207. package/src/msg_validators/tx_validator/metadata_validator.ts +2 -2
  208. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -6
  209. package/src/services/discv5/discV5_service.ts +33 -8
  210. package/src/services/dummy_service.ts +4 -2
  211. package/src/services/encoding.ts +3 -3
  212. package/src/services/gossipsub/scoring.ts +13 -0
  213. package/src/services/libp2p/libp2p_service.ts +124 -146
  214. package/src/services/peer-manager/peer_manager.ts +71 -13
  215. package/src/services/peer-manager/peer_scoring.ts +3 -3
  216. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +2 -2
  217. package/src/services/reqresp/connection-sampler/connection_sampler.ts +9 -3
  218. package/src/services/reqresp/interface.ts +4 -3
  219. package/src/services/reqresp/metrics.ts +1 -1
  220. package/src/services/reqresp/protocols/block.ts +3 -3
  221. package/src/services/reqresp/protocols/goodbye.ts +7 -7
  222. package/src/services/reqresp/protocols/tx.ts +5 -5
  223. package/src/services/reqresp/rate-limiter/rate_limiter.ts +22 -18
  224. package/src/services/reqresp/reqresp.ts +18 -11
  225. package/src/services/service.ts +3 -2
  226. package/src/test-helpers/make-enrs.ts +1 -1
  227. package/src/test-helpers/make-test-p2p-clients.ts +9 -7
  228. package/src/test-helpers/reqresp-nodes.ts +32 -18
  229. package/src/testbench/p2p_client_testbench_worker.ts +16 -9
  230. package/src/testbench/parse_log_file.ts +175 -0
  231. package/src/testbench/testbench.ts +157 -0
  232. package/src/util.ts +5 -5
  233. package/src/versioning.ts +7 -7
  234. package/dest/services/libp2p/libp2p_logger.d.ts +0 -7
  235. package/dest/services/libp2p/libp2p_logger.d.ts.map +0 -1
  236. package/dest/services/libp2p/libp2p_logger.js +0 -67
  237. package/dest/services/types.d.ts.map +0 -1
  238. package/dest/services/types.js +0 -35
  239. package/src/services/libp2p/libp2p_logger.ts +0 -78
  240. package/src/testbench/scripts/run_testbench.sh +0 -7
  241. /package/src/{services/types.ts → types/index.ts} +0 -0
@@ -2,59 +2,63 @@
2
2
  * A testbench worker that creates a p2p client and listens for commands from the parent.
3
3
  *
4
4
  * Used when running testbench commands
5
- */
6
- import { MockL2BlockSource } from '@aztec/archiver/test';
7
- import { P2PClientType, Tx, TxStatus } from '@aztec/circuit-types';
5
+ */ import { MockL2BlockSource } from '@aztec/archiver/test';
8
6
  import { EthAddress } from '@aztec/foundation/eth-address';
9
7
  import { createLogger } from '@aztec/foundation/log';
10
8
  import { sleep } from '@aztec/foundation/sleep';
11
9
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
10
+ import { P2PClientType } from '@aztec/stdlib/p2p';
11
+ import { Tx, TxStatus } from '@aztec/stdlib/tx';
12
12
  import { createP2PClient } from '../index.js';
13
13
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
14
14
  // Simple mock implementation
15
15
  function mockTxPool() {
16
16
  // Mock all methods
17
17
  return {
18
- addTxs: () => Promise.resolve(),
19
- getTxByHash: () => Promise.resolve(undefined),
20
- getArchivedTxByHash: () => Promise.resolve(undefined),
21
- markAsMined: () => Promise.resolve(),
22
- markMinedAsPending: () => Promise.resolve(),
23
- deleteTxs: () => Promise.resolve(),
24
- getAllTxs: () => Promise.resolve([]),
25
- getAllTxHashes: () => Promise.resolve([]),
26
- getPendingTxHashes: () => Promise.resolve([]),
27
- getMinedTxHashes: () => Promise.resolve([]),
28
- getTxStatus: () => Promise.resolve(TxStatus.PENDING),
18
+ addTxs: ()=>Promise.resolve(),
19
+ getTxByHash: ()=>Promise.resolve(undefined),
20
+ getArchivedTxByHash: ()=>Promise.resolve(undefined),
21
+ markAsMined: ()=>Promise.resolve(),
22
+ markMinedAsPending: ()=>Promise.resolve(),
23
+ deleteTxs: ()=>Promise.resolve(),
24
+ getAllTxs: ()=>Promise.resolve([]),
25
+ getAllTxHashes: ()=>Promise.resolve([]),
26
+ getPendingTxHashes: ()=>Promise.resolve([]),
27
+ getMinedTxHashes: ()=>Promise.resolve([]),
28
+ getTxStatus: ()=>Promise.resolve(TxStatus.PENDING)
29
29
  };
30
30
  }
31
31
  function mockAttestationPool() {
32
32
  return {
33
- addAttestations: () => Promise.resolve(),
34
- deleteAttestations: () => Promise.resolve(),
35
- deleteAttestationsOlderThan: () => Promise.resolve(),
36
- deleteAttestationsForSlot: () => Promise.resolve(),
37
- deleteAttestationsForSlotAndProposal: () => Promise.resolve(),
38
- getAttestationsForSlot: () => Promise.resolve([]),
33
+ addAttestations: ()=>Promise.resolve(),
34
+ deleteAttestations: ()=>Promise.resolve(),
35
+ deleteAttestationsOlderThan: ()=>Promise.resolve(),
36
+ deleteAttestationsForSlot: ()=>Promise.resolve(),
37
+ deleteAttestationsForSlotAndProposal: ()=>Promise.resolve(),
38
+ getAttestationsForSlot: ()=>Promise.resolve([])
39
39
  };
40
40
  }
41
41
  function mockEpochCache() {
42
42
  return {
43
- getCommittee: () => Promise.resolve([]),
44
- getProposerIndexEncoding: () => '0x',
45
- getEpochAndSlotNow: () => ({ epoch: 0n, slot: 0n, ts: 0n }),
46
- computeProposerIndex: () => 0n,
47
- getProposerInCurrentOrNextSlot: () => Promise.resolve({
48
- currentProposer: EthAddress.ZERO,
49
- nextProposer: EthAddress.ZERO,
50
- currentSlot: 0n,
51
- nextSlot: 0n,
52
- }),
53
- isInCommittee: () => Promise.resolve(false),
43
+ getCommittee: ()=>Promise.resolve([]),
44
+ getProposerIndexEncoding: ()=>'0x',
45
+ getEpochAndSlotNow: ()=>({
46
+ epoch: 0n,
47
+ slot: 0n,
48
+ ts: 0n
49
+ }),
50
+ computeProposerIndex: ()=>0n,
51
+ getProposerInCurrentOrNextSlot: ()=>Promise.resolve({
52
+ currentProposer: EthAddress.ZERO,
53
+ nextProposer: EthAddress.ZERO,
54
+ currentSlot: 0n,
55
+ nextSlot: 0n
56
+ }),
57
+ isInCommittee: ()=>Promise.resolve(false)
54
58
  };
55
59
  }
56
60
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
57
- process.on('message', async (msg) => {
61
+ process.on('message', async (msg)=>{
58
62
  const { type, config, clientIndex } = msg;
59
63
  try {
60
64
  if (type === 'START') {
@@ -71,19 +75,26 @@ process.on('message', async (msg) => {
71
75
  txPool,
72
76
  attestationPool,
73
77
  store: kvStore,
74
- logger,
78
+ logger
75
79
  };
76
80
  const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, undefined, deps);
77
81
  // Create spy for gossip messages
78
82
  let gossipMessageCount = 0;
79
- client.p2pService.handleNewGossipMessage = (...args) => {
83
+ client.p2pService.handleNewGossipMessage = (msg, msgId, source)=>{
80
84
  gossipMessageCount++;
81
- process.send({ type: 'GOSSIP_RECEIVED', count: gossipMessageCount });
82
- return client.p2pService.constructor.prototype.handleNewGossipMessage.apply(client.p2pService, args);
85
+ process.send({
86
+ type: 'GOSSIP_RECEIVED',
87
+ count: gossipMessageCount
88
+ });
89
+ return client.p2pService.constructor.prototype.handleNewGossipMessage.apply(client.p2pService, [
90
+ msg,
91
+ msgId,
92
+ source
93
+ ]);
83
94
  };
84
95
  await client.start();
85
96
  // Wait until the client is ready
86
- for (let i = 0; i < 100; i++) {
97
+ for(let i = 0; i < 100; i++){
87
98
  const isReady = client.isReady();
88
99
  logger.debug(`Client ${clientIndex} isReady: ${isReady}`);
89
100
  if (isReady) {
@@ -93,24 +104,29 @@ process.on('message', async (msg) => {
93
104
  }
94
105
  // Listen for commands from parent
95
106
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
96
- process.on('message', async (cmd) => {
97
- switch (cmd.type) {
107
+ process.on('message', async (cmd)=>{
108
+ switch(cmd.type){
98
109
  case 'STOP':
99
110
  await client.stop();
100
111
  process.exit(0);
101
112
  break;
102
113
  case 'SEND_TX':
103
114
  await client.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
104
- process.send({ type: 'TX_SENT' });
115
+ process.send({
116
+ type: 'TX_SENT'
117
+ });
105
118
  break;
106
119
  }
107
120
  });
108
- process.send({ type: 'READY' });
121
+ process.send({
122
+ type: 'READY'
123
+ });
109
124
  }
110
- }
111
- catch (err) {
112
- process.send({ type: 'ERROR', error: err.message });
125
+ } catch (err) {
126
+ process.send({
127
+ type: 'ERROR',
128
+ error: err.message
129
+ });
113
130
  process.exit(1);
114
131
  }
115
132
  });
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudF90ZXN0YmVuY2hfd29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RiZW5jaC9wMnBfY2xpZW50X3Rlc3RiZW5jaF93b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBK0IsTUFBTSxzQkFBc0IsQ0FBQztBQUVoRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc5QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU3RSw2QkFBNkI7QUFDN0IsU0FBUyxVQUFVO0lBQ2pCLG1CQUFtQjtJQUNuQixPQUFPO1FBQ0wsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDL0IsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzdDLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3JELFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQ3BDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDM0MsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9B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
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parse_log_file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse_log_file.d.ts","sourceRoot":"","sources":["../../src/testbench/parse_log_file.ts"],"names":[],"mappings":""}
@@ -0,0 +1,131 @@
1
+ // Parse Log File
2
+ // 1. Determine when a message was sent from the Sent Message log
3
+ // 2. Parse all Received Tx logs, extracting the timestamp and peer ID
4
+ // 3. Compute the delay for each peer relative to the timestamp of the sent message
5
+ // 4. Print the delays
6
+ import { createLogger } from '@aztec/foundation/log';
7
+ import * as fs from 'fs';
8
+ const logger = createLogger('parse_log_file');
9
+ function getTimestamp(line) {
10
+ const timestampMatch = line.match(/"time":(\d+)/);
11
+ if (!timestampMatch) {
12
+ return null;
13
+ }
14
+ return parseInt(timestampMatch[1], 10);
15
+ }
16
+ /**
17
+ * Parses a single log line. If the line contains an "rpc.from" event,
18
+ * it extracts the timestamp and the peer ID.
19
+ */ function parseReceivedTx(line) {
20
+ if (!line.includes('Received tx')) {
21
+ return null;
22
+ }
23
+ // Extract timestamp from the line: e.g. {"time":1740142435845}
24
+ const timestamp = getTimestamp(line);
25
+ if (!timestamp) {
26
+ logger.error('No timestamp found in received tx log');
27
+ return null;
28
+ }
29
+ // TODO: this is not correct - it is just the tx hash for now
30
+ // Extract the peer ID after "Received tx"
31
+ const peerIdMatch = line.match(/p2p:(\d+):/);
32
+ if (!peerIdMatch) {
33
+ logger.error('No peer Number found in received tx log');
34
+ return null;
35
+ }
36
+ const peerId = peerIdMatch[1];
37
+ return {
38
+ timestamp,
39
+ peerId
40
+ };
41
+ }
42
+ function parseSentMessage(line) {
43
+ if (!line.includes('Sent message')) {
44
+ return null;
45
+ }
46
+ const timestamp = getTimestamp(line);
47
+ if (!timestamp) {
48
+ logger.error('No timestamp found in sent message log');
49
+ return null;
50
+ }
51
+ return timestamp;
52
+ }
53
+ /**
54
+ * Processes the given log file, extracts all rpc.from events, computes the
55
+ * propagation delay for each peer relative to the earliest event, and prints
56
+ * some benchmark statistics.
57
+ */ function processLogFile(logFilePath, outputJsonPath) {
58
+ const content = fs.readFileSync(logFilePath, 'utf-8');
59
+ const lines = content.split('\n');
60
+ const events = [];
61
+ let t0 = 0;
62
+ // We begin our search as soon as we see the Sent message log
63
+ let messageSent = false;
64
+ for (const line of lines){
65
+ // Look for Sent message log
66
+ if (line.includes('Sent message')) {
67
+ messageSent = true;
68
+ t0 = parseSentMessage(line);
69
+ }
70
+ if (!messageSent) {
71
+ continue;
72
+ }
73
+ // Once we see the sent message log, we begin parsing Received tx logs
74
+ const event = parseReceivedTx(line);
75
+ if (event) {
76
+ events.push(event);
77
+ }
78
+ }
79
+ if (events.length === 0) {
80
+ logger.error('No message received events found in log file.');
81
+ return;
82
+ }
83
+ // Sort events by timestamp (ascending)
84
+ events.sort((a, b)=>a.timestamp - b.timestamp);
85
+ // Compute delay for each event relative to t0
86
+ const numberReceived = events.length;
87
+ const delays = events.map((e)=>({
88
+ peerId: e.peerId,
89
+ delay: e.timestamp - t0
90
+ }));
91
+ logger.info('Propagation delays (in ms) per peer:');
92
+ for (const d of delays){
93
+ logger.info(`${d.peerId}: ${d.delay} ms`);
94
+ }
95
+ // Compute basic statistics
96
+ const delayValues = delays.map((d)=>d.delay);
97
+ const minDelay = Math.min(...delayValues);
98
+ const maxDelay = Math.max(...delayValues);
99
+ const sumDelay = delayValues.reduce((sum, val)=>sum + val, 0);
100
+ const avgDelay = sumDelay / delayValues.length;
101
+ const sortedDelays = delayValues.slice().sort((a, b)=>a - b);
102
+ const medianDelay = sortedDelays[Math.floor(sortedDelays.length / 2)];
103
+ logger.info('\nBenchmark Statistics:');
104
+ logger.info(`Number of messages received: ${numberReceived}`);
105
+ logger.info(`Min delay: ${minDelay} ms`);
106
+ logger.info(`Max delay: ${maxDelay} ms`);
107
+ logger.info(`Average delay: ${avgDelay.toFixed(2)} ms`);
108
+ logger.info(`Median delay: ${medianDelay} ms`);
109
+ // If output JSON path is provided, write results to file
110
+ if (outputJsonPath) {
111
+ const result = {
112
+ delays,
113
+ stats: {
114
+ numberReceived,
115
+ minDelay,
116
+ maxDelay,
117
+ averageDelay: Number(avgDelay.toFixed(2)),
118
+ medianDelay
119
+ }
120
+ };
121
+ fs.writeFileSync(outputJsonPath, JSON.stringify(result, null, 2));
122
+ logger.info(`\nResults written to ${outputJsonPath}`);
123
+ }
124
+ }
125
+ // Get the log file path and optional output JSON path from command-line arguments
126
+ const [logFilePath, outputJsonPath] = process.argv.slice(2);
127
+ if (!logFilePath) {
128
+ logger.error('Usage: ts-node parse_log_file.ts <logFilePath> [outputJsonPath]');
129
+ process.exit(1);
130
+ }
131
+ processLogFile(logFilePath, outputJsonPath);
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=testbench.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testbench.d.ts","sourceRoot":"","sources":["../../src/testbench/testbench.ts"],"names":[],"mappings":""}
@@ -0,0 +1,141 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { sleep } from '@aztec/foundation/sleep';
4
+ import { ClientIvcProof } from '@aztec/stdlib/proofs';
5
+ import { mockTx } from '@aztec/stdlib/testing';
6
+ import { fork } from 'child_process';
7
+ import path from 'path';
8
+ import { fileURLToPath } from 'url';
9
+ import { getP2PDefaultConfig } from '../config.js';
10
+ import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
11
+ import { getPorts } from '../test-helpers/get-ports.js';
12
+ import { makeEnrs } from '../test-helpers/make-enrs.js';
13
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
14
+ const workerPath = path.join(__dirname, '../../dest/testbench/p2p_client_testbench_worker.js');
15
+ const logger = createLogger('testbench');
16
+ let processes = [];
17
+ const testChainConfig = {
18
+ l1ChainId: 31337,
19
+ version: 1,
20
+ l1Contracts: {
21
+ rollupAddress: EthAddress.random()
22
+ }
23
+ };
24
+ /**
25
+ * Cleanup function to kill all child processes
26
+ */ async function cleanup() {
27
+ logger.info('Cleaning up processes...');
28
+ await Promise.all(processes.map((proc)=>new Promise((resolve)=>{
29
+ proc.once('exit', ()=>resolve());
30
+ proc.send({
31
+ type: 'STOP'
32
+ });
33
+ })));
34
+ process.exit(0);
35
+ }
36
+ // Handle cleanup on process termination
37
+ process.on('SIGINT', ()=>void cleanup());
38
+ process.on('SIGTERM', ()=>void cleanup());
39
+ /**
40
+ * Creates a number of worker clients in separate processes
41
+ * All are configured to connect to each other and overrided with the test specific config
42
+ *
43
+ * @param numberOfClients - The number of clients to create
44
+ * @param p2pConfig - The P2P config to use for the clients
45
+ * @returns The ENRs of the created clients
46
+ */ async function makeWorkerClients(numberOfClients, p2pConfig) {
47
+ const peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfClients);
48
+ const ports = await getPorts(numberOfClients);
49
+ const peerEnrs = await makeEnrs(peerIdPrivateKeys, ports, testChainConfig);
50
+ processes = [];
51
+ const readySignals = [];
52
+ for(let i = 0; i < numberOfClients; i++){
53
+ logger.info(`Creating client ${i}`);
54
+ const addr = `127.0.0.1:${ports[i]}`;
55
+ const listenAddr = `0.0.0.0:${ports[i]}`;
56
+ // Maximum seed with 10 other peers to allow peer discovery to connect them at a smoother rate
57
+ const otherNodes = peerEnrs.filter((_, ind)=>ind < Math.min(i, 10));
58
+ const config = {
59
+ ...getP2PDefaultConfig(),
60
+ p2pEnabled: true,
61
+ peerIdPrivateKey: peerIdPrivateKeys[i],
62
+ tcpListenAddress: listenAddr,
63
+ udpListenAddress: listenAddr,
64
+ tcpAnnounceAddress: addr,
65
+ udpAnnounceAddress: addr,
66
+ bootstrapNodes: [
67
+ ...otherNodes
68
+ ],
69
+ ...p2pConfig
70
+ };
71
+ const childProcess = fork(workerPath);
72
+ childProcess.send({
73
+ type: 'START',
74
+ config,
75
+ clientIndex: i
76
+ });
77
+ // Wait for ready signal
78
+ readySignals.push(new Promise((resolve, reject)=>{
79
+ childProcess.once('message', (msg)=>{
80
+ if (msg.type === 'READY') {
81
+ resolve(undefined);
82
+ }
83
+ if (msg.type === 'ERROR') {
84
+ reject(new Error(msg.error));
85
+ }
86
+ });
87
+ }));
88
+ processes.push(childProcess);
89
+ }
90
+ // Wait for peers to all connect with each other
91
+ await sleep(4000);
92
+ // Wait for all peers to be booted up
93
+ await Promise.all(readySignals);
94
+ return peerEnrs;
95
+ }
96
+ async function main() {
97
+ try {
98
+ // Read configuration file name from command line args
99
+ const configFile = process.argv[2];
100
+ if (!configFile) {
101
+ throw new Error('Configuration file must be provided as first argument');
102
+ }
103
+ const configPath = path.join(__dirname, '../../testbench/configurations', configFile);
104
+ const config = await import(configPath, {
105
+ assert: {
106
+ type: 'json'
107
+ }
108
+ });
109
+ const testConfig = {
110
+ ...testChainConfig,
111
+ ...config.default
112
+ };
113
+ const numberOfClients = config.default.numberOfClients;
114
+ // Setup clients in separate processes
115
+ await makeWorkerClients(numberOfClients, testConfig);
116
+ // wait a bit longer for all peers to be ready
117
+ await sleep(5000);
118
+ logger.info('Workers Ready');
119
+ // Send tx from client 0
120
+ const tx = await mockTx(1, {
121
+ clientIvcProof: ClientIvcProof.random()
122
+ });
123
+ processes[0].send({
124
+ type: 'SEND_TX',
125
+ tx: tx.toBuffer()
126
+ });
127
+ logger.info('Transaction sent from client 0');
128
+ // Give time for message propagation
129
+ await sleep(30000);
130
+ logger.info('Checking message propagation results');
131
+ await cleanup();
132
+ } catch (error) {
133
+ logger.error('Test failed with error:', error);
134
+ await cleanup();
135
+ process.exit(1);
136
+ }
137
+ }
138
+ main().catch((error)=>{
139
+ logger.error('Unhandled error:', error);
140
+ cleanup().catch(()=>process.exit(1));
141
+ });
@@ -29,4 +29,4 @@ export declare enum GossipSubEvent {
29
29
  * Aztec network specific types
30
30
  */
31
31
  export declare const AZTEC_ENR_KEY = "aztec";
32
- //# sourceMappingURL=types.d.ts.map
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;qDAEqD;AAErD;;GAEG;AACH,oBAAY,SAAS;IACnB,UAAU,oBAAoB;IAC9B,SAAS,iBAAiB;IAC1B,YAAY,oBAAoB;CACjC;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,UAAU,eAAe;IACzB,SAAS,aAAa;CACvB;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB,OAAO,sBAAsB;CAC9B;AAED;;qDAEqD;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC"}
@@ -0,0 +1,28 @@
1
+ /***************************************************
2
+ * Events
3
+ ***************************************************/ /**
4
+ * Events emitted from the libp2p node.
5
+ */ export var PeerEvent = /*#__PURE__*/ function(PeerEvent) {
6
+ PeerEvent["DISCOVERED"] = "peer:discovered";
7
+ PeerEvent["CONNECTED"] = "peer:connect";
8
+ PeerEvent["DISCONNECTED"] = "peer:disconnect";
9
+ return PeerEvent;
10
+ }({});
11
+ /**
12
+ * Events emitted from the Discv5 service.
13
+ */ export var Discv5Event = /*#__PURE__*/ function(Discv5Event) {
14
+ Discv5Event["DISCOVERED"] = "discovered";
15
+ Discv5Event["ENR_ADDED"] = "enrAdded";
16
+ return Discv5Event;
17
+ }({});
18
+ /**
19
+ * Events emitted from the GossipSub protocol.
20
+ */ export var GossipSubEvent = /*#__PURE__*/ function(GossipSubEvent) {
21
+ GossipSubEvent["MESSAGE"] = "gossipsub:message";
22
+ return GossipSubEvent;
23
+ }({});
24
+ /***************************************************
25
+ * Types
26
+ ***************************************************/ /**
27
+ * Aztec network specific types
28
+ */ export const AZTEC_ENR_KEY = 'aztec';
package/dest/util.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { type AztecAsyncKVStore } from '@aztec/kv-store';
2
- import { type DataStoreConfig } from '@aztec/kv-store/config';
1
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
2
+ import type { DataStoreConfig } from '@aztec/kv-store/config';
3
3
  import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
4
- import { type PeerId } from '@libp2p/interface';
5
- import { type ConnectionManager } from '@libp2p/interface-internal';
4
+ import type { PeerId } from '@libp2p/interface';
5
+ import type { ConnectionManager } from '@libp2p/interface-internal';
6
6
  import type { Libp2p } from 'libp2p';
7
- import { type P2PConfig } from './config.js';
7
+ import type { P2PConfig } from './config.js';
8
8
  export interface PubSubLibp2p extends Libp2p {
9
9
  services: {
10
10
  pubsub: GossipSub;
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE;QACR,MAAM,EAAE,SAAS,CAAC;QAClB,UAAU,EAAE;YACV,iBAAiB,EAAE,iBAAiB,CAAC;SACtC,CAAC;KACH,CAAC;CACH;AAED;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CASnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhF;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CA6CtC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE;QACR,MAAM,EAAE,SAAS,CAAC;QAClB,UAAU,EAAE;YACV,iBAAiB,EAAE,iBAAiB,CAAC;SACtC,CAAC;KACH,CAAC;CACH;AAED;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CASnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhF;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CA6CtC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}