@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
package/dest/config.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { booleanConfigHelper, getConfigFromMappings, getDefaultConfig, numberConfigHelper, pickConfigMappings } from '@aztec/foundation/config';
|
|
2
|
+
import { dataConfigMappings } from '@aztec/kv-store/config';
|
|
3
|
+
import { chainConfigMappings } from '@aztec/stdlib/config';
|
|
4
|
+
import { p2pReqRespConfigMappings } from './services/reqresp/config.js';
|
|
5
|
+
export const p2pConfigMappings = {
|
|
6
|
+
p2pEnabled: {
|
|
7
|
+
env: 'P2P_ENABLED',
|
|
8
|
+
description: 'A flag dictating whether the P2P subsystem should be enabled.',
|
|
9
|
+
...booleanConfigHelper()
|
|
10
|
+
},
|
|
11
|
+
blockCheckIntervalMS: {
|
|
12
|
+
env: 'P2P_BLOCK_CHECK_INTERVAL_MS',
|
|
13
|
+
description: 'The frequency in which to check for new L2 blocks.',
|
|
14
|
+
...numberConfigHelper(100)
|
|
15
|
+
},
|
|
16
|
+
debugDisableColocationPenalty: {
|
|
17
|
+
env: 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY',
|
|
18
|
+
description: 'DEBUG: Disable colocation penalty - NEVER set to true in production',
|
|
19
|
+
...booleanConfigHelper(false)
|
|
20
|
+
},
|
|
21
|
+
peerCheckIntervalMS: {
|
|
22
|
+
env: 'P2P_PEER_CHECK_INTERVAL_MS',
|
|
23
|
+
description: 'The frequency in which to check for new peers.',
|
|
24
|
+
...numberConfigHelper(30_000)
|
|
25
|
+
},
|
|
26
|
+
l2QueueSize: {
|
|
27
|
+
env: 'P2P_L2_QUEUE_SIZE',
|
|
28
|
+
description: 'Size of queue of L2 blocks to store.',
|
|
29
|
+
...numberConfigHelper(1_000)
|
|
30
|
+
},
|
|
31
|
+
tcpListenAddress: {
|
|
32
|
+
env: 'P2P_TCP_LISTEN_ADDR',
|
|
33
|
+
defaultValue: '0.0.0.0:40400',
|
|
34
|
+
description: 'The listen address for TCP. Format: <IP_ADDRESS>:<PORT>.'
|
|
35
|
+
},
|
|
36
|
+
udpListenAddress: {
|
|
37
|
+
env: 'P2P_UDP_LISTEN_ADDR',
|
|
38
|
+
defaultValue: '0.0.0.0:40400',
|
|
39
|
+
description: 'The listen address for UDP. Format: <IP_ADDRESS>:<PORT>.'
|
|
40
|
+
},
|
|
41
|
+
tcpAnnounceAddress: {
|
|
42
|
+
env: 'P2P_TCP_ANNOUNCE_ADDR',
|
|
43
|
+
description: 'The announce address for TCP. Format: <IP_ADDRESS>:<PORT>. Leave IP_ADDRESS blank to query for public IP.'
|
|
44
|
+
},
|
|
45
|
+
udpAnnounceAddress: {
|
|
46
|
+
env: 'P2P_UDP_ANNOUNCE_ADDR',
|
|
47
|
+
description: 'The announce address for UDP. Format: <IP_ADDRESS>:<PORT>. Leave IP_ADDRESS blank to query for public IP.'
|
|
48
|
+
},
|
|
49
|
+
peerIdPrivateKey: {
|
|
50
|
+
env: 'PEER_ID_PRIVATE_KEY',
|
|
51
|
+
description: 'An optional peer id private key. If blank, will generate a random key.'
|
|
52
|
+
},
|
|
53
|
+
bootstrapNodes: {
|
|
54
|
+
env: 'BOOTSTRAP_NODES',
|
|
55
|
+
parseEnv: (val)=>val.split(','),
|
|
56
|
+
description: 'A list of bootstrap peer ENRs to connect to. Separated by commas.'
|
|
57
|
+
},
|
|
58
|
+
bootstrapNodeEnrVersionCheck: {
|
|
59
|
+
env: 'P2P_BOOTSTRAP_NODE_ENR_VERSION_CHECK',
|
|
60
|
+
description: 'Whether to check the version of the bootstrap node ENR.',
|
|
61
|
+
...booleanConfigHelper()
|
|
62
|
+
},
|
|
63
|
+
bootstrapNodesAsFullPeers: {
|
|
64
|
+
env: 'P2P_BOOTSTRAP_NODES_AS_FULL_PEERS',
|
|
65
|
+
description: 'Whether to consider our configured bootnodes as full peers',
|
|
66
|
+
...booleanConfigHelper(false)
|
|
67
|
+
},
|
|
68
|
+
maxPeerCount: {
|
|
69
|
+
env: 'P2P_MAX_PEERS',
|
|
70
|
+
description: 'The maximum number of peers to connect to.',
|
|
71
|
+
...numberConfigHelper(100)
|
|
72
|
+
},
|
|
73
|
+
queryForIp: {
|
|
74
|
+
env: 'P2P_QUERY_FOR_IP',
|
|
75
|
+
description: 'If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false.',
|
|
76
|
+
...booleanConfigHelper()
|
|
77
|
+
},
|
|
78
|
+
keepProvenTxsInPoolFor: {
|
|
79
|
+
env: 'P2P_TX_POOL_KEEP_PROVEN_FOR',
|
|
80
|
+
description: 'How many blocks have to pass after a block is proven before its txs are deleted (zero to delete immediately once proven)',
|
|
81
|
+
...numberConfigHelper(0)
|
|
82
|
+
},
|
|
83
|
+
keepAttestationsInPoolFor: {
|
|
84
|
+
env: 'P2P_ATTESTATION_POOL_KEEP_FOR',
|
|
85
|
+
description: 'How many slots to keep attestations for.',
|
|
86
|
+
...numberConfigHelper(96)
|
|
87
|
+
},
|
|
88
|
+
gossipsubInterval: {
|
|
89
|
+
env: 'P2P_GOSSIPSUB_INTERVAL_MS',
|
|
90
|
+
description: 'The interval of the gossipsub heartbeat to perform maintenance tasks.',
|
|
91
|
+
...numberConfigHelper(700)
|
|
92
|
+
},
|
|
93
|
+
gossipsubD: {
|
|
94
|
+
env: 'P2P_GOSSIPSUB_D',
|
|
95
|
+
description: 'The D parameter for the gossipsub protocol.',
|
|
96
|
+
...numberConfigHelper(8)
|
|
97
|
+
},
|
|
98
|
+
gossipsubDlo: {
|
|
99
|
+
env: 'P2P_GOSSIPSUB_DLO',
|
|
100
|
+
description: 'The Dlo parameter for the gossipsub protocol.',
|
|
101
|
+
...numberConfigHelper(4)
|
|
102
|
+
},
|
|
103
|
+
gossipsubDhi: {
|
|
104
|
+
env: 'P2P_GOSSIPSUB_DHI',
|
|
105
|
+
description: 'The Dhi parameter for the gossipsub protocol.',
|
|
106
|
+
...numberConfigHelper(12)
|
|
107
|
+
},
|
|
108
|
+
gossipsubDLazy: {
|
|
109
|
+
env: 'P2P_GOSSIPSUB_DLAZY',
|
|
110
|
+
description: 'The Dlazy parameter for the gossipsub protocol.',
|
|
111
|
+
...numberConfigHelper(8)
|
|
112
|
+
},
|
|
113
|
+
gossipsubFloodPublish: {
|
|
114
|
+
env: 'P2P_GOSSIPSUB_FLOOD_PUBLISH',
|
|
115
|
+
description: 'Whether to flood publish messages. - For testing purposes only',
|
|
116
|
+
...booleanConfigHelper(true)
|
|
117
|
+
},
|
|
118
|
+
gossipsubMcacheLength: {
|
|
119
|
+
env: 'P2P_GOSSIPSUB_MCACHE_LENGTH',
|
|
120
|
+
description: 'The number of gossipsub interval message cache windows to keep.',
|
|
121
|
+
...numberConfigHelper(6)
|
|
122
|
+
},
|
|
123
|
+
gossipsubMcacheGossip: {
|
|
124
|
+
env: 'P2P_GOSSIPSUB_MCACHE_GOSSIP',
|
|
125
|
+
description: 'How many message cache windows to include when gossiping with other pears.',
|
|
126
|
+
...numberConfigHelper(3)
|
|
127
|
+
},
|
|
128
|
+
gossipsubTxTopicWeight: {
|
|
129
|
+
env: 'P2P_GOSSIPSUB_TX_TOPIC_WEIGHT',
|
|
130
|
+
description: 'The weight of the tx topic for the gossipsub protocol.',
|
|
131
|
+
...numberConfigHelper(1)
|
|
132
|
+
},
|
|
133
|
+
gossipsubTxInvalidMessageDeliveriesWeight: {
|
|
134
|
+
env: 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_WEIGHT',
|
|
135
|
+
description: 'The weight of the tx invalid message deliveries for the gossipsub protocol.',
|
|
136
|
+
...numberConfigHelper(-20)
|
|
137
|
+
},
|
|
138
|
+
gossipsubTxInvalidMessageDeliveriesDecay: {
|
|
139
|
+
env: 'P2P_GOSSIPSUB_TX_INVALID_MESSAGE_DELIVERIES_DECAY',
|
|
140
|
+
description: 'Determines how quickly the penalty for invalid message deliveries decays over time. Between 0 and 1.',
|
|
141
|
+
...numberConfigHelper(0.5)
|
|
142
|
+
},
|
|
143
|
+
peerPenaltyValues: {
|
|
144
|
+
env: 'P2P_PEER_PENALTY_VALUES',
|
|
145
|
+
parseEnv: (val)=>val.split(',').map(Number),
|
|
146
|
+
description: 'The values for the peer scoring system. Passed as a comma separated list of values in order: low, mid, high tolerance errors.',
|
|
147
|
+
defaultValue: [
|
|
148
|
+
2,
|
|
149
|
+
10,
|
|
150
|
+
50
|
|
151
|
+
]
|
|
152
|
+
},
|
|
153
|
+
doubleSpendSeverePeerPenaltyWindow: {
|
|
154
|
+
env: 'P2P_DOUBLE_SPEND_SEVERE_PEER_PENALTY_WINDOW',
|
|
155
|
+
description: 'The "age" (in L2 blocks) of a tx after which we heavily penalize a peer for sending it.',
|
|
156
|
+
...numberConfigHelper(30)
|
|
157
|
+
},
|
|
158
|
+
blockRequestBatchSize: {
|
|
159
|
+
env: 'P2P_BLOCK_REQUEST_BATCH_SIZE',
|
|
160
|
+
description: 'The number of blocks to fetch in a single batch.',
|
|
161
|
+
...numberConfigHelper(20)
|
|
162
|
+
},
|
|
163
|
+
archivedTxLimit: {
|
|
164
|
+
env: 'P2P_ARCHIVED_TX_LIMIT',
|
|
165
|
+
description: 'The number of transactions that will be archived. If the limit is set to 0 then archiving will be disabled.',
|
|
166
|
+
...numberConfigHelper(0)
|
|
167
|
+
},
|
|
168
|
+
...p2pReqRespConfigMappings,
|
|
169
|
+
...chainConfigMappings
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Gets the config values for p2p client from environment variables.
|
|
173
|
+
* @returns The config values for p2p client.
|
|
174
|
+
*/ export function getP2PConfigFromEnv() {
|
|
175
|
+
return getConfigFromMappings(p2pConfigMappings);
|
|
176
|
+
}
|
|
177
|
+
export function getP2PDefaultConfig() {
|
|
178
|
+
return getDefaultConfig(p2pConfigMappings);
|
|
179
|
+
}
|
|
180
|
+
const bootnodeConfigKeys = [
|
|
181
|
+
'udpAnnounceAddress',
|
|
182
|
+
'peerIdPrivateKey',
|
|
183
|
+
'udpListenAddress',
|
|
184
|
+
'dataDirectory',
|
|
185
|
+
'dataStoreMapSizeKB',
|
|
186
|
+
'bootstrapNodes',
|
|
187
|
+
'l1ChainId'
|
|
188
|
+
];
|
|
189
|
+
export const bootnodeConfigMappings = pickConfigMappings({
|
|
190
|
+
...p2pConfigMappings,
|
|
191
|
+
...dataConfigMappings,
|
|
192
|
+
...chainConfigMappings
|
|
193
|
+
}, bootnodeConfigKeys);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
2
|
+
import { SignableENR } from '@chainsafe/enr';
|
|
3
|
+
import type { PeerId } from '@libp2p/interface';
|
|
4
|
+
export declare function createBootnodeENRandPeerId(privateKey: string, udpAnnounceAddress: string, l1ChainId: number): Promise<{
|
|
5
|
+
enr: SignableENR;
|
|
6
|
+
peerId: PeerId;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function printENR(enr: string, log: LogFn): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=generate-enr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-enr.d.ts","sourceRoot":"","sources":["../../src/enr/generate-enr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAO,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAOhD,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,iBAQrD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { emptyChainConfig } from '@aztec/stdlib/config';
|
|
2
|
+
import { ENR, SignableENR } from '@chainsafe/enr';
|
|
3
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
4
|
+
import { AZTEC_ENR_KEY } from '../types/index.js';
|
|
5
|
+
import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
|
|
6
|
+
import { setAztecEnrKey } from '../versioning.js';
|
|
7
|
+
export async function createBootnodeENRandPeerId(privateKey, udpAnnounceAddress, l1ChainId) {
|
|
8
|
+
const peerId = await createLibP2PPeerIdFromPrivateKey(privateKey);
|
|
9
|
+
const enr = SignableENR.createFromPeerId(peerId);
|
|
10
|
+
const publicAddr = multiaddr(convertToMultiaddr(udpAnnounceAddress, 'udp'));
|
|
11
|
+
enr.setLocationMultiaddr(publicAddr);
|
|
12
|
+
const config = {
|
|
13
|
+
...emptyChainConfig,
|
|
14
|
+
l1ChainId
|
|
15
|
+
};
|
|
16
|
+
setAztecEnrKey(enr, config);
|
|
17
|
+
return {
|
|
18
|
+
enr,
|
|
19
|
+
peerId
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export async function printENR(enr, log) {
|
|
23
|
+
const decoded = ENR.decodeTxt(enr);
|
|
24
|
+
log(`PeerID: ${await decoded.peerId()}`);
|
|
25
|
+
log(`IP: ${decoded.ip}`);
|
|
26
|
+
log(`UDP: ${decoded.udp}`);
|
|
27
|
+
log(`TCP: ${decoded.tcp}`);
|
|
28
|
+
const aztec = decoded.kvs.get(AZTEC_ENR_KEY);
|
|
29
|
+
log(`Aztec version: ${aztec?.toString()}`);
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enr/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './generate-enr.js';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Individual request timeout error
|
|
2
|
+
*
|
|
3
|
+
* This error will be thrown when a request to a specific peer times out.
|
|
4
|
+
* @category Errors
|
|
5
|
+
*/
|
|
6
|
+
export declare class IndividualReqRespTimeoutError extends Error {
|
|
7
|
+
constructor();
|
|
8
|
+
}
|
|
9
|
+
/** Collective request timeout error
|
|
10
|
+
*
|
|
11
|
+
* This error will be thrown when a req resp request times out regardless of the peer.
|
|
12
|
+
* @category Errors
|
|
13
|
+
*/
|
|
14
|
+
export declare class CollectiveReqRespTimeoutError extends Error {
|
|
15
|
+
constructor();
|
|
16
|
+
}
|
|
17
|
+
/** Invalid response error
|
|
18
|
+
*
|
|
19
|
+
* This error will be thrown when a response is received that is not valid.
|
|
20
|
+
*
|
|
21
|
+
* This error does not need to be punished as message validators will handle punishing invalid
|
|
22
|
+
* requests
|
|
23
|
+
* @category Errors
|
|
24
|
+
*/
|
|
25
|
+
export declare class InvalidResponseError extends Error {
|
|
26
|
+
constructor();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=reqresp.error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reqresp.error.d.ts","sourceRoot":"","sources":["../../src/errors/reqresp.error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;;CAIvD;AAED;;;;GAIG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;;CAIvD;AAED;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;;CAI9C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Individual request timeout error
|
|
2
|
+
*
|
|
3
|
+
* This error will be thrown when a request to a specific peer times out.
|
|
4
|
+
* @category Errors
|
|
5
|
+
*/ export class IndividualReqRespTimeoutError extends Error {
|
|
6
|
+
constructor(){
|
|
7
|
+
super(`Request to peer timed out`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/** Collective request timeout error
|
|
11
|
+
*
|
|
12
|
+
* This error will be thrown when a req resp request times out regardless of the peer.
|
|
13
|
+
* @category Errors
|
|
14
|
+
*/ export class CollectiveReqRespTimeoutError extends Error {
|
|
15
|
+
constructor(){
|
|
16
|
+
super(`Request to all peers timed out`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** Invalid response error
|
|
20
|
+
*
|
|
21
|
+
* This error will be thrown when a response is received that is not valid.
|
|
22
|
+
*
|
|
23
|
+
* This error does not need to be punished as message validators will handle punishing invalid
|
|
24
|
+
* requests
|
|
25
|
+
* @category Errors
|
|
26
|
+
*/ export class InvalidResponseError extends Error {
|
|
27
|
+
constructor(){
|
|
28
|
+
super(`Invalid response received`);
|
|
29
|
+
}
|
|
30
|
+
}
|
package/dest/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './bootstrap/bootstrap.js';
|
|
2
|
+
export * from './client/index.js';
|
|
3
|
+
export * from './config.js';
|
|
4
|
+
export * from './mem_pools/attestation_pool/index.js';
|
|
5
|
+
export * from './mem_pools/tx_pool/index.js';
|
|
6
|
+
export * from './msg_validators/index.js';
|
|
7
|
+
export * from './services/index.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC"}
|
package/dest/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './bootstrap/bootstrap.js';
|
|
2
|
+
export * from './client/index.js';
|
|
3
|
+
export * from './config.js';
|
|
4
|
+
export * from './mem_pools/attestation_pool/index.js';
|
|
5
|
+
export * from './mem_pools/tx_pool/index.js';
|
|
6
|
+
export * from './msg_validators/index.js';
|
|
7
|
+
export * from './services/index.js';
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { BlockAttestation } from '@aztec/stdlib/p2p';
|
|
2
|
+
/**
|
|
3
|
+
* An Attestation Pool contains attestations collected by a validator
|
|
4
|
+
*
|
|
5
|
+
* Attestations that are observed via the p2p network are stored for requests
|
|
6
|
+
* from the validator to produce a block, or to serve to other peers.
|
|
7
|
+
*/
|
|
8
|
+
export interface AttestationPool {
|
|
9
|
+
/**
|
|
10
|
+
* AddAttestation
|
|
11
|
+
*
|
|
12
|
+
* @param attestations - Attestations to add into the pool
|
|
13
|
+
*/
|
|
14
|
+
addAttestations(attestations: BlockAttestation[]): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* DeleteAttestation
|
|
17
|
+
*
|
|
18
|
+
* @param attestations - Attestations to remove from the pool
|
|
19
|
+
*/
|
|
20
|
+
deleteAttestations(attestations: BlockAttestation[]): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Delete Attestations with a slot number smaller than the given slot
|
|
23
|
+
*
|
|
24
|
+
* Removes all attestations associated with a slot
|
|
25
|
+
*
|
|
26
|
+
* @param slot - The oldest slot to keep.
|
|
27
|
+
*/
|
|
28
|
+
deleteAttestationsOlderThan(slot: bigint): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Delete Attestations for slot
|
|
31
|
+
*
|
|
32
|
+
* Removes all attestations associated with a slot
|
|
33
|
+
*
|
|
34
|
+
* @param slot - The slot to delete.
|
|
35
|
+
*/
|
|
36
|
+
deleteAttestationsForSlot(slot: bigint): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Delete Attestations for slot and proposal
|
|
39
|
+
*
|
|
40
|
+
* Removes all attestations associated with a slot and proposal
|
|
41
|
+
*
|
|
42
|
+
* @param slot - The slot to delete.
|
|
43
|
+
* @param proposalId - The proposal to delete.
|
|
44
|
+
*/
|
|
45
|
+
deleteAttestationsForSlotAndProposal(slot: bigint, proposalId: string): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Get Attestations for slot
|
|
48
|
+
*
|
|
49
|
+
* Retrieve all of the attestations observed pertaining to a given slot
|
|
50
|
+
*
|
|
51
|
+
* @param slot - The slot to query
|
|
52
|
+
* @param proposalId - The proposal to query
|
|
53
|
+
* @return BlockAttestations
|
|
54
|
+
*/
|
|
55
|
+
getAttestationsForSlot(slot: bigint, proposalId: string): Promise<BlockAttestation[]>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=attestation_pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE;;;;OAIG;IACH,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;;;;OAMG;IACH,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;;;;;OAMG;IACH,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;;;OAOG;IACH,oCAAoC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtF;;;;;;;;OAQG;IACH,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;CACvF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attestation_pool_test_suite.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/attestation_pool_test_suite.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,wBAAgB,uBAAuB,CAAC,kBAAkB,EAAE,MAAM,eAAe,QAuNhF"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { Secp256k1Signer } from '@aztec/foundation/crypto';
|
|
2
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
3
|
+
import { TxHash } from '@aztec/stdlib/tx';
|
|
4
|
+
import { jest } from '@jest/globals';
|
|
5
|
+
import { mock } from 'jest-mock-extended';
|
|
6
|
+
import { mockAttestation } from './mocks.js';
|
|
7
|
+
const NUMBER_OF_SIGNERS_PER_TEST = 4;
|
|
8
|
+
export function describeAttestationPool(getAttestationPool) {
|
|
9
|
+
let ap;
|
|
10
|
+
let signers;
|
|
11
|
+
// Check that metrics are recorded correctly
|
|
12
|
+
let metricsMock;
|
|
13
|
+
beforeEach(()=>{
|
|
14
|
+
ap = getAttestationPool();
|
|
15
|
+
signers = Array.from({
|
|
16
|
+
length: NUMBER_OF_SIGNERS_PER_TEST
|
|
17
|
+
}, ()=>Secp256k1Signer.random());
|
|
18
|
+
metricsMock = mock();
|
|
19
|
+
// Can i overwrite this like this??
|
|
20
|
+
ap.metrics = metricsMock;
|
|
21
|
+
});
|
|
22
|
+
const createAttestationsForSlot = (slotNumber)=>{
|
|
23
|
+
const archive = Fr.random();
|
|
24
|
+
return Promise.all(signers.map((signer)=>mockAttestation(signer, slotNumber, archive)));
|
|
25
|
+
};
|
|
26
|
+
// We compare buffers as the objects can have cached values attached to them which are not serialised
|
|
27
|
+
// using array containing as the kv store does not respect insertion order
|
|
28
|
+
const compareAttestations = (a1, a2)=>{
|
|
29
|
+
const a1Buffer = a1.map((attestation)=>attestation.toBuffer());
|
|
30
|
+
const a2Buffer = a2.map((attestation)=>attestation.toBuffer());
|
|
31
|
+
expect(a1Buffer.length).toBe(a2Buffer.length);
|
|
32
|
+
expect(a1Buffer).toEqual(expect.arrayContaining(a2Buffer));
|
|
33
|
+
};
|
|
34
|
+
it('should add attestations to pool', async ()=>{
|
|
35
|
+
const slotNumber = 420;
|
|
36
|
+
const archive = Fr.random();
|
|
37
|
+
const attestations = await Promise.all(signers.map((signer)=>mockAttestation(signer, slotNumber, archive)));
|
|
38
|
+
await ap.addAttestations(attestations);
|
|
39
|
+
// Check metrics have been updated.
|
|
40
|
+
expect(metricsMock.recordAddedObjects).toHaveBeenCalledWith(attestations.length);
|
|
41
|
+
const retreivedAttestations = await ap.getAttestationsForSlot(BigInt(slotNumber), archive.toString());
|
|
42
|
+
expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
43
|
+
compareAttestations(retreivedAttestations, attestations);
|
|
44
|
+
// Delete by slot
|
|
45
|
+
await ap.deleteAttestationsForSlot(BigInt(slotNumber));
|
|
46
|
+
expect(metricsMock.recordRemovedObjects).toHaveBeenCalledWith(attestations.length);
|
|
47
|
+
const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlot(BigInt(slotNumber), archive.toString());
|
|
48
|
+
expect(retreivedAttestationsAfterDelete.length).toBe(0);
|
|
49
|
+
});
|
|
50
|
+
it('Should handle duplicate proposals in a slot', async ()=>{
|
|
51
|
+
const slotNumber = 420;
|
|
52
|
+
const archive = Fr.random();
|
|
53
|
+
const txs = [
|
|
54
|
+
0,
|
|
55
|
+
1,
|
|
56
|
+
2,
|
|
57
|
+
3,
|
|
58
|
+
4,
|
|
59
|
+
5
|
|
60
|
+
].map(()=>TxHash.random());
|
|
61
|
+
// Use the same signer for all attestations
|
|
62
|
+
const attestations = [];
|
|
63
|
+
const signer = signers[0];
|
|
64
|
+
for(let i = 0; i < NUMBER_OF_SIGNERS_PER_TEST; i++){
|
|
65
|
+
attestations.push(await mockAttestation(signer, slotNumber, archive, txs));
|
|
66
|
+
}
|
|
67
|
+
await ap.addAttestations(attestations);
|
|
68
|
+
const retreivedAttestations = await ap.getAttestationsForSlot(BigInt(slotNumber), archive.toString());
|
|
69
|
+
expect(retreivedAttestations.length).toBe(1);
|
|
70
|
+
expect(retreivedAttestations[0].toBuffer()).toEqual(attestations[0].toBuffer());
|
|
71
|
+
expect(retreivedAttestations[0].payload.txHashes).toEqual(txs);
|
|
72
|
+
expect((await retreivedAttestations[0].getSender()).toString()).toEqual(signer.address.toString());
|
|
73
|
+
});
|
|
74
|
+
it('Should store attestations by differing slot', async ()=>{
|
|
75
|
+
const slotNumbers = [
|
|
76
|
+
1,
|
|
77
|
+
2,
|
|
78
|
+
3,
|
|
79
|
+
4
|
|
80
|
+
];
|
|
81
|
+
const attestations = await Promise.all(signers.map((signer, i)=>mockAttestation(signer, slotNumbers[i])));
|
|
82
|
+
await ap.addAttestations(attestations);
|
|
83
|
+
for (const attestation of attestations){
|
|
84
|
+
const slot = attestation.payload.header.globalVariables.slotNumber;
|
|
85
|
+
const archive = attestation.archive.toString();
|
|
86
|
+
const retreivedAttestations = await ap.getAttestationsForSlot(slot.toBigInt(), archive);
|
|
87
|
+
expect(retreivedAttestations.length).toBe(1);
|
|
88
|
+
expect(retreivedAttestations[0].toBuffer()).toEqual(attestation.toBuffer());
|
|
89
|
+
expect(retreivedAttestations[0].payload.header.globalVariables.slotNumber).toEqual(slot);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
it('Should store attestations by differing slot and archive', async ()=>{
|
|
93
|
+
const slotNumbers = [
|
|
94
|
+
1,
|
|
95
|
+
1,
|
|
96
|
+
2,
|
|
97
|
+
3
|
|
98
|
+
];
|
|
99
|
+
const archives = [
|
|
100
|
+
Fr.random(),
|
|
101
|
+
Fr.random(),
|
|
102
|
+
Fr.random(),
|
|
103
|
+
Fr.random()
|
|
104
|
+
];
|
|
105
|
+
const attestations = await Promise.all(signers.map((signer, i)=>mockAttestation(signer, slotNumbers[i], archives[i])));
|
|
106
|
+
await ap.addAttestations(attestations);
|
|
107
|
+
for (const attestation of attestations){
|
|
108
|
+
const slot = attestation.payload.header.globalVariables.slotNumber;
|
|
109
|
+
const proposalId = attestation.archive.toString();
|
|
110
|
+
const retreivedAttestations = await ap.getAttestationsForSlot(slot.toBigInt(), proposalId);
|
|
111
|
+
expect(retreivedAttestations.length).toBe(1);
|
|
112
|
+
expect(retreivedAttestations[0].toBuffer()).toEqual(attestation.toBuffer());
|
|
113
|
+
expect(retreivedAttestations[0].payload.header.globalVariables.slotNumber).toEqual(slot);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
it('Should delete attestations', async ()=>{
|
|
117
|
+
const slotNumber = 420;
|
|
118
|
+
const archive = Fr.random();
|
|
119
|
+
const attestations = await Promise.all(signers.map((signer)=>mockAttestation(signer, slotNumber, archive)));
|
|
120
|
+
const proposalId = attestations[0].archive.toString();
|
|
121
|
+
await ap.addAttestations(attestations);
|
|
122
|
+
expect(metricsMock.recordAddedObjects).toHaveBeenCalledWith(attestations.length);
|
|
123
|
+
const retreivedAttestations = await ap.getAttestationsForSlot(BigInt(slotNumber), proposalId);
|
|
124
|
+
expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
125
|
+
compareAttestations(retreivedAttestations, attestations);
|
|
126
|
+
await ap.deleteAttestations(attestations);
|
|
127
|
+
expect(metricsMock.recordRemovedObjects).toHaveBeenCalledWith(attestations.length);
|
|
128
|
+
const gottenAfterDelete = await ap.getAttestationsForSlot(BigInt(slotNumber), proposalId);
|
|
129
|
+
expect(gottenAfterDelete.length).toBe(0);
|
|
130
|
+
});
|
|
131
|
+
it('Should blanket delete attestations per slot', async ()=>{
|
|
132
|
+
const slotNumber = 420;
|
|
133
|
+
const archive = Fr.random();
|
|
134
|
+
const attestations = await Promise.all(signers.map((signer)=>mockAttestation(signer, slotNumber, archive)));
|
|
135
|
+
const proposalId = attestations[0].archive.toString();
|
|
136
|
+
await ap.addAttestations(attestations);
|
|
137
|
+
const retreivedAttestations = await ap.getAttestationsForSlot(BigInt(slotNumber), proposalId);
|
|
138
|
+
expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
139
|
+
compareAttestations(retreivedAttestations, attestations);
|
|
140
|
+
await ap.deleteAttestationsForSlot(BigInt(slotNumber));
|
|
141
|
+
const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlot(BigInt(slotNumber), proposalId);
|
|
142
|
+
expect(retreivedAttestationsAfterDelete.length).toBe(0);
|
|
143
|
+
});
|
|
144
|
+
it('Should blanket delete attestations per slot and proposal', async ()=>{
|
|
145
|
+
const slotNumber = 420;
|
|
146
|
+
const archive = Fr.random();
|
|
147
|
+
const attestations = await Promise.all(signers.map((signer)=>mockAttestation(signer, slotNumber, archive)));
|
|
148
|
+
const proposalId = attestations[0].archive.toString();
|
|
149
|
+
// Add another set of attestations with a different proposalId, yet the same slot
|
|
150
|
+
const archive2 = Fr.random();
|
|
151
|
+
const attestations2 = await Promise.all(signers.map((signer)=>mockAttestation(signer, slotNumber, archive2)));
|
|
152
|
+
const proposalId2 = attestations2[0].archive.toString();
|
|
153
|
+
await ap.addAttestations(attestations);
|
|
154
|
+
await ap.addAttestations(attestations2);
|
|
155
|
+
expect(metricsMock.recordAddedObjects).toHaveBeenCalledWith(attestations.length);
|
|
156
|
+
expect(metricsMock.recordAddedObjects).toHaveBeenCalledWith(attestations2.length);
|
|
157
|
+
const retreivedAttestations = await ap.getAttestationsForSlot(BigInt(slotNumber), proposalId);
|
|
158
|
+
expect(retreivedAttestations.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
159
|
+
compareAttestations(retreivedAttestations, attestations);
|
|
160
|
+
await ap.deleteAttestationsForSlotAndProposal(BigInt(slotNumber), proposalId);
|
|
161
|
+
expect(metricsMock.recordRemovedObjects).toHaveBeenCalledWith(attestations.length);
|
|
162
|
+
const retreivedAttestationsAfterDelete = await ap.getAttestationsForSlot(BigInt(slotNumber), proposalId);
|
|
163
|
+
expect(retreivedAttestationsAfterDelete.length).toBe(0);
|
|
164
|
+
const retreivedAttestationsAfterDeleteForOtherProposal = await ap.getAttestationsForSlot(BigInt(slotNumber), proposalId2);
|
|
165
|
+
expect(retreivedAttestationsAfterDeleteForOtherProposal.length).toBe(NUMBER_OF_SIGNERS_PER_TEST);
|
|
166
|
+
compareAttestations(retreivedAttestationsAfterDeleteForOtherProposal, attestations2);
|
|
167
|
+
});
|
|
168
|
+
it('Should delete attestations older than a given slot', async ()=>{
|
|
169
|
+
const slotNumbers = [
|
|
170
|
+
1,
|
|
171
|
+
2,
|
|
172
|
+
3,
|
|
173
|
+
69,
|
|
174
|
+
72,
|
|
175
|
+
74,
|
|
176
|
+
88,
|
|
177
|
+
420
|
|
178
|
+
];
|
|
179
|
+
const attestations = (await Promise.all(slotNumbers.map((slotNumber)=>createAttestationsForSlot(slotNumber)))).flat();
|
|
180
|
+
const proposalId = attestations[0].archive.toString();
|
|
181
|
+
await ap.addAttestations(attestations);
|
|
182
|
+
const attestationsForSlot1 = await ap.getAttestationsForSlot(BigInt(1), proposalId);
|
|
183
|
+
expect(attestationsForSlot1.length).toBe(signers.length);
|
|
184
|
+
const deleteAttestationsSpy = jest.spyOn(ap, 'deleteAttestationsForSlot');
|
|
185
|
+
await ap.deleteAttestationsOlderThan(BigInt(73));
|
|
186
|
+
const attestationsForSlot1AfterDelete = await ap.getAttestationsForSlot(BigInt(1), proposalId);
|
|
187
|
+
expect(attestationsForSlot1AfterDelete.length).toBe(0);
|
|
188
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledTimes(5);
|
|
189
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledWith(BigInt(1));
|
|
190
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledWith(BigInt(2));
|
|
191
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledWith(BigInt(3));
|
|
192
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledWith(BigInt(69));
|
|
193
|
+
expect(deleteAttestationsSpy).toHaveBeenCalledWith(BigInt(72));
|
|
194
|
+
});
|
|
195
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
2
|
+
import { BlockAttestation } from '@aztec/stdlib/p2p';
|
|
3
|
+
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
4
|
+
import type { AttestationPool } from './attestation_pool.js';
|
|
5
|
+
export declare class KvAttestationPool implements AttestationPool {
|
|
6
|
+
private store;
|
|
7
|
+
private log;
|
|
8
|
+
private metrics;
|
|
9
|
+
private attestations;
|
|
10
|
+
private proposalsForSlot;
|
|
11
|
+
private attestationsForProposal;
|
|
12
|
+
constructor(store: AztecAsyncKVStore, telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
|
|
13
|
+
private getProposalKey;
|
|
14
|
+
private getAttestationKey;
|
|
15
|
+
addAttestations(attestations: BlockAttestation[]): Promise<void>;
|
|
16
|
+
getAttestationsForSlot(slot: bigint, proposalId: string): Promise<BlockAttestation[]>;
|
|
17
|
+
deleteAttestationsOlderThan(oldestSlot: bigint): Promise<void>;
|
|
18
|
+
deleteAttestationsForSlot(slot: bigint): Promise<void>;
|
|
19
|
+
deleteAttestationsForSlotAndProposal(slot: bigint, proposalId: string): Promise<void>;
|
|
20
|
+
deleteAttestations(attestations: BlockAttestation[]): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=kv_attestation_pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv_attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/kv_attestation_pool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,qBAAa,iBAAkB,YAAW,eAAe;IAQrD,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,GAAG;IATb,OAAO,CAAC,OAAO,CAAwC;IAEvD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,uBAAuB,CAAqC;gBAG1D,KAAK,EAAE,iBAAiB,EAChC,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAyC;IAStD,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAIZ,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhE,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAsBrF,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9D,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBtD,oCAAoC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrF,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBjF"}
|