@aztec/p2p 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.76.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.d.ts +38 -0
- package/dest/bootstrap/bootstrap.d.ts.map +1 -0
- package/dest/bootstrap/bootstrap.js +31 -38
- package/dest/client/factory.d.ts +21 -0
- package/dest/client/factory.d.ts.map +1 -0
- package/dest/client/factory.js +13 -11
- package/dest/client/index.d.ts +3 -0
- package/dest/client/index.d.ts.map +1 -0
- package/dest/client/index.js +1 -0
- package/dest/client/p2p_client.d.ts +332 -0
- package/dest/client/p2p_client.d.ts.map +1 -0
- package/dest/client/p2p_client.js +535 -513
- package/dest/config.d.ts +187 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +64 -53
- package/dest/errors/reqresp.error.d.ts +28 -0
- package/dest/errors/reqresp.error.d.ts.map +1 -0
- package/dest/errors/reqresp.error.js +10 -6
- package/dest/index.d.ts +9 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +57 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/attestation_pool.js +2 -6
- 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 +32 -64
- package/dest/mem_pools/attestation_pool/index.d.ts +3 -0
- package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/index.js +1 -0
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +22 -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 +19 -22
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -0
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +26 -22
- package/dest/mem_pools/attestation_pool/mocks.d.ts +18 -0
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/mocks.js +6 -10
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts +7 -0
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts.map +1 -0
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.js +2 -1
- package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts +4 -0
- package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts.map +1 -0
- package/dest/mem_pools/epoch_proof_quote_pool/index.js +1 -0
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts +12 -0
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts.map +1 -0
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.js +4 -5
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts +8 -0
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts.map +1 -0
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.js +3 -2
- package/dest/mem_pools/index.d.ts +5 -0
- package/dest/mem_pools/index.d.ts.map +1 -0
- package/dest/mem_pools/index.js +2 -1
- package/dest/mem_pools/instrumentation.d.ts +31 -0
- package/dest/mem_pools/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/instrumentation.js +42 -37
- package/dest/mem_pools/interface.d.ts +13 -0
- package/dest/mem_pools/interface.d.ts.map +1 -0
- package/dest/mem_pools/interface.js +2 -3
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +66 -0
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +134 -127
- package/dest/mem_pools/tx_pool/index.d.ts +4 -0
- package/dest/mem_pools/tx_pool/index.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/index.js +1 -0
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +56 -0
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +43 -45
- package/dest/mem_pools/tx_pool/priority.d.ts +8 -0
- package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/priority.js +3 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +66 -0
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/tx_pool.js +2 -3
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +7 -0
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -0
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +37 -107
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +8 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/attestation_validator.js +3 -3
- package/dest/msg_validators/attestation_validator/index.d.ts +2 -0
- package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/attestation_validator/index.js +1 -0
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +8 -0
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +2 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts +2 -0
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/block_proposal_validator/index.js +1 -0
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts +8 -0
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts.map +1 -0
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.js +2 -2
- package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts +2 -0
- package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/epoch_proof_quote_validator/index.js +1 -0
- package/dest/msg_validators/index.d.ts +4 -0
- package/dest/msg_validators/index.d.ts.map +1 -0
- package/dest/msg_validators/index.js +1 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +7 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -9
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +11 -0
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/block_header_validator.js +12 -17
- package/dest/msg_validators/tx_validator/data_validator.d.ts +6 -0
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/data_validator.js +32 -41
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +12 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/double_spend_validator.js +14 -22
- package/dest/msg_validators/tx_validator/index.d.ts +7 -0
- package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/index.js +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -0
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/metadata_validator.js +26 -29
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +8 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +12 -17
- package/dest/services/data_store.d.ts +27 -0
- package/dest/services/data_store.d.ts.map +1 -0
- package/dest/services/data_store.js +57 -57
- package/dest/services/discv5/discV5_service.d.ts +40 -0
- package/dest/services/discv5/discV5_service.d.ts.map +1 -0
- package/dest/services/discv5/discV5_service.js +82 -43
- package/dest/services/dummy_service.d.ts +83 -0
- package/dest/services/dummy_service.d.ts.map +1 -0
- package/dest/services/dummy_service.js +59 -40
- package/dest/services/encoding.d.ts +31 -0
- package/dest/services/encoding.d.ts.map +1 -0
- package/dest/services/encoding.js +9 -10
- package/dest/services/index.d.ts +3 -0
- package/dest/services/index.d.ts.map +1 -0
- package/dest/services/index.js +1 -0
- package/dest/services/libp2p/libp2p_logger.d.ts +7 -0
- package/dest/services/libp2p/libp2p_logger.d.ts.map +1 -0
- package/dest/services/libp2p/libp2p_logger.js +67 -0
- package/dest/services/libp2p/libp2p_service.d.ts +225 -0
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
- package/dest/services/libp2p/libp2p_service.js +727 -709
- package/dest/services/peer-manager/metrics.d.ts +12 -0
- package/dest/services/peer-manager/metrics.d.ts.map +1 -0
- package/dest/services/peer-manager/metrics.js +7 -14
- package/dest/services/peer-manager/peer_manager.d.ts +76 -0
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
- package/dest/services/peer-manager/peer_manager.js +342 -340
- package/dest/services/peer-manager/peer_scoring.d.ts +28 -0
- package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -0
- package/dest/services/peer-manager/peer_scoring.js +18 -20
- package/dest/services/reqresp/config.d.ts +16 -0
- package/dest/services/reqresp/config.d.ts.map +1 -0
- package/dest/services/reqresp/config.js +5 -4
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +45 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -0
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +28 -35
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +61 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -0
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +59 -60
- package/dest/services/reqresp/index.d.ts +6 -0
- package/dest/services/reqresp/index.d.ts.map +1 -0
- package/dest/services/reqresp/index.js +3 -1
- package/dest/services/reqresp/interface.d.ts +116 -0
- package/dest/services/reqresp/interface.d.ts.map +1 -0
- package/dest/services/reqresp/interface.js +30 -25
- package/dest/services/reqresp/metrics.d.ts +15 -0
- package/dest/services/reqresp/metrics.d.ts.map +1 -0
- package/dest/services/reqresp/metrics.js +10 -23
- package/dest/services/reqresp/protocols/block.d.ts +4 -0
- package/dest/services/reqresp/protocols/block.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/block.js +2 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts +51 -0
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/goodbye.js +41 -36
- package/dest/services/reqresp/protocols/index.d.ts +9 -0
- package/dest/services/reqresp/protocols/index.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/index.js +3 -1
- package/dest/services/reqresp/protocols/ping.d.ts +9 -0
- package/dest/services/reqresp/protocols/ping.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/ping.js +3 -1
- package/dest/services/reqresp/protocols/status.d.ts +9 -0
- package/dest/services/reqresp/protocols/status.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/status.js +3 -1
- package/dest/services/reqresp/protocols/tx.d.ts +13 -0
- package/dest/services/reqresp/protocols/tx.d.ts.map +1 -0
- package/dest/services/reqresp/protocols/tx.js +8 -5
- package/dest/services/reqresp/rate-limiter/index.d.ts +2 -0
- package/dest/services/reqresp/rate-limiter/index.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/index.js +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +102 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +35 -39
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +3 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -0
- package/dest/services/reqresp/rate-limiter/rate_limits.js +17 -16
- package/dest/services/reqresp/reqresp.d.ts +166 -0
- package/dest/services/reqresp/reqresp.d.ts.map +1 -0
- package/dest/services/reqresp/reqresp.js +463 -460
- package/dest/services/reqresp/status.d.ts +31 -0
- package/dest/services/reqresp/status.d.ts.map +1 -0
- package/dest/services/reqresp/status.js +17 -16
- package/dest/services/service.d.ts +86 -0
- package/dest/services/service.d.ts.map +1 -0
- package/dest/services/service.js +4 -3
- package/dest/services/types.d.ts +32 -0
- package/dest/services/types.d.ts.map +1 -0
- package/dest/services/types.js +19 -20
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts +7 -0
- package/dest/test-helpers/generate-peer-id-private-keys.d.ts.map +1 -0
- package/dest/test-helpers/generate-peer-id-private-keys.js +15 -0
- package/dest/test-helpers/get-ports.d.ts +7 -0
- package/dest/test-helpers/get-ports.d.ts.map +1 -0
- package/dest/test-helpers/get-ports.js +8 -0
- package/dest/test-helpers/index.d.ts +6 -0
- package/dest/test-helpers/index.d.ts.map +1 -0
- package/dest/test-helpers/index.js +6 -0
- package/dest/test-helpers/make-enrs.d.ts +16 -0
- package/dest/test-helpers/make-enrs.d.ts.map +1 -0
- package/dest/test-helpers/make-enrs.js +35 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +37 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
- package/dest/test-helpers/make-test-p2p-clients.js +71 -0
- package/dest/test-helpers/reqresp-nodes.d.ts +55 -0
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
- package/dest/test-helpers/reqresp-nodes.js +183 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -0
- package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -0
- package/dest/testbench/p2p_client_testbench_worker.js +125 -0
- package/dest/util.d.ts +53 -0
- package/dest/util.d.ts.map +1 -0
- package/dest/util.js +34 -23
- package/dest/versioning.d.ts +12 -0
- package/dest/versioning.d.ts.map +1 -0
- package/dest/versioning.js +38 -0
- package/package.json +11 -9
- package/src/bootstrap/bootstrap.ts +9 -3
- package/src/client/factory.ts +12 -5
- package/src/config.ts +56 -29
- package/src/mem_pools/index.ts +3 -3
- package/src/mem_pools/instrumentation.ts +2 -3
- package/src/msg_validators/attestation_validator/attestation_validator.ts +3 -3
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +3 -3
- package/src/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.ts +3 -3
- package/src/services/discv5/discV5_service.ts +67 -18
- package/src/services/dummy_service.ts +2 -0
- package/src/services/libp2p/libp2p_logger.ts +78 -0
- package/src/services/libp2p/libp2p_service.ts +47 -10
- package/src/services/reqresp/protocols/goodbye.ts +1 -1
- package/src/services/reqresp/reqresp.ts +9 -1
- package/src/services/service.ts +2 -0
- package/src/services/types.ts +2 -10
- package/src/test-helpers/generate-peer-id-private-keys.ts +15 -0
- package/src/test-helpers/get-ports.ts +8 -0
- package/src/test-helpers/index.ts +5 -0
- package/src/test-helpers/make-enrs.ts +44 -0
- package/src/test-helpers/make-test-p2p-clients.ts +124 -0
- package/src/{mocks/index.ts → test-helpers/reqresp-nodes.ts} +10 -5
- package/src/testbench/README.md +20 -0
- package/src/testbench/p2p_client_testbench_worker.ts +156 -0
- package/src/testbench/scripts/run_testbench.sh +7 -0
- package/src/versioning.ts +50 -0
- package/dest/mocks/index.js +0 -190
|
@@ -1,35 +1,33 @@
|
|
|
1
|
+
var _AztecDatastore_memoryDatastore, _AztecDatastore_dbDatastore, _AztecDatastore_batchOps;
|
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
1
3
|
import { filter, map, sort, take } from '@aztec/foundation/iterable';
|
|
2
4
|
import { Key } from 'interface-datastore';
|
|
3
5
|
class KeyNotFoundError extends Error {
|
|
4
|
-
|
|
5
|
-
constructor(message){
|
|
6
|
+
constructor(message) {
|
|
6
7
|
super(message);
|
|
7
8
|
this.code = 'ERR_NOT_FOUND';
|
|
8
9
|
}
|
|
9
10
|
}
|
|
10
11
|
export class AztecDatastore {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}){
|
|
18
|
-
this.#memoryDatastore = new Map();
|
|
19
|
-
this.#dbDatastore = db.openMap('p2p_datastore');
|
|
12
|
+
constructor(db, { maxMemoryItems } = { maxMemoryItems: 50 }) {
|
|
13
|
+
_AztecDatastore_memoryDatastore.set(this, void 0);
|
|
14
|
+
_AztecDatastore_dbDatastore.set(this, void 0);
|
|
15
|
+
_AztecDatastore_batchOps.set(this, []);
|
|
16
|
+
__classPrivateFieldSet(this, _AztecDatastore_memoryDatastore, new Map(), "f");
|
|
17
|
+
__classPrivateFieldSet(this, _AztecDatastore_dbDatastore, db.openMap('p2p_datastore'), "f");
|
|
20
18
|
this.maxMemoryItems = maxMemoryItems;
|
|
21
19
|
}
|
|
22
20
|
async has(key) {
|
|
23
|
-
return this
|
|
21
|
+
return __classPrivateFieldGet(this, _AztecDatastore_memoryDatastore, "f").has(key.toString()) || (await __classPrivateFieldGet(this, _AztecDatastore_dbDatastore, "f").hasAsync(key.toString()));
|
|
24
22
|
}
|
|
25
23
|
async get(key) {
|
|
26
24
|
const keyStr = key.toString();
|
|
27
|
-
const memoryItem = this
|
|
25
|
+
const memoryItem = __classPrivateFieldGet(this, _AztecDatastore_memoryDatastore, "f").get(keyStr);
|
|
28
26
|
if (memoryItem) {
|
|
29
27
|
memoryItem.lastAccessedMs = Date.now();
|
|
30
28
|
return memoryItem.data;
|
|
31
29
|
}
|
|
32
|
-
const dbItem = await this
|
|
30
|
+
const dbItem = await __classPrivateFieldGet(this, _AztecDatastore_dbDatastore, "f").getAsync(keyStr);
|
|
33
31
|
if (!dbItem) {
|
|
34
32
|
throw new KeyNotFoundError(`Key not found`);
|
|
35
33
|
}
|
|
@@ -39,71 +37,72 @@ export class AztecDatastore {
|
|
|
39
37
|
return this._put(key, val);
|
|
40
38
|
}
|
|
41
39
|
async *putMany(source) {
|
|
42
|
-
for await (const { key, value } of source){
|
|
40
|
+
for await (const { key, value } of source) {
|
|
43
41
|
await this.put(key, value);
|
|
44
42
|
yield key;
|
|
45
43
|
}
|
|
46
44
|
}
|
|
47
45
|
async *getMany(source) {
|
|
48
|
-
for await (const key of source){
|
|
46
|
+
for await (const key of source) {
|
|
49
47
|
yield {
|
|
50
48
|
key,
|
|
51
|
-
value: await this.get(key)
|
|
49
|
+
value: await this.get(key),
|
|
52
50
|
};
|
|
53
51
|
}
|
|
54
52
|
}
|
|
55
53
|
async *deleteMany(source) {
|
|
56
|
-
for await (const key of source){
|
|
54
|
+
for await (const key of source) {
|
|
57
55
|
await this.delete(key);
|
|
58
56
|
yield key;
|
|
59
57
|
}
|
|
60
58
|
}
|
|
61
59
|
async delete(key) {
|
|
62
|
-
this
|
|
63
|
-
await this
|
|
60
|
+
__classPrivateFieldGet(this, _AztecDatastore_memoryDatastore, "f").delete(key.toString());
|
|
61
|
+
await __classPrivateFieldGet(this, _AztecDatastore_dbDatastore, "f").delete(key.toString());
|
|
64
62
|
}
|
|
65
63
|
batch() {
|
|
66
64
|
return {
|
|
67
|
-
put: (key, value)=>{
|
|
68
|
-
this
|
|
65
|
+
put: (key, value) => {
|
|
66
|
+
__classPrivateFieldGet(this, _AztecDatastore_batchOps, "f").push({
|
|
69
67
|
type: 'put',
|
|
70
68
|
key,
|
|
71
|
-
value
|
|
69
|
+
value,
|
|
72
70
|
});
|
|
73
71
|
},
|
|
74
|
-
delete:
|
|
75
|
-
this
|
|
72
|
+
delete: key => {
|
|
73
|
+
__classPrivateFieldGet(this, _AztecDatastore_batchOps, "f").push({
|
|
76
74
|
type: 'del',
|
|
77
|
-
key
|
|
75
|
+
key,
|
|
78
76
|
});
|
|
79
77
|
},
|
|
80
|
-
commit: async ()=>{
|
|
81
|
-
for (const op of this
|
|
78
|
+
commit: async () => {
|
|
79
|
+
for (const op of __classPrivateFieldGet(this, _AztecDatastore_batchOps, "f")) {
|
|
82
80
|
if (op.type === 'put' && op.value) {
|
|
83
81
|
await this.put(op.key, op.value);
|
|
84
|
-
}
|
|
82
|
+
}
|
|
83
|
+
else if (op.type === 'del') {
|
|
85
84
|
await this.delete(op.key);
|
|
86
85
|
}
|
|
87
86
|
}
|
|
88
|
-
this
|
|
89
|
-
}
|
|
87
|
+
__classPrivateFieldSet(this, _AztecDatastore_batchOps, [], "f"); // Clear operations after commit
|
|
88
|
+
},
|
|
90
89
|
};
|
|
91
90
|
}
|
|
92
91
|
query(q) {
|
|
93
92
|
let it = this.all(); //
|
|
94
93
|
const { prefix, filters, orders, offset, limit } = q;
|
|
95
94
|
if (prefix != null) {
|
|
96
|
-
it = filter(it,
|
|
95
|
+
it = filter(it, e => e.key.toString().startsWith(`${prefix}`));
|
|
97
96
|
}
|
|
98
97
|
if (Array.isArray(filters)) {
|
|
99
|
-
it = filters.reduce((it, f)=>filter(it, f), it);
|
|
98
|
+
it = filters.reduce((it, f) => filter(it, f), it);
|
|
100
99
|
}
|
|
101
100
|
if (Array.isArray(orders)) {
|
|
102
|
-
it = orders.reduce((it, f)=>sort(it, f), it);
|
|
101
|
+
it = orders.reduce((it, f) => sort(it, f), it);
|
|
103
102
|
}
|
|
104
103
|
if (offset != null) {
|
|
105
104
|
let i = 0;
|
|
106
|
-
it = filter(it, ()=>i++ >= offset);
|
|
105
|
+
it = filter(it, () => i++ >= offset);
|
|
107
106
|
}
|
|
108
107
|
if (limit != null) {
|
|
109
108
|
it = take(it, limit);
|
|
@@ -111,20 +110,20 @@ export class AztecDatastore {
|
|
|
111
110
|
return it;
|
|
112
111
|
}
|
|
113
112
|
queryKeys(q) {
|
|
114
|
-
let it = map(this.all(), ({ key })=>key);
|
|
113
|
+
let it = map(this.all(), ({ key }) => key);
|
|
115
114
|
const { prefix, filters, orders, offset, limit } = q;
|
|
116
115
|
if (prefix != null) {
|
|
117
|
-
it = filter(it,
|
|
116
|
+
it = filter(it, e => e.toString().startsWith(`${prefix}`));
|
|
118
117
|
}
|
|
119
118
|
if (Array.isArray(filters)) {
|
|
120
|
-
it = filters.reduce((it, f)=>filter(it, f), it);
|
|
119
|
+
it = filters.reduce((it, f) => filter(it, f), it);
|
|
121
120
|
}
|
|
122
121
|
if (Array.isArray(orders)) {
|
|
123
|
-
it = orders.reduce((it, f)=>sort(it, f), it);
|
|
122
|
+
it = orders.reduce((it, f) => sort(it, f), it);
|
|
124
123
|
}
|
|
125
124
|
if (offset != null) {
|
|
126
125
|
let i = 0;
|
|
127
|
-
it = filter(it, ()=>i++ >= offset);
|
|
126
|
+
it = filter(it, () => i++ >= offset);
|
|
128
127
|
}
|
|
129
128
|
if (limit != null) {
|
|
130
129
|
it = take(it, limit);
|
|
@@ -133,48 +132,47 @@ export class AztecDatastore {
|
|
|
133
132
|
}
|
|
134
133
|
async _put(key, val) {
|
|
135
134
|
const keyStr = key.toString();
|
|
136
|
-
while(this
|
|
135
|
+
while (__classPrivateFieldGet(this, _AztecDatastore_memoryDatastore, "f").size >= this.maxMemoryItems) {
|
|
137
136
|
this.pruneMemoryDatastore();
|
|
138
137
|
}
|
|
139
|
-
const memoryItem = this
|
|
138
|
+
const memoryItem = __classPrivateFieldGet(this, _AztecDatastore_memoryDatastore, "f").get(keyStr);
|
|
140
139
|
if (memoryItem) {
|
|
141
140
|
// update existing
|
|
142
141
|
memoryItem.lastAccessedMs = Date.now();
|
|
143
142
|
memoryItem.data = val;
|
|
144
|
-
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
145
|
// new entry
|
|
146
|
-
this
|
|
147
|
-
data: val,
|
|
148
|
-
lastAccessedMs: Date.now()
|
|
149
|
-
});
|
|
146
|
+
__classPrivateFieldGet(this, _AztecDatastore_memoryDatastore, "f").set(keyStr, { data: val, lastAccessedMs: Date.now() });
|
|
150
147
|
}
|
|
151
148
|
// Always add to DB
|
|
152
|
-
await this
|
|
149
|
+
await __classPrivateFieldGet(this, _AztecDatastore_dbDatastore, "f").set(keyStr, val);
|
|
153
150
|
return key;
|
|
154
151
|
}
|
|
155
152
|
async *all() {
|
|
156
|
-
for (const [key, value] of this
|
|
153
|
+
for (const [key, value] of __classPrivateFieldGet(this, _AztecDatastore_memoryDatastore, "f").entries()) {
|
|
157
154
|
yield {
|
|
158
155
|
key: new Key(key),
|
|
159
|
-
value: value.data
|
|
156
|
+
value: value.data,
|
|
160
157
|
};
|
|
161
158
|
}
|
|
162
|
-
for await (const [key, value] of this
|
|
163
|
-
if (!this
|
|
159
|
+
for await (const [key, value] of __classPrivateFieldGet(this, _AztecDatastore_dbDatastore, "f").entriesAsync()) {
|
|
160
|
+
if (!__classPrivateFieldGet(this, _AztecDatastore_memoryDatastore, "f").has(key)) {
|
|
164
161
|
yield {
|
|
165
162
|
key: new Key(key),
|
|
166
|
-
value
|
|
163
|
+
value,
|
|
167
164
|
};
|
|
168
165
|
}
|
|
169
166
|
}
|
|
170
167
|
}
|
|
171
168
|
/**
|
|
172
|
-
|
|
173
|
-
|
|
169
|
+
* Prune memory store
|
|
170
|
+
*/
|
|
171
|
+
pruneMemoryDatastore() {
|
|
174
172
|
let oldestAccessedMs = Date.now() + 1000;
|
|
175
173
|
let oldestKey = undefined;
|
|
176
174
|
let oldestValue = undefined;
|
|
177
|
-
for (const [key, value] of this
|
|
175
|
+
for (const [key, value] of __classPrivateFieldGet(this, _AztecDatastore_memoryDatastore, "f")) {
|
|
178
176
|
if (value.lastAccessedMs < oldestAccessedMs) {
|
|
179
177
|
oldestAccessedMs = value.lastAccessedMs;
|
|
180
178
|
oldestKey = key;
|
|
@@ -182,7 +180,9 @@ export class AztecDatastore {
|
|
|
182
180
|
}
|
|
183
181
|
}
|
|
184
182
|
if (oldestKey && oldestValue) {
|
|
185
|
-
this
|
|
183
|
+
__classPrivateFieldGet(this, _AztecDatastore_memoryDatastore, "f").delete(oldestKey);
|
|
186
184
|
}
|
|
187
185
|
}
|
|
188
186
|
}
|
|
187
|
+
_AztecDatastore_memoryDatastore = new WeakMap(), _AztecDatastore_dbDatastore = new WeakMap(), _AztecDatastore_batchOps = new WeakMap();
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9kYXRhX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3JFLE9BQU8sRUFBOEIsR0FBRyxFQUF3QyxNQUFNLHFCQUFxQixDQUFDO0FBYzVHLE1BQU0sZ0JBQWlCLFNBQVEsS0FBSztJQUVsQyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGNBQWM7SUFRekIsWUFBWSxFQUFxQixFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFO1FBUDlFLGtEQUEwQztRQUMxQyw4Q0FBZ0Q7UUFFaEQsbUNBQXVCLEVBQUUsRUFBQztRQUt4Qix1QkFBQSxJQUFJLG1DQUFvQixJQUFJLEdBQUcsRUFBRSxNQUFBLENBQUM7UUFDbEMsdUJBQUEsSUFBSSwrQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBQSxDQUFDO1FBRWhELElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQVE7UUFDaEIsT0FBTyx1QkFBQSxJQUFJLHVDQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sdUJBQUEsSUFBSSxtQ0FBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQVE7UUFDaEIsTUFBTSxNQUFN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
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
3
|
+
import { ENR } from '@chainsafe/enr';
|
|
4
|
+
import type { PeerId } from '@libp2p/interface';
|
|
5
|
+
import EventEmitter from 'events';
|
|
6
|
+
import type { P2PConfig } from '../../config.js';
|
|
7
|
+
import { type PeerDiscoveryService, PeerDiscoveryState } from '../service.js';
|
|
8
|
+
/**
|
|
9
|
+
* Peer discovery service using Discv5.
|
|
10
|
+
*/
|
|
11
|
+
export declare class DiscV5Service extends EventEmitter implements PeerDiscoveryService {
|
|
12
|
+
private peerId;
|
|
13
|
+
private config;
|
|
14
|
+
private logger;
|
|
15
|
+
/** The Discv5 instance */
|
|
16
|
+
private discv5;
|
|
17
|
+
/** This instance's ENR */
|
|
18
|
+
private enr;
|
|
19
|
+
/** Version identifiers. */
|
|
20
|
+
private versions;
|
|
21
|
+
/** UDP listen addr */
|
|
22
|
+
private listenMultiAddrUdp;
|
|
23
|
+
private currentState;
|
|
24
|
+
readonly bootstrapNodes: string[];
|
|
25
|
+
private bootstrapNodePeerIds;
|
|
26
|
+
private startTime;
|
|
27
|
+
constructor(peerId: PeerId, config: P2PConfig, telemetry?: TelemetryClient, logger?: import("@aztec/foundation/log").Logger);
|
|
28
|
+
start(): Promise<void>;
|
|
29
|
+
runRandomNodesQuery(): Promise<void>;
|
|
30
|
+
getAllPeers(): ENR[];
|
|
31
|
+
getEnr(): ENR;
|
|
32
|
+
getPeerId(): PeerId;
|
|
33
|
+
getStatus(): PeerDiscoveryState;
|
|
34
|
+
isBootstrapPeer(peerId: PeerId): boolean;
|
|
35
|
+
stop(): Promise<void>;
|
|
36
|
+
private onEnrAdded;
|
|
37
|
+
private onDiscovered;
|
|
38
|
+
private validateEnr;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=discV5_service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discV5_service.d.ts","sourceRoot":"","sources":["../../../src/services/discv5/discV5_service.ts"],"names":[],"mappings":";AAGA,OAAO,EAAsB,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGvG,OAAO,EAAE,GAAG,EAAe,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,KAAK,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAK9E;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAa,YAAW,oBAAoB;IAqB3E,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,MAAM;IAvBhB,0BAA0B;IAC1B,OAAO,CAAC,MAAM,CAA8B;IAE5C,0BAA0B;IAC1B,OAAO,CAAC,GAAG,CAAc;IAEzB,2BAA2B;IAC3B,OAAO,CAAC,QAAQ,CAAqB;IAErC,sBAAsB;IACtB,OAAO,CAAC,kBAAkB,CAAY;IAEtC,OAAO,CAAC,YAAY,CAA8B;IAElD,SAAgB,cAAc,EAAE,MAAM,EAAE,CAAM;IAC9C,OAAO,CAAC,oBAAoB,CAAgB;IAE5C,OAAO,CAAC,SAAS,CAAK;gBAGZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACzB,SAAS,GAAE,eAAsC,EACzC,MAAM,yCAAqC;IAyDxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCtB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB1C,WAAW,IAAI,GAAG,EAAE;IAIpB,MAAM,IAAI,GAAG;IAIb,SAAS,IAAI,MAAM;IAInB,SAAS,IAAI,kBAAkB;IAI/B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YASpB,UAAU;IAOxB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;CA0BpB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { checkCompressedComponentVersion } from '@aztec/circuit-types';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { sleep } from '@aztec/foundation/sleep';
|
|
3
4
|
import { OtelMetricsAdapter, getTelemetryClient } from '@aztec/telemetry-client';
|
|
@@ -6,31 +7,29 @@ import { ENR, SignableENR } from '@chainsafe/enr';
|
|
|
6
7
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
7
8
|
import EventEmitter from 'events';
|
|
8
9
|
import { convertToMultiaddr } from '../../util.js';
|
|
10
|
+
import { setAztecEnrKey } from '../../versioning.js';
|
|
9
11
|
import { PeerDiscoveryState } from '../service.js';
|
|
10
|
-
import { AZTEC_ENR_KEY,
|
|
12
|
+
import { AZTEC_ENR_KEY, Discv5Event, PeerEvent } from '../types.js';
|
|
11
13
|
const delayBeforeStart = 2000; // 2sec
|
|
12
14
|
/**
|
|
13
15
|
* Peer discovery service using Discv5.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
logger
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
super(), this.peerId = peerId, this.logger = logger, this.currentState = PeerDiscoveryState.STOPPED, this.bootstrapNodePeerIds = [], this.startTime = 0;
|
|
16
|
+
*/
|
|
17
|
+
export class DiscV5Service extends EventEmitter {
|
|
18
|
+
constructor(peerId, config, telemetry = getTelemetryClient(), logger = createLogger('p2p:discv5_service')) {
|
|
19
|
+
super();
|
|
20
|
+
this.peerId = peerId;
|
|
21
|
+
this.config = config;
|
|
22
|
+
this.logger = logger;
|
|
23
|
+
this.currentState = PeerDiscoveryState.STOPPED;
|
|
24
|
+
this.bootstrapNodes = [];
|
|
25
|
+
this.bootstrapNodePeerIds = [];
|
|
26
|
+
this.startTime = 0;
|
|
26
27
|
const { tcpAnnounceAddress, udpAnnounceAddress, udpListenAddress, bootstrapNodes } = config;
|
|
27
|
-
this.bootstrapNodes = bootstrapNodes;
|
|
28
|
+
this.bootstrapNodes = bootstrapNodes ?? [];
|
|
28
29
|
// create ENR from PeerId
|
|
29
30
|
this.enr = SignableENR.createFromPeerId(peerId);
|
|
30
31
|
// Add aztec identification to ENR
|
|
31
|
-
this.enr
|
|
32
|
-
AZTEC_NET
|
|
33
|
-
]));
|
|
32
|
+
this.versions = setAztecEnrKey(this.enr, config);
|
|
34
33
|
if (!tcpAnnounceAddress) {
|
|
35
34
|
throw new Error('You need to provide at least a TCP announce address.');
|
|
36
35
|
}
|
|
@@ -45,16 +44,27 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
45
44
|
this.discv5 = Discv5.create({
|
|
46
45
|
enr: this.enr,
|
|
47
46
|
peerId,
|
|
48
|
-
bindAddrs: {
|
|
49
|
-
ip4: this.listenMultiAddrUdp
|
|
50
|
-
},
|
|
47
|
+
bindAddrs: { ip4: this.listenMultiAddrUdp },
|
|
51
48
|
config: {
|
|
52
49
|
lookupTimeout: 2000,
|
|
53
50
|
requestTimeout: 2000,
|
|
54
|
-
allowUnverifiedSessions: true
|
|
51
|
+
allowUnverifiedSessions: true,
|
|
55
52
|
},
|
|
56
|
-
metricsRegistry
|
|
53
|
+
metricsRegistry,
|
|
57
54
|
});
|
|
55
|
+
// Hook onto the onEstablished method to check the peer's version from the ENR,
|
|
56
|
+
// so we don't add it to our dht if it doesn't have the correct version.
|
|
57
|
+
// In addition, we'll hook onto onDiscovered to to repeat the same check there,
|
|
58
|
+
// just in case. Note that not adding the peer to the dht could lead to it
|
|
59
|
+
// being "readded" constantly, we'll need to keep an eye on whether this
|
|
60
|
+
// turns out to be a problem or not.
|
|
61
|
+
const origOnEstablished = this.discv5.onEstablished.bind(this.discv5);
|
|
62
|
+
this.discv5.onEstablished = (...args) => {
|
|
63
|
+
const enr = args[1];
|
|
64
|
+
if (this.validateEnr(enr)) {
|
|
65
|
+
return origOnEstablished(...args);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
58
68
|
this.discv5.on(Discv5Event.DISCOVERED, this.onDiscovered.bind(this));
|
|
59
69
|
this.discv5.on(Discv5Event.ENR_ADDED, this.onEnrAdded.bind(this));
|
|
60
70
|
}
|
|
@@ -69,20 +79,30 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
69
79
|
nodeId: this.enr.nodeId,
|
|
70
80
|
peerId: this.peerId,
|
|
71
81
|
enrUdp: await this.enr.getFullMultiaddr('udp'),
|
|
72
|
-
enrTcp: await this.enr.getFullMultiaddr('tcp')
|
|
82
|
+
enrTcp: await this.enr.getFullMultiaddr('tcp'),
|
|
83
|
+
versions: this.versions,
|
|
73
84
|
});
|
|
74
85
|
this.currentState = PeerDiscoveryState.RUNNING;
|
|
75
86
|
// Add bootnode ENR if provided
|
|
76
87
|
if (this.bootstrapNodes?.length) {
|
|
77
88
|
// Do this conversion once since it involves an async function call
|
|
78
|
-
|
|
79
|
-
this.
|
|
80
|
-
|
|
81
|
-
|
|
89
|
+
const bootstrapNodesEnrs = this.bootstrapNodes.map(enr => ENR.decodeTxt(enr));
|
|
90
|
+
this.bootstrapNodePeerIds = await Promise.all(bootstrapNodesEnrs.map(enr => enr.peerId()));
|
|
91
|
+
this.logger.info(`Adding ${this.bootstrapNodes} bootstrap nodes ENRs: ${this.bootstrapNodes.join(', ')}`);
|
|
92
|
+
for (const enr of bootstrapNodesEnrs) {
|
|
93
|
+
try {
|
|
94
|
+
if (this.config.bootstrapNodeEnrVersionCheck) {
|
|
95
|
+
const value = enr.kvs.get(AZTEC_ENR_KEY);
|
|
96
|
+
if (!value) {
|
|
97
|
+
throw new Error('ENR does not contain aztec key');
|
|
98
|
+
}
|
|
99
|
+
checkCompressedComponentVersion(Buffer.from(value).toString(), this.versions);
|
|
100
|
+
}
|
|
82
101
|
this.discv5.addEnr(enr);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
this.logger.error(`Error adding bootratrap node ${enr.encodeTxt()}`, e);
|
|
105
|
+
}
|
|
86
106
|
}
|
|
87
107
|
}
|
|
88
108
|
}
|
|
@@ -98,7 +118,8 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
98
118
|
}
|
|
99
119
|
try {
|
|
100
120
|
await this.discv5.findRandomNode();
|
|
101
|
-
}
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
102
123
|
this.logger.error(`Error running discV5 random node query: ${err}`);
|
|
103
124
|
}
|
|
104
125
|
}
|
|
@@ -115,7 +136,7 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
115
136
|
return this.currentState;
|
|
116
137
|
}
|
|
117
138
|
isBootstrapPeer(peerId) {
|
|
118
|
-
return this.bootstrapNodePeerIds.some(
|
|
139
|
+
return this.bootstrapNodePeerIds.some(node => node.equals(peerId));
|
|
119
140
|
}
|
|
120
141
|
async stop() {
|
|
121
142
|
await this.discv5.off(Discv5Event.DISCOVERED, this.onDiscovered);
|
|
@@ -126,22 +147,40 @@ const delayBeforeStart = 2000; // 2sec
|
|
|
126
147
|
async onEnrAdded(enr) {
|
|
127
148
|
const multiAddrTcp = await enr.getFullMultiaddr('tcp');
|
|
128
149
|
const multiAddrUdp = await enr.getFullMultiaddr('udp');
|
|
129
|
-
this.logger.debug(`Added ENR ${enr.encodeTxt()}`, {
|
|
130
|
-
multiAddrTcp,
|
|
131
|
-
multiAddrUdp,
|
|
132
|
-
nodeId: enr.nodeId
|
|
133
|
-
});
|
|
150
|
+
this.logger.debug(`Added ENR ${enr.encodeTxt()}`, { multiAddrTcp, multiAddrUdp, nodeId: enr.nodeId });
|
|
134
151
|
this.onDiscovered(enr);
|
|
135
152
|
}
|
|
136
153
|
onDiscovered(enr) {
|
|
137
|
-
|
|
154
|
+
if (this.validateEnr(enr)) {
|
|
155
|
+
this.emit(PeerEvent.DISCOVERED, enr);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
validateEnr(enr) {
|
|
159
|
+
// Check the peer is an aztec peer
|
|
138
160
|
const value = enr.kvs.get(AZTEC_ENR_KEY);
|
|
139
|
-
if (value) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
161
|
+
if (!value) {
|
|
162
|
+
this.logger.warn(`Peer ${enr.nodeId} does not have aztec key in ENR`);
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
let compressedVersion;
|
|
166
|
+
try {
|
|
167
|
+
// And check it has the correct version
|
|
168
|
+
compressedVersion = Buffer.from(value).toString();
|
|
169
|
+
checkCompressedComponentVersion(compressedVersion, this.versions);
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
if (err.name === 'ComponentsVersionsError') {
|
|
174
|
+
this.logger.warn(`Peer ${enr.nodeId} has incorrect version: ${err.message}`, {
|
|
175
|
+
compressedVersion,
|
|
176
|
+
expected: this.versions,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
this.logger.error(`Error checking peer version`, err);
|
|
144
181
|
}
|
|
145
182
|
}
|
|
183
|
+
return false;
|
|
146
184
|
}
|
|
147
185
|
}
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY1Y1X3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZGlzY3Y1L2Rpc2NWNV9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsK0JBQStCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBd0Isa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV2RyxPQUFPLEVBQUUsTUFBTSxFQUEyQixNQUFNLG1CQUFtQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRSxPQUFPLFlBQVksTUFBTSxRQUFRLENBQUM7QUFHbEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQTZCLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU87QUFFdEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLFlBQVk7SUFvQjdDLFlBQ1UsTUFBYyxFQUNkLE1BQWlCLEVBQ3pCLFlBQTZCLGtCQUFrQixFQUFFLEVBQ3pDLFNBQVMsWUFBWSxDQUFDLG9CQUFvQixDQUFDO1FBRW5ELEtBQUssRUFBRSxDQUFDO1FBTEEsV0FBTSxHQUFOLE1B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
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import type { BlockAttestation, BlockProposal, Gossipable, PeerInfo, TxHash } from '@aztec/circuit-types';
|
|
3
|
+
import type { PeerId } from '@libp2p/interface';
|
|
4
|
+
import EventEmitter from 'events';
|
|
5
|
+
import { type ReqRespSubProtocol, type SubProtocolMap } from './reqresp/interface.js';
|
|
6
|
+
import { type P2PService, type PeerDiscoveryService, PeerDiscoveryState } from './service.js';
|
|
7
|
+
/**
|
|
8
|
+
* A dummy implementation of the P2P Service.
|
|
9
|
+
*/
|
|
10
|
+
export declare class DummyP2PService implements P2PService {
|
|
11
|
+
/** Returns an empty array for peers. */
|
|
12
|
+
getPeers(): PeerInfo[];
|
|
13
|
+
/**
|
|
14
|
+
* Starts the dummy implementation.
|
|
15
|
+
* @returns A resolved promise.
|
|
16
|
+
*/
|
|
17
|
+
start(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Stops the dummy implementation.
|
|
20
|
+
* @returns A resolved promise.
|
|
21
|
+
*/
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Called to have the given message propagated through the P2P network.
|
|
25
|
+
* @param _ - The message to be propagated.
|
|
26
|
+
*/
|
|
27
|
+
propagate<T extends Gossipable>(_: T): void;
|
|
28
|
+
/**
|
|
29
|
+
* Called upon receipt of settled transactions.
|
|
30
|
+
* @param _ - The hashes of the settled transactions.
|
|
31
|
+
*/
|
|
32
|
+
settledTxs(_: TxHash[]): void;
|
|
33
|
+
/**
|
|
34
|
+
* Register a callback into the validator client for when a block proposal is received
|
|
35
|
+
*/
|
|
36
|
+
registerBlockReceivedCallback(_: (block: BlockProposal) => Promise<BlockAttestation>): void;
|
|
37
|
+
/**
|
|
38
|
+
* Sends a request to a peer.
|
|
39
|
+
* @param _protocol - The protocol to send the request on.
|
|
40
|
+
* @param _request - The request to send.
|
|
41
|
+
* @returns The response from the peer, otherwise undefined.
|
|
42
|
+
*/
|
|
43
|
+
sendRequest<Protocol extends ReqRespSubProtocol>(_protocol: Protocol, _request: InstanceType<SubProtocolMap[Protocol]['request']>): Promise<InstanceType<SubProtocolMap[Protocol]['response']> | undefined>;
|
|
44
|
+
/**
|
|
45
|
+
* Sends a batch request to a peer.
|
|
46
|
+
* @param _protocol - The protocol to send the request on.
|
|
47
|
+
* @param _requests - The requests to send.
|
|
48
|
+
* @returns The responses from the peer, otherwise undefined.
|
|
49
|
+
*/
|
|
50
|
+
sendBatchRequest<Protocol extends ReqRespSubProtocol>(_protocol: Protocol, _requests: InstanceType<SubProtocolMap[Protocol]['request']>[]): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Returns the ENR of the peer.
|
|
53
|
+
* @returns The ENR of the peer, otherwise undefined.
|
|
54
|
+
*/
|
|
55
|
+
getEnr(): undefined;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A dummy implementation of the Peer Discovery Service.
|
|
59
|
+
*/
|
|
60
|
+
export declare class DummyPeerDiscoveryService extends EventEmitter implements PeerDiscoveryService {
|
|
61
|
+
private currentState;
|
|
62
|
+
bootstrapNodes: string[];
|
|
63
|
+
/**
|
|
64
|
+
* Starts the dummy implementation.
|
|
65
|
+
* @returns A resolved promise.
|
|
66
|
+
*/
|
|
67
|
+
start(): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Stops the dummy implementation.
|
|
70
|
+
* @returns A resolved promise.
|
|
71
|
+
*/
|
|
72
|
+
stop(): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Called to discover peers in the network.
|
|
75
|
+
* @returns An array of discovered peer addresses.
|
|
76
|
+
*/
|
|
77
|
+
getAllPeers(): never[];
|
|
78
|
+
runRandomNodesQuery(): Promise<void>;
|
|
79
|
+
isBootstrapPeer(_: PeerId): boolean;
|
|
80
|
+
getStatus(): PeerDiscoveryState;
|
|
81
|
+
getEnr(): undefined;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=dummy_service.d.ts.map
|
|
@@ -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;;;;;OAKG;IACI,gBAAgB,CAAC,QAAQ,SAAS,kBAAkB,EACzD,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAC7D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;IAIhE;;;OAGG;IACI,MAAM,IAAI,SAAS;CAG3B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,YAAa,YAAW,oBAAoB;IACzF,OAAO,CAAC,YAAY,CAA8B;IAC3C,cAAc,EAAE,MAAM,EAAE,CAAM;IAErC;;;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"}
|