@aztec/p2p 1.0.0-staging.2 → 1.0.0
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.js +1 -1
- package/dest/client/factory.js +1 -1
- package/dest/client/p2p_client.js +1 -1
- package/dest/config.d.ts +2 -2
- package/dest/config.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +4 -11
- 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 +10 -17
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +2 -2
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +2 -2
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +2 -3
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -10
- package/dest/msg_validators/tx_validator/factory.d.ts +1 -2
- package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/factory.js +2 -3
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +0 -2
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +7 -13
- package/dest/msg_validators/tx_validator/phases_validator.d.ts +2 -3
- package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/msg_validators/tx_validator/phases_validator.js +4 -4
- package/dest/services/libp2p/instrumentation.d.ts +1 -8
- package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
- package/dest/services/libp2p/instrumentation.js +2 -130
- package/dest/services/libp2p/libp2p_service.d.ts +3 -8
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +14 -34
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
- package/dest/test-helpers/make-test-p2p-clients.js +1 -2
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
- package/dest/test-helpers/reqresp-nodes.js +2 -3
- package/dest/testbench/p2p_client_testbench_worker.js +0 -6
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +1 -2
- package/dest/util.d.ts +2 -3
- package/dest/util.d.ts.map +1 -1
- package/dest/util.js +5 -6
- package/package.json +13 -13
- package/src/bootstrap/bootstrap.ts +1 -1
- package/src/client/factory.ts +1 -1
- package/src/client/p2p_client.ts +1 -1
- package/src/config.ts +1 -2
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +12 -22
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +3 -3
- package/src/mem_pools/tx_pool/tx_pool.ts +2 -3
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +4 -8
- package/src/msg_validators/tx_validator/factory.ts +1 -4
- package/src/msg_validators/tx_validator/metadata_validator.ts +9 -20
- package/src/msg_validators/tx_validator/phases_validator.ts +2 -3
- package/src/services/libp2p/instrumentation.ts +3 -122
- package/src/services/libp2p/libp2p_service.ts +15 -41
- package/src/test-helpers/make-test-p2p-clients.ts +1 -2
- package/src/test-helpers/reqresp-nodes.ts +2 -3
- package/src/testbench/p2p_client_testbench_worker.ts +0 -1
- package/src/testbench/worker_client_manager.ts +1 -2
- package/src/util.ts +7 -8
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
import { TopicType } from '@aztec/stdlib/p2p';
|
|
2
1
|
import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
|
|
3
|
-
import { createHistogram } from 'node:perf_hooks';
|
|
4
2
|
export class P2PInstrumentation {
|
|
5
3
|
messageValidationDuration;
|
|
6
4
|
messagePrevalidationCount;
|
|
7
|
-
messageLatency;
|
|
8
|
-
aggLatencyHisto = new Map();
|
|
9
|
-
aggValidationHisto = new Map();
|
|
10
|
-
aggLatencyMetrics;
|
|
11
|
-
aggValidationMetrics;
|
|
12
5
|
constructor(client, name){
|
|
13
6
|
const meter = client.getMeter(name);
|
|
14
7
|
this.messageValidationDuration = meter.createHistogram(Metrics.P2P_GOSSIP_MESSAGE_VALIDATION_DURATION, {
|
|
@@ -20,84 +13,12 @@ export class P2PInstrumentation {
|
|
|
20
13
|
description: 'How many message pass/fail prevalidation',
|
|
21
14
|
valueType: ValueType.INT
|
|
22
15
|
});
|
|
23
|
-
this.messageLatency = meter.createHistogram(Metrics.P2P_GOSSIP_MESSAGE_LATENCY, {
|
|
24
|
-
unit: 'ms',
|
|
25
|
-
description: 'P2P message latency',
|
|
26
|
-
valueType: ValueType.INT
|
|
27
|
-
});
|
|
28
|
-
this.aggLatencyMetrics = {
|
|
29
|
-
avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_AVG, {
|
|
30
|
-
valueType: ValueType.DOUBLE,
|
|
31
|
-
description: 'AVG msg latency',
|
|
32
|
-
unit: 'ms'
|
|
33
|
-
}),
|
|
34
|
-
max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MAX, {
|
|
35
|
-
valueType: ValueType.DOUBLE,
|
|
36
|
-
description: 'MAX msg latency',
|
|
37
|
-
unit: 'ms'
|
|
38
|
-
}),
|
|
39
|
-
min: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MIN, {
|
|
40
|
-
valueType: ValueType.DOUBLE,
|
|
41
|
-
description: 'MIN msg latency',
|
|
42
|
-
unit: 'ms'
|
|
43
|
-
}),
|
|
44
|
-
p50: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_P50, {
|
|
45
|
-
valueType: ValueType.DOUBLE,
|
|
46
|
-
description: 'P50 msg latency',
|
|
47
|
-
unit: 'ms'
|
|
48
|
-
}),
|
|
49
|
-
p90: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_P90, {
|
|
50
|
-
valueType: ValueType.DOUBLE,
|
|
51
|
-
description: 'P90 msg latency',
|
|
52
|
-
unit: 'ms'
|
|
53
|
-
})
|
|
54
|
-
};
|
|
55
|
-
this.aggValidationMetrics = {
|
|
56
|
-
avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_AVG, {
|
|
57
|
-
valueType: ValueType.DOUBLE,
|
|
58
|
-
description: 'AVG msg validation',
|
|
59
|
-
unit: 'ms'
|
|
60
|
-
}),
|
|
61
|
-
max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MAX, {
|
|
62
|
-
valueType: ValueType.DOUBLE,
|
|
63
|
-
description: 'MAX msg validation',
|
|
64
|
-
unit: 'ms'
|
|
65
|
-
}),
|
|
66
|
-
min: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MIN, {
|
|
67
|
-
valueType: ValueType.DOUBLE,
|
|
68
|
-
description: 'MIN msg validation',
|
|
69
|
-
unit: 'ms'
|
|
70
|
-
}),
|
|
71
|
-
p50: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P50, {
|
|
72
|
-
valueType: ValueType.DOUBLE,
|
|
73
|
-
description: 'P50 msg validation',
|
|
74
|
-
unit: 'ms'
|
|
75
|
-
}),
|
|
76
|
-
p90: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P90, {
|
|
77
|
-
valueType: ValueType.DOUBLE,
|
|
78
|
-
description: 'P90 msg validation',
|
|
79
|
-
unit: 'ms'
|
|
80
|
-
})
|
|
81
|
-
};
|
|
82
|
-
meter.addBatchObservableCallback(this.aggregate, [
|
|
83
|
-
...Object.values(this.aggValidationMetrics),
|
|
84
|
-
...Object.values(this.aggLatencyMetrics)
|
|
85
|
-
]);
|
|
86
16
|
}
|
|
87
17
|
recordMessageValidation(topicName, timerOrMs) {
|
|
88
|
-
const ms =
|
|
89
|
-
this.messageValidationDuration.record(ms, {
|
|
18
|
+
const ms = typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms();
|
|
19
|
+
this.messageValidationDuration.record(Math.ceil(ms), {
|
|
90
20
|
[Attributes.TOPIC_NAME]: topicName
|
|
91
21
|
});
|
|
92
|
-
let validationHistogram = this.aggValidationHisto.get(topicName);
|
|
93
|
-
if (!validationHistogram) {
|
|
94
|
-
validationHistogram = createHistogram({
|
|
95
|
-
min: 1,
|
|
96
|
-
max: 5 * 60 * 1000
|
|
97
|
-
}); // 5 mins
|
|
98
|
-
this.aggValidationHisto.set(topicName, validationHistogram);
|
|
99
|
-
}
|
|
100
|
-
validationHistogram.record(Math.max(ms, 1));
|
|
101
22
|
}
|
|
102
23
|
incMessagePrevalidationStatus(passed, topicName) {
|
|
103
24
|
this.messagePrevalidationCount.add(1, {
|
|
@@ -105,53 +26,4 @@ export class P2PInstrumentation {
|
|
|
105
26
|
[Attributes.OK]: passed
|
|
106
27
|
});
|
|
107
28
|
}
|
|
108
|
-
recordMessageLatency(topicName, timerOrMs) {
|
|
109
|
-
const ms = Math.ceil(typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms());
|
|
110
|
-
this.messageLatency.record(ms, {
|
|
111
|
-
[Attributes.TOPIC_NAME]: topicName
|
|
112
|
-
});
|
|
113
|
-
let latencyHistogram = this.aggLatencyHisto.get(topicName);
|
|
114
|
-
if (!latencyHistogram) {
|
|
115
|
-
latencyHistogram = createHistogram({
|
|
116
|
-
min: 1,
|
|
117
|
-
max: 24 * 60 * 60 * 1000
|
|
118
|
-
}); // 24hrs
|
|
119
|
-
this.aggLatencyHisto.set(topicName, latencyHistogram);
|
|
120
|
-
}
|
|
121
|
-
latencyHistogram.record(Math.max(ms, 1));
|
|
122
|
-
}
|
|
123
|
-
aggregate = (res)=>{
|
|
124
|
-
for (const [metrics, histograms] of [
|
|
125
|
-
[
|
|
126
|
-
this.aggLatencyMetrics,
|
|
127
|
-
this.aggLatencyHisto
|
|
128
|
-
],
|
|
129
|
-
[
|
|
130
|
-
this.aggValidationMetrics,
|
|
131
|
-
this.aggValidationHisto
|
|
132
|
-
]
|
|
133
|
-
]){
|
|
134
|
-
for (const topicName of Object.values(TopicType)){
|
|
135
|
-
const histogram = histograms.get(topicName);
|
|
136
|
-
if (!histogram) {
|
|
137
|
-
continue;
|
|
138
|
-
}
|
|
139
|
-
res.observe(metrics.avg, histogram.mean, {
|
|
140
|
-
[Attributes.TOPIC_NAME]: topicName
|
|
141
|
-
});
|
|
142
|
-
res.observe(metrics.max, histogram.max, {
|
|
143
|
-
[Attributes.TOPIC_NAME]: topicName
|
|
144
|
-
});
|
|
145
|
-
res.observe(metrics.min, histogram.min, {
|
|
146
|
-
[Attributes.TOPIC_NAME]: topicName
|
|
147
|
-
});
|
|
148
|
-
res.observe(metrics.p50, histogram.percentile(50), {
|
|
149
|
-
[Attributes.TOPIC_NAME]: topicName
|
|
150
|
-
});
|
|
151
|
-
res.observe(metrics.p90, histogram.percentile(90), {
|
|
152
|
-
[Attributes.TOPIC_NAME]: topicName
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
29
|
}
|
|
@@ -28,7 +28,6 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
|
|
|
28
28
|
private peerManager;
|
|
29
29
|
protected mempools: MemPools<T>;
|
|
30
30
|
private archiver;
|
|
31
|
-
private epochCache;
|
|
32
31
|
private proofVerifier;
|
|
33
32
|
private worldStateSynchronizer;
|
|
34
33
|
protected logger: Logger;
|
|
@@ -114,10 +113,7 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
|
|
|
114
113
|
* @returns The number of recipients the data was sent to.
|
|
115
114
|
*/
|
|
116
115
|
private publishToTopic;
|
|
117
|
-
protected preValidateReceivedMessage(msg: Message, msgId: string, source: PeerId):
|
|
118
|
-
result: boolean;
|
|
119
|
-
topicType?: TopicType;
|
|
120
|
-
};
|
|
116
|
+
protected preValidateReceivedMessage(msg: Message, msgId: string, source: PeerId): boolean;
|
|
121
117
|
/**
|
|
122
118
|
* Handles a new gossip message that was received by the client.
|
|
123
119
|
* @param topic - The message's topic.
|
|
@@ -170,13 +166,12 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
|
|
|
170
166
|
private getGasFees;
|
|
171
167
|
validate(txs: Tx[]): Promise<void>;
|
|
172
168
|
/**
|
|
173
|
-
* Create message validators for the given block number
|
|
169
|
+
* Create message validators for the given block number.
|
|
174
170
|
*
|
|
175
171
|
* Each validator is a pair of a validator and a severity.
|
|
176
172
|
* If a validator fails, the peer is penalized with the severity of the validator.
|
|
177
173
|
*
|
|
178
|
-
* @param
|
|
179
|
-
* @param nextSlotTimestamp - The timestamp of the next slot (used to validate txs are not expired).
|
|
174
|
+
* @param blockNumber - The block number to create validators for.
|
|
180
175
|
* @returns The message validators.
|
|
181
176
|
*/
|
|
182
177
|
private createMessageValidators;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,MAAM,EAA6C,MAAM,uBAAuB,CAAC;AAI/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,KAAK,EAAE,6BAA6B,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACvH,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,UAAU,EACf,aAAa,EAGb,SAAS,EAIV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,EAAE,EAAwC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,MAAM,EAA6C,MAAM,uBAAuB,CAAC;AAI/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,KAAK,EAAE,6BAA6B,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACvH,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,UAAU,EACf,aAAa,EAGb,SAAS,EAIV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,EAAE,EAAwC,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAAkC,KAAK,eAAe,EAAE,UAAU,EAAa,MAAM,yBAAyB,CAAC;AAEtH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAa1C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAwB,MAAM,mBAAmB,CAAC;AAEpF,OAAO,iBAAiB,CAAC;AAKzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAO7D,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,eAAe,CAAC;AAMtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,EAEL,KAAK,gBAAgB,EACrB,kBAAkB,EAClB,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AASjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAWhG;;GAEG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CAAC,IAAI,CAAE,SAAQ,UAAW,YAAW,UAAU;IA0B7G,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,SAAS,CAAC,IAAI,EAAE,YAAY;IAC5B,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,sBAAsB;IAE9B,SAAS,CAAC,MAAM;IArClB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,uBAAuB,CAAC,CAAiB;IACjD,OAAO,CAAC,mBAAmB,CAA0F;IAGrH,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,sBAAsB,CAAyB;IAEvD,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,YAAY,CAA8D;IAElF,OAAO,CAAC,SAAS,CAAwD;IAEzE;;;;OAIG;IACH,OAAO,CAAC,qBAAqB,CAA2B;IAExD,OAAO,CAAC,qBAAqB,CAA6C;IAE1E,OAAO,CAAC,eAAe,CAAqB;gBAGlC,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,SAAS,EACf,IAAI,EAAE,YAAY,EACpB,oBAAoB,EAAE,oBAAoB,EAC1C,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,oBAAoB,EAC/B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,aAAa,GAAG,kBAAkB,EACpD,UAAU,EAAE,mBAAmB,EACvB,aAAa,EAAE,6BAA6B,EAC5C,sBAAsB,EAAE,sBAAsB,EACtD,SAAS,EAAE,eAAe,EAChB,MAAM,SAAqC;IAmCvD;;;;;OAKG;WACiB,GAAG,CAAC,CAAC,SAAS,aAAa,EAC7C,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;QACJ,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,aAAa,EAAE,aAAa,GAAG,kBAAkB,CAAC;QAClD,UAAU,EAAE,mBAAmB,CAAC;QAChC,aAAa,EAAE,6BAA6B,CAAC;QAC7C,sBAAsB,EAAE,sBAAsB,CAAC;QAC/C,SAAS,EAAE,iBAAiB,CAAC;QAC7B,SAAS,EAAE,eAAe,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;KACxB;IAuKH;;;OAGG;IACU,KAAK;IAiElB;;;OAGG;IACU,IAAI;IAqBV,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE;IAIrD,OAAO,CAAC,oBAAoB;IAa5B;;;;;;;;;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;;;;;OAKG;IACH,gBAAgB,CAAC,WAAW,SAAS,kBAAkB,EACrD,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAChE,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,OAAO,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;IAIjF;;;OAGG;IACI,MAAM,IAAI,GAAG,GAAG,SAAS;IAIzB,6BAA6B,CAAC,QAAQ,EAAE,wBAAwB;IAIvE;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;;OAKG;YACW,cAAc;IAc5B,SAAS,CAAC,0BAA0B,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IA+BhF;;;;OAIG;cACa,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;cA2BlE,uBAAuB,CAAC,CAAC,EACvC,cAAc,EAAE,MAAM,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,CAAC,CAAA;KAAE,CAAC,EAC1D,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAA;KAAE,CAAC;cAqBnC,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAoBnF;;;;;OAKG;YACW,0BAA0B;YAiC1B,oBAAoB;YA+BpB,yBAAyB;IAyCvC;;;OAGG;YAOW,oBAAoB;IAIlC;;;OAGG;IACU,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,EAAE,CAAC;IAYvD;;;;;;;;;;;;;OAaG;YAIW,mBAAmB;YAuBnB,oBAAoB;YAwBpB,UAAU;IAWX,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/C;;;;;;;;OAQG;YACW,uBAAuB;IAiBrC;;;;;OAKG;YACW,cAAc;IA4B5B;;;;;;;;;;OAUG;YACW,wBAAwB;IAuBtC;;;;;OAKG;IAOU,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAUjG;;;;;OAKG;IAIU,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAWnF,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;YAI7B,WAAW;YAcX,UAAU;CAYzB"}
|
|
@@ -57,7 +57,6 @@ import { P2PInstrumentation } from './instrumentation.js';
|
|
|
57
57
|
peerManager;
|
|
58
58
|
mempools;
|
|
59
59
|
archiver;
|
|
60
|
-
epochCache;
|
|
61
60
|
proofVerifier;
|
|
62
61
|
worldStateSynchronizer;
|
|
63
62
|
logger;
|
|
@@ -78,7 +77,7 @@ import { P2PInstrumentation } from './instrumentation.js';
|
|
|
78
77
|
gossipSubEventHandler;
|
|
79
78
|
instrumentation;
|
|
80
79
|
constructor(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:libp2p_service')){
|
|
81
|
-
super(telemetry, 'LibP2PService'), this.clientType = clientType, this.config = config, this.node = node, this.peerDiscoveryService = peerDiscoveryService, this.reqresp = reqresp, this.peerManager = peerManager, this.mempools = mempools, this.archiver = archiver, this.
|
|
80
|
+
super(telemetry, 'LibP2PService'), this.clientType = clientType, this.config = config, this.node = node, this.peerDiscoveryService = peerDiscoveryService, this.reqresp = reqresp, this.peerManager = peerManager, this.mempools = mempools, this.archiver = archiver, this.proofVerifier = proofVerifier, this.worldStateSynchronizer = worldStateSynchronizer, this.logger = logger, this.jobQueue = new SerialQueue(), this.msgIdSeenValidators = {}, this.protocolVersion = '', this.topicStrings = {};
|
|
82
81
|
this.instrumentation = new P2PInstrumentation(telemetry, 'LibP2PService');
|
|
83
82
|
this.msgIdSeenValidators[TopicType.tx] = new MessageSeenValidator(config.seenMessageCacheSize);
|
|
84
83
|
this.msgIdSeenValidators[TopicType.block_proposal] = new MessageSeenValidator(config.seenMessageCacheSize);
|
|
@@ -389,16 +388,10 @@ import { P2PInstrumentation } from './instrumentation.js';
|
|
|
389
388
|
if (!validator || !validator.addMessage(msgId)) {
|
|
390
389
|
this.instrumentation.incMessagePrevalidationStatus(false, topicType);
|
|
391
390
|
this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Ignore);
|
|
392
|
-
return
|
|
393
|
-
result: false,
|
|
394
|
-
topicType
|
|
395
|
-
};
|
|
391
|
+
return false;
|
|
396
392
|
}
|
|
397
393
|
this.instrumentation.incMessagePrevalidationStatus(true, topicType);
|
|
398
|
-
return
|
|
399
|
-
result: true,
|
|
400
|
-
topicType
|
|
401
|
-
};
|
|
394
|
+
return true;
|
|
402
395
|
}
|
|
403
396
|
/**
|
|
404
397
|
* Handles a new gossip message that was received by the client.
|
|
@@ -413,14 +406,8 @@ import { P2PInstrumentation } from './instrumentation.js';
|
|
|
413
406
|
messageId: p2pMessage.id,
|
|
414
407
|
messageLatency
|
|
415
408
|
});
|
|
416
|
-
|
|
417
|
-
if (!preValidationResult.result) {
|
|
409
|
+
if (!this.preValidateReceivedMessage(msg, msgId, source)) {
|
|
418
410
|
return;
|
|
419
|
-
} else if (preValidationResult.topicType !== undefined) {
|
|
420
|
-
// guard against clock skew & DST
|
|
421
|
-
if (messageLatency > 0) {
|
|
422
|
-
this.instrumentation.recordMessageLatency(preValidationResult.topicType, messageLatency);
|
|
423
|
-
}
|
|
424
411
|
}
|
|
425
412
|
if (msg.topic === this.topicStrings[TopicType.tx]) {
|
|
426
413
|
await this.handleGossipedTx(p2pMessage.payload, msgId, source);
|
|
@@ -610,10 +597,8 @@ import { P2PInstrumentation } from './instrumentation.js';
|
|
|
610
597
|
return true;
|
|
611
598
|
}
|
|
612
599
|
async validatePropagatedTx(tx, peerId) {
|
|
613
|
-
const
|
|
614
|
-
|
|
615
|
-
const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
|
|
616
|
-
const messageValidators = await this.createMessageValidators(currentBlockNumber, nextSlotTimestamp);
|
|
600
|
+
const blockNumber = await this.archiver.getBlockNumber() + 1;
|
|
601
|
+
const messageValidators = await this.createMessageValidators(blockNumber);
|
|
617
602
|
for (const validator of messageValidators){
|
|
618
603
|
const outcome = await this.runValidations(tx, validator);
|
|
619
604
|
if (outcome.allPassed) {
|
|
@@ -623,8 +608,7 @@ import { P2PInstrumentation } from './instrumentation.js';
|
|
|
623
608
|
let { severity } = outcome.failure;
|
|
624
609
|
// Double spend validator has a special case handler
|
|
625
610
|
if (name === 'doubleSpendValidator') {
|
|
626
|
-
|
|
627
|
-
severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
|
|
611
|
+
severity = await this.handleDoubleSpendFailure(tx, blockNumber);
|
|
628
612
|
}
|
|
629
613
|
this.peerManager.penalizePeer(peerId, severity);
|
|
630
614
|
return false;
|
|
@@ -644,10 +628,8 @@ import { P2PInstrumentation } from './instrumentation.js';
|
|
|
644
628
|
return gasFees;
|
|
645
629
|
}
|
|
646
630
|
async validate(txs) {
|
|
647
|
-
const
|
|
648
|
-
|
|
649
|
-
const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
|
|
650
|
-
const messageValidators = await this.createMessageValidators(currentBlockNumber, nextSlotTimestamp);
|
|
631
|
+
const blockNumber = await this.archiver.getBlockNumber() + 1;
|
|
632
|
+
const messageValidators = await this.createMessageValidators(blockNumber);
|
|
651
633
|
await Promise.all(txs.map(async (tx)=>{
|
|
652
634
|
for (const validator of messageValidators){
|
|
653
635
|
const outcome = await this.runValidations(tx, validator);
|
|
@@ -662,19 +644,17 @@ import { P2PInstrumentation } from './instrumentation.js';
|
|
|
662
644
|
}));
|
|
663
645
|
}
|
|
664
646
|
/**
|
|
665
|
-
* Create message validators for the given block number
|
|
647
|
+
* Create message validators for the given block number.
|
|
666
648
|
*
|
|
667
649
|
* Each validator is a pair of a validator and a severity.
|
|
668
650
|
* If a validator fails, the peer is penalized with the severity of the validator.
|
|
669
651
|
*
|
|
670
|
-
* @param
|
|
671
|
-
* @param nextSlotTimestamp - The timestamp of the next slot (used to validate txs are not expired).
|
|
652
|
+
* @param blockNumber - The block number to create validators for.
|
|
672
653
|
* @returns The message validators.
|
|
673
|
-
*/ async createMessageValidators(
|
|
674
|
-
const gasFees = await this.getGasFees(
|
|
654
|
+
*/ async createMessageValidators(blockNumber) {
|
|
655
|
+
const gasFees = await this.getGasFees(blockNumber - 1);
|
|
675
656
|
const allowedInSetup = this.config.txPublicSetupAllowList ?? await getDefaultAllowedSetupFunctions();
|
|
676
|
-
|
|
677
|
-
return createTxMessageValidators(nextSlotTimestamp, blockNumberInWhichTheTxIsConsideredToBeIncluded, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractTreeRoot, this.archiver, this.proofVerifier, allowedInSetup);
|
|
657
|
+
return createTxMessageValidators(blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractTreeRoot, this.archiver, this.proofVerifier, allowedInSetup);
|
|
678
658
|
}
|
|
679
659
|
/**
|
|
680
660
|
* Run validations on a tx.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-test-p2p-clients.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-test-p2p-clients.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"make-test-p2p-clients.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-test-p2p-clients.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAIlE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAI5D,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,kBAAkB,CAAC;AAG7F,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,EAAE,eAAe,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,sBAAsB,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,SAAS,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,wBAAwB,0CAMlC;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,EACE,kBAAyB,EACzB,aAAa,EACb,kBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,MAAwC,GACzC,EAAE,wBAAwB,0CA0C5B;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB;;;;;KAuC3G;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB;;;;;KAgCnG;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,iBAG7D"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { MockL2BlockSource } from '@aztec/archiver/test';
|
|
2
|
-
import { SecretValue } from '@aztec/foundation/config';
|
|
3
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
3
|
import { sleep } from '@aztec/foundation/sleep';
|
|
5
4
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
@@ -34,7 +33,7 @@ import { AlwaysFalseCircuitVerifier, AlwaysTrueCircuitVerifier } from './reqresp
|
|
|
34
33
|
const config = {
|
|
35
34
|
...p2pBaseConfig,
|
|
36
35
|
p2pEnabled: true,
|
|
37
|
-
peerIdPrivateKey
|
|
36
|
+
peerIdPrivateKey,
|
|
38
37
|
p2pIp: `127.0.0.1`,
|
|
39
38
|
listenAddress: `127.0.0.1`,
|
|
40
39
|
p2pPort: port,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reqresp-nodes.d.ts","sourceRoot":"","sources":["../../src/test-helpers/reqresp-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"reqresp-nodes.d.ts","sourceRoot":"","sources":["../../src/test-helpers/reqresp-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAoB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EACV,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAM7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,OAAO,EAAE,KAAK,MAAM,EAAoC,MAAM,QAAQ,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAEvE,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EAElC,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,KAAK,UAAU,EAA2E,MAAM,YAAY,CAAC;AAGtH;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,GAAE,MAAM,EAAO,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EACb,eAAe,GAAE,OAAe,EAChC,KAAK,GAAE,OAAc,GACpB,OAAO,CAAC,UAAU,CAAC,CAqCrB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,SAAS,aAAa,EACnE,UAAU,EAAE,CAAC,EACb,aAAa,EAAE,MAAM,EAAE,YAAK,EAC5B,QAAQ,EAAE,aAAa,GAAG,kBAAkB,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,SAAS,EAAE,eAAe,EAC1B,IAAI,GAAE,MAAU,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,GAAE,WAA8B,6BAsD5C;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,0BAMxC,CAAC;AAIF,eAAO,MAAM,4BAA4B,EAAE,4BAM1C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,aAAa,WAAW,EACxB,eAAe,MAAM,EACrB,aAAY,OAAO,CAAC,4BAA4B,CAAM,KACrD,OAAO,CAAC,WAAW,EAAE,CAEvB,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,OAAO,WAAW,EAAE,EACpB,gDAAgD,EAChD,oDAAoD,kBAKrD,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,OAAO,WAAW,EAAE,KAAG,OAAO,CAAC,IAAI,CAGlE,CAAC;AAGF,eAAO,MAAM,aAAa,GACxB,aAAa,WAAW,EACxB,aAAY,OAAO,CAAC,4BAA4B,CAAM,KACrD,OAAO,CAAC,WAAW,CASrB,CAAC;AAGF,eAAO,MAAM,cAAc,GAAU,OAAO,WAAW,EAAE,KAAG,OAAO,CAAC,IAAI,CAUvE,CAAC;AAGF,qBAAa,yBAA0B,YAAW,6BAA6B;IAC7E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAGrB,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC;CAG1D;AACD,qBAAa,0BAA2B,YAAW,6BAA6B;IAC9E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAGrB,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC;CAG1D;AAGD,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,cAAc,CAWpH;AAED,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,eAAsC,EACjD,WAAW,GAAE,WAA8B,GAC1C,OAAO,CAAC,aAAa,CAAC,CAGxB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,wBAOzE;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,eAAsC,EACjD,WAAW,GAAE,WAA8B,GAC1C,OAAO,CAAC,aAAa,CAAC,CAKxB"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { timesParallel } from '@aztec/foundation/collection';
|
|
2
|
-
import { SecretValue } from '@aztec/foundation/config';
|
|
3
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
3
|
import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
5
4
|
import { emptyChainConfig } from '@aztec/stdlib/config';
|
|
@@ -88,7 +87,7 @@ import { getVersions } from '../versioning.js';
|
|
|
88
87
|
peerCheckIntervalMS: 1000,
|
|
89
88
|
maxPeerCount: 5,
|
|
90
89
|
p2pEnabled: true,
|
|
91
|
-
peerIdPrivateKey:
|
|
90
|
+
peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex'),
|
|
92
91
|
bootstrapNodeEnrVersionCheck: false,
|
|
93
92
|
...chainConfig
|
|
94
93
|
};
|
|
@@ -198,7 +197,7 @@ export function createBootstrapNodeConfig(privateKey, port, chainConfig) {
|
|
|
198
197
|
l1ChainId: chainConfig.l1ChainId,
|
|
199
198
|
p2pIp: '127.0.0.1',
|
|
200
199
|
p2pPort: port,
|
|
201
|
-
peerIdPrivateKey:
|
|
200
|
+
peerIdPrivateKey: privateKey,
|
|
202
201
|
dataDirectory: undefined,
|
|
203
202
|
dataStoreMapSizeKB: 0,
|
|
204
203
|
bootstrapNodes: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAQnE,QAAA,MAAM,eAAe,EAAE,WAMtB,CAAC;AAEF,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IAC5B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;gBAEnC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;IAKzD,OAAO;IAOP;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoD1B;;;;;;OAMG;IACG,iBAAiB,CAAC,eAAe,EAAE,MAAM;IA2C/C,4BAA4B;IAI5B,kCAAkC;IAIlC;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IA8CrD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACG,OAAO;CAiCd;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { SecretValue } from '@aztec/foundation/config';
|
|
2
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
2
|
import { sleep } from '@aztec/foundation/sleep';
|
|
4
3
|
import { fork } from 'child_process';
|
|
@@ -41,7 +40,7 @@ class WorkerClientManager {
|
|
|
41
40
|
return {
|
|
42
41
|
...getP2PDefaultConfig(),
|
|
43
42
|
p2pEnabled: true,
|
|
44
|
-
peerIdPrivateKey:
|
|
43
|
+
peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
|
|
45
44
|
listenAddress: '127.0.0.1',
|
|
46
45
|
p2pIp: '127.0.0.1',
|
|
47
46
|
p2pPort: port,
|
package/dest/util.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { SecretValue } from '@aztec/foundation/config';
|
|
2
1
|
import type { Logger } from '@aztec/foundation/log';
|
|
3
2
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
4
3
|
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
@@ -47,10 +46,10 @@ export declare function configureP2PClientAddresses(_config: P2PConfig & DataSto
|
|
|
47
46
|
*
|
|
48
47
|
*/
|
|
49
48
|
export declare function getPeerIdPrivateKey(config: {
|
|
50
|
-
peerIdPrivateKey?:
|
|
49
|
+
peerIdPrivateKey?: string;
|
|
51
50
|
peerIdPrivateKeyPath?: string;
|
|
52
51
|
dataDirectory?: string;
|
|
53
|
-
}, store: AztecAsyncKVStore, logger: Logger): Promise<
|
|
52
|
+
}, store: AztecAsyncKVStore, logger: Logger): Promise<string>;
|
|
54
53
|
/**
|
|
55
54
|
* Create a libp2p peer ID from the private key.
|
|
56
55
|
* @param privateKey - peer ID private key as hex string
|
package/dest/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAIpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxF,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI,CACV,SAAS,EACT,kBAAkB,GAAG,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,+BAA+B,CACvG,GAAG;YAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;KAClD,CAAC;CACH;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE;QACV,iBAAiB,EAAE,iBAAiB,CAAC;KACtC,CAAC;CACH,CAAC,CAAC;AAEH;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAOjG;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9F;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CAmBtC;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5F,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CA2DjB;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
|
package/dest/util.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { SecretValue } from '@aztec/foundation/config';
|
|
2
1
|
import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
|
|
3
2
|
import { createFromPrivKey } from '@libp2p/peer-id-factory';
|
|
4
3
|
import { resolve } from 'dns/promises';
|
|
@@ -86,12 +85,12 @@ export async function configureP2PClientAddresses(_config) {
|
|
|
86
85
|
await fs.writeFile(filePath, privateKey);
|
|
87
86
|
};
|
|
88
87
|
// If the peerIdPrivateKey is provided in the config, we use it and persist it in either a file or the node's store
|
|
89
|
-
if (config.peerIdPrivateKey
|
|
88
|
+
if (config.peerIdPrivateKey) {
|
|
90
89
|
if (peerIdPrivateKeyFilePath) {
|
|
91
|
-
await writePrivateKeyToFile(peerIdPrivateKeyFilePath, config.peerIdPrivateKey
|
|
90
|
+
await writePrivateKeyToFile(peerIdPrivateKeyFilePath, config.peerIdPrivateKey);
|
|
92
91
|
} else {
|
|
93
92
|
peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
|
|
94
|
-
await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey
|
|
93
|
+
await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey);
|
|
95
94
|
}
|
|
96
95
|
return config.peerIdPrivateKey;
|
|
97
96
|
}
|
|
@@ -110,7 +109,7 @@ export async function configureP2PClientAddresses(_config) {
|
|
|
110
109
|
logger.verbose(`Peer ID private key found in the node's store, persisting it to ${peerIdPrivateKeyFilePath}`);
|
|
111
110
|
await writePrivateKeyToFile(peerIdPrivateKeyFilePath, storedPeerIdPrivateKey);
|
|
112
111
|
}
|
|
113
|
-
return
|
|
112
|
+
return storedPeerIdPrivateKey;
|
|
114
113
|
}
|
|
115
114
|
// Generate and persist a new private key
|
|
116
115
|
const newPeerIdPrivateKey = await generateKeyPair('secp256k1');
|
|
@@ -122,7 +121,7 @@ export async function configureP2PClientAddresses(_config) {
|
|
|
122
121
|
logger.warn('Creating new peer ID private key and persisting it to the lmdb store. Key will be lost on rollup upgrade, specify the peer id private key path and restart the node to persist the peer id private key to a file');
|
|
123
122
|
await peerIdPrivateKeySingleton.set(privateKeyString);
|
|
124
123
|
}
|
|
125
|
-
return
|
|
124
|
+
return privateKeyString;
|
|
126
125
|
}
|
|
127
126
|
/**
|
|
128
127
|
* Create a libp2p peer ID from the private key.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/p2p",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -67,17 +67,17 @@
|
|
|
67
67
|
]
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@aztec/constants": "1.0.0
|
|
71
|
-
"@aztec/epoch-cache": "1.0.0
|
|
72
|
-
"@aztec/ethereum": "1.0.0
|
|
73
|
-
"@aztec/foundation": "1.0.0
|
|
74
|
-
"@aztec/kv-store": "1.0.0
|
|
75
|
-
"@aztec/noir-contracts.js": "1.0.0
|
|
76
|
-
"@aztec/noir-protocol-circuits-types": "1.0.0
|
|
77
|
-
"@aztec/protocol-contracts": "1.0.0
|
|
78
|
-
"@aztec/simulator": "1.0.0
|
|
79
|
-
"@aztec/stdlib": "1.0.0
|
|
80
|
-
"@aztec/telemetry-client": "1.0.0
|
|
70
|
+
"@aztec/constants": "1.0.0",
|
|
71
|
+
"@aztec/epoch-cache": "1.0.0",
|
|
72
|
+
"@aztec/ethereum": "1.0.0",
|
|
73
|
+
"@aztec/foundation": "1.0.0",
|
|
74
|
+
"@aztec/kv-store": "1.0.0",
|
|
75
|
+
"@aztec/noir-contracts.js": "1.0.0",
|
|
76
|
+
"@aztec/noir-protocol-circuits-types": "1.0.0",
|
|
77
|
+
"@aztec/protocol-contracts": "1.0.0",
|
|
78
|
+
"@aztec/simulator": "1.0.0",
|
|
79
|
+
"@aztec/stdlib": "1.0.0",
|
|
80
|
+
"@aztec/telemetry-client": "1.0.0",
|
|
81
81
|
"@chainsafe/discv5": "9.0.0",
|
|
82
82
|
"@chainsafe/enr": "3.0.0",
|
|
83
83
|
"@chainsafe/libp2p-gossipsub": "13.0.0",
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"xxhash-wasm": "^1.1.0"
|
|
108
108
|
},
|
|
109
109
|
"devDependencies": {
|
|
110
|
-
"@aztec/archiver": "1.0.0
|
|
110
|
+
"@aztec/archiver": "1.0.0",
|
|
111
111
|
"@jest/globals": "^30.0.0",
|
|
112
112
|
"@types/jest": "^30.0.0",
|
|
113
113
|
"@types/node": "^22.15.17",
|
|
@@ -45,7 +45,7 @@ export class BootstrapNode implements P2PBootstrapApi {
|
|
|
45
45
|
const peerIdPrivateKey = await getPeerIdPrivateKey(config, this.store, this.logger);
|
|
46
46
|
|
|
47
47
|
const { enr: ourEnr, peerId } = await createBootnodeENRandPeerId(
|
|
48
|
-
peerIdPrivateKey
|
|
48
|
+
peerIdPrivateKey,
|
|
49
49
|
p2pIp,
|
|
50
50
|
config.p2pBroadcastPort!,
|
|
51
51
|
config.l1ChainId,
|
package/src/client/factory.ts
CHANGED
|
@@ -73,7 +73,7 @@ export const createP2PClient = async <T extends P2PClientType>(
|
|
|
73
73
|
|
|
74
74
|
// Create peer discovery service
|
|
75
75
|
const peerIdPrivateKey = await getPeerIdPrivateKey(config, store, logger);
|
|
76
|
-
const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey
|
|
76
|
+
const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey);
|
|
77
77
|
|
|
78
78
|
const p2pService = await (deps.p2pServiceFactory ?? LibP2PService.new<T>)(clientType, config, peerId, {
|
|
79
79
|
packageVersion,
|
package/src/client/p2p_client.ts
CHANGED
|
@@ -667,7 +667,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
|
|
|
667
667
|
private async markTxsAsMinedFromBlocks(blocks: L2Block[]): Promise<void> {
|
|
668
668
|
for (const block of blocks) {
|
|
669
669
|
const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
|
|
670
|
-
await this.txPool.markAsMined(txHashes, block.
|
|
670
|
+
await this.txPool.markAsMined(txHashes, block.number);
|
|
671
671
|
}
|
|
672
672
|
}
|
|
673
673
|
|
package/src/config.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type ConfigMappingsType,
|
|
3
|
-
SecretValue,
|
|
4
3
|
booleanConfigHelper,
|
|
5
4
|
floatConfigHelper,
|
|
6
5
|
getConfigFromMappings,
|
|
@@ -52,7 +51,7 @@ export interface P2PConfig extends P2PReqRespConfig, ChainConfig {
|
|
|
52
51
|
listenAddress: string;
|
|
53
52
|
|
|
54
53
|
/** An optional peer id private key. If blank, will generate a random key. */
|
|
55
|
-
peerIdPrivateKey?:
|
|
54
|
+
peerIdPrivateKey?: string;
|
|
56
55
|
|
|
57
56
|
/** An optional path to store generated peer id private keys. If blank, will default to storing any generated keys in the data directory. */
|
|
58
57
|
peerIdPrivateKeyPath?: string;
|