@aztec/p2p 0.66.0 → 0.67.1-devnet

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 (163) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +21 -9
  4. package/dest/client/index.d.ts +5 -4
  5. package/dest/client/index.d.ts.map +1 -1
  6. package/dest/client/index.js +18 -12
  7. package/dest/client/p2p_client.d.ts +13 -20
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +32 -15
  10. package/dest/config.d.ts +1 -1
  11. package/dest/config.d.ts.map +1 -1
  12. package/dest/config.js +2 -2
  13. package/dest/errors/reqresp.error.d.ts +12 -1
  14. package/dest/errors/reqresp.error.d.ts.map +1 -1
  15. package/dest/errors/reqresp.error.js +15 -2
  16. package/dest/index.d.ts +1 -1
  17. package/dest/index.d.ts.map +1 -1
  18. package/dest/index.js +2 -2
  19. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +9 -0
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  21. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
  22. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +171 -0
  24. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -0
  25. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -0
  26. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -0
  27. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +3 -3
  29. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  30. package/dest/mem_pools/instrumentation.js +2 -20
  31. package/dest/mem_pools/interface.d.ts +4 -3
  32. package/dest/mem_pools/interface.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  34. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +4 -4
  35. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool/memory_tx_pool.js +4 -4
  37. package/dest/mocks/index.d.ts +6 -6
  38. package/dest/mocks/index.d.ts.map +1 -1
  39. package/dest/mocks/index.js +9 -9
  40. package/dest/services/data_store.d.ts.map +1 -0
  41. package/dest/services/data_store.js +188 -0
  42. package/dest/{service → services/discv5}/discV5_service.d.ts +4 -2
  43. package/dest/services/discv5/discV5_service.d.ts.map +1 -0
  44. package/dest/services/discv5/discV5_service.js +144 -0
  45. package/dest/{service → services}/dummy_service.d.ts +3 -1
  46. package/dest/services/dummy_service.d.ts.map +1 -0
  47. package/dest/{service → services}/dummy_service.js +5 -1
  48. package/dest/{service → services}/encoding.d.ts +5 -0
  49. package/dest/services/encoding.d.ts.map +1 -0
  50. package/dest/services/encoding.js +65 -0
  51. package/dest/services/index.d.ts +3 -0
  52. package/dest/services/index.d.ts.map +1 -0
  53. package/dest/services/index.js +3 -0
  54. package/dest/{service → services/libp2p}/libp2p_service.d.ts +50 -11
  55. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
  56. package/dest/services/libp2p/libp2p_service.js +573 -0
  57. package/dest/{service → services/peer-scoring}/peer_scoring.d.ts +5 -2
  58. package/dest/services/peer-scoring/peer_scoring.d.ts.map +1 -0
  59. package/dest/services/peer-scoring/peer_scoring.js +72 -0
  60. package/dest/{service → services}/peer_manager.d.ts +8 -3
  61. package/dest/services/peer_manager.d.ts.map +1 -0
  62. package/dest/services/peer_manager.js +230 -0
  63. package/dest/services/reqresp/config.d.ts.map +1 -0
  64. package/dest/{service → services}/reqresp/config.js +1 -1
  65. package/dest/services/reqresp/handlers.d.ts.map +1 -0
  66. package/dest/{service → services}/reqresp/handlers.js +1 -1
  67. package/dest/services/reqresp/index.d.ts.map +1 -0
  68. package/dest/{service → services}/reqresp/index.js +1 -1
  69. package/dest/services/reqresp/interface.d.ts.map +1 -0
  70. package/dest/{service → services}/reqresp/interface.js +1 -1
  71. package/dest/services/reqresp/rate_limiter/index.d.ts.map +1 -0
  72. package/dest/{service → services}/reqresp/rate_limiter/index.js +1 -1
  73. package/dest/services/reqresp/rate_limiter/rate_limiter.d.ts.map +1 -0
  74. package/dest/{service → services}/reqresp/rate_limiter/rate_limiter.js +2 -2
  75. package/dest/services/reqresp/rate_limiter/rate_limits.d.ts.map +1 -0
  76. package/dest/{service → services}/reqresp/rate_limiter/rate_limits.js +1 -1
  77. package/dest/{service → services}/reqresp/reqresp.d.ts +16 -0
  78. package/dest/services/reqresp/reqresp.d.ts.map +1 -0
  79. package/dest/{service → services}/reqresp/reqresp.js +69 -20
  80. package/dest/{service → services}/service.d.ts +2 -1
  81. package/dest/services/service.d.ts.map +1 -0
  82. package/dest/{service → services}/service.js +1 -1
  83. package/dest/tx_validator/aggregate_tx_validator.d.ts +1 -1
  84. package/dest/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  85. package/dest/tx_validator/aggregate_tx_validator.js +5 -3
  86. package/dest/tx_validator/data_validator.js +3 -3
  87. package/dest/tx_validator/double_spend_validator.d.ts +3 -2
  88. package/dest/tx_validator/double_spend_validator.d.ts.map +1 -1
  89. package/dest/tx_validator/double_spend_validator.js +8 -8
  90. package/dest/tx_validator/metadata_validator.js +3 -3
  91. package/dest/tx_validator/tx_proof_validator.js +3 -3
  92. package/package.json +12 -8
  93. package/src/bootstrap/bootstrap.ts +24 -10
  94. package/src/client/index.ts +44 -19
  95. package/src/client/p2p_client.ts +58 -36
  96. package/src/config.ts +1 -1
  97. package/src/errors/reqresp.error.ts +15 -1
  98. package/src/index.ts +1 -1
  99. package/src/mem_pools/attestation_pool/attestation_pool.ts +10 -0
  100. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +237 -0
  101. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +153 -0
  102. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +2 -2
  103. package/src/mem_pools/instrumentation.ts +1 -21
  104. package/src/mem_pools/interface.ts +5 -3
  105. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +3 -3
  106. package/src/mem_pools/tx_pool/memory_tx_pool.ts +3 -3
  107. package/src/mocks/index.ts +14 -11
  108. package/src/{service → services/discv5}/discV5_service.ts +20 -15
  109. package/src/{service → services}/dummy_service.ts +6 -1
  110. package/src/{service → services}/encoding.ts +21 -3
  111. package/src/services/index.ts +2 -0
  112. package/src/{service → services/libp2p}/libp2p_service.ts +208 -96
  113. package/src/{service → services/peer-scoring}/peer_scoring.ts +9 -2
  114. package/src/{service → services}/peer_manager.ts +73 -24
  115. package/src/{service → services}/reqresp/rate_limiter/rate_limiter.ts +1 -1
  116. package/src/{service → services}/reqresp/reqresp.ts +87 -21
  117. package/src/{service → services}/service.ts +3 -1
  118. package/src/tx_validator/aggregate_tx_validator.ts +5 -3
  119. package/src/tx_validator/data_validator.ts +2 -2
  120. package/src/tx_validator/double_spend_validator.ts +8 -10
  121. package/src/tx_validator/metadata_validator.ts +2 -2
  122. package/src/tx_validator/tx_proof_validator.ts +2 -2
  123. package/dest/service/data_store.d.ts.map +0 -1
  124. package/dest/service/data_store.js +0 -188
  125. package/dest/service/discV5_service.d.ts.map +0 -1
  126. package/dest/service/discV5_service.js +0 -141
  127. package/dest/service/dummy_service.d.ts.map +0 -1
  128. package/dest/service/encoding.d.ts.map +0 -1
  129. package/dest/service/encoding.js +0 -49
  130. package/dest/service/index.d.ts +0 -3
  131. package/dest/service/index.d.ts.map +0 -1
  132. package/dest/service/index.js +0 -3
  133. package/dest/service/libp2p_service.d.ts.map +0 -1
  134. package/dest/service/libp2p_service.js +0 -496
  135. package/dest/service/peer_manager.d.ts.map +0 -1
  136. package/dest/service/peer_manager.js +0 -176
  137. package/dest/service/peer_scoring.d.ts.map +0 -1
  138. package/dest/service/peer_scoring.js +0 -67
  139. package/dest/service/reqresp/config.d.ts.map +0 -1
  140. package/dest/service/reqresp/handlers.d.ts.map +0 -1
  141. package/dest/service/reqresp/index.d.ts.map +0 -1
  142. package/dest/service/reqresp/interface.d.ts.map +0 -1
  143. package/dest/service/reqresp/rate_limiter/index.d.ts.map +0 -1
  144. package/dest/service/reqresp/rate_limiter/rate_limiter.d.ts.map +0 -1
  145. package/dest/service/reqresp/rate_limiter/rate_limits.d.ts.map +0 -1
  146. package/dest/service/reqresp/reqresp.d.ts.map +0 -1
  147. package/dest/service/service.d.ts.map +0 -1
  148. package/src/service/index.ts +0 -2
  149. /package/dest/{service → services}/data_store.d.ts +0 -0
  150. /package/dest/{service → services}/reqresp/config.d.ts +0 -0
  151. /package/dest/{service → services}/reqresp/handlers.d.ts +0 -0
  152. /package/dest/{service → services}/reqresp/index.d.ts +0 -0
  153. /package/dest/{service → services}/reqresp/interface.d.ts +0 -0
  154. /package/dest/{service → services}/reqresp/rate_limiter/index.d.ts +0 -0
  155. /package/dest/{service → services}/reqresp/rate_limiter/rate_limiter.d.ts +0 -0
  156. /package/dest/{service → services}/reqresp/rate_limiter/rate_limits.d.ts +0 -0
  157. /package/src/{service → services}/data_store.ts +0 -0
  158. /package/src/{service → services}/reqresp/config.ts +0 -0
  159. /package/src/{service → services}/reqresp/handlers.ts +0 -0
  160. /package/src/{service → services}/reqresp/index.ts +0 -0
  161. /package/src/{service → services}/reqresp/interface.ts +0 -0
  162. /package/src/{service → services}/reqresp/rate_limiter/index.ts +0 -0
  163. /package/src/{service → services}/reqresp/rate_limiter/rate_limits.ts +0 -0
@@ -0,0 +1,144 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { sleep } from '@aztec/foundation/sleep';
3
+ import { OtelMetricsAdapter } from '@aztec/telemetry-client';
4
+ import { Discv5 } from '@chainsafe/discv5';
5
+ import { ENR, SignableENR } from '@chainsafe/enr';
6
+ import { multiaddr } from '@multiformats/multiaddr';
7
+ import EventEmitter from 'events';
8
+ import { convertToMultiaddr } from '../../util.js';
9
+ import { PeerDiscoveryState } from '../service.js';
10
+ export const AZTEC_ENR_KEY = 'aztec_network';
11
+ const delayBeforeStart = 2000; // 2sec
12
+ export var AztecENR;
13
+ (function (AztecENR) {
14
+ AztecENR[AztecENR["devnet"] = 1] = "devnet";
15
+ AztecENR[AztecENR["testnet"] = 2] = "testnet";
16
+ AztecENR[AztecENR["mainnet"] = 3] = "mainnet";
17
+ })(AztecENR || (AztecENR = {}));
18
+ // TODO: Make this an env var
19
+ export const AZTEC_NET = AztecENR.devnet;
20
+ /**
21
+ * Peer discovery service using Discv5.
22
+ */
23
+ export class DiscV5Service extends EventEmitter {
24
+ constructor(peerId, config, telemetry, logger = createLogger('p2p:discv5_service')) {
25
+ super();
26
+ this.peerId = peerId;
27
+ this.logger = logger;
28
+ this.currentState = PeerDiscoveryState.STOPPED;
29
+ this.bootstrapNodePeerIds = [];
30
+ this.startTime = 0;
31
+ const { tcpAnnounceAddress, udpAnnounceAddress, udpListenAddress, bootstrapNodes } = config;
32
+ this.bootstrapNodes = bootstrapNodes;
33
+ // create ENR from PeerId
34
+ this.enr = SignableENR.createFromPeerId(peerId);
35
+ // Add aztec identification to ENR
36
+ this.enr.set(AZTEC_ENR_KEY, Uint8Array.from([AZTEC_NET]));
37
+ if (!tcpAnnounceAddress) {
38
+ throw new Error('You need to provide at least a TCP announce address.');
39
+ }
40
+ const multiAddrTcp = multiaddr(`${convertToMultiaddr(tcpAnnounceAddress, 'tcp')}/p2p/${peerId.toString()}`);
41
+ // if no udp announce address is provided, use the tcp announce address
42
+ const multiAddrUdp = multiaddr(`${convertToMultiaddr(udpAnnounceAddress || tcpAnnounceAddress, 'udp')}/p2p/${peerId.toString()}`);
43
+ this.listenMultiAddrUdp = multiaddr(convertToMultiaddr(udpListenAddress, 'udp'));
44
+ // set location multiaddr in ENR record
45
+ this.enr.setLocationMultiaddr(multiAddrUdp);
46
+ this.enr.setLocationMultiaddr(multiAddrTcp);
47
+ const metricsRegistry = new OtelMetricsAdapter(telemetry);
48
+ this.discv5 = Discv5.create({
49
+ enr: this.enr,
50
+ peerId,
51
+ bindAddrs: { ip4: this.listenMultiAddrUdp },
52
+ config: {
53
+ lookupTimeout: 2000,
54
+ requestTimeout: 2000,
55
+ allowUnverifiedSessions: true,
56
+ },
57
+ metricsRegistry,
58
+ });
59
+ this.discv5.on('discovered', (enr) => this.onDiscovered(enr));
60
+ this.discv5.on('enrAdded', async (enr) => {
61
+ const multiAddrTcp = await enr.getFullMultiaddr('tcp');
62
+ const multiAddrUdp = await enr.getFullMultiaddr('udp');
63
+ this.logger.debug(`Added ENR ${enr.encodeTxt()}`, { multiAddrTcp, multiAddrUdp, nodeId: enr.nodeId });
64
+ this.onDiscovered(enr);
65
+ });
66
+ }
67
+ async start() {
68
+ if (this.currentState === PeerDiscoveryState.RUNNING) {
69
+ throw new Error('DiscV5Service already started');
70
+ }
71
+ this.logger.debug('Starting DiscV5');
72
+ await this.discv5.start();
73
+ this.startTime = Date.now();
74
+ this.logger.info(`DiscV5 service started`, {
75
+ nodeId: this.enr.nodeId,
76
+ peerId: this.peerId,
77
+ enrUdp: await this.enr.getFullMultiaddr('udp'),
78
+ enrTcp: await this.enr.getFullMultiaddr('tcp'),
79
+ });
80
+ this.currentState = PeerDiscoveryState.RUNNING;
81
+ // Add bootnode ENR if provided
82
+ if (this.bootstrapNodes?.length) {
83
+ // Do this conversion once since it involves an async function call
84
+ this.bootstrapNodePeerIds = await Promise.all(this.bootstrapNodes.map(enr => ENR.decodeTxt(enr).peerId()));
85
+ this.logger.info(`Adding bootstrap nodes ENRs: ${this.bootstrapNodes.join(', ')}`);
86
+ try {
87
+ this.bootstrapNodes.forEach(enr => {
88
+ this.discv5.addEnr(enr);
89
+ });
90
+ }
91
+ catch (e) {
92
+ this.logger.error(`Error adding bootnode ENRs: ${e}`);
93
+ }
94
+ }
95
+ }
96
+ async runRandomNodesQuery() {
97
+ if (this.currentState !== PeerDiscoveryState.RUNNING) {
98
+ throw new Error('DiscV5Service not running');
99
+ }
100
+ // First, wait some time before starting the peer discovery
101
+ // reference: https://github.com/ChainSafe/lodestar/issues/3423
102
+ const msSinceStart = Date.now() - this.startTime;
103
+ if (Date.now() - this.startTime <= delayBeforeStart) {
104
+ await sleep(delayBeforeStart - msSinceStart);
105
+ }
106
+ try {
107
+ await this.discv5.findRandomNode();
108
+ }
109
+ catch (err) {
110
+ this.logger.error(`Error running discV5 random node query: ${err}`);
111
+ }
112
+ }
113
+ getAllPeers() {
114
+ return this.discv5.kadValues();
115
+ }
116
+ getEnr() {
117
+ return this.enr.toENR();
118
+ }
119
+ getPeerId() {
120
+ return this.peerId;
121
+ }
122
+ getStatus() {
123
+ return this.currentState;
124
+ }
125
+ isBootstrapPeer(peerId) {
126
+ return this.bootstrapNodePeerIds.some(node => node.equals(peerId));
127
+ }
128
+ async stop() {
129
+ await this.discv5.stop();
130
+ this.currentState = PeerDiscoveryState.STOPPED;
131
+ }
132
+ onDiscovered(enr) {
133
+ // check the peer is an aztec peer
134
+ const value = enr.kvs.get(AZTEC_ENR_KEY);
135
+ if (value) {
136
+ const network = value[0];
137
+ // check if the peer is on the same network
138
+ if (network === AZTEC_NET) {
139
+ this.emit('peer:discovered', enr);
140
+ }
141
+ }
142
+ }
143
+ }
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY1Y1X3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZGlzY3Y1L2Rpc2NWNV9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUF3QixNQUFNLHlCQUF5QixDQUFDO0FBRW5GLE9BQU8sRUFBRSxNQUFNLEVBQTJCLE1BQU0sbUJBQW1CLENBQUM7QUFDcEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRCxPQUFPLEVBQWtCLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BFLE9BQU8sWUFBWSxNQUFNLFFBQVEsQ0FBQztBQUdsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUE2QixrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBRTdDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTztBQUV0QyxNQUFNLENBQU4sSUFBWSxRQUlYO0FBSkQsV0FBWSxRQUFRO0lBQ2xCLDJDQUFhLENBQUE7SUFDYiw2Q0FBYyxDQUFBO0lBQ2QsNkNBQWMsQ0FBQTtBQUNoQixDQUFDLEVBSlcsUUFBUSxLQUFSLFFBQVEsUUFJbkI7QUFFRCw2QkFBNkI7QUFDN0IsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFFekM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLFlBQVk7SUFpQjdDLFlBQ1UsTUFBYyxFQUN0QixNQUFpQixFQUNqQixTQUEwQixFQUNsQixTQUFTLFlB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
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
- import type { BlockAttestation, BlockProposal, Gossipable, TxHash } from '@aztec/circuit-types';
2
+ import type { BlockAttestation, BlockProposal, Gossipable, PeerInfo, TxHash } from '@aztec/circuit-types';
3
3
  import type { PeerId } from '@libp2p/interface';
4
4
  import EventEmitter from 'events';
5
5
  import { type ReqRespSubProtocol, type SubProtocolMap } from './reqresp/interface.js';
@@ -8,6 +8,8 @@ import { type P2PService, type PeerDiscoveryService, PeerDiscoveryState } from '
8
8
  * A dummy implementation of the P2P Service.
9
9
  */
10
10
  export declare class DummyP2PService implements P2PService {
11
+ /** Returns an empty array for peers. */
12
+ getPeers(): PeerInfo[];
11
13
  /**
12
14
  * Starts the dummy implementation.
13
15
  * @returns A resolved promise.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dummy_service.d.ts","sourceRoot":"","sources":["../../src/services/dummy_service.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE1G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE9F;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,wCAAwC;IACxC,QAAQ,IAAI,QAAQ,EAAE;IAItB;;;OAGG;IACI,KAAK;IAIZ;;;OAGG;IACI,IAAI;IAIX;;;OAGG;IACI,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAC;IAE3C;;;OAGG;IACI,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE;IAE7B;;OAEG;IACI,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,gBAAgB,CAAC;IAE3F;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,SAAS,kBAAkB,EACpD,SAAS,EAAE,QAAQ,EACnB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAC1D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IAI1E;;;OAGG;IACI,MAAM,IAAI,SAAS;CAG3B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,YAAa,YAAW,oBAAoB;IACzF,OAAO,CAAC,YAAY,CAA8B;IAClD;;;OAGG;IACI,KAAK;IAIZ;;;OAGG;IACI,IAAI;IAIX;;;OAGG;IACI,WAAW;IAIX,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAInC,SAAS,IAAI,kBAAkB;IAI/B,MAAM,IAAI,SAAS;CAG3B"}
@@ -4,6 +4,10 @@ import { PeerDiscoveryState } from './service.js';
4
4
  * A dummy implementation of the P2P Service.
5
5
  */
6
6
  export class DummyP2PService {
7
+ /** Returns an empty array for peers. */
8
+ getPeers() {
9
+ return [];
10
+ }
7
11
  /**
8
12
  * Starts the dummy implementation.
9
13
  * @returns A resolved promise.
@@ -93,4 +97,4 @@ export class DummyPeerDiscoveryService extends EventEmitter {
93
97
  return undefined;
94
98
  }
95
99
  }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVtbXlfc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlL2R1bW15X3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxZQUFZLE1BQU0sUUFBUSxDQUFDO0FBR2xDLE9BQU8sRUFBOEMsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUMxQjs7O09BR0c7SUFDSSxLQUFLO1FBQ1YsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLElBQUk7UUFDVCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUyxDQUF1QixDQUFJLElBQUcsQ0FBQztJQUUvQzs7O09BR0c7SUFDSSxVQUFVLENBQUMsQ0FBVyxJQUFHLENBQUM7SUFFakM7O09BRUc7SUFDSSw2QkFBNkIsQ0FBQyxDQUFzRCxJQUFHLENBQUM7SUFFL0Y7Ozs7O09BS0c7SUFDSSxXQUFXLENBQ2hCLFNBQW1CLEVBQ25CLFFBQTJEO1FBRTNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTTtRQUNYLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHlCQUEwQixTQUFRLFlBQVk7SUFBM0Q7O1FBQ1UsaUJBQVksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7SUF3Q3BELENBQUM7SUF2Q0M7OztPQUdHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO1FBQy9DLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDRDs7O09BR0c7SUFDSSxJQUFJO1FBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFDL0MsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNEOzs7T0FHRztJQUNJLFdBQVc7UUFDaEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxlQUFlLENBQUMsQ0FBUztRQUM5QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIn0=
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVtbXlfc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9kdW1teV9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sWUFBWSxNQUFNLFFBQVEsQ0FBQztBQUdsQyxPQUFPLEVBQThDLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDMUIsd0NBQXdDO0lBQ3hDLFFBQVE7UUFDTixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLO1FBQ1YsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLElBQUk7UUFDVCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUyxDQUF1QixDQUFJLElBQUcsQ0FBQztJQUUvQzs7O09BR0c7SUFDSSxVQUFVLENBQUMsQ0FBVyxJQUFHLENBQUM7SUFFakM7O09BRUc7SUFDSSw2QkFBNkIsQ0FBQyxDQUFzRCxJQUFHLENBQUM7SUFFL0Y7Ozs7O09BS0c7SUFDSSxXQUFXLENBQ2hCLFNBQW1CLEVBQ25CLFFBQTJEO1FBRTNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTTtRQUNYLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHlCQUEwQixTQUFRLFlBQVk7SUFBM0Q7O1FBQ1UsaUJBQVksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7SUF3Q3BELENBQUM7SUF2Q0M7OztPQUdHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO1FBQy9DLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDRDs7O09BR0c7SUFDSSxJQUFJO1FBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFDL0MsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNEOzs7T0FHRztJQUNJLFdBQVc7UUFDaEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxlQUFlLENBQUMsQ0FBUztRQUM5QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGIn0=
@@ -19,8 +19,13 @@ export declare function msgIdToStrFn(msgId: Uint8Array): string;
19
19
  * @returns The message identifier
20
20
  */
21
21
  export declare function getMsgIdFn(message: Message): Buffer;
22
+ /**
23
+ * Snappy transform for libp2p gossipsub
24
+ */
22
25
  export declare class SnappyTransform implements DataTransform {
23
26
  inboundTransform(_topicStr: string, data: Uint8Array): Uint8Array;
27
+ inboundTransformNoTopic(data: Buffer): Buffer;
24
28
  outboundTransform(_topicStr: string, data: Uint8Array): Uint8Array;
29
+ outboundTransformNoTopic(data: Buffer): Buffer;
25
30
  }
26
31
  //# sourceMappingURL=encoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/services/encoding.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAajD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAKvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAItD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,UAK1C;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;IAEnD,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI1D,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI3D,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAMtD"}
@@ -0,0 +1,65 @@
1
+ // Taken from lodestar: https://github.com/ChainSafe/lodestar
2
+ import { sha256 } from '@aztec/foundation/crypto';
3
+ import { compressSync, uncompressSync } from 'snappy';
4
+ import xxhashFactory from 'xxhash-wasm';
5
+ // Load WASM
6
+ const xxhash = await xxhashFactory();
7
+ // Use salt to prevent msgId from being mined for collisions
8
+ const h64Seed = BigInt(Math.floor(Math.random() * 1e9));
9
+ // Shared buffer to convert msgId to string
10
+ const sharedMsgIdBuf = Buffer.alloc(20);
11
+ /**
12
+ * The function used to generate a gossipsub message id
13
+ * We use the first 8 bytes of SHA256(data) for content addressing
14
+ */
15
+ export function fastMsgIdFn(rpcMsg) {
16
+ if (rpcMsg.data) {
17
+ return xxhash.h64Raw(rpcMsg.data, h64Seed).toString(16);
18
+ }
19
+ return '0000000000000000';
20
+ }
21
+ export function msgIdToStrFn(msgId) {
22
+ // This happens serially, no need to reallocate the buffer
23
+ sharedMsgIdBuf.set(msgId);
24
+ return `0x${sharedMsgIdBuf.toString('hex')}`;
25
+ }
26
+ /**
27
+ * Get the message identifier from a libp2p message
28
+ *
29
+ * Follows similarly to:
30
+ * https://github.com/ethereum/consensus-specs/blob/v1.1.0-alpha.7/specs/altair/p2p-interface.md#topics-and-messages
31
+ *
32
+ * @param message - The libp2p message
33
+ * @returns The message identifier
34
+ */
35
+ export function getMsgIdFn(message) {
36
+ const { topic } = message;
37
+ const vec = [Buffer.from(topic), message.data];
38
+ return sha256(Buffer.concat(vec)).subarray(0, 20);
39
+ }
40
+ /**
41
+ * Snappy transform for libp2p gossipsub
42
+ */
43
+ export class SnappyTransform {
44
+ // Topic string included to satisfy DataTransform interface
45
+ inboundTransform(_topicStr, data) {
46
+ return this.inboundTransformNoTopic(Buffer.from(data));
47
+ }
48
+ inboundTransformNoTopic(data) {
49
+ if (data.length === 0) {
50
+ return data;
51
+ }
52
+ return Buffer.from(uncompressSync(data, { asBuffer: true }));
53
+ }
54
+ // Topic string included to satisfy DataTransform interface
55
+ outboundTransform(_topicStr, data) {
56
+ return this.outboundTransformNoTopic(Buffer.from(data));
57
+ }
58
+ outboundTransformNoTopic(data) {
59
+ if (data.length === 0) {
60
+ return data;
61
+ }
62
+ return Buffer.from(compressSync(data));
63
+ }
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvZW5jb2RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUtsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN0RCxPQUFPLGFBQWEsTUFBTSxhQUFhLENBQUM7QUFFeEMsWUFBWTtBQUNaLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxFQUFFLENBQUM7QUFFckMsNERBQTREO0FBQzVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRXhELDJDQUEyQztBQUMzQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBbUI7SUFDN0MsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQWlCO0lBQzVDLDBEQUEwRDtJQUMxRCxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLE9BQU8sS0FBSyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxPQUFnQjtJQUN6QyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTFCLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDMUIsMkRBQTJEO0lBQzNELGdCQUFnQixDQUFDLFNBQWlCLEVBQUUsSUFBZ0I7UUFDbEQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxJQUFZO1FBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLElBQWdCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sd0JBQXdCLENBQUMsSUFBWTtRQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRiJ9
@@ -0,0 +1,3 @@
1
+ export * from './service.js';
2
+ export * from './libp2p/libp2p_service.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './service.js';
2
+ export * from './libp2p/libp2p_service.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyw0QkFBNEIsQ0FBQyJ9
@@ -1,19 +1,21 @@
1
- import { BlockAttestation, BlockProposal, type ClientProtocolCircuitVerifier, type Gossipable, type L2BlockSource, type WorldStateSynchronizer } from '@aztec/circuit-types';
1
+ import { BlockAttestation, BlockProposal, type ClientProtocolCircuitVerifier, type Gossipable, type L2BlockSource, type PeerInfo, type WorldStateSynchronizer } from '@aztec/circuit-types';
2
+ import { P2PClientType } from '@aztec/circuit-types';
2
3
  import type { AztecKVStore } from '@aztec/kv-store';
3
4
  import { type TelemetryClient, WithTracer } from '@aztec/telemetry-client';
4
5
  import { type ENR } from '@chainsafe/enr';
5
- import type { PeerId } from '@libp2p/interface';
6
+ import { type PeerId } from '@libp2p/interface';
6
7
  import '@libp2p/kad-dht';
7
- import { type P2PConfig } from '../config.js';
8
- import { type MemPools } from '../mem_pools/interface.js';
9
- import { type PubSubLibp2p } from '../util.js';
10
- import { type ReqRespSubProtocol, type ReqRespSubProtocolHandlers, type SubProtocolMap } from './reqresp/interface.js';
11
- import { ReqResp } from './reqresp/reqresp.js';
12
- import type { P2PService, PeerDiscoveryService } from './service.js';
8
+ import { type P2PConfig } from '../../config.js';
9
+ import { type MemPools } from '../../mem_pools/interface.js';
10
+ import { type PubSubLibp2p } from '../../util.js';
11
+ import { type ReqRespSubProtocol, type ReqRespSubProtocolHandlers, type SubProtocolMap } from '../reqresp/interface.js';
12
+ import { ReqResp } from '../reqresp/reqresp.js';
13
+ import type { P2PService, PeerDiscoveryService } from '../service.js';
13
14
  /**
14
15
  * Lib P2P implementation of the P2PService interface.
15
16
  */
16
- export declare class LibP2PService extends WithTracer implements P2PService {
17
+ export declare class LibP2PService<T extends P2PClientType> extends WithTracer implements P2PService {
18
+ private clientType;
17
19
  private config;
18
20
  private node;
19
21
  private peerDiscoveryService;
@@ -34,7 +36,7 @@ export declare class LibP2PService extends WithTracer implements P2PService {
34
36
  * @returns The attestation for the block, if any.
35
37
  */
36
38
  private blockReceivedCallback;
37
- constructor(config: P2PConfig, node: PubSubLibp2p, peerDiscoveryService: PeerDiscoveryService, mempools: MemPools, l2BlockSource: L2BlockSource, proofVerifier: ClientProtocolCircuitVerifier, worldStateSynchronizer: WorldStateSynchronizer, telemetry: TelemetryClient, requestResponseHandlers?: ReqRespSubProtocolHandlers, logger?: import("@aztec/foundation/log").Logger);
39
+ constructor(clientType: T, config: P2PConfig, node: PubSubLibp2p, peerDiscoveryService: PeerDiscoveryService, mempools: MemPools<T>, l2BlockSource: L2BlockSource, proofVerifier: ClientProtocolCircuitVerifier, worldStateSynchronizer: WorldStateSynchronizer, telemetry: TelemetryClient, requestResponseHandlers?: ReqRespSubProtocolHandlers, logger?: import("@aztec/foundation/log").Logger);
38
40
  /**
39
41
  * Starts the LibP2P service.
40
42
  * @returns An empty promise.
@@ -51,7 +53,8 @@ export declare class LibP2PService extends WithTracer implements P2PService {
51
53
  * @param txPool - The transaction pool to be accessed by the service.
52
54
  * @returns The new service.
53
55
  */
54
- static new(config: P2PConfig, peerDiscoveryService: PeerDiscoveryService, peerId: PeerId, mempools: MemPools, l2BlockSource: L2BlockSource, proofVerifier: ClientProtocolCircuitVerifier, worldStateSynchronizer: WorldStateSynchronizer, store: AztecKVStore, telemetry: TelemetryClient): Promise<LibP2PService>;
56
+ static new<T extends P2PClientType>(clientType: T, config: P2PConfig, peerDiscoveryService: PeerDiscoveryService, peerId: PeerId, mempools: MemPools<T>, l2BlockSource: L2BlockSource, proofVerifier: ClientProtocolCircuitVerifier, worldStateSynchronizer: WorldStateSynchronizer, store: AztecKVStore, telemetry: TelemetryClient): Promise<LibP2PService<T>>;
57
+ getPeers(includePending?: boolean): PeerInfo[];
55
58
  /**
56
59
  * Send Request via the ReqResp service
57
60
  * The subprotocol defined will determine the request and response types
@@ -127,7 +130,43 @@ export declare class LibP2PService extends WithTracer implements P2PService {
127
130
  * @returns True if the tx is valid, false otherwise.
128
131
  */
129
132
  private validateRequestedTx;
133
+ private validatePropagatedTxFromMessage;
134
+ /**
135
+ * Validate a tx that has been propagated from a peer.
136
+ * @param tx - The tx to validate.
137
+ * @param peerId - The peer ID of the peer that sent the tx.
138
+ * @returns True if the tx is valid, false otherwise.
139
+ */
130
140
  private validatePropagatedTx;
141
+ /**
142
+ * Create message validators for the given block number.
143
+ *
144
+ * Each validator is a pair of a validator and a severity.
145
+ * If a validator fails, the peer is penalized with the severity of the validator.
146
+ *
147
+ * @param blockNumber - The block number to create validators for.
148
+ * @returns The message validators.
149
+ */
150
+ private createMessageValidators;
151
+ /**
152
+ * Run validations on a tx.
153
+ * @param tx - The tx to validate.
154
+ * @param messageValidators - The message validators to run.
155
+ * @returns The validation outcome.
156
+ */
157
+ private runValidations;
158
+ /**
159
+ * Handle a double spend failure.
160
+ *
161
+ * Double spend failures are managed on their own because they are a special case.
162
+ * We must check if the double spend is recent or old, if it is past a threshold, then we heavily penalize the peer.
163
+ *
164
+ * @param tx - The tx that failed the double spend validator.
165
+ * @param blockNumber - The block number of the tx.
166
+ * @param peerId - The peer ID of the peer that sent the tx.
167
+ * @returns True if the tx is valid, false otherwise.
168
+ */
169
+ private handleDoubleSpendFailure;
131
170
  getPeerScore(peerId: PeerId): number;
132
171
  private sendToPeers;
133
172
  private stopLibP2P;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,6BAA6B,EAElC,KAAK,UAAU,EACf,KAAK,aAAa,EAElB,KAAK,QAAQ,EAKb,KAAK,sBAAsB,EAG5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAKrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAkC,KAAK,eAAe,EAAE,UAAU,EAAa,MAAM,yBAAyB,CAAC;AAEtH,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAM1C,OAAO,EAAgB,KAAK,MAAM,EAAwB,MAAM,mBAAmB,CAAC;AACpF,OAAO,iBAAiB,CAAC;AAKzB,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAO7D,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,eAAe,CAAC;AAMtE,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAE/B,KAAK,cAAc,EAEpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAiBtE;;GAEG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,aAAa,CAAE,SAAQ,UAAW,YAAW,UAAU;IAgBxF,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,MAAM;IAzBhB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,uBAAuB,CAAC,CAAiB;IAG1C,OAAO,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB,CAAkE;gBAGrF,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,YAAY,EAClB,oBAAoB,EAAE,oBAAoB,EAC1C,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,6BAA6B,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,eAAe,EAC1B,uBAAuB,GAAE,0BAA0D,EACnF,MAAM,yCAAqC;IAmBrD;;;OAGG;IACU,KAAK;IAuDlB;;;OAGG;IACU,IAAI;IAcjB;;;;;OAKG;WACiB,GAAG,CAAC,CAAC,SAAS,aAAa,EAC7C,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,SAAS,EACjB,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,6BAA6B,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,eAAe;IAsHrB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE;IAIrD;;;;;;;;;OASG;IACH,WAAW,CAAC,WAAW,SAAS,kBAAkB,EAChD,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,GAC5D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IAI7E;;;OAGG;IACI,MAAM,IAAI,GAAG,GAAG,SAAS;IAIzB,6BAA6B,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAK9G;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;;OAKG;YACW,cAAc;IAS5B;;;;OAIG;YACW,sBAAsB;IAqBpC;;;;OAIG;YAOW,0BAA0B;IAKxC;;;;;OAKG;YAQW,oBAAoB;IAYlC;;;OAGG;IAOH,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,8BAA8B;IAKtC;;;OAGG;IACI,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI;YAO1C,iBAAiB;IAO/B;;;;;;;;;;;;;OAaG;YAIW,mBAAmB;YAoBnB,+BAA+B;IAa7C;;;;;OAKG;YAIW,oBAAoB;IAuBlC;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;;;;OAKG;YACW,cAAc;IA8B5B;;;;;;;;;;OAUG;YACW,wBAAwB;IAuB/B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;YAI7B,WAAW;YAWX,UAAU;CAYzB"}