@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
package/dest/util.js CHANGED
@@ -8,8 +8,7 @@ import { resolve } from 'dns/promises';
8
8
  * const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
9
9
  * @param address - The address string to convert. Has to be in the format <addr>:<port>.
10
10
  * @param protocol - The protocol to use in the multiaddr string.
11
- * @returns A multiaddr compliant string. */
12
- export function convertToMultiaddr(address, protocol) {
11
+ * @returns A multiaddr compliant string. */ export function convertToMultiaddr(address, protocol) {
13
12
  const [addr, port] = splitAddressPort(address, false);
14
13
  const multiaddrPrefix = addressToMultiAddressType(addr);
15
14
  if (multiaddrPrefix === 'dns') {
@@ -20,8 +19,7 @@ export function convertToMultiaddr(address, protocol) {
20
19
  /**
21
20
  * Splits an <address>:<port> string into its components.
22
21
  * @returns The ip6 or ip4 address & port separately
23
- */
24
- export function splitAddressPort(address, allowEmptyAddress) {
22
+ */ export function splitAddressPort(address, allowEmptyAddress) {
25
23
  let addr;
26
24
  let port;
27
25
  if (address.startsWith('[')) {
@@ -31,20 +29,21 @@ export function splitAddressPort(address, allowEmptyAddress) {
31
29
  throw new Error(`Invalid IPv6 address format:${address}. Expected format: [<addr>]:<port>`);
32
30
  }
33
31
  [, addr, port] = match;
34
- }
35
- else {
32
+ } else {
36
33
  // IPv4 address
37
34
  [addr, port] = address.split(':');
38
- if ((!addr && !allowEmptyAddress) || !port) {
35
+ if (!addr && !allowEmptyAddress || !port) {
39
36
  throw new Error(`Invalid address format: ${address}. Expected format: <addr>:<port>`);
40
37
  }
41
38
  }
42
- return [addr, port];
39
+ return [
40
+ addr,
41
+ port
42
+ ];
43
43
  }
44
44
  /**
45
45
  * Queries the public IP address of the machine.
46
- */
47
- export async function getPublicIp() {
46
+ */ export async function getPublicIp() {
48
47
  const resp = await fetch('http://checkip.amazonaws.com/');
49
48
  const text = await resp.text();
50
49
  return text.trim();
@@ -58,8 +57,7 @@ export async function resolveAddressIfNecessary(address) {
58
57
  throw new Error(`Could not resolve address: ${addr}`);
59
58
  }
60
59
  return `${resolvedAddresses[0]}:${port}`;
61
- }
62
- else {
60
+ } else {
63
61
  return address;
64
62
  }
65
63
  }
@@ -68,23 +66,19 @@ export async function resolveAddressIfNecessary(address) {
68
66
  function addressToMultiAddressType(address) {
69
67
  if (address.includes(':')) {
70
68
  return 'ip6';
71
- }
72
- else if (address.match(/^[\d.]+$/)) {
69
+ } else if (address.match(/^[\d.]+$/)) {
73
70
  return 'ip4';
74
- }
75
- else {
71
+ } else {
76
72
  return 'dns';
77
73
  }
78
74
  }
79
75
  export async function configureP2PClientAddresses(_config) {
80
- const config = { ..._config };
81
- const { tcpAnnounceAddress: configTcpAnnounceAddress, udpAnnounceAddress: configUdpAnnounceAddress, queryForIp, } = config;
82
- config.tcpAnnounceAddress = configTcpAnnounceAddress
83
- ? await resolveAddressIfNecessary(configTcpAnnounceAddress)
84
- : undefined;
85
- config.udpAnnounceAddress = configUdpAnnounceAddress
86
- ? await resolveAddressIfNecessary(configUdpAnnounceAddress)
87
- : undefined;
76
+ const config = {
77
+ ..._config
78
+ };
79
+ const { tcpAnnounceAddress: configTcpAnnounceAddress, udpAnnounceAddress: configUdpAnnounceAddress, queryForIp } = config;
80
+ config.tcpAnnounceAddress = configTcpAnnounceAddress ? await resolveAddressIfNecessary(configTcpAnnounceAddress) : undefined;
81
+ config.udpAnnounceAddress = configUdpAnnounceAddress ? await resolveAddressIfNecessary(configUdpAnnounceAddress) : undefined;
88
82
  // create variable for re-use if needed
89
83
  let publicIp;
90
84
  // check if no announce IP was provided
@@ -94,8 +88,7 @@ export async function configureP2PClientAddresses(_config) {
94
88
  publicIp = await getPublicIp();
95
89
  const tcpAnnounceAddress = `${publicIp}:${splitTcpAnnounceAddress[1]}`;
96
90
  config.tcpAnnounceAddress = tcpAnnounceAddress;
97
- }
98
- else {
91
+ } else {
99
92
  throw new Error(`Invalid announceTcpAddress provided: ${configTcpAnnounceAddress}. Expected format: <addr>:<port>`);
100
93
  }
101
94
  }
@@ -104,9 +97,8 @@ export async function configureP2PClientAddresses(_config) {
104
97
  // If announceUdpAddress is not provided, use announceTcpAddress
105
98
  if (!queryForIp && config.tcpAnnounceAddress) {
106
99
  config.udpAnnounceAddress = config.tcpAnnounceAddress;
107
- }
108
- else if (queryForIp) {
109
- const udpPublicIp = publicIp || (await getPublicIp());
100
+ } else if (queryForIp) {
101
+ const udpPublicIp = publicIp || await getPublicIp();
110
102
  const udpAnnounceAddress = `${udpPublicIp}:${splitUdpAnnounceAddress[1]}`;
111
103
  config.udpAnnounceAddress = udpAnnounceAddress;
112
104
  }
@@ -120,8 +112,7 @@ export async function configureP2PClientAddresses(_config) {
120
112
  * 2. If not, check we have a peer id private key persisted in the node
121
113
  * 3. If not, create a new one, then persist it in the node
122
114
  *
123
- */
124
- export async function getPeerIdPrivateKey(config, store) {
115
+ */ export async function getPeerIdPrivateKey(config, store) {
125
116
  const peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
126
117
  if (config.peerIdPrivateKey) {
127
118
  await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey);
@@ -140,12 +131,10 @@ export async function getPeerIdPrivateKey(config, store) {
140
131
  * Create a libp2p peer ID from the private key.
141
132
  * @param privateKey - peer ID private key as hex string
142
133
  * @returns The peer ID.
143
- */
144
- export async function createLibP2PPeerIdFromPrivateKey(privateKey) {
134
+ */ export async function createLibP2PPeerIdFromPrivateKey(privateKey) {
145
135
  if (!privateKey?.length) {
146
136
  throw new Error('No peer private key provided');
147
137
  }
148
138
  const asLibp2pPrivateKey = await unmarshalPrivateKey(new Uint8Array(Buffer.from(privateKey, 'hex')));
149
139
  return await createFromPrivKey(asLibp2pPrivateKey);
150
140
  }
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUc5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBY3ZDOzs7Ozs7OzZDQU82QztBQUM3QyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZSxFQUFFLFFBQXVCO0lBQ3pFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXRELE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELElBQUksZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsT0FBTyxJQUFJLGVBQWUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzNELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLGlCQUEwQjtJQUMxRSxJQUFJLElBQVksQ0FBQztJQUNqQixJQUFJLElBQVksQ0FBQztJQUVqQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QiwyQ0FBMkM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLE9BQU8sb0NBQW9DLENBQUMs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
@@ -1,8 +1,8 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  /// <reference types="node" resolution-mode="require"/>
3
- import { type ComponentsVersions } from '@aztec/circuit-types';
4
- import { type ChainConfig } from '@aztec/circuit-types/config';
5
- import { type SignableENR } from '@chainsafe/enr';
3
+ import type { ChainConfig } from '@aztec/stdlib/config';
4
+ import { type ComponentsVersions } from '@aztec/stdlib/versioning';
5
+ import type { SignableENR } from '@chainsafe/enr';
6
6
  /** Returns the component versions based on config and this build. */
7
7
  export declare function getVersions(config: ChainConfig): ComponentsVersions;
8
8
  /** Sets the aztec key on the ENR record with versioning info. */
@@ -1 +1 @@
1
- {"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":";;AAAA,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAK/D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AASlD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,sBAE9C;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,UAAc,sBAK5F;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,QAU1F"}
1
+ {"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":";;AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AASlD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,sBAE9C;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,UAAc,sBAK5F;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,QAU1F"}
@@ -1,32 +1,28 @@
1
- import { checkCompressedComponentVersion, compressComponentVersions, getComponentsVersionsFromConfig, } from '@aztec/circuit-types';
2
1
  import { toBufferBE } from '@aztec/foundation/bigint-buffer';
3
- import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vks';
2
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
4
3
  import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
4
+ import { checkCompressedComponentVersion, compressComponentVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
5
5
  import xxhashFactory from 'xxhash-wasm';
6
- import { AZTEC_ENR_KEY } from './services/types.js';
6
+ import { AZTEC_ENR_KEY } from './types/index.js';
7
7
  const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
8
8
  const XX_HASH_LEN = 8;
9
9
  const xxhash = await xxhashFactory();
10
- /** Returns the component versions based on config and this build. */
11
- export function getVersions(config) {
10
+ /** Returns the component versions based on config and this build. */ export function getVersions(config) {
12
11
  return getComponentsVersionsFromConfig(config, protocolContractTreeRoot, getVKTreeRoot());
13
12
  }
14
- /** Sets the aztec key on the ENR record with versioning info. */
15
- export function setAztecEnrKey(enr, config, useXxHash = USE_XX_HASH) {
13
+ /** Sets the aztec key on the ENR record with versioning info. */ export function setAztecEnrKey(enr, config, useXxHash = USE_XX_HASH) {
16
14
  const versions = getVersions(config);
17
15
  const value = versionsToEnrValue(versions, useXxHash);
18
16
  enr.set(AZTEC_ENR_KEY, value);
19
17
  return versions;
20
18
  }
21
- /** Checks the given value from an ENR record against the expected versions. */
22
- export function checkAztecEnrVersion(enrValue, expectedVersions) {
19
+ /** Checks the given value from an ENR record against the expected versions. */ export function checkAztecEnrVersion(enrValue, expectedVersions) {
23
20
  if (enrValue.length === XX_HASH_LEN) {
24
21
  const expected = versionsToEnrValue(expectedVersions, true);
25
22
  if (!Buffer.from(enrValue).equals(expected)) {
26
23
  throw new Error(`Expected ENR version ${expected.toString('hex')} but received ${enrValue.toString('hex')}`);
27
24
  }
28
- }
29
- else {
25
+ } else {
30
26
  const actual = Buffer.from(enrValue).toString();
31
27
  checkCompressedComponentVersion(actual, expectedVersions);
32
28
  }
@@ -35,4 +31,3 @@ function versionsToEnrValue(versions, useXxHash) {
35
31
  const compressed = compressComponentVersions(versions);
36
32
  return useXxHash ? toBufferBE(xxhash.h64(compressed), XX_HASH_LEN) : Buffer.from(compressed);
37
33
  }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCwrQkFBK0IsRUFDL0IseUJBQXlCLEVBQ3pCLCtCQUErQixHQUNoQyxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHckUsT0FBTyxhQUFhLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyw2REFBNkQ7QUFDeEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxFQUFFLENBQUM7QUFFckMscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBbUI7SUFDN0MsT0FBTywrQkFBK0IsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUM1RixDQUFDO0FBRUQsaUVBQWlFO0FBQ2pFLE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBZ0IsRUFBRSxNQUFtQixFQUFFLFNBQVMsR0FBRyxXQUFXO0lBQzNGLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUIsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsUUFBZ0IsRUFBRSxnQkFBb0M7SUFDekYsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGlCQUFpQixRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvRyxDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hELCtCQUErQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxRQUE0QixFQUFFLFNBQWtCO0lBQzFFLE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvRixDQUFDIn0=
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "name": "@aztec/p2p",
3
- "version": "0.76.4",
3
+ "version": "0.77.0-testnet-ignition.21",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
7
7
  "./test-helpers": "./dest/test-helpers/index.js",
8
8
  "./bootstrap": "./dest/bootstrap/bootstrap.js",
9
9
  "./config": "./dest/config.js",
10
- "./msg_validators": "./dest/msg_validators/index.js"
10
+ "./msg_validators": "./dest/msg_validators/index.js",
11
+ "./enr": "./dest/enr/index.js",
12
+ "./types": "./dest/types/index.js"
11
13
  },
12
14
  "typedocOptions": {
13
15
  "entryPoints": [
@@ -22,7 +24,7 @@
22
24
  "clean": "rm -rf ./dest .tsbuildinfo",
23
25
  "formatting": "run -T prettier --check ./src && run -T eslint ./src",
24
26
  "formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
25
- "test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
27
+ "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
26
28
  "start": "node ./dest",
27
29
  "start:dev": "tsc-watch -p tsconfig.json --onSuccess 'yarn start'"
28
30
  },
@@ -57,20 +59,20 @@
57
59
  "reporters": [
58
60
  "default"
59
61
  ],
60
- "testTimeout": 30000,
62
+ "testTimeout": 120000,
61
63
  "setupFiles": [
62
64
  "../../foundation/src/jest/setup.mjs"
63
65
  ]
64
66
  },
65
67
  "dependencies": {
66
- "@aztec/circuit-types": "0.76.4",
67
- "@aztec/circuits.js": "0.76.4",
68
- "@aztec/epoch-cache": "0.76.4",
69
- "@aztec/foundation": "0.76.4",
70
- "@aztec/kv-store": "0.76.4",
71
- "@aztec/noir-protocol-circuits-types": "0.76.4",
72
- "@aztec/protocol-contracts": "0.76.4",
73
- "@aztec/telemetry-client": "0.76.4",
68
+ "@aztec/constants": "0.77.0-testnet-ignition.21",
69
+ "@aztec/epoch-cache": "0.77.0-testnet-ignition.21",
70
+ "@aztec/foundation": "0.77.0-testnet-ignition.21",
71
+ "@aztec/kv-store": "0.77.0-testnet-ignition.21",
72
+ "@aztec/noir-protocol-circuits-types": "0.77.0-testnet-ignition.21",
73
+ "@aztec/protocol-contracts": "0.77.0-testnet-ignition.21",
74
+ "@aztec/stdlib": "0.77.0-testnet-ignition.21",
75
+ "@aztec/telemetry-client": "0.77.0-testnet-ignition.21",
74
76
  "@chainsafe/discv5": "9.0.0",
75
77
  "@chainsafe/enr": "3.0.0",
76
78
  "@chainsafe/libp2p-gossipsub": "13.0.0",
@@ -99,7 +101,7 @@
99
101
  "xxhash-wasm": "^1.1.0"
100
102
  },
101
103
  "devDependencies": {
102
- "@aztec/archiver": "workspace:^",
104
+ "@aztec/archiver": "0.77.0-testnet-ignition.21",
103
105
  "@jest/globals": "^29.5.0",
104
106
  "@types/jest": "^29.5.0",
105
107
  "@types/node": "^18.14.6",
@@ -1,16 +1,16 @@
1
- import { type P2PBootstrapApi } from '@aztec/circuit-types/interfaces';
2
1
  import { createLogger } from '@aztec/foundation/log';
3
- import { type AztecAsyncKVStore } from '@aztec/kv-store';
2
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
+ import type { P2PBootstrapApi } from '@aztec/stdlib/interfaces/server';
4
4
  import { OtelMetricsAdapter, type TelemetryClient } from '@aztec/telemetry-client';
5
5
 
6
6
  import { Discv5, type Discv5EventEmitter } from '@chainsafe/discv5';
7
- import { type ENR, SignableENR } from '@chainsafe/enr';
7
+ import { ENR, type SignableENR } from '@chainsafe/enr';
8
8
  import type { PeerId } from '@libp2p/interface';
9
9
  import { type Multiaddr, multiaddr } from '@multiformats/multiaddr';
10
10
 
11
11
  import type { BootnodeConfig } from '../config.js';
12
- import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey, getPeerIdPrivateKey } from '../util.js';
13
- import { setAztecEnrKey } from '../versioning.js';
12
+ import { createBootnodeENRandPeerId } from '../enr/generate-enr.js';
13
+ import { convertToMultiaddr, getPeerIdPrivateKey } from '../util.js';
14
14
 
15
15
  /**
16
16
  * Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
@@ -32,28 +32,26 @@ export class BootstrapNode implements P2PBootstrapApi {
32
32
  */
33
33
  public async start(config: BootnodeConfig) {
34
34
  const { udpListenAddress, udpAnnounceAddress } = config;
35
-
36
- const peerIdPrivateKey = await getPeerIdPrivateKey(config, this.store);
37
- const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey);
38
- this.peerId = peerId;
39
- const enr = SignableENR.createFromPeerId(peerId);
40
-
41
35
  const listenAddrUdp = multiaddr(convertToMultiaddr(udpListenAddress, 'udp'));
42
36
 
43
37
  if (!udpAnnounceAddress) {
44
38
  throw new Error('You need to provide a UDP announce address.');
45
39
  }
46
40
 
47
- const publicAddr = multiaddr(convertToMultiaddr(udpAnnounceAddress, 'udp'));
48
- enr.setLocationMultiaddr(publicAddr);
41
+ const peerIdPrivateKey = await getPeerIdPrivateKey(config, this.store);
49
42
 
50
- const versions = setAztecEnrKey(enr, config);
43
+ const { enr: ourEnr, peerId } = await createBootnodeENRandPeerId(
44
+ peerIdPrivateKey,
45
+ udpAnnounceAddress,
46
+ config.l1ChainId,
47
+ );
48
+ this.peerId = peerId;
51
49
 
52
50
  this.logger.debug(`Starting bootstrap node ${peerId} listening on ${listenAddrUdp.toString()}`);
53
51
 
54
52
  const metricsRegistry = new OtelMetricsAdapter(this.telemetry);
55
53
  this.node = Discv5.create({
56
- enr,
54
+ enr: ourEnr,
57
55
  peerId,
58
56
  bindAddrs: { ip4: listenAddrUdp },
59
57
  config: {
@@ -72,16 +70,31 @@ export class BootstrapNode implements P2PBootstrapApi {
72
70
  });
73
71
 
74
72
  try {
73
+ this.logger.info('Starting bootnode');
75
74
  await this.node.start();
76
75
  this.logger.info('Bootstrap node started', {
77
76
  peerId,
78
- enr: enr.encodeTxt(),
77
+ enr: ourEnr.encodeTxt(),
79
78
  addr: listenAddrUdp.toString(),
80
- versions,
81
79
  });
82
80
  } catch (e) {
83
81
  this.logger.error('Error starting Discv5', e);
84
82
  }
83
+
84
+ // Add bootnode ENRs if provided, making sure we filter our own
85
+ if (config.bootstrapNodes?.length) {
86
+ const otherBootnodeENRs = config.bootstrapNodes
87
+ .map(x => ENR.decodeTxt(x))
88
+ .filter(b => b.nodeId !== ourEnr.nodeId);
89
+ this.logger.info(`Adding bootstrap nodes ENRs: ${otherBootnodeENRs.map(x => x.encodeTxt()).join(', ')}`);
90
+ try {
91
+ otherBootnodeENRs.forEach(enr => {
92
+ this.node.addEnr(enr);
93
+ });
94
+ } catch (e) {
95
+ this.logger.error(`Error adding bootnode ENRs: ${e}`);
96
+ }
97
+ }
85
98
  }
86
99
 
87
100
  /**
@@ -1,21 +1,18 @@
1
- import {
2
- type ClientProtocolCircuitVerifier,
3
- type L2BlockSource,
4
- P2PClientType,
5
- type WorldStateSynchronizer,
6
- } from '@aztec/circuit-types';
7
- import { type EpochCacheInterface } from '@aztec/epoch-cache';
1
+ import type { EpochCacheInterface } from '@aztec/epoch-cache';
8
2
  import { type Logger, createLogger } from '@aztec/foundation/log';
9
- import { type AztecAsyncKVStore } from '@aztec/kv-store';
10
- import { type DataStoreConfig } from '@aztec/kv-store/config';
3
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
+ import type { DataStoreConfig } from '@aztec/kv-store/config';
11
5
  import { createStore } from '@aztec/kv-store/lmdb-v2';
6
+ import type { L2BlockSource } from '@aztec/stdlib/block';
7
+ import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
8
+ import { P2PClientType } from '@aztec/stdlib/p2p';
12
9
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
13
10
 
14
11
  import { P2PClient } from '../client/p2p_client.js';
15
- import { type P2PConfig } from '../config.js';
16
- import { type AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
12
+ import type { P2PConfig } from '../config.js';
13
+ import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
17
14
  import { InMemoryAttestationPool } from '../mem_pools/attestation_pool/memory_attestation_pool.js';
18
- import { type MemPools } from '../mem_pools/interface.js';
15
+ import type { MemPools } from '../mem_pools/interface.js';
19
16
  import { AztecKVTxPool, type TxPool } from '../mem_pools/tx_pool/index.js';
20
17
  import { DiscV5Service } from '../services/discv5/discV5_service.js';
21
18
  import { DummyP2PService } from '../services/dummy_service.js';
@@ -1,21 +1,10 @@
1
- import {
2
- type BlockAttestation,
3
- type BlockProposal,
4
- type L2Block,
5
- type L2BlockId,
6
- type L2BlockSource,
7
- type L2BlockStreamEvent,
8
- type L2Tips,
9
- type P2PApi,
10
- type P2PClientType,
11
- type PeerInfo,
12
- type ProverCoordination,
13
- type Tx,
14
- type TxHash,
15
- } from '@aztec/circuit-types';
16
- import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js/constants';
1
+ import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
17
2
  import { createLogger } from '@aztec/foundation/log';
18
- import { type AztecAsyncKVStore, type AztecAsyncMap, type AztecAsyncSingleton } from '@aztec/kv-store';
3
+ import type { AztecAsyncKVStore, AztecAsyncMap, AztecAsyncSingleton } from '@aztec/kv-store';
4
+ import type { L2Block, L2BlockId, L2BlockSource, L2BlockStreamEvent, L2Tips } from '@aztec/stdlib/block';
5
+ import type { P2PApi, PeerInfo, ProverCoordination } from '@aztec/stdlib/interfaces/server';
6
+ import type { BlockAttestation, BlockProposal, P2PClientType } from '@aztec/stdlib/p2p';
7
+ import type { Tx, TxHash } from '@aztec/stdlib/tx';
19
8
  import {
20
9
  Attributes,
21
10
  type TelemetryClient,
@@ -25,12 +14,12 @@ import {
25
14
  trackSpan,
26
15
  } from '@aztec/telemetry-client';
27
16
 
28
- import { type ENR } from '@chainsafe/enr';
17
+ import type { ENR } from '@chainsafe/enr';
29
18
 
30
19
  import { type P2PConfig, getP2PDefaultConfig } from '../config.js';
31
- import { type AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
32
- import { type MemPools } from '../mem_pools/interface.js';
33
- import { type TxPool } from '../mem_pools/tx_pool/index.js';
20
+ import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
21
+ import type { MemPools } from '../mem_pools/interface.js';
22
+ import type { TxPool } from '../mem_pools/tx_pool/index.js';
34
23
  import { ReqRespSubProtocol } from '../services/reqresp/interface.js';
35
24
  import type { P2PService } from '../services/service.js';
36
25
 
@@ -374,13 +363,13 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
374
363
  }
375
364
 
376
365
  @trackSpan('p2pClient.broadcastProposal', async proposal => ({
377
- [Attributes.BLOCK_NUMBER]: proposal.payload.header.globalVariables.blockNumber.toNumber(),
378
- [Attributes.SLOT_NUMBER]: proposal.payload.header.globalVariables.slotNumber.toNumber(),
366
+ [Attributes.BLOCK_NUMBER]: proposal.blockNumber.toNumber(),
367
+ [Attributes.SLOT_NUMBER]: proposal.slotNumber.toNumber(),
379
368
  [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
380
369
  [Attributes.P2P_ID]: (await proposal.p2pMessageIdentifier()).toString(),
381
370
  }))
382
371
  public broadcastProposal(proposal: BlockProposal): void {
383
- this.log.verbose(`Broadcasting proposal ${proposal.p2pMessageIdentifier()} to peers`);
372
+ this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber.toNumber()} to peers`);
384
373
  return this.p2pService.propagate(proposal);
385
374
  }
386
375
 
package/src/config.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { type ChainConfig, chainConfigMappings } from '@aztec/circuit-types/config';
2
1
  import {
3
2
  type ConfigMappingsType,
4
3
  booleanConfigHelper,
@@ -8,6 +7,7 @@ import {
8
7
  pickConfigMappings,
9
8
  } from '@aztec/foundation/config';
10
9
  import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
10
+ import { type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
11
11
 
12
12
  import { type P2PReqRespConfig, p2pReqRespConfigMappings } from './services/reqresp/config.js';
13
13
 
@@ -30,11 +30,6 @@ export interface P2PConfig extends P2PReqRespConfig, ChainConfig {
30
30
  */
31
31
  blockRequestBatchSize: number;
32
32
 
33
- /**
34
- * DEBUG: Disable message validation - for testing purposes only
35
- */
36
- debugDisableMessageValidation: boolean;
37
-
38
33
  /**
39
34
  * DEBUG: Disable colocation penalty - for testing purposes only
40
35
  */
@@ -83,6 +78,9 @@ export interface P2PConfig extends P2PReqRespConfig, ChainConfig {
83
78
  /** Whether to execute the version check in the bootstrap node ENR. */
84
79
  bootstrapNodeEnrVersionCheck: boolean;
85
80
 
81
+ /** Whether to consider any configured bootnodes as full peers, e.g. for transaction gossiping */
82
+ bootstrapNodesAsFullPeers: boolean;
83
+
86
84
  /**
87
85
  * Protocol identifier for transaction gossiping.
88
86
  */
@@ -184,11 +182,6 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
184
182
  description: 'The frequency in which to check for new L2 blocks.',
185
183
  ...numberConfigHelper(100),
186
184
  },
187
- debugDisableMessageValidation: {
188
- env: 'DEBUG_P2P_DISABLE_MESSAGE_VALIDATION',
189
- description: 'DEBUG: Disable message validation - NEVER set to true in production',
190
- ...booleanConfigHelper(false),
191
- },
192
185
  debugDisableColocationPenalty: {
193
186
  env: 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY',
194
187
  description: 'DEBUG: Disable colocation penalty - NEVER set to true in production',
@@ -238,6 +231,11 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
238
231
  description: 'Whether to check the version of the bootstrap node ENR.',
239
232
  ...booleanConfigHelper(),
240
233
  },
234
+ bootstrapNodesAsFullPeers: {
235
+ env: 'P2P_BOOTSTRAP_NODES_AS_FULL_PEERS',
236
+ description: 'Whether to consider our configured bootnodes as full peers',
237
+ ...booleanConfigHelper(false),
238
+ },
241
239
  transactionProtocol: {
242
240
  env: 'P2P_TX_PROTOCOL',
243
241
  description: 'Protocol identifier for transaction gossiping.',
@@ -362,21 +360,22 @@ export function getP2PDefaultConfig(): P2PConfig {
362
360
  /**
363
361
  * Required P2P config values for a bootstrap node.
364
362
  */
365
- export type BootnodeConfig = Pick<P2PConfig, 'udpAnnounceAddress' | 'peerIdPrivateKey' | 'maxPeerCount'> &
363
+ export type BootnodeConfig = Pick<P2PConfig, 'udpAnnounceAddress' | 'peerIdPrivateKey' | 'bootstrapNodes'> &
366
364
  Required<Pick<P2PConfig, 'udpListenAddress'>> &
367
365
  Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKB'> &
368
- ChainConfig;
366
+ Pick<ChainConfig, 'l1ChainId'>;
369
367
 
370
368
  const bootnodeConfigKeys: (keyof BootnodeConfig)[] = [
371
369
  'udpAnnounceAddress',
372
370
  'peerIdPrivateKey',
373
- 'maxPeerCount',
374
371
  'udpListenAddress',
375
372
  'dataDirectory',
376
373
  'dataStoreMapSizeKB',
374
+ 'bootstrapNodes',
375
+ 'l1ChainId',
377
376
  ];
378
377
 
379
378
  export const bootnodeConfigMappings = pickConfigMappings(
380
- { ...p2pConfigMappings, ...dataConfigMappings },
379
+ { ...p2pConfigMappings, ...dataConfigMappings, ...chainConfigMappings },
381
380
  bootnodeConfigKeys,
382
381
  );
@@ -0,0 +1,39 @@
1
+ import type { LogFn } from '@aztec/foundation/log';
2
+ import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
3
+
4
+ import { ENR, SignableENR } from '@chainsafe/enr';
5
+ import type { PeerId } from '@libp2p/interface';
6
+ import { multiaddr } from '@multiformats/multiaddr';
7
+
8
+ import { AZTEC_ENR_KEY } from '../types/index.js';
9
+ import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
10
+ import { setAztecEnrKey } from '../versioning.js';
11
+
12
+ export async function createBootnodeENRandPeerId(
13
+ privateKey: string,
14
+ udpAnnounceAddress: string,
15
+ l1ChainId: number,
16
+ ): Promise<{ enr: SignableENR; peerId: PeerId }> {
17
+ const peerId = await createLibP2PPeerIdFromPrivateKey(privateKey);
18
+ const enr = SignableENR.createFromPeerId(peerId);
19
+ const publicAddr = multiaddr(convertToMultiaddr(udpAnnounceAddress, 'udp'));
20
+ enr.setLocationMultiaddr(publicAddr);
21
+
22
+ const config: ChainConfig = {
23
+ ...emptyChainConfig,
24
+ l1ChainId,
25
+ };
26
+
27
+ setAztecEnrKey(enr, config);
28
+ return { enr, peerId };
29
+ }
30
+
31
+ export async function printENR(enr: string, log: LogFn) {
32
+ const decoded = ENR.decodeTxt(enr);
33
+ log(`PeerID: ${await decoded.peerId()}`);
34
+ log(`IP: ${decoded.ip}`);
35
+ log(`UDP: ${decoded.udp}`);
36
+ log(`TCP: ${decoded.tcp}`);
37
+ const aztec = decoded.kvs.get(AZTEC_ENR_KEY);
38
+ log(`Aztec version: ${aztec?.toString()}`);
39
+ }
@@ -0,0 +1 @@
1
+ export * from './generate-enr.js';
@@ -1,4 +1,4 @@
1
- import { type BlockAttestation } from '@aztec/circuit-types';
1
+ import type { BlockAttestation } from '@aztec/stdlib/p2p';
2
2
 
3
3
  /**
4
4
  * An Attestation Pool contains attestations collected by a validator
@@ -1,12 +1,13 @@
1
- import { type BlockAttestation, TxHash } from '@aztec/circuit-types';
2
1
  import { Secp256k1Signer } from '@aztec/foundation/crypto';
3
2
  import { Fr } from '@aztec/foundation/fields';
3
+ import type { BlockAttestation } from '@aztec/stdlib/p2p';
4
+ import { TxHash } from '@aztec/stdlib/tx';
4
5
 
5
6
  import { jest } from '@jest/globals';
6
7
  import { type MockProxy, mock } from 'jest-mock-extended';
7
8
 
8
- import { type PoolInstrumentation } from '../instrumentation.js';
9
- import { type AttestationPool } from './attestation_pool.js';
9
+ import type { PoolInstrumentation } from '../instrumentation.js';
10
+ import type { AttestationPool } from './attestation_pool.js';
10
11
  import { mockAttestation } from './mocks.js';
11
12
 
12
13
  const NUMBER_OF_SIGNERS_PER_TEST = 4;
@@ -1,12 +1,12 @@
1
- import { BlockAttestation } from '@aztec/circuit-types';
2
1
  import { Fr } from '@aztec/foundation/fields';
3
2
  import { toArray } from '@aztec/foundation/iterable';
4
3
  import { createLogger } from '@aztec/foundation/log';
5
- import { type AztecAsyncKVStore, type AztecAsyncMap, type AztecAsyncMultiMap } from '@aztec/kv-store';
4
+ import type { AztecAsyncKVStore, AztecAsyncMap, AztecAsyncMultiMap } from '@aztec/kv-store';
5
+ import { BlockAttestation } from '@aztec/stdlib/p2p';
6
6
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
7
7
 
8
8
  import { PoolInstrumentation, PoolName } from '../instrumentation.js';
9
- import { type AttestationPool } from './attestation_pool.js';
9
+ import type { AttestationPool } from './attestation_pool.js';
10
10
 
11
11
  export class KvAttestationPool implements AttestationPool {
12
12
  private metrics: PoolInstrumentation<BlockAttestation>;