@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.
- package/dest/bootstrap/bootstrap.d.ts +4 -1
- package/dest/bootstrap/bootstrap.d.ts.map +1 -1
- package/dest/bootstrap/bootstrap.js +21 -9
- package/dest/client/index.d.ts +5 -4
- package/dest/client/index.d.ts.map +1 -1
- package/dest/client/index.js +18 -12
- package/dest/client/p2p_client.d.ts +13 -20
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +32 -15
- package/dest/config.d.ts +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -2
- package/dest/errors/reqresp.error.d.ts +12 -1
- package/dest/errors/reqresp.error.d.ts.map +1 -1
- package/dest/errors/reqresp.error.js +15 -2
- package/dest/index.d.ts +1 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -2
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +9 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +171 -0
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -0
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -0
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +3 -3
- package/dest/mem_pools/instrumentation.d.ts.map +1 -1
- package/dest/mem_pools/instrumentation.js +2 -20
- package/dest/mem_pools/interface.d.ts +4 -3
- package/dest/mem_pools/interface.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +4 -4
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +4 -4
- package/dest/mocks/index.d.ts +6 -6
- package/dest/mocks/index.d.ts.map +1 -1
- package/dest/mocks/index.js +9 -9
- package/dest/services/data_store.d.ts.map +1 -0
- package/dest/services/data_store.js +188 -0
- package/dest/{service → services/discv5}/discV5_service.d.ts +4 -2
- package/dest/services/discv5/discV5_service.d.ts.map +1 -0
- package/dest/services/discv5/discV5_service.js +144 -0
- package/dest/{service → services}/dummy_service.d.ts +3 -1
- package/dest/services/dummy_service.d.ts.map +1 -0
- package/dest/{service → services}/dummy_service.js +5 -1
- package/dest/{service → services}/encoding.d.ts +5 -0
- package/dest/services/encoding.d.ts.map +1 -0
- package/dest/services/encoding.js +65 -0
- package/dest/services/index.d.ts +3 -0
- package/dest/services/index.d.ts.map +1 -0
- package/dest/services/index.js +3 -0
- package/dest/{service → services/libp2p}/libp2p_service.d.ts +50 -11
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
- package/dest/services/libp2p/libp2p_service.js +573 -0
- package/dest/{service → services/peer-scoring}/peer_scoring.d.ts +5 -2
- package/dest/services/peer-scoring/peer_scoring.d.ts.map +1 -0
- package/dest/services/peer-scoring/peer_scoring.js +72 -0
- package/dest/{service → services}/peer_manager.d.ts +8 -3
- package/dest/services/peer_manager.d.ts.map +1 -0
- package/dest/services/peer_manager.js +230 -0
- package/dest/services/reqresp/config.d.ts.map +1 -0
- package/dest/{service → services}/reqresp/config.js +1 -1
- package/dest/services/reqresp/handlers.d.ts.map +1 -0
- package/dest/{service → services}/reqresp/handlers.js +1 -1
- package/dest/services/reqresp/index.d.ts.map +1 -0
- package/dest/{service → services}/reqresp/index.js +1 -1
- package/dest/services/reqresp/interface.d.ts.map +1 -0
- package/dest/{service → services}/reqresp/interface.js +1 -1
- package/dest/services/reqresp/rate_limiter/index.d.ts.map +1 -0
- package/dest/{service → services}/reqresp/rate_limiter/index.js +1 -1
- package/dest/services/reqresp/rate_limiter/rate_limiter.d.ts.map +1 -0
- package/dest/{service → services}/reqresp/rate_limiter/rate_limiter.js +2 -2
- package/dest/services/reqresp/rate_limiter/rate_limits.d.ts.map +1 -0
- package/dest/{service → services}/reqresp/rate_limiter/rate_limits.js +1 -1
- package/dest/{service → services}/reqresp/reqresp.d.ts +16 -0
- package/dest/services/reqresp/reqresp.d.ts.map +1 -0
- package/dest/{service → services}/reqresp/reqresp.js +69 -20
- package/dest/{service → services}/service.d.ts +2 -1
- package/dest/services/service.d.ts.map +1 -0
- package/dest/{service → services}/service.js +1 -1
- package/dest/tx_validator/aggregate_tx_validator.d.ts +1 -1
- package/dest/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
- package/dest/tx_validator/aggregate_tx_validator.js +5 -3
- package/dest/tx_validator/data_validator.js +3 -3
- package/dest/tx_validator/double_spend_validator.d.ts +3 -2
- package/dest/tx_validator/double_spend_validator.d.ts.map +1 -1
- package/dest/tx_validator/double_spend_validator.js +8 -8
- package/dest/tx_validator/metadata_validator.js +3 -3
- package/dest/tx_validator/tx_proof_validator.js +3 -3
- package/package.json +12 -8
- package/src/bootstrap/bootstrap.ts +24 -10
- package/src/client/index.ts +44 -19
- package/src/client/p2p_client.ts +58 -36
- package/src/config.ts +1 -1
- package/src/errors/reqresp.error.ts +15 -1
- package/src/index.ts +1 -1
- package/src/mem_pools/attestation_pool/attestation_pool.ts +10 -0
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +237 -0
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +153 -0
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +2 -2
- package/src/mem_pools/instrumentation.ts +1 -21
- package/src/mem_pools/interface.ts +5 -3
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +3 -3
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +3 -3
- package/src/mocks/index.ts +14 -11
- package/src/{service → services/discv5}/discV5_service.ts +20 -15
- package/src/{service → services}/dummy_service.ts +6 -1
- package/src/{service → services}/encoding.ts +21 -3
- package/src/services/index.ts +2 -0
- package/src/{service → services/libp2p}/libp2p_service.ts +208 -96
- package/src/{service → services/peer-scoring}/peer_scoring.ts +9 -2
- package/src/{service → services}/peer_manager.ts +73 -24
- package/src/{service → services}/reqresp/rate_limiter/rate_limiter.ts +1 -1
- package/src/{service → services}/reqresp/reqresp.ts +87 -21
- package/src/{service → services}/service.ts +3 -1
- package/src/tx_validator/aggregate_tx_validator.ts +5 -3
- package/src/tx_validator/data_validator.ts +2 -2
- package/src/tx_validator/double_spend_validator.ts +8 -10
- package/src/tx_validator/metadata_validator.ts +2 -2
- package/src/tx_validator/tx_proof_validator.ts +2 -2
- package/dest/service/data_store.d.ts.map +0 -1
- package/dest/service/data_store.js +0 -188
- package/dest/service/discV5_service.d.ts.map +0 -1
- package/dest/service/discV5_service.js +0 -141
- package/dest/service/dummy_service.d.ts.map +0 -1
- package/dest/service/encoding.d.ts.map +0 -1
- package/dest/service/encoding.js +0 -49
- package/dest/service/index.d.ts +0 -3
- package/dest/service/index.d.ts.map +0 -1
- package/dest/service/index.js +0 -3
- package/dest/service/libp2p_service.d.ts.map +0 -1
- package/dest/service/libp2p_service.js +0 -496
- package/dest/service/peer_manager.d.ts.map +0 -1
- package/dest/service/peer_manager.js +0 -176
- package/dest/service/peer_scoring.d.ts.map +0 -1
- package/dest/service/peer_scoring.js +0 -67
- package/dest/service/reqresp/config.d.ts.map +0 -1
- package/dest/service/reqresp/handlers.d.ts.map +0 -1
- package/dest/service/reqresp/index.d.ts.map +0 -1
- package/dest/service/reqresp/interface.d.ts.map +0 -1
- package/dest/service/reqresp/rate_limiter/index.d.ts.map +0 -1
- package/dest/service/reqresp/rate_limiter/rate_limiter.d.ts.map +0 -1
- package/dest/service/reqresp/rate_limiter/rate_limits.d.ts.map +0 -1
- package/dest/service/reqresp/reqresp.d.ts.map +0 -1
- package/dest/service/service.d.ts.map +0 -1
- package/src/service/index.ts +0 -2
- /package/dest/{service → services}/data_store.d.ts +0 -0
- /package/dest/{service → services}/reqresp/config.d.ts +0 -0
- /package/dest/{service → services}/reqresp/handlers.d.ts +0 -0
- /package/dest/{service → services}/reqresp/index.d.ts +0 -0
- /package/dest/{service → services}/reqresp/interface.d.ts +0 -0
- /package/dest/{service → services}/reqresp/rate_limiter/index.d.ts +0 -0
- /package/dest/{service → services}/reqresp/rate_limiter/rate_limiter.d.ts +0 -0
- /package/dest/{service → services}/reqresp/rate_limiter/rate_limits.d.ts +0 -0
- /package/src/{service → services}/data_store.ts +0 -0
- /package/src/{service → services}/reqresp/config.ts +0 -0
- /package/src/{service → services}/reqresp/handlers.ts +0 -0
- /package/src/{service → services}/reqresp/index.ts +0 -0
- /package/src/{service → services}/reqresp/interface.ts +0 -0
- /package/src/{service → services}/reqresp/rate_limiter/index.ts +0 -0
- /package/src/{service → services}/reqresp/rate_limiter/rate_limits.ts +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// @attribution: lodestar impl for inspiration
|
|
2
|
-
import {
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { executeTimeoutWithCustomError } from '@aztec/foundation/timer';
|
|
4
4
|
import { pipe } from 'it-pipe';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { PeerErrorSeverity } from '../peer_scoring.js';
|
|
5
|
+
import { CollectiveReqRespTimeoutError, IndividualReqRespTimeoutError, InvalidResponseError, } from '../../errors/reqresp.error.js';
|
|
6
|
+
import { SnappyTransform } from '../encoding.js';
|
|
7
|
+
import { PeerErrorSeverity } from '../peer-scoring/peer_scoring.js';
|
|
8
8
|
import { DEFAULT_SUB_PROTOCOL_HANDLERS, DEFAULT_SUB_PROTOCOL_VALIDATORS, subProtocolMap, } from './interface.js';
|
|
9
9
|
import { RequestResponseRateLimiter } from './rate_limiter/rate_limiter.js';
|
|
10
10
|
/**
|
|
@@ -28,10 +28,11 @@ export class ReqResp {
|
|
|
28
28
|
// Warning, if the `start` function is not called as the parent class constructor, then the default sub protocol handlers will be used ( not good )
|
|
29
29
|
this.subProtocolHandlers = DEFAULT_SUB_PROTOCOL_HANDLERS;
|
|
30
30
|
this.subProtocolValidators = DEFAULT_SUB_PROTOCOL_VALIDATORS;
|
|
31
|
-
this.logger =
|
|
31
|
+
this.logger = createLogger('p2p:reqresp');
|
|
32
32
|
this.overallRequestTimeoutMs = config.overallRequestTimeoutMs;
|
|
33
33
|
this.individualRequestTimeoutMs = config.individualRequestTimeoutMs;
|
|
34
34
|
this.rateLimiter = new RequestResponseRateLimiter(peerManager);
|
|
35
|
+
this.snappyTransform = new SnappyTransform();
|
|
35
36
|
}
|
|
36
37
|
/**
|
|
37
38
|
* Start the reqresp service
|
|
@@ -106,8 +107,7 @@ export class ReqResp {
|
|
|
106
107
|
// The response validator handles peer punishment within
|
|
107
108
|
const isValid = await responseValidator(request, object, peer);
|
|
108
109
|
if (!isValid) {
|
|
109
|
-
|
|
110
|
-
return undefined;
|
|
110
|
+
throw new InvalidResponseError();
|
|
111
111
|
}
|
|
112
112
|
return object;
|
|
113
113
|
}
|
|
@@ -118,7 +118,7 @@ export class ReqResp {
|
|
|
118
118
|
return await executeTimeoutWithCustomError(requestFunction, this.overallRequestTimeoutMs, () => new CollectiveReqRespTimeoutError());
|
|
119
119
|
}
|
|
120
120
|
catch (e) {
|
|
121
|
-
this.logger.
|
|
121
|
+
this.logger.debug(`${e.message} | subProtocol: ${subProtocol}`);
|
|
122
122
|
return undefined;
|
|
123
123
|
}
|
|
124
124
|
}
|
|
@@ -150,29 +150,77 @@ export class ReqResp {
|
|
|
150
150
|
let stream;
|
|
151
151
|
try {
|
|
152
152
|
stream = await this.libp2p.dialProtocol(peerId, subProtocol);
|
|
153
|
-
this.logger.
|
|
153
|
+
this.logger.trace(`Stream opened with ${peerId.toString()} for ${subProtocol}`);
|
|
154
154
|
// Open the stream with a timeout
|
|
155
|
-
const result = await executeTimeoutWithCustomError(() => pipe([payload], stream, this.readMessage), this.individualRequestTimeoutMs, () => new
|
|
156
|
-
await stream.close();
|
|
157
|
-
this.logger.debug(`Stream closed with ${peerId.toString()} for ${subProtocol}`);
|
|
155
|
+
const result = await executeTimeoutWithCustomError(() => pipe([payload], stream, this.readMessage.bind(this)), this.individualRequestTimeoutMs, () => new IndividualReqRespTimeoutError());
|
|
158
156
|
return result;
|
|
159
157
|
}
|
|
160
158
|
catch (e) {
|
|
161
|
-
this.
|
|
162
|
-
this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
|
|
159
|
+
this.handleResponseError(e, peerId, subProtocol);
|
|
163
160
|
}
|
|
164
161
|
finally {
|
|
165
162
|
if (stream) {
|
|
166
163
|
try {
|
|
167
164
|
await stream.close();
|
|
168
|
-
this.logger.
|
|
165
|
+
this.logger.trace(`Stream closed with ${peerId.toString()} for ${subProtocol}`);
|
|
169
166
|
}
|
|
170
167
|
catch (closeError) {
|
|
171
168
|
this.logger.error(`Error closing stream: ${closeError instanceof Error ? closeError.message : 'Unknown error'}`);
|
|
172
169
|
}
|
|
173
170
|
}
|
|
174
171
|
}
|
|
175
|
-
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Handle a response error
|
|
175
|
+
*
|
|
176
|
+
* ReqResp errors are punished differently depending on the severity of the offense
|
|
177
|
+
*
|
|
178
|
+
* @param e - The error
|
|
179
|
+
* @param peerId - The peer id
|
|
180
|
+
* @param subProtocol - The sub protocol
|
|
181
|
+
* @returns If the error is non pubishable, then undefined is returned, otherwise the peer is penalized
|
|
182
|
+
*/
|
|
183
|
+
handleResponseError(e, peerId, subProtocol) {
|
|
184
|
+
const severity = this.categorizeError(e, peerId, subProtocol);
|
|
185
|
+
if (severity) {
|
|
186
|
+
this.peerManager.penalizePeer(peerId, severity);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Categorize the error and log it.
|
|
191
|
+
*/
|
|
192
|
+
categorizeError(e, peerId, subProtocol) {
|
|
193
|
+
// Non pubishable errors
|
|
194
|
+
// We do not punish a collective timeout, as the node triggers this interupt, independent of the peer's behaviour
|
|
195
|
+
const logTags = {
|
|
196
|
+
peerId: peerId.toString(),
|
|
197
|
+
subProtocol,
|
|
198
|
+
};
|
|
199
|
+
if (e instanceof CollectiveReqRespTimeoutError || e instanceof InvalidResponseError) {
|
|
200
|
+
this.logger.debug(`Non-punishable error: ${e.message} | peerId: ${peerId.toString()} | subProtocol: ${subProtocol}`, logTags);
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
// Pubishable errors
|
|
204
|
+
// Connection reset errors in the networking stack are punished with high severity
|
|
205
|
+
// it just signals an unreliable peer
|
|
206
|
+
// We assume that the requesting node has a functioning networking stack.
|
|
207
|
+
if (e?.code === 'ECONNRESET' || e?.code === 'EPIPE') {
|
|
208
|
+
this.logger.debug(`Connection reset: ${peerId.toString()}`, logTags);
|
|
209
|
+
return PeerErrorSeverity.HighToleranceError;
|
|
210
|
+
}
|
|
211
|
+
if (e?.code === 'ECONNREFUSED') {
|
|
212
|
+
this.logger.debug(`Connection refused: ${peerId.toString()}`, logTags);
|
|
213
|
+
return PeerErrorSeverity.HighToleranceError;
|
|
214
|
+
}
|
|
215
|
+
// Timeout errors are punished with high tolerance, they can be due to a geogrpahically far away peer or an
|
|
216
|
+
// overloaded peer
|
|
217
|
+
if (e instanceof IndividualReqRespTimeoutError) {
|
|
218
|
+
this.logger.debug(`Timeout error: ${e.message} | peerId: ${peerId.toString()} | subProtocol: ${subProtocol}`, logTags);
|
|
219
|
+
return PeerErrorSeverity.HighToleranceError;
|
|
220
|
+
}
|
|
221
|
+
// Catch all error
|
|
222
|
+
this.logger.error(`Unexpected error sending request to peer`, e, logTags);
|
|
223
|
+
return PeerErrorSeverity.HighToleranceError;
|
|
176
224
|
}
|
|
177
225
|
/**
|
|
178
226
|
* Read a message returned from a stream into a single buffer
|
|
@@ -182,8 +230,8 @@ export class ReqResp {
|
|
|
182
230
|
for await (const chunk of source) {
|
|
183
231
|
chunks.push(chunk.subarray());
|
|
184
232
|
}
|
|
185
|
-
const messageData =
|
|
186
|
-
return
|
|
233
|
+
const messageData = Buffer.concat(chunks);
|
|
234
|
+
return this.snappyTransform.inboundTransformNoTopic(messageData);
|
|
187
235
|
}
|
|
188
236
|
/**
|
|
189
237
|
* Stream Handler
|
|
@@ -210,12 +258,13 @@ export class ReqResp {
|
|
|
210
258
|
return;
|
|
211
259
|
}
|
|
212
260
|
const handler = this.subProtocolHandlers[protocol];
|
|
261
|
+
const transform = this.snappyTransform;
|
|
213
262
|
try {
|
|
214
263
|
await pipe(stream, async function* (source) {
|
|
215
264
|
for await (const chunkList of source) {
|
|
216
265
|
const msg = Buffer.from(chunkList.subarray());
|
|
217
266
|
const response = await handler(msg);
|
|
218
|
-
yield new Uint8Array(
|
|
267
|
+
yield new Uint8Array(transform.outboundTransformNoTopic(response));
|
|
219
268
|
}
|
|
220
269
|
}, stream);
|
|
221
270
|
}
|
|
@@ -227,4 +276,4 @@ export class ReqResp {
|
|
|
227
276
|
}
|
|
228
277
|
}
|
|
229
278
|
}
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxcmVzcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3JlcXJlc3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOENBQThDO0FBQzlDLE9BQU8sRUFBZSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSS9CLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsNkJBQTZCLEVBQzdCLG9CQUFvQixHQUNyQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUdwRSxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLCtCQUErQixFQUsvQixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU1RTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLE9BQU87SUFjbEIsWUFBWSxNQUF3QixFQUFxQixNQUFjLEVBQVUsV0FBd0I7UUFBaEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUnpHLG1KQUFtSjtRQUMzSSx3QkFBbUIsR0FBK0IsNkJBQTZCLENBQUM7UUFDaEYsMEJBQXFCLEdBQWlDLCtCQUErQixDQUFDO1FBTzVGLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUM7UUFDOUQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FB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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/circuit-types';
|
|
2
|
+
import type { BlockAttestation, BlockProposal, Gossipable, PeerInfo } from '@aztec/circuit-types';
|
|
3
3
|
import type { ENR } from '@chainsafe/enr';
|
|
4
4
|
import type { PeerId } from '@libp2p/interface';
|
|
5
5
|
import type EventEmitter from 'events';
|
|
@@ -37,6 +37,7 @@ export interface P2PService {
|
|
|
37
37
|
sendRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, request: InstanceType<SubProtocolMap[Protocol]['request']>): Promise<InstanceType<SubProtocolMap[Protocol]['response']> | undefined>;
|
|
38
38
|
registerBlockReceivedCallback(callback: (block: BlockProposal) => Promise<BlockAttestation | undefined>): void;
|
|
39
39
|
getEnr(): ENR | undefined;
|
|
40
|
+
getPeers(includePending?: boolean): PeerInfo[];
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
42
43
|
* The interface for a peer discovery service implementation.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/services/service.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAElG,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEtF,oBAAY,kBAAkB;IAC5B,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IAElD;;;;;;OAMG;IACH,WAAW,CAAC,QAAQ,SAAS,kBAAkB,EAC7C,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GACzD,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAG3E,6BAA6B,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;IAE/G,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD;;SAEK;IACL,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;SAEK;IACL,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,WAAW,IAAI,GAAG,EAAE,CAAC;IAErB;;OAEG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAElD,SAAS,IAAI,kBAAkB,CAAC;IAEhC,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;CAC3B"}
|
|
@@ -3,4 +3,4 @@ export var PeerDiscoveryState;
|
|
|
3
3
|
PeerDiscoveryState["RUNNING"] = "running";
|
|
4
4
|
PeerDiscoveryState["STOPPED"] = "stopped";
|
|
5
5
|
})(PeerDiscoveryState || (PeerDiscoveryState = {}));
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sQ0FBTixJQUFZLGtCQUdYO0FBSEQsV0FBWSxrQkFBa0I7SUFDNUIseUNBQW1CLENBQUE7SUFDbkIseUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFHN0IifQ==
|
|
@@ -2,7 +2,7 @@ import { type ProcessedTx, type Tx, type TxValidator } from '@aztec/circuit-type
|
|
|
2
2
|
export declare class AggregateTxValidator<T extends Tx | ProcessedTx> implements TxValidator<T> {
|
|
3
3
|
#private;
|
|
4
4
|
constructor(...validators: TxValidator<T>[]);
|
|
5
|
-
validateTxs(txs: T[]): Promise<[validTxs: T[], invalidTxs: T[]]>;
|
|
5
|
+
validateTxs(txs: T[]): Promise<[validTxs: T[], invalidTxs: T[], skippedTxs: T[]]>;
|
|
6
6
|
validateTx(tx: T): Promise<boolean>;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=aggregate_tx_validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate_tx_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/aggregate_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnF,qBAAa,oBAAoB,CAAC,CAAC,SAAS,EAAE,GAAG,WAAW,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;gBAEzE,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE;IAQrC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"aggregate_tx_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/aggregate_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnF,qBAAa,oBAAoB,CAAC,CAAC,SAAS,EAAE,GAAG,WAAW,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;gBAEzE,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE;IAQrC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IAcjF,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAS1C"}
|
|
@@ -10,13 +10,15 @@ export class AggregateTxValidator {
|
|
|
10
10
|
}
|
|
11
11
|
async validateTxs(txs) {
|
|
12
12
|
const invalidTxs = [];
|
|
13
|
+
const skippedTxs = [];
|
|
13
14
|
let txPool = txs;
|
|
14
15
|
for (const validator of __classPrivateFieldGet(this, _AggregateTxValidator_validators, "f")) {
|
|
15
|
-
const [valid, invalid] = await validator.validateTxs(txPool);
|
|
16
|
+
const [valid, invalid, skipped] = await validator.validateTxs(txPool);
|
|
16
17
|
invalidTxs.push(...invalid);
|
|
18
|
+
skippedTxs.push(...(skipped ?? []));
|
|
17
19
|
txPool = valid;
|
|
18
20
|
}
|
|
19
|
-
return [txPool, invalidTxs];
|
|
21
|
+
return [txPool, invalidTxs, skippedTxs];
|
|
20
22
|
}
|
|
21
23
|
async validateTx(tx) {
|
|
22
24
|
for (const validator of __classPrivateFieldGet(this, _AggregateTxValidator_validators, "f")) {
|
|
@@ -29,4 +31,4 @@ export class AggregateTxValidator {
|
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
33
|
_AggregateTxValidator_validators = new WeakMap();
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvYWdncmVnYXRlX3R4X3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFBWSxHQUFHLFVBQTRCO1FBRDNDLG1EQUE4QjtRQUU1QixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCx1QkFBQSxJQUFJLG9DQUFlLFVBQVUsTUFBQSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQVE7UUFDeEIsTUFBTSxVQUFVLEdBQVEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sVUFBVSxHQUFRLEVBQUUsQ0FBQztRQUMzQixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDakIsS0FBSyxNQUFNLFNBQVMsSUFBSSx1QkFBQSxJQUFJLHdDQUFZLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxNQUFNLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEUsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQzVCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUs7UUFDcEIsS0FBSyxNQUFNLFNBQVMsSUFBSSx1QkFBQSxJQUFJLHdDQUFZLEVBQUUsQ0FBQztZQUN6QyxNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiJ9
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
var _DataTxValidator_instances, _DataTxValidator_log, _DataTxValidator_hasCorrectExecutionRequests;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
3
|
import { Tx } from '@aztec/circuit-types';
|
|
4
|
-
import {
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
5
5
|
export class DataTxValidator {
|
|
6
6
|
constructor() {
|
|
7
7
|
_DataTxValidator_instances.add(this);
|
|
8
|
-
_DataTxValidator_log.set(this,
|
|
8
|
+
_DataTxValidator_log.set(this, createLogger('p2p:tx_validator:tx_data'));
|
|
9
9
|
// TODO: Check logs.
|
|
10
10
|
}
|
|
11
11
|
validateTxs(txs) {
|
|
@@ -47,4 +47,4 @@ _DataTxValidator_log = new WeakMap(), _DataTxValidator_instances = new WeakSet()
|
|
|
47
47
|
}
|
|
48
48
|
return true;
|
|
49
49
|
};
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHhfdmFsaWRhdG9yL2RhdGFfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLEVBQUUsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsTUFBTSxPQUFPLGVBQWU7SUFBNUI7O1FBQ0UsK0JBQU8sWUFBWSxDQUFDLDBCQUEwQixDQUFDLEVBQUM7UUEyRGhELG9CQUFvQjtJQUN0QixDQUFDO0lBMURDLFdBQVcsQ0FBQyxHQUFTO1FBQ25CLE1BQU0sUUFBUSxHQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLFVBQVUsR0FBUyxFQUFFLENBQUM7UUFDNUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsdUJBQUEsSUFBSSxnRkFBNkIsTUFBakMsSUFBSSxFQUE4QixFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixTQUFTO1lBQ1gsQ0FBQztZQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxVQUFVLENBQUMsRUFBTTtRQUNmLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyx1QkFBQSxJQUFJLGdGQUE2QixNQUFqQyxJQUFJLEVBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztDQXlDRjt1TEF2QzhCLEVBQU07SUFDakMsTUFBTSxZQUFZLEdBQUc7UUFDbkIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO1FBQzVDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtLQUNoRCxDQUFDO0lBQ0YsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsRSx1QkFBQSxJQUFJLDRCQUFLLENBQUMsSUFBSSxDQUNaLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxnRkFDNUIsWUFBWSxDQUFDLE1BQ2YsU0FBUyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxHQUFHLENBQ2xELENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLDRCQUE0QixHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQzNFLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25FLENBQUM7SUFDRixJQUFJLDRCQUE0QixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEMsdUJBQUEsSUFBSSw0QkFBSyxDQUFDLElBQUksQ0FDWixnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FDeEIsRUFBRSxDQUNILHFFQUFxRSw0QkFBNEIsR0FBRyxDQUN0RyxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7SUFDbkUsTUFBTSxpQ0FBaUMsR0FDckMsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLENBQUMsRUFBRSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xFLENBQUMsbUJBQW1CLElBQUksQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLElBQUksaUNBQWlDLEVBQUUsQ0FBQztRQUN0Qyx1QkFBQSxJQUFJLDRCQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ25HLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
1
3
|
import { type AnyTx, type TxValidator } from '@aztec/circuit-types';
|
|
2
|
-
import { Fr } from '@aztec/circuits.js';
|
|
3
4
|
export interface NullifierSource {
|
|
4
|
-
|
|
5
|
+
getNullifierIndices: (nullifiers: Buffer[]) => Promise<(bigint | undefined)[]>;
|
|
5
6
|
}
|
|
6
7
|
export declare class DoubleSpendTxValidator<T extends AnyTx> implements TxValidator<T> {
|
|
7
8
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"double_spend_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/double_spend_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAM,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"double_spend_validator.d.ts","sourceRoot":"","sources":["../../src/tx_validator/double_spend_validator.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,KAAK,KAAK,EAAM,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,eAAe;IAC9B,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;CAChF;AAED,qBAAa,sBAAsB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAI9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAApE,eAAe,EAAE,eAAe,EAAmB,iBAAiB,GAAE,OAAc;IAI1F,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IAiBtE,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAoCpC"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
var _DoubleSpendTxValidator_instances, _DoubleSpendTxValidator_log, _DoubleSpendTxValidator_nullifierSource, _DoubleSpendTxValidator_uniqueNullifiers;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
3
|
import { Tx } from '@aztec/circuit-types';
|
|
4
|
-
import {
|
|
5
|
-
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
6
5
|
export class DoubleSpendTxValidator {
|
|
7
6
|
constructor(nullifierSource, isValidatingBlock = true) {
|
|
8
7
|
_DoubleSpendTxValidator_instances.add(this);
|
|
9
8
|
this.isValidatingBlock = isValidatingBlock;
|
|
10
|
-
_DoubleSpendTxValidator_log.set(this,
|
|
9
|
+
_DoubleSpendTxValidator_log.set(this, createLogger('p2p:tx_validator:tx_double_spend'));
|
|
11
10
|
_DoubleSpendTxValidator_nullifierSource.set(this, void 0);
|
|
12
11
|
__classPrivateFieldSet(this, _DoubleSpendTxValidator_nullifierSource, nullifierSource, "f");
|
|
13
12
|
}
|
|
@@ -29,7 +28,7 @@ export class DoubleSpendTxValidator {
|
|
|
29
28
|
}
|
|
30
29
|
}
|
|
31
30
|
_DoubleSpendTxValidator_log = new WeakMap(), _DoubleSpendTxValidator_nullifierSource = new WeakMap(), _DoubleSpendTxValidator_instances = new WeakSet(), _DoubleSpendTxValidator_uniqueNullifiers = async function _DoubleSpendTxValidator_uniqueNullifiers(tx, thisBlockNullifiers) {
|
|
32
|
-
const nullifiers =
|
|
31
|
+
const nullifiers = tx instanceof Tx ? tx.data.getNonEmptyNullifiers() : tx.txEffect.nullifiers;
|
|
33
32
|
// Ditch this tx if it has repeated nullifiers
|
|
34
33
|
const uniqueNullifiers = new Set(nullifiers);
|
|
35
34
|
if (uniqueNullifiers.size !== nullifiers.length) {
|
|
@@ -38,14 +37,15 @@ _DoubleSpendTxValidator_log = new WeakMap(), _DoubleSpendTxValidator_nullifierSo
|
|
|
38
37
|
}
|
|
39
38
|
if (this.isValidatingBlock) {
|
|
40
39
|
for (const nullifier of nullifiers) {
|
|
41
|
-
|
|
40
|
+
const nullifierBigInt = nullifier.toBigInt();
|
|
41
|
+
if (thisBlockNullifiers.has(nullifierBigInt)) {
|
|
42
42
|
__classPrivateFieldGet(this, _DoubleSpendTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for repeating a nullifier in the same block`);
|
|
43
43
|
return false;
|
|
44
44
|
}
|
|
45
|
-
thisBlockNullifiers.add(
|
|
45
|
+
thisBlockNullifiers.add(nullifierBigInt);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
const nullifierIndexes = await
|
|
48
|
+
const nullifierIndexes = await __classPrivateFieldGet(this, _DoubleSpendTxValidator_nullifierSource, "f").getNullifierIndices(nullifiers.map(n => n.toBuffer()));
|
|
49
49
|
const hasDuplicates = nullifierIndexes.some(index => index !== undefined);
|
|
50
50
|
if (hasDuplicates) {
|
|
51
51
|
__classPrivateFieldGet(this, _DoubleSpendTxValidator_log, "f").warn(`Rejecting tx ${Tx.getHash(tx)} for repeating nullifiers present in state trees`);
|
|
@@ -53,4 +53,4 @@ _DoubleSpendTxValidator_log = new WeakMap(), _DoubleSpendTxValidator_nullifierSo
|
|
|
53
53
|
}
|
|
54
54
|
return true;
|
|
55
55
|
};
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG91YmxlX3NwZW5kX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eF92YWxpZGF0b3IvZG91YmxlX3NwZW5kX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQW9CLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTXJELE1BQU0sT0FBTyxzQkFBc0I7SUFJakMsWUFBWSxlQUFnQyxFQUFtQixvQkFBNkIsSUFBSTs7UUFBakMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFnQjtRQUhoRyxzQ0FBTyxZQUFZLENBQUMsa0NBQWtDLENBQUMsRUFBQztRQUN4RCwwREFBa0M7UUFHaEMsdUJBQUEsSUFBSSwyQ0FBb0IsZUFBZSxNQUFBLENBQUM7SUFDMUMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBUTtRQUN4QixNQUFNLFFBQVEsR0FBUSxFQUFFLENBQUM7UUFDekIsTUFBTSxVQUFVLEdBQVEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUU5QyxLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxDQUFDLE1BQU0sdUJBQUEsSUFBSSxtRkFBa0IsTUFBdEIsSUFBSSxFQUFtQixFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVM7WUFDWCxDQUFDO1lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQUs7UUFDZCxPQUFPLHVCQUFBLElBQUksbUZBQWtCLE1BQXRCLElBQUksRUFBbUIsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFVLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBa0NGO29NQWhDQyxLQUFLLG1EQUFtQixFQUFTLEVBQUUsbUJBQWdDO0lBQ2pFLE1BQU0sVUFBVSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFFL0YsOENBQThDO0lBQzlDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hELHVCQUFBLElBQUksbUNBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDbkYsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUM3Qyx1QkFBQSxJQUFJLG1DQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUM3RixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sdUJBQUEsSUFBSSwrQ0FBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU1RyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDMUUsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQix1QkFBQSxJQUFJLG1DQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2pHLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
var _MetadataTxValidator_instances, _MetadataTxValidator_log, _MetadataTxValidator_hasCorrectChainId, _MetadataTxValidator_isValidForBlockNumber;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
3
|
import { Tx } from '@aztec/circuit-types';
|
|
4
|
-
import {
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
5
5
|
export class MetadataTxValidator {
|
|
6
6
|
constructor(chainId, blockNumber) {
|
|
7
7
|
_MetadataTxValidator_instances.add(this);
|
|
8
8
|
this.chainId = chainId;
|
|
9
9
|
this.blockNumber = blockNumber;
|
|
10
|
-
_MetadataTxValidator_log.set(this,
|
|
10
|
+
_MetadataTxValidator_log.set(this, createLogger('p2p:tx_validator:tx_metadata'));
|
|
11
11
|
}
|
|
12
12
|
validateTxs(txs) {
|
|
13
13
|
const validTxs = [];
|
|
@@ -47,4 +47,4 @@ _MetadataTxValidator_log = new WeakMap(), _MetadataTxValidator_instances = new W
|
|
|
47
47
|
return true;
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4X3ZhbGlkYXRvci9tZXRhZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQWMsRUFBRSxFQUFvQixNQUFNLHNCQUFzQixDQUFDO0FBRXhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzlCLFlBQW9CLE9BQVcsRUFBVSxXQUFlOztRQUFwQyxZQUFPLEdBQVAsT0FBTyxDQUFJO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQUk7UUFGeEQsbUNBQU8sWUFBWSxDQUFDLDhCQUE4QixDQUFDLEVBQUM7SUFFTyxDQUFDO0lBRTVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLE1BQU0sUUFBUSxHQUFRLEVBQUUsQ0FBQztRQUN6QixNQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7UUFDM0IsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsdUJBQUEsSUFBSSw4RUFBbUIsTUFBdkIsSUFBSSxFQUFvQixFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixTQUFTO1lBQ1gsQ0FBQztZQUVELElBQUksQ0FBQyx1QkFBQSxJQUFJLGtGQUF1QixNQUEzQixJQUFJLEVBQXdCLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVM7WUFDWCxDQUFDO1lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFLO1FBQ2QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUFBLElBQUksOEVBQW1CLE1BQXZCLElBQUksRUFBb0IsRUFBRSxDQUFDLElBQUksdUJBQUEsSUFBSSxrRkFBdUIsTUFBM0IsSUFBSSxFQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7Q0E2QkY7bUxBM0JvQixFQUFLO0lBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM5RCx1QkFBQSxJQUFJLGdDQUFLLENBQUMsSUFBSSxDQUNaLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUN4QixFQUFFLENBQ0gsK0JBQStCLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUMvRyxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsbUdBRXNCLEVBQUs7SUFDMUIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUM7SUFFdkUsSUFBSSxjQUFjLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JFLHVCQUFBLElBQUksZ0NBQUssQ0FBQyxJQUFJLENBQ1osZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1EQUM1QixjQUFjLENBQUMsS0FDakIsMkJBQTJCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FDL0MsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
var _TxProofValidator_log;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
3
|
import { Tx } from '@aztec/circuit-types';
|
|
4
|
-
import {
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
5
5
|
export class TxProofValidator {
|
|
6
6
|
constructor(verifier) {
|
|
7
7
|
this.verifier = verifier;
|
|
8
|
-
_TxProofValidator_log.set(this,
|
|
8
|
+
_TxProofValidator_log.set(this, createLogger('p2p:tx_validator:private_proof'));
|
|
9
9
|
}
|
|
10
10
|
async validateTxs(txs) {
|
|
11
11
|
const validTxs = [];
|
|
@@ -26,4 +26,4 @@ export class TxProofValidator {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
_TxProofValidator_log = new WeakMap();
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvb2ZfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R4X3ZhbGlkYXRvci90eF9wcm9vZl92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQXNDLEVBQUUsRUFBb0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUFvQixRQUF1QztRQUF2QyxhQUFRLEdBQVIsUUFBUSxDQUErQjtRQUYzRCxnQ0FBTyxZQUFZLENBQUMsZ0NBQWdDLENBQUMsRUFBQztJQUVRLENBQUM7SUFFL0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFTO1FBQ3pCLE1BQU0sUUFBUSxHQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLFVBQVUsR0FBUyxFQUFFLENBQUM7UUFFNUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sdUJBQUEsSUFBSSw2QkFBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDbkUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxFQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YifQ==
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/p2p",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.67.1-devnet",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
7
|
"./mocks": "./dest/mocks/index.js",
|
|
8
|
-
"./bootstrap": "./dest/bootstrap/bootstrap.js"
|
|
8
|
+
"./bootstrap": "./dest/bootstrap/bootstrap.js",
|
|
9
|
+
"./config": "./dest/config.js"
|
|
9
10
|
},
|
|
10
11
|
"typedocOptions": {
|
|
11
12
|
"entryPoints": [
|
|
@@ -60,14 +61,17 @@
|
|
|
60
61
|
}
|
|
61
62
|
]
|
|
62
63
|
],
|
|
63
|
-
"testTimeout":
|
|
64
|
+
"testTimeout": 30000,
|
|
65
|
+
"setupFiles": [
|
|
66
|
+
"../../foundation/src/jest/setup.mjs"
|
|
67
|
+
]
|
|
64
68
|
},
|
|
65
69
|
"dependencies": {
|
|
66
|
-
"@aztec/circuit-types": "0.
|
|
67
|
-
"@aztec/circuits.js": "0.
|
|
68
|
-
"@aztec/foundation": "0.
|
|
69
|
-
"@aztec/kv-store": "0.
|
|
70
|
-
"@aztec/telemetry-client": "0.
|
|
70
|
+
"@aztec/circuit-types": "0.67.1-devnet",
|
|
71
|
+
"@aztec/circuits.js": "0.67.1-devnet",
|
|
72
|
+
"@aztec/foundation": "0.67.1-devnet",
|
|
73
|
+
"@aztec/kv-store": "0.67.1-devnet",
|
|
74
|
+
"@aztec/telemetry-client": "0.67.1-devnet",
|
|
71
75
|
"@chainsafe/discv5": "9.0.0",
|
|
72
76
|
"@chainsafe/enr": "3.0.0",
|
|
73
77
|
"@chainsafe/libp2p-gossipsub": "13.0.0",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type P2PBootstrapApi } from '@aztec/circuit-types/interfaces';
|
|
2
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { type AztecKVStore } from '@aztec/kv-store';
|
|
3
4
|
import { OtelMetricsAdapter, type TelemetryClient } from '@aztec/telemetry-client';
|
|
4
5
|
|
|
@@ -8,20 +9,20 @@ import type { PeerId } from '@libp2p/interface';
|
|
|
8
9
|
import { type Multiaddr, multiaddr } from '@multiformats/multiaddr';
|
|
9
10
|
|
|
10
11
|
import type { BootnodeConfig } from '../config.js';
|
|
11
|
-
import { AZTEC_ENR_KEY, AZTEC_NET } from '../
|
|
12
|
+
import { AZTEC_ENR_KEY, AZTEC_NET } from '../services/discv5/discV5_service.js';
|
|
12
13
|
import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey, getPeerIdPrivateKey } from '../util.js';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
|
|
16
17
|
*/
|
|
17
|
-
export class BootstrapNode {
|
|
18
|
+
export class BootstrapNode implements P2PBootstrapApi {
|
|
18
19
|
private node?: Discv5 = undefined;
|
|
19
20
|
private peerId?: PeerId;
|
|
20
21
|
|
|
21
22
|
constructor(
|
|
22
23
|
private store: AztecKVStore,
|
|
23
24
|
private telemetry: TelemetryClient,
|
|
24
|
-
private logger =
|
|
25
|
+
private logger = createLogger('p2p:bootstrap'),
|
|
25
26
|
) {}
|
|
26
27
|
|
|
27
28
|
/**
|
|
@@ -47,7 +48,7 @@ export class BootstrapNode {
|
|
|
47
48
|
enr.setLocationMultiaddr(publicAddr);
|
|
48
49
|
enr.set(AZTEC_ENR_KEY, Uint8Array.from([AZTEC_NET]));
|
|
49
50
|
|
|
50
|
-
this.logger.
|
|
51
|
+
this.logger.debug(`Starting bootstrap node ${peerId} listening on ${listenAddrUdp.toString()}`);
|
|
51
52
|
const metricsRegistry = new OtelMetricsAdapter(this.telemetry);
|
|
52
53
|
this.node = Discv5.create({
|
|
53
54
|
enr,
|
|
@@ -65,17 +66,15 @@ export class BootstrapNode {
|
|
|
65
66
|
});
|
|
66
67
|
(this.node as Discv5EventEmitter).on('discovered', async (enr: SignableENR) => {
|
|
67
68
|
const addr = await enr.getFullMultiaddr('udp');
|
|
68
|
-
this.logger.verbose(`Discovered new peer
|
|
69
|
+
this.logger.verbose(`Discovered new peer`, { enr: enr.encodeTxt(), addr: addr?.toString() });
|
|
69
70
|
});
|
|
70
71
|
|
|
71
72
|
try {
|
|
72
73
|
await this.node.start();
|
|
73
|
-
this.logger.info('
|
|
74
|
+
this.logger.info('Bootstrap node started', { peerId, enr: enr.encodeTxt(), addr: listenAddrUdp.toString() });
|
|
74
75
|
} catch (e) {
|
|
75
76
|
this.logger.error('Error starting Discv5', e);
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
-
this.logger.info(`ENR: ${this.node?.enr.encodeTxt()}`);
|
|
79
78
|
}
|
|
80
79
|
|
|
81
80
|
/**
|
|
@@ -84,8 +83,9 @@ export class BootstrapNode {
|
|
|
84
83
|
*/
|
|
85
84
|
public async stop() {
|
|
86
85
|
// stop libp2p
|
|
86
|
+
this.logger.debug('Stopping bootstrap node');
|
|
87
87
|
await this.node?.stop();
|
|
88
|
-
this.logger.
|
|
88
|
+
this.logger.info('Bootstrap node stopped');
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
/**
|
|
@@ -105,4 +105,18 @@ export class BootstrapNode {
|
|
|
105
105
|
}
|
|
106
106
|
return this.node?.enr.toENR();
|
|
107
107
|
}
|
|
108
|
+
|
|
109
|
+
public getEncodedEnr() {
|
|
110
|
+
if (!this.node) {
|
|
111
|
+
throw new Error('Node not started');
|
|
112
|
+
}
|
|
113
|
+
return Promise.resolve(this.node.enr.encodeTxt());
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
public getRoutingTable() {
|
|
117
|
+
if (!this.node) {
|
|
118
|
+
throw new Error('Node not started');
|
|
119
|
+
}
|
|
120
|
+
return Promise.resolve(this.node.kadValues().map(enr => enr.encodeTxt()));
|
|
121
|
+
}
|
|
108
122
|
}
|