@aztec/p2p 0.0.0-test.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/README.md +7 -0
- package/dest/bootstrap/bootstrap.d.ts +38 -0
- package/dest/bootstrap/bootstrap.d.ts.map +1 -0
- package/dest/bootstrap/bootstrap.js +123 -0
- package/dest/client/factory.d.ts +21 -0
- package/dest/client/factory.d.ts.map +1 -0
- package/dest/client/factory.js +37 -0
- package/dest/client/index.d.ts +3 -0
- package/dest/client/index.d.ts.map +1 -0
- package/dest/client/index.js +2 -0
- package/dest/client/p2p_client.d.ts +314 -0
- package/dest/client/p2p_client.d.ts.map +1 -0
- package/dest/client/p2p_client.js +505 -0
- package/dest/config.d.ts +180 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +193 -0
- package/dest/enr/generate-enr.d.ts +9 -0
- package/dest/enr/generate-enr.d.ts.map +1 -0
- package/dest/enr/generate-enr.js +30 -0
- package/dest/enr/index.d.ts +2 -0
- package/dest/enr/index.d.ts.map +1 -0
- package/dest/enr/index.js +1 -0
- 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 +30 -0
- package/dest/index.d.ts +8 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +7 -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 +6 -0
- 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 +195 -0
- 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 +2 -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 +112 -0
- 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 +129 -0
- package/dest/mem_pools/attestation_pool/mocks.d.ts +19 -0
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
- package/dest/mem_pools/attestation_pool/mocks.js +33 -0
- package/dest/mem_pools/index.d.ts +4 -0
- package/dest/mem_pools/index.d.ts.map +1 -0
- package/dest/mem_pools/index.js +1 -0
- package/dest/mem_pools/instrumentation.d.ts +30 -0
- package/dest/mem_pools/instrumentation.d.ts.map +1 -0
- package/dest/mem_pools/instrumentation.js +84 -0
- package/dest/mem_pools/interface.d.ts +11 -0
- package/dest/mem_pools/interface.d.ts.map +1 -0
- package/dest/mem_pools/interface.js +3 -0
- 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 +245 -0
- 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 +3 -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 +141 -0
- 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 +10 -0
- 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 +3 -0
- 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 +169 -0
- 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 +19 -0
- 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 +21 -0
- 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/index.d.ts +4 -0
- package/dest/msg_validators/index.d.ts.map +1 -0
- package/dest/msg_validators/index.js +3 -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 +31 -0
- 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 +26 -0
- 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 +107 -0
- 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 +41 -0
- 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 +6 -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 +44 -0
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +9 -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 +25 -0
- 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 +188 -0
- package/dest/services/discv5/discV5_service.d.ts +42 -0
- package/dest/services/discv5/discV5_service.d.ts.map +1 -0
- package/dest/services/discv5/discV5_service.js +214 -0
- package/dest/services/dummy_service.d.ts +85 -0
- package/dest/services/dummy_service.d.ts.map +1 -0
- package/dest/services/dummy_service.js +92 -0
- package/dest/services/encoding.d.ts +31 -0
- package/dest/services/encoding.d.ts.map +1 -0
- package/dest/services/encoding.js +66 -0
- package/dest/services/gossipsub/scoring.d.ts +7 -0
- package/dest/services/gossipsub/scoring.d.ts.map +1 -0
- package/dest/services/gossipsub/scoring.js +10 -0
- package/dest/services/index.d.ts +3 -0
- package/dest/services/index.d.ts.map +1 -0
- package/dest/services/index.js +2 -0
- package/dest/services/libp2p/libp2p_service.d.ts +186 -0
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
- package/dest/services/libp2p/libp2p_service.js +712 -0
- 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 +33 -0
- package/dest/services/peer-manager/peer_manager.d.ts +94 -0
- package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
- package/dest/services/peer-manager/peer_manager.js +445 -0
- 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 +86 -0
- 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 +20 -0
- 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 +88 -0
- 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 +181 -0
- 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 +4 -0
- 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 +84 -0
- 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 +55 -0
- 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 +8 -0
- 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 +87 -0
- 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 +7 -0
- 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 +7 -0
- 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 +7 -0
- 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 +20 -0
- 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 +184 -0
- 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 +54 -0
- 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 +516 -0
- 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 +51 -0
- package/dest/services/service.d.ts +87 -0
- package/dest/services/service.d.ts.map +1 -0
- package/dest/services/service.js +5 -0
- 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 +13 -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 +5 -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 +32 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts +36 -0
- package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
- package/dest/test-helpers/make-test-p2p-clients.js +68 -0
- package/dest/test-helpers/reqresp-nodes.d.ts +66 -0
- package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
- package/dest/test-helpers/reqresp-nodes.js +207 -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 +132 -0
- package/dest/testbench/parse_log_file.d.ts +2 -0
- package/dest/testbench/parse_log_file.d.ts.map +1 -0
- package/dest/testbench/parse_log_file.js +131 -0
- package/dest/testbench/testbench.d.ts +2 -0
- package/dest/testbench/testbench.d.ts.map +1 -0
- package/dest/testbench/testbench.js +61 -0
- package/dest/testbench/worker_client_manager.d.ts +56 -0
- package/dest/testbench/worker_client_manager.d.ts.map +1 -0
- package/dest/testbench/worker_client_manager.js +266 -0
- package/dest/types/index.d.ts +32 -0
- package/dest/types/index.d.ts.map +1 -0
- package/dest/types/index.js +28 -0
- package/dest/util.d.ts +53 -0
- package/dest/util.d.ts.map +1 -0
- package/dest/util.js +140 -0
- package/dest/versioning.d.ts +12 -0
- package/dest/versioning.d.ts.map +1 -0
- package/dest/versioning.js +33 -0
- package/package.json +127 -0
- package/src/bootstrap/bootstrap.ts +146 -0
- package/src/client/factory.ts +89 -0
- package/src/client/index.ts +2 -0
- package/src/client/p2p_client.ts +754 -0
- package/src/config.ts +371 -0
- package/src/enr/generate-enr.ts +39 -0
- package/src/enr/index.ts +1 -0
- package/src/errors/reqresp.error.ts +35 -0
- package/src/index.ts +7 -0
- package/src/mem_pools/attestation_pool/attestation_pool.ts +62 -0
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +230 -0
- package/src/mem_pools/attestation_pool/index.ts +2 -0
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +159 -0
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +161 -0
- package/src/mem_pools/attestation_pool/mocks.ts +44 -0
- package/src/mem_pools/index.ts +3 -0
- package/src/mem_pools/instrumentation.ts +126 -0
- package/src/mem_pools/interface.ts +12 -0
- package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +309 -0
- package/src/mem_pools/tx_pool/index.ts +3 -0
- package/src/mem_pools/tx_pool/memory_tx_pool.ts +174 -0
- package/src/mem_pools/tx_pool/priority.ts +13 -0
- package/src/mem_pools/tx_pool/tx_pool.ts +76 -0
- package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +130 -0
- package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -0
- package/src/msg_validators/attestation_validator/index.ts +1 -0
- package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +29 -0
- package/src/msg_validators/block_proposal_validator/index.ts +1 -0
- package/src/msg_validators/index.ts +3 -0
- package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +32 -0
- package/src/msg_validators/tx_validator/block_header_validator.ts +25 -0
- package/src/msg_validators/tx_validator/data_validator.ts +106 -0
- package/src/msg_validators/tx_validator/double_spend_validator.ts +38 -0
- package/src/msg_validators/tx_validator/index.ts +6 -0
- package/src/msg_validators/tx_validator/metadata_validator.ts +48 -0
- package/src/msg_validators/tx_validator/tx_proof_validator.ts +18 -0
- package/src/services/data_store.ts +235 -0
- package/src/services/discv5/discV5_service.ts +256 -0
- package/src/services/dummy_service.ts +134 -0
- package/src/services/encoding.ts +79 -0
- package/src/services/gossipsub/scoring.ts +13 -0
- package/src/services/index.ts +2 -0
- package/src/services/libp2p/libp2p_service.ts +871 -0
- package/src/services/peer-manager/metrics.ts +41 -0
- package/src/services/peer-manager/peer_manager.ts +530 -0
- package/src/services/peer-manager/peer_scoring.ts +105 -0
- package/src/services/reqresp/config.ts +35 -0
- package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +94 -0
- package/src/services/reqresp/connection-sampler/connection_sampler.ts +217 -0
- package/src/services/reqresp/index.ts +4 -0
- package/src/services/reqresp/interface.ts +185 -0
- package/src/services/reqresp/metrics.ts +57 -0
- package/src/services/reqresp/protocols/block.ts +15 -0
- package/src/services/reqresp/protocols/goodbye.ts +101 -0
- package/src/services/reqresp/protocols/index.ts +8 -0
- package/src/services/reqresp/protocols/ping.ts +8 -0
- package/src/services/reqresp/protocols/status.ts +8 -0
- package/src/services/reqresp/protocols/tx.ts +29 -0
- package/src/services/reqresp/rate-limiter/index.ts +1 -0
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +228 -0
- package/src/services/reqresp/rate-limiter/rate_limits.ts +55 -0
- package/src/services/reqresp/reqresp.ts +661 -0
- package/src/services/reqresp/status.ts +59 -0
- package/src/services/service.ts +112 -0
- 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 +122 -0
- package/src/test-helpers/reqresp-nodes.ts +289 -0
- package/src/testbench/README.md +20 -0
- package/src/testbench/p2p_client_testbench_worker.ts +152 -0
- package/src/testbench/parse_log_file.ts +175 -0
- package/src/testbench/testbench.ts +66 -0
- package/src/testbench/worker_client_manager.ts +318 -0
- package/src/types/index.ts +36 -0
- package/src/util.ts +196 -0
- package/src/versioning.ts +50 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/***************************************************
|
|
2
|
+
* Events
|
|
3
|
+
***************************************************/
|
|
4
|
+
/**
|
|
5
|
+
* Events emitted from the libp2p node.
|
|
6
|
+
*/
|
|
7
|
+
export declare enum PeerEvent {
|
|
8
|
+
DISCOVERED = "peer:discovered",
|
|
9
|
+
CONNECTED = "peer:connect",
|
|
10
|
+
DISCONNECTED = "peer:disconnect"
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Events emitted from the Discv5 service.
|
|
14
|
+
*/
|
|
15
|
+
export declare enum Discv5Event {
|
|
16
|
+
DISCOVERED = "discovered",
|
|
17
|
+
ENR_ADDED = "enrAdded"
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Events emitted from the GossipSub protocol.
|
|
21
|
+
*/
|
|
22
|
+
export declare enum GossipSubEvent {
|
|
23
|
+
MESSAGE = "gossipsub:message"
|
|
24
|
+
}
|
|
25
|
+
/***************************************************
|
|
26
|
+
* Types
|
|
27
|
+
***************************************************/
|
|
28
|
+
/**
|
|
29
|
+
* Aztec network specific types
|
|
30
|
+
*/
|
|
31
|
+
export declare const AZTEC_ENR_KEY = "aztec";
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;qDAEqD;AAErD;;GAEG;AACH,oBAAY,SAAS;IACnB,UAAU,oBAAoB;IAC9B,SAAS,iBAAiB;IAC1B,YAAY,oBAAoB;CACjC;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,UAAU,eAAe;IACzB,SAAS,aAAa;CACvB;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB,OAAO,sBAAsB;CAC9B;AAED;;qDAEqD;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/***************************************************
|
|
2
|
+
* Events
|
|
3
|
+
***************************************************/ /**
|
|
4
|
+
* Events emitted from the libp2p node.
|
|
5
|
+
*/ export var PeerEvent = /*#__PURE__*/ function(PeerEvent) {
|
|
6
|
+
PeerEvent["DISCOVERED"] = "peer:discovered";
|
|
7
|
+
PeerEvent["CONNECTED"] = "peer:connect";
|
|
8
|
+
PeerEvent["DISCONNECTED"] = "peer:disconnect";
|
|
9
|
+
return PeerEvent;
|
|
10
|
+
}({});
|
|
11
|
+
/**
|
|
12
|
+
* Events emitted from the Discv5 service.
|
|
13
|
+
*/ export var Discv5Event = /*#__PURE__*/ function(Discv5Event) {
|
|
14
|
+
Discv5Event["DISCOVERED"] = "discovered";
|
|
15
|
+
Discv5Event["ENR_ADDED"] = "enrAdded";
|
|
16
|
+
return Discv5Event;
|
|
17
|
+
}({});
|
|
18
|
+
/**
|
|
19
|
+
* Events emitted from the GossipSub protocol.
|
|
20
|
+
*/ export var GossipSubEvent = /*#__PURE__*/ function(GossipSubEvent) {
|
|
21
|
+
GossipSubEvent["MESSAGE"] = "gossipsub:message";
|
|
22
|
+
return GossipSubEvent;
|
|
23
|
+
}({});
|
|
24
|
+
/***************************************************
|
|
25
|
+
* Types
|
|
26
|
+
***************************************************/ /**
|
|
27
|
+
* Aztec network specific types
|
|
28
|
+
*/ export const AZTEC_ENR_KEY = 'aztec';
|
package/dest/util.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
2
|
+
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
3
|
+
import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
|
|
4
|
+
import type { PeerId } from '@libp2p/interface';
|
|
5
|
+
import type { ConnectionManager } from '@libp2p/interface-internal';
|
|
6
|
+
import type { Libp2p } from 'libp2p';
|
|
7
|
+
import type { P2PConfig } from './config.js';
|
|
8
|
+
export interface PubSubLibp2p extends Libp2p {
|
|
9
|
+
services: {
|
|
10
|
+
pubsub: GossipSub;
|
|
11
|
+
components: {
|
|
12
|
+
connectionManager: ConnectionManager;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Converts an address string to a multiaddr string.
|
|
18
|
+
* Example usage:
|
|
19
|
+
* const tcpAddr = '123.456.7.8:80' -> /ip4/123.456.7.8/tcp/80
|
|
20
|
+
* const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
|
|
21
|
+
* @param address - The address string to convert. Has to be in the format <addr>:<port>.
|
|
22
|
+
* @param protocol - The protocol to use in the multiaddr string.
|
|
23
|
+
* @returns A multiaddr compliant string. */
|
|
24
|
+
export declare function convertToMultiaddr(address: string, protocol: 'tcp' | 'udp'): string;
|
|
25
|
+
/**
|
|
26
|
+
* Splits an <address>:<port> string into its components.
|
|
27
|
+
* @returns The ip6 or ip4 address & port separately
|
|
28
|
+
*/
|
|
29
|
+
export declare function splitAddressPort(address: string, allowEmptyAddress: boolean): [string, string];
|
|
30
|
+
/**
|
|
31
|
+
* Queries the public IP address of the machine.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getPublicIp(): Promise<string>;
|
|
34
|
+
export declare function resolveAddressIfNecessary(address: string): Promise<string>;
|
|
35
|
+
export declare function configureP2PClientAddresses(_config: P2PConfig & DataStoreConfig): Promise<P2PConfig & DataStoreConfig>;
|
|
36
|
+
/**
|
|
37
|
+
* Get the peer id private key
|
|
38
|
+
*
|
|
39
|
+
* 1. Check if we have a peer id private key in the config
|
|
40
|
+
* 2. If not, check we have a peer id private key persisted in the node
|
|
41
|
+
* 3. If not, create a new one, then persist it in the node
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
44
|
+
export declare function getPeerIdPrivateKey(config: {
|
|
45
|
+
peerIdPrivateKey?: string;
|
|
46
|
+
}, store: AztecAsyncKVStore): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Create a libp2p peer ID from the private key.
|
|
49
|
+
* @param privateKey - peer ID private key as hex string
|
|
50
|
+
* @returns The peer ID.
|
|
51
|
+
*/
|
|
52
|
+
export declare function createLibP2PPeerIdFromPrivateKey(privateKey: string): Promise<PeerId>;
|
|
53
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,QAAQ,EAAE;QACR,MAAM,EAAE,SAAS,CAAC;QAClB,UAAU,EAAE;YACV,iBAAiB,EAAE,iBAAiB,CAAC;SACtC,CAAC;KACH,CAAC;CACH;AAED;;;;;;;6CAO6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CASnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAoB9F;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAInD;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYhF;AAcD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,SAAS,GAAG,eAAe,GACnC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC,CA6CtC;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;GAIG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS1F"}
|
package/dest/util.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
|
|
2
|
+
import { createFromPrivKey } from '@libp2p/peer-id-factory';
|
|
3
|
+
import { resolve } from 'dns/promises';
|
|
4
|
+
/**
|
|
5
|
+
* Converts an address string to a multiaddr string.
|
|
6
|
+
* Example usage:
|
|
7
|
+
* const tcpAddr = '123.456.7.8:80' -> /ip4/123.456.7.8/tcp/80
|
|
8
|
+
* const udpAddr = '[2001:db8::1]:8080' -> /ip6/2001:db8::1/udp/8080
|
|
9
|
+
* @param address - The address string to convert. Has to be in the format <addr>:<port>.
|
|
10
|
+
* @param protocol - The protocol to use in the multiaddr string.
|
|
11
|
+
* @returns A multiaddr compliant string. */ export function convertToMultiaddr(address, protocol) {
|
|
12
|
+
const [addr, port] = splitAddressPort(address, false);
|
|
13
|
+
const multiaddrPrefix = addressToMultiAddressType(addr);
|
|
14
|
+
if (multiaddrPrefix === 'dns') {
|
|
15
|
+
throw new Error('Invalid address format. Expected an IPv4 or IPv6 address.');
|
|
16
|
+
}
|
|
17
|
+
return `/${multiaddrPrefix}/${addr}/${protocol}/${port}`;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Splits an <address>:<port> string into its components.
|
|
21
|
+
* @returns The ip6 or ip4 address & port separately
|
|
22
|
+
*/ export function splitAddressPort(address, allowEmptyAddress) {
|
|
23
|
+
let addr;
|
|
24
|
+
let port;
|
|
25
|
+
if (address.startsWith('[')) {
|
|
26
|
+
// IPv6 address enclosed in square brackets
|
|
27
|
+
const match = address.match(/^\[([^\]]+)\]:(\d+)$/);
|
|
28
|
+
if (!match) {
|
|
29
|
+
throw new Error(`Invalid IPv6 address format:${address}. Expected format: [<addr>]:<port>`);
|
|
30
|
+
}
|
|
31
|
+
[, addr, port] = match;
|
|
32
|
+
} else {
|
|
33
|
+
// IPv4 address
|
|
34
|
+
[addr, port] = address.split(':');
|
|
35
|
+
if (!addr && !allowEmptyAddress || !port) {
|
|
36
|
+
throw new Error(`Invalid address format: ${address}. Expected format: <addr>:<port>`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return [
|
|
40
|
+
addr,
|
|
41
|
+
port
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Queries the public IP address of the machine.
|
|
46
|
+
*/ export async function getPublicIp() {
|
|
47
|
+
const resp = await fetch('http://checkip.amazonaws.com/');
|
|
48
|
+
const text = await resp.text();
|
|
49
|
+
return text.trim();
|
|
50
|
+
}
|
|
51
|
+
export async function resolveAddressIfNecessary(address) {
|
|
52
|
+
const [addr, port] = splitAddressPort(address, false);
|
|
53
|
+
const multiaddrPrefix = addressToMultiAddressType(addr);
|
|
54
|
+
if (multiaddrPrefix === 'dns') {
|
|
55
|
+
const resolvedAddresses = await resolve(addr);
|
|
56
|
+
if (resolvedAddresses.length === 0) {
|
|
57
|
+
throw new Error(`Could not resolve address: ${addr}`);
|
|
58
|
+
}
|
|
59
|
+
return `${resolvedAddresses[0]}:${port}`;
|
|
60
|
+
} else {
|
|
61
|
+
return address;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Not public because it is not used outside of this file.
|
|
65
|
+
// Plus, it relies on `splitAddressPort` being called on the address first.
|
|
66
|
+
function addressToMultiAddressType(address) {
|
|
67
|
+
if (address.includes(':')) {
|
|
68
|
+
return 'ip6';
|
|
69
|
+
} else if (address.match(/^[\d.]+$/)) {
|
|
70
|
+
return 'ip4';
|
|
71
|
+
} else {
|
|
72
|
+
return 'dns';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export async function configureP2PClientAddresses(_config) {
|
|
76
|
+
const config = {
|
|
77
|
+
..._config
|
|
78
|
+
};
|
|
79
|
+
const { tcpAnnounceAddress: configTcpAnnounceAddress, udpAnnounceAddress: configUdpAnnounceAddress, queryForIp } = config;
|
|
80
|
+
config.tcpAnnounceAddress = configTcpAnnounceAddress ? await resolveAddressIfNecessary(configTcpAnnounceAddress) : undefined;
|
|
81
|
+
config.udpAnnounceAddress = configUdpAnnounceAddress ? await resolveAddressIfNecessary(configUdpAnnounceAddress) : undefined;
|
|
82
|
+
// create variable for re-use if needed
|
|
83
|
+
let publicIp;
|
|
84
|
+
// check if no announce IP was provided
|
|
85
|
+
const splitTcpAnnounceAddress = splitAddressPort(configTcpAnnounceAddress || '', true);
|
|
86
|
+
if (splitTcpAnnounceAddress.length == 2 && splitTcpAnnounceAddress[0] === '') {
|
|
87
|
+
if (queryForIp) {
|
|
88
|
+
publicIp = await getPublicIp();
|
|
89
|
+
const tcpAnnounceAddress = `${publicIp}:${splitTcpAnnounceAddress[1]}`;
|
|
90
|
+
config.tcpAnnounceAddress = tcpAnnounceAddress;
|
|
91
|
+
} else {
|
|
92
|
+
throw new Error(`Invalid announceTcpAddress provided: ${configTcpAnnounceAddress}. Expected format: <addr>:<port>`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const splitUdpAnnounceAddress = splitAddressPort(configUdpAnnounceAddress || '', true);
|
|
96
|
+
if (splitUdpAnnounceAddress.length == 2 && splitUdpAnnounceAddress[0] === '') {
|
|
97
|
+
// If announceUdpAddress is not provided, use announceTcpAddress
|
|
98
|
+
if (!queryForIp && config.tcpAnnounceAddress) {
|
|
99
|
+
config.udpAnnounceAddress = config.tcpAnnounceAddress;
|
|
100
|
+
} else if (queryForIp) {
|
|
101
|
+
const udpPublicIp = publicIp || await getPublicIp();
|
|
102
|
+
const udpAnnounceAddress = `${udpPublicIp}:${splitUdpAnnounceAddress[1]}`;
|
|
103
|
+
config.udpAnnounceAddress = udpAnnounceAddress;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return config;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get the peer id private key
|
|
110
|
+
*
|
|
111
|
+
* 1. Check if we have a peer id private key in the config
|
|
112
|
+
* 2. If not, check we have a peer id private key persisted in the node
|
|
113
|
+
* 3. If not, create a new one, then persist it in the node
|
|
114
|
+
*
|
|
115
|
+
*/ export async function getPeerIdPrivateKey(config, store) {
|
|
116
|
+
const peerIdPrivateKeySingleton = store.openSingleton('peerIdPrivateKey');
|
|
117
|
+
if (config.peerIdPrivateKey) {
|
|
118
|
+
await peerIdPrivateKeySingleton.set(config.peerIdPrivateKey);
|
|
119
|
+
return config.peerIdPrivateKey;
|
|
120
|
+
}
|
|
121
|
+
const storedPeerIdPrivateKey = await peerIdPrivateKeySingleton.getAsync();
|
|
122
|
+
if (storedPeerIdPrivateKey) {
|
|
123
|
+
return storedPeerIdPrivateKey;
|
|
124
|
+
}
|
|
125
|
+
const newPeerIdPrivateKey = await generateKeyPair('secp256k1');
|
|
126
|
+
const privateKeyString = Buffer.from(marshalPrivateKey(newPeerIdPrivateKey)).toString('hex');
|
|
127
|
+
await peerIdPrivateKeySingleton.set(privateKeyString);
|
|
128
|
+
return privateKeyString;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create a libp2p peer ID from the private key.
|
|
132
|
+
* @param privateKey - peer ID private key as hex string
|
|
133
|
+
* @returns The peer ID.
|
|
134
|
+
*/ export async function createLibP2PPeerIdFromPrivateKey(privateKey) {
|
|
135
|
+
if (!privateKey?.length) {
|
|
136
|
+
throw new Error('No peer private key provided');
|
|
137
|
+
}
|
|
138
|
+
const asLibp2pPrivateKey = await unmarshalPrivateKey(new Uint8Array(Buffer.from(privateKey, 'hex')));
|
|
139
|
+
return await createFromPrivKey(asLibp2pPrivateKey);
|
|
140
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
import type { ChainConfig } from '@aztec/stdlib/config';
|
|
4
|
+
import { type ComponentsVersions } from '@aztec/stdlib/versioning';
|
|
5
|
+
import type { SignableENR } from '@chainsafe/enr';
|
|
6
|
+
/** Returns the component versions based on config and this build. */
|
|
7
|
+
export declare function getVersions(config: ChainConfig): ComponentsVersions;
|
|
8
|
+
/** Sets the aztec key on the ENR record with versioning info. */
|
|
9
|
+
export declare function setAztecEnrKey(enr: SignableENR, config: ChainConfig, useXxHash?: boolean): ComponentsVersions;
|
|
10
|
+
/** Checks the given value from an ENR record against the expected versions. */
|
|
11
|
+
export declare function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions): void;
|
|
12
|
+
//# sourceMappingURL=versioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../src/versioning.ts"],"names":[],"mappings":";;AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AASlD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,sBAE9C;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,UAAc,sBAK5F;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,QAU1F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { toBufferBE } from '@aztec/foundation/bigint-buffer';
|
|
2
|
+
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
3
|
+
import { protocolContractTreeRoot } from '@aztec/protocol-contracts';
|
|
4
|
+
import { checkCompressedComponentVersion, compressComponentVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
|
|
5
|
+
import xxhashFactory from 'xxhash-wasm';
|
|
6
|
+
import { AZTEC_ENR_KEY } from './types/index.js';
|
|
7
|
+
const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
|
|
8
|
+
const XX_HASH_LEN = 8;
|
|
9
|
+
const xxhash = await xxhashFactory();
|
|
10
|
+
/** Returns the component versions based on config and this build. */ export function getVersions(config) {
|
|
11
|
+
return getComponentsVersionsFromConfig(config, protocolContractTreeRoot, getVKTreeRoot());
|
|
12
|
+
}
|
|
13
|
+
/** Sets the aztec key on the ENR record with versioning info. */ export function setAztecEnrKey(enr, config, useXxHash = USE_XX_HASH) {
|
|
14
|
+
const versions = getVersions(config);
|
|
15
|
+
const value = versionsToEnrValue(versions, useXxHash);
|
|
16
|
+
enr.set(AZTEC_ENR_KEY, value);
|
|
17
|
+
return versions;
|
|
18
|
+
}
|
|
19
|
+
/** Checks the given value from an ENR record against the expected versions. */ export function checkAztecEnrVersion(enrValue, expectedVersions) {
|
|
20
|
+
if (enrValue.length === XX_HASH_LEN) {
|
|
21
|
+
const expected = versionsToEnrValue(expectedVersions, true);
|
|
22
|
+
if (!Buffer.from(enrValue).equals(expected)) {
|
|
23
|
+
throw new Error(`Expected ENR version ${expected.toString('hex')} but received ${enrValue.toString('hex')}`);
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
const actual = Buffer.from(enrValue).toString();
|
|
27
|
+
checkCompressedComponentVersion(actual, expectedVersions);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function versionsToEnrValue(versions, useXxHash) {
|
|
31
|
+
const compressed = compressComponentVersions(versions);
|
|
32
|
+
return useXxHash ? toBufferBE(xxhash.h64(compressed), XX_HASH_LEN) : Buffer.from(compressed);
|
|
33
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aztec/p2p",
|
|
3
|
+
"version": "0.0.0-test.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./dest/index.js",
|
|
7
|
+
"./test-helpers": "./dest/test-helpers/index.js",
|
|
8
|
+
"./bootstrap": "./dest/bootstrap/bootstrap.js",
|
|
9
|
+
"./config": "./dest/config.js",
|
|
10
|
+
"./msg_validators": "./dest/msg_validators/index.js",
|
|
11
|
+
"./enr": "./dest/enr/index.js",
|
|
12
|
+
"./types": "./dest/types/index.js"
|
|
13
|
+
},
|
|
14
|
+
"typedocOptions": {
|
|
15
|
+
"entryPoints": [
|
|
16
|
+
"./src/index.ts"
|
|
17
|
+
],
|
|
18
|
+
"name": "P2P",
|
|
19
|
+
"tsconfig": "./tsconfig.json"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "yarn clean && tsc -b",
|
|
23
|
+
"build:dev": "tsc -b --watch",
|
|
24
|
+
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
25
|
+
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
26
|
+
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
27
|
+
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
28
|
+
"start": "node ./dest",
|
|
29
|
+
"start:dev": "tsc-watch -p tsconfig.json --onSuccess 'yarn start'"
|
|
30
|
+
},
|
|
31
|
+
"inherits": [
|
|
32
|
+
"../package.common.json"
|
|
33
|
+
],
|
|
34
|
+
"jest": {
|
|
35
|
+
"moduleNameMapper": {
|
|
36
|
+
"^(\\.{1,2}/.*)\\.[cm]?js$": "$1"
|
|
37
|
+
},
|
|
38
|
+
"testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
|
|
39
|
+
"rootDir": "./src",
|
|
40
|
+
"transform": {
|
|
41
|
+
"^.+\\.tsx?$": [
|
|
42
|
+
"@swc/jest",
|
|
43
|
+
{
|
|
44
|
+
"jsc": {
|
|
45
|
+
"parser": {
|
|
46
|
+
"syntax": "typescript",
|
|
47
|
+
"decorators": true
|
|
48
|
+
},
|
|
49
|
+
"transform": {
|
|
50
|
+
"decoratorVersion": "2022-03"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
"extensionsToTreatAsEsm": [
|
|
57
|
+
".ts"
|
|
58
|
+
],
|
|
59
|
+
"reporters": [
|
|
60
|
+
"default"
|
|
61
|
+
],
|
|
62
|
+
"testTimeout": 120000,
|
|
63
|
+
"setupFiles": [
|
|
64
|
+
"../../foundation/src/jest/setup.mjs"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"dependencies": {
|
|
68
|
+
"@aztec/constants": "0.0.0-test.0",
|
|
69
|
+
"@aztec/epoch-cache": "0.0.0-test.0",
|
|
70
|
+
"@aztec/foundation": "0.0.0-test.0",
|
|
71
|
+
"@aztec/kv-store": "0.0.0-test.0",
|
|
72
|
+
"@aztec/noir-protocol-circuits-types": "0.0.0-test.0",
|
|
73
|
+
"@aztec/protocol-contracts": "0.0.0-test.0",
|
|
74
|
+
"@aztec/stdlib": "0.0.0-test.0",
|
|
75
|
+
"@aztec/telemetry-client": "0.0.0-test.0",
|
|
76
|
+
"@chainsafe/discv5": "9.0.0",
|
|
77
|
+
"@chainsafe/enr": "3.0.0",
|
|
78
|
+
"@chainsafe/libp2p-gossipsub": "13.0.0",
|
|
79
|
+
"@chainsafe/libp2p-noise": "^15.0.0",
|
|
80
|
+
"@chainsafe/libp2p-yamux": "^6.0.2",
|
|
81
|
+
"@libp2p/bootstrap": "10.0.0",
|
|
82
|
+
"@libp2p/crypto": "4.0.3",
|
|
83
|
+
"@libp2p/identify": "1.0.18",
|
|
84
|
+
"@libp2p/interface": "1.3.1",
|
|
85
|
+
"@libp2p/kad-dht": "10.0.4",
|
|
86
|
+
"@libp2p/mplex": "10.0.16",
|
|
87
|
+
"@libp2p/peer-id": "4.0.7",
|
|
88
|
+
"@libp2p/peer-id-factory": "4.1.1",
|
|
89
|
+
"@libp2p/peer-store": "10.0.16",
|
|
90
|
+
"@libp2p/prometheus-metrics": "^4.2.4",
|
|
91
|
+
"@libp2p/tcp": "9.0.24",
|
|
92
|
+
"@multiformats/multiaddr": "12.1.14",
|
|
93
|
+
"interface-datastore": "^8.2.11",
|
|
94
|
+
"interface-store": "^5.1.8",
|
|
95
|
+
"it-pipe": "^3.0.1",
|
|
96
|
+
"libp2p": "1.5.0",
|
|
97
|
+
"semver": "^7.6.0",
|
|
98
|
+
"sha3": "^2.1.4",
|
|
99
|
+
"snappy": "^7.2.2",
|
|
100
|
+
"tslib": "^2.4.0",
|
|
101
|
+
"xxhash-wasm": "^1.1.0"
|
|
102
|
+
},
|
|
103
|
+
"devDependencies": {
|
|
104
|
+
"@aztec/archiver": "0.0.0-test.0",
|
|
105
|
+
"@jest/globals": "^29.5.0",
|
|
106
|
+
"@types/jest": "^29.5.0",
|
|
107
|
+
"@types/node": "^18.14.6",
|
|
108
|
+
"get-port": "^7.1.0",
|
|
109
|
+
"it-drain": "^3.0.5",
|
|
110
|
+
"it-length": "^3.0.6",
|
|
111
|
+
"jest": "^29.5.0",
|
|
112
|
+
"jest-mock-extended": "^3.0.4",
|
|
113
|
+
"ts-node": "^10.9.1",
|
|
114
|
+
"typescript": "^5.0.4",
|
|
115
|
+
"uint8arrays": "^5.0.3",
|
|
116
|
+
"viem": "2.22.8"
|
|
117
|
+
},
|
|
118
|
+
"files": [
|
|
119
|
+
"dest",
|
|
120
|
+
"src",
|
|
121
|
+
"!*.test.*"
|
|
122
|
+
],
|
|
123
|
+
"types": "./dest/index.d.ts",
|
|
124
|
+
"engines": {
|
|
125
|
+
"node": ">=18"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
3
|
+
import type { P2PBootstrapApi } from '@aztec/stdlib/interfaces/server';
|
|
4
|
+
import { OtelMetricsAdapter, type TelemetryClient } from '@aztec/telemetry-client';
|
|
5
|
+
|
|
6
|
+
import { Discv5, type Discv5EventEmitter } from '@chainsafe/discv5';
|
|
7
|
+
import { ENR, type SignableENR } from '@chainsafe/enr';
|
|
8
|
+
import type { PeerId } from '@libp2p/interface';
|
|
9
|
+
import { type Multiaddr, multiaddr } from '@multiformats/multiaddr';
|
|
10
|
+
|
|
11
|
+
import type { BootnodeConfig } from '../config.js';
|
|
12
|
+
import { createBootnodeENRandPeerId } from '../enr/generate-enr.js';
|
|
13
|
+
import { convertToMultiaddr, getPeerIdPrivateKey } from '../util.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Encapsulates a 'Bootstrap' node, used for the purpose of assisting new joiners in acquiring peers.
|
|
17
|
+
*/
|
|
18
|
+
export class BootstrapNode implements P2PBootstrapApi {
|
|
19
|
+
private node?: Discv5 & Discv5EventEmitter = undefined;
|
|
20
|
+
private peerId?: PeerId;
|
|
21
|
+
|
|
22
|
+
constructor(
|
|
23
|
+
private store: AztecAsyncKVStore,
|
|
24
|
+
private telemetry: TelemetryClient,
|
|
25
|
+
private logger = createLogger('p2p:bootstrap'),
|
|
26
|
+
) {}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Starts the bootstrap node.
|
|
30
|
+
* @param config - A partial P2P configuration. No need for TCP values as well as aztec node specific values.
|
|
31
|
+
* @returns An empty promise.
|
|
32
|
+
*/
|
|
33
|
+
public async start(config: BootnodeConfig) {
|
|
34
|
+
const { udpListenAddress, udpAnnounceAddress } = config;
|
|
35
|
+
const listenAddrUdp = multiaddr(convertToMultiaddr(udpListenAddress, 'udp'));
|
|
36
|
+
|
|
37
|
+
if (!udpAnnounceAddress) {
|
|
38
|
+
throw new Error('You need to provide a UDP announce address.');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const peerIdPrivateKey = await getPeerIdPrivateKey(config, this.store);
|
|
42
|
+
|
|
43
|
+
const { enr: ourEnr, peerId } = await createBootnodeENRandPeerId(
|
|
44
|
+
peerIdPrivateKey,
|
|
45
|
+
udpAnnounceAddress,
|
|
46
|
+
config.l1ChainId,
|
|
47
|
+
);
|
|
48
|
+
this.peerId = peerId;
|
|
49
|
+
|
|
50
|
+
this.logger.debug(`Starting bootstrap node ${peerId} listening on ${listenAddrUdp.toString()}`);
|
|
51
|
+
|
|
52
|
+
const metricsRegistry = new OtelMetricsAdapter(this.telemetry);
|
|
53
|
+
this.node = Discv5.create({
|
|
54
|
+
enr: ourEnr,
|
|
55
|
+
peerId,
|
|
56
|
+
bindAddrs: { ip4: listenAddrUdp },
|
|
57
|
+
config: {
|
|
58
|
+
lookupTimeout: 2000,
|
|
59
|
+
allowUnverifiedSessions: true,
|
|
60
|
+
},
|
|
61
|
+
metricsRegistry,
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
this.node.on('multiaddrUpdated', (addr: Multiaddr) => {
|
|
65
|
+
this.logger.info('Advertised socket address updated', { addr: addr.toString() });
|
|
66
|
+
});
|
|
67
|
+
this.node.on('discovered', async (enr: SignableENR) => {
|
|
68
|
+
const addr = await enr.getFullMultiaddr('udp');
|
|
69
|
+
this.logger.verbose(`Discovered new peer`, { enr: enr.encodeTxt(), addr: addr?.toString() });
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
this.logger.info('Starting bootnode');
|
|
74
|
+
await this.node.start();
|
|
75
|
+
this.logger.info('Bootstrap node started', {
|
|
76
|
+
peerId,
|
|
77
|
+
enr: ourEnr.encodeTxt(),
|
|
78
|
+
addr: listenAddrUdp.toString(),
|
|
79
|
+
});
|
|
80
|
+
} catch (e) {
|
|
81
|
+
this.logger.error('Error starting Discv5', e);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Add bootnode ENRs if provided, making sure we filter our own
|
|
85
|
+
if (config.bootstrapNodes?.length) {
|
|
86
|
+
const otherBootnodeENRs = config.bootstrapNodes
|
|
87
|
+
.map(x => ENR.decodeTxt(x))
|
|
88
|
+
.filter(b => b.nodeId !== ourEnr.nodeId);
|
|
89
|
+
this.logger.info(`Adding bootstrap nodes ENRs: ${otherBootnodeENRs.map(x => x.encodeTxt()).join(', ')}`);
|
|
90
|
+
try {
|
|
91
|
+
otherBootnodeENRs.forEach(enr => {
|
|
92
|
+
this.node.addEnr(enr);
|
|
93
|
+
});
|
|
94
|
+
} catch (e) {
|
|
95
|
+
this.logger.error(`Error adding bootnode ENRs: ${e}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Stops the bootstrap node.
|
|
102
|
+
* @returns And empty promise.
|
|
103
|
+
*/
|
|
104
|
+
public async stop() {
|
|
105
|
+
// stop libp2p
|
|
106
|
+
this.logger.debug('Stopping bootstrap node');
|
|
107
|
+
await this.node?.stop();
|
|
108
|
+
this.logger.info('Bootstrap node stopped');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
private assertNodeStarted() {
|
|
112
|
+
if (!this.node) {
|
|
113
|
+
throw new Error('Node not started');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private assertPeerId() {
|
|
118
|
+
if (!this.peerId) {
|
|
119
|
+
throw new Error('No peerId found');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Returns the peerId of this node.
|
|
125
|
+
* @returns The node's peer Id
|
|
126
|
+
*/
|
|
127
|
+
public getPeerId() {
|
|
128
|
+
this.assertPeerId();
|
|
129
|
+
return this.peerId!;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
public getENR() {
|
|
133
|
+
this.assertNodeStarted();
|
|
134
|
+
return this.node?.enr.toENR();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
public getEncodedEnr() {
|
|
138
|
+
this.assertNodeStarted();
|
|
139
|
+
return Promise.resolve(this.node!.enr.encodeTxt());
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
public getRoutingTable() {
|
|
143
|
+
this.assertNodeStarted();
|
|
144
|
+
return Promise.resolve(this.node!.kadValues().map((enr: ENR) => enr.encodeTxt()));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
4
|
+
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
5
|
+
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
6
|
+
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
7
|
+
import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
8
|
+
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
9
|
+
import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
|
|
10
|
+
|
|
11
|
+
import { P2PClient } from '../client/p2p_client.js';
|
|
12
|
+
import type { P2PConfig } from '../config.js';
|
|
13
|
+
import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
|
|
14
|
+
import { InMemoryAttestationPool } from '../mem_pools/attestation_pool/memory_attestation_pool.js';
|
|
15
|
+
import type { MemPools } from '../mem_pools/interface.js';
|
|
16
|
+
import { AztecKVTxPool, type TxPool } from '../mem_pools/tx_pool/index.js';
|
|
17
|
+
import { DiscV5Service } from '../services/discv5/discV5_service.js';
|
|
18
|
+
import { DummyP2PService } from '../services/dummy_service.js';
|
|
19
|
+
import { LibP2PService } from '../services/index.js';
|
|
20
|
+
import { configureP2PClientAddresses, createLibP2PPeerIdFromPrivateKey, getPeerIdPrivateKey } from '../util.js';
|
|
21
|
+
|
|
22
|
+
type P2PClientDeps<T extends P2PClientType> = {
|
|
23
|
+
txPool?: TxPool;
|
|
24
|
+
store?: AztecAsyncKVStore;
|
|
25
|
+
attestationPool?: T extends P2PClientType.Full ? AttestationPool : undefined;
|
|
26
|
+
logger?: Logger;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const createP2PClient = async <T extends P2PClientType>(
|
|
30
|
+
clientType: T,
|
|
31
|
+
_config: P2PConfig & DataStoreConfig,
|
|
32
|
+
l2BlockSource: L2BlockSource,
|
|
33
|
+
proofVerifier: ClientProtocolCircuitVerifier,
|
|
34
|
+
worldStateSynchronizer: WorldStateSynchronizer,
|
|
35
|
+
epochCache: EpochCacheInterface,
|
|
36
|
+
telemetry: TelemetryClient = getTelemetryClient(),
|
|
37
|
+
deps: P2PClientDeps<T> = {},
|
|
38
|
+
) => {
|
|
39
|
+
let config = { ..._config };
|
|
40
|
+
const logger = deps.logger ?? createLogger('p2p');
|
|
41
|
+
const store = deps.store ?? (await createStore('p2p', 1, config, createLogger('p2p:lmdb-v2')));
|
|
42
|
+
const archive = await createStore('p2p-archive', 1, config, createLogger('p2p-archive:lmdb-v2'));
|
|
43
|
+
|
|
44
|
+
const mempools: MemPools<T> = {
|
|
45
|
+
txPool: deps.txPool ?? new AztecKVTxPool(store, archive, telemetry, config.archivedTxLimit),
|
|
46
|
+
attestationPool:
|
|
47
|
+
clientType === P2PClientType.Full
|
|
48
|
+
? ((deps.attestationPool ?? new InMemoryAttestationPool(telemetry)) as T extends P2PClientType.Full
|
|
49
|
+
? AttestationPool
|
|
50
|
+
: undefined)
|
|
51
|
+
: undefined,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
let p2pService;
|
|
55
|
+
|
|
56
|
+
if (_config.p2pEnabled) {
|
|
57
|
+
logger.verbose('P2P is enabled. Using LibP2P service.');
|
|
58
|
+
config = await configureP2PClientAddresses(_config);
|
|
59
|
+
|
|
60
|
+
// Create peer discovery service
|
|
61
|
+
const peerIdPrivateKey = await getPeerIdPrivateKey(config, store);
|
|
62
|
+
const peerId = await createLibP2PPeerIdFromPrivateKey(peerIdPrivateKey);
|
|
63
|
+
const discoveryService = new DiscV5Service(
|
|
64
|
+
peerId,
|
|
65
|
+
config,
|
|
66
|
+
telemetry,
|
|
67
|
+
createLogger(`${logger.module}:discv5_service`),
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
p2pService = await LibP2PService.new<T>(
|
|
71
|
+
clientType,
|
|
72
|
+
config,
|
|
73
|
+
discoveryService,
|
|
74
|
+
peerId,
|
|
75
|
+
mempools,
|
|
76
|
+
l2BlockSource,
|
|
77
|
+
epochCache,
|
|
78
|
+
proofVerifier,
|
|
79
|
+
worldStateSynchronizer,
|
|
80
|
+
store,
|
|
81
|
+
telemetry,
|
|
82
|
+
createLogger(`${logger.module}:libp2p_service`),
|
|
83
|
+
);
|
|
84
|
+
} else {
|
|
85
|
+
logger.verbose('P2P is disabled. Using dummy P2P service');
|
|
86
|
+
p2pService = new DummyP2PService();
|
|
87
|
+
}
|
|
88
|
+
return new P2PClient(clientType, store, l2BlockSource, mempools, p2pService, config, telemetry);
|
|
89
|
+
};
|