@aztec/p2p 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bootstrap/bootstrap.js +41 -29
- package/dest/client/factory.js +8 -10
- package/dest/client/index.js +0 -1
- package/dest/client/p2p_client.js +513 -507
- package/dest/config.js +44 -39
- package/dest/errors/reqresp.error.js +6 -10
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -2
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +64 -32
- package/dest/mem_pools/attestation_pool/index.js +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +22 -19
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +22 -26
- package/dest/mem_pools/attestation_pool/mocks.js +10 -6
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.js +1 -2
- package/dest/mem_pools/epoch_proof_quote_pool/index.js +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.js +5 -4
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.js +2 -3
- package/dest/mem_pools/index.js +1 -2
- package/dest/mem_pools/instrumentation.js +37 -42
- package/dest/mem_pools/interface.js +3 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +127 -134
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +45 -43
- package/dest/mem_pools/tx_pool/priority.js +1 -3
- package/dest/mem_pools/tx_pool/tx_pool.js +3 -2
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +107 -37
- package/dest/mocks/index.js +47 -38
- package/dest/msg_validators/attestation_validator/attestation_validator.js +3 -3
- package/dest/msg_validators/attestation_validator/index.js +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +2 -2
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.js +2 -2
- package/dest/msg_validators/epoch_proof_quote_validator/index.js +0 -1
- package/dest/msg_validators/index.js +0 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +9 -11
- package/dest/msg_validators/tx_validator/block_header_validator.js +17 -12
- package/dest/msg_validators/tx_validator/data_validator.js +41 -32
- package/dest/msg_validators/tx_validator/double_spend_validator.js +22 -14
- package/dest/msg_validators/tx_validator/index.js +0 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +29 -26
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +17 -12
- package/dest/services/data_store.js +57 -57
- package/dest/services/discv5/discV5_service.js +31 -23
- package/dest/services/dummy_service.js +40 -58
- package/dest/services/encoding.js +10 -9
- package/dest/services/index.js +0 -1
- package/dest/services/libp2p/libp2p_service.js +709 -695
- package/dest/services/peer-manager/metrics.js +14 -7
- package/dest/services/peer-manager/peer_manager.js +340 -342
- package/dest/services/peer-manager/peer_scoring.js +20 -18
- package/dest/services/reqresp/config.js +4 -5
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +35 -28
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +60 -59
- package/dest/services/reqresp/index.js +1 -3
- package/dest/services/reqresp/interface.js +25 -30
- package/dest/services/reqresp/metrics.js +23 -10
- package/dest/services/reqresp/protocols/block.js +1 -2
- package/dest/services/reqresp/protocols/goodbye.js +35 -40
- package/dest/services/reqresp/protocols/index.js +1 -3
- package/dest/services/reqresp/protocols/ping.js +1 -3
- package/dest/services/reqresp/protocols/status.js +1 -3
- package/dest/services/reqresp/protocols/tx.js +5 -8
- package/dest/services/reqresp/rate-limiter/index.js +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +42 -36
- package/dest/services/reqresp/rate-limiter/rate_limits.js +16 -17
- package/dest/services/reqresp/reqresp.js +461 -395
- package/dest/services/reqresp/status.js +51 -0
- package/dest/services/service.js +3 -4
- package/dest/services/types.js +16 -23
- package/dest/util.js +23 -34
- package/package.json +8 -8
- package/src/client/p2p_client.ts +159 -125
- package/src/mem_pools/index.ts +3 -3
- package/src/mem_pools/instrumentation.ts +3 -2
- package/src/services/reqresp/interface.ts +11 -0
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +3 -1
- package/src/services/reqresp/rate-limiter/rate_limits.ts +2 -2
- package/src/services/reqresp/reqresp.ts +111 -24
- package/src/services/reqresp/status.ts +59 -0
- package/dest/bootstrap/bootstrap.d.ts +0 -38
- package/dest/bootstrap/bootstrap.d.ts.map +0 -1
- package/dest/client/factory.d.ts +0 -19
- package/dest/client/factory.d.ts.map +0 -1
- package/dest/client/index.d.ts +0 -3
- package/dest/client/index.d.ts.map +0 -1
- package/dest/client/p2p_client.d.ts +0 -321
- package/dest/client/p2p_client.d.ts.map +0 -1
- package/dest/config.d.ts +0 -171
- package/dest/config.d.ts.map +0 -1
- package/dest/errors/reqresp.error.d.ts +0 -28
- package/dest/errors/reqresp.error.d.ts.map +0 -1
- package/dest/index.d.ts +0 -9
- package/dest/index.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +0 -57
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +0 -3
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/index.d.ts +0 -3
- package/dest/mem_pools/attestation_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -22
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -17
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts +0 -18
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts +0 -7
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts +0 -4
- package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts +0 -12
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts +0 -8
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts.map +0 -1
- package/dest/mem_pools/index.d.ts +0 -5
- package/dest/mem_pools/index.d.ts.map +0 -1
- package/dest/mem_pools/instrumentation.d.ts +0 -31
- package/dest/mem_pools/instrumentation.d.ts.map +0 -1
- package/dest/mem_pools/interface.d.ts +0 -13
- package/dest/mem_pools/interface.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -66
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.d.ts +0 -4
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -8
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -66
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mocks/index.d.ts +0 -54
- package/dest/mocks/index.d.ts.map +0 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +0 -8
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +0 -1
- package/dest/msg_validators/attestation_validator/index.d.ts +0 -2
- package/dest/msg_validators/attestation_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts +0 -8
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts.map +0 -1
- package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts +0 -2
- package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/index.d.ts +0 -4
- package/dest/msg_validators/index.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +0 -7
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +0 -11
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts +0 -6
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +0 -12
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/index.d.ts +0 -7
- package/dest/msg_validators/tx_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +0 -10
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +0 -8
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +0 -1
- package/dest/services/data_store.d.ts +0 -27
- package/dest/services/data_store.d.ts.map +0 -1
- package/dest/services/discv5/discV5_service.d.ts +0 -36
- package/dest/services/discv5/discV5_service.d.ts.map +0 -1
- package/dest/services/dummy_service.d.ts +0 -82
- package/dest/services/dummy_service.d.ts.map +0 -1
- package/dest/services/encoding.d.ts +0 -31
- package/dest/services/encoding.d.ts.map +0 -1
- package/dest/services/index.d.ts +0 -3
- package/dest/services/index.d.ts.map +0 -1
- package/dest/services/libp2p/libp2p_service.d.ts +0 -225
- package/dest/services/libp2p/libp2p_service.d.ts.map +0 -1
- package/dest/services/peer-manager/metrics.d.ts +0 -12
- package/dest/services/peer-manager/metrics.d.ts.map +0 -1
- package/dest/services/peer-manager/peer_manager.d.ts +0 -76
- package/dest/services/peer-manager/peer_manager.d.ts.map +0 -1
- package/dest/services/peer-manager/peer_scoring.d.ts +0 -28
- package/dest/services/peer-manager/peer_scoring.d.ts.map +0 -1
- package/dest/services/reqresp/config.d.ts +0 -16
- package/dest/services/reqresp/config.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +0 -61
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/index.d.ts +0 -6
- package/dest/services/reqresp/index.d.ts.map +0 -1
- package/dest/services/reqresp/interface.d.ts +0 -107
- package/dest/services/reqresp/interface.d.ts.map +0 -1
- package/dest/services/reqresp/metrics.d.ts +0 -15
- package/dest/services/reqresp/metrics.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.d.ts +0 -4
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts +0 -51
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/index.d.ts +0 -9
- package/dest/services/reqresp/protocols/index.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/ping.d.ts +0 -9
- package/dest/services/reqresp/protocols/ping.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/status.d.ts +0 -9
- package/dest/services/reqresp/protocols/status.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +0 -13
- package/dest/services/reqresp/protocols/tx.d.ts.map +0 -1
- package/dest/services/reqresp/rate-limiter/index.d.ts +0 -2
- package/dest/services/reqresp/rate-limiter/index.d.ts.map +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +0 -102
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +0 -3
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +0 -1
- package/dest/services/reqresp/reqresp.d.ts +0 -161
- package/dest/services/reqresp/reqresp.d.ts.map +0 -1
- package/dest/services/service.d.ts +0 -85
- package/dest/services/service.d.ts.map +0 -1
- package/dest/services/types.d.ts +0 -38
- package/dest/services/types.d.ts.map +0 -1
- package/dest/util.d.ts +0 -53
- package/dest/util.d.ts.map +0 -1
|
@@ -4,85 +4,146 @@ import { unfreeze } from '@aztec/foundation/types';
|
|
|
4
4
|
/**
|
|
5
5
|
* Tests a TxPool implementation.
|
|
6
6
|
* @param getTxPool - Gets a fresh TxPool
|
|
7
|
-
*/
|
|
8
|
-
export function describeTxPool(getTxPool) {
|
|
7
|
+
*/ export function describeTxPool(getTxPool) {
|
|
9
8
|
let pool;
|
|
10
|
-
beforeEach(()
|
|
9
|
+
beforeEach(()=>{
|
|
11
10
|
pool = getTxPool();
|
|
12
11
|
});
|
|
13
|
-
it('Adds txs to the pool as pending', async ()
|
|
12
|
+
it('Adds txs to the pool as pending', async ()=>{
|
|
14
13
|
const tx1 = await mockTx();
|
|
15
|
-
await pool.addTxs([
|
|
14
|
+
await pool.addTxs([
|
|
15
|
+
tx1
|
|
16
|
+
]);
|
|
16
17
|
const poolTx = await pool.getTxByHash(await tx1.getTxHash());
|
|
17
18
|
expect(await poolTx.getTxHash()).toEqual(await tx1.getTxHash());
|
|
18
19
|
await expect(pool.getTxStatus(await tx1.getTxHash())).resolves.toEqual('pending');
|
|
19
|
-
await expect(pool.getPendingTxHashes()).resolves.toEqual([
|
|
20
|
+
await expect(pool.getPendingTxHashes()).resolves.toEqual([
|
|
21
|
+
await tx1.getTxHash()
|
|
22
|
+
]);
|
|
20
23
|
});
|
|
21
|
-
it('Removes txs from the pool', async ()
|
|
24
|
+
it('Removes txs from the pool', async ()=>{
|
|
22
25
|
const tx1 = await mockTx();
|
|
23
|
-
await pool.addTxs([
|
|
24
|
-
|
|
26
|
+
await pool.addTxs([
|
|
27
|
+
tx1
|
|
28
|
+
]);
|
|
29
|
+
await pool.deleteTxs([
|
|
30
|
+
await tx1.getTxHash()
|
|
31
|
+
]);
|
|
25
32
|
await expect(pool.getTxByHash(await tx1.getTxHash())).resolves.toBeFalsy();
|
|
26
33
|
await expect(pool.getTxStatus(await tx1.getTxHash())).resolves.toBeUndefined();
|
|
27
34
|
});
|
|
28
|
-
it('Marks txs as mined', async ()
|
|
35
|
+
it('Marks txs as mined', async ()=>{
|
|
29
36
|
const tx1 = await mockTx(1);
|
|
30
37
|
const tx2 = await mockTx(2);
|
|
31
|
-
await pool.addTxs([
|
|
32
|
-
|
|
38
|
+
await pool.addTxs([
|
|
39
|
+
tx1,
|
|
40
|
+
tx2
|
|
41
|
+
]);
|
|
42
|
+
await pool.markAsMined([
|
|
43
|
+
await tx1.getTxHash()
|
|
44
|
+
], 1);
|
|
33
45
|
await expect(pool.getTxByHash(await tx1.getTxHash())).resolves.toEqual(tx1);
|
|
34
46
|
await expect(pool.getTxStatus(await tx1.getTxHash())).resolves.toEqual('mined');
|
|
35
|
-
await expect(pool.getMinedTxHashes()).resolves.toEqual([
|
|
36
|
-
|
|
47
|
+
await expect(pool.getMinedTxHashes()).resolves.toEqual([
|
|
48
|
+
[
|
|
49
|
+
await tx1.getTxHash(),
|
|
50
|
+
1
|
|
51
|
+
]
|
|
52
|
+
]);
|
|
53
|
+
await expect(pool.getPendingTxHashes()).resolves.toEqual([
|
|
54
|
+
await tx2.getTxHash()
|
|
55
|
+
]);
|
|
37
56
|
});
|
|
38
|
-
it('Marks txs as pending after being mined', async ()
|
|
57
|
+
it('Marks txs as pending after being mined', async ()=>{
|
|
39
58
|
const tx1 = await mockTx(1);
|
|
40
59
|
const tx2 = await mockTx(2);
|
|
41
|
-
await pool.addTxs([
|
|
42
|
-
|
|
43
|
-
|
|
60
|
+
await pool.addTxs([
|
|
61
|
+
tx1,
|
|
62
|
+
tx2
|
|
63
|
+
]);
|
|
64
|
+
await pool.markAsMined([
|
|
65
|
+
await tx1.getTxHash()
|
|
66
|
+
], 1);
|
|
67
|
+
await pool.markMinedAsPending([
|
|
68
|
+
await tx1.getTxHash()
|
|
69
|
+
]);
|
|
44
70
|
await expect(pool.getMinedTxHashes()).resolves.toEqual([]);
|
|
45
71
|
const pending = await pool.getPendingTxHashes();
|
|
46
72
|
expect(pending).toHaveLength(2);
|
|
47
|
-
expect(pending).toEqual(expect.arrayContaining([
|
|
73
|
+
expect(pending).toEqual(expect.arrayContaining([
|
|
74
|
+
await tx1.getTxHash(),
|
|
75
|
+
await tx2.getTxHash()
|
|
76
|
+
]));
|
|
48
77
|
});
|
|
49
|
-
it('Only marks txs as pending if they are known', async ()
|
|
78
|
+
it('Only marks txs as pending if they are known', async ()=>{
|
|
50
79
|
const tx1 = await mockTx(1);
|
|
51
80
|
// simulate a situation where not all peers have all the txs
|
|
52
81
|
const tx2 = await mockTx(2);
|
|
53
82
|
const someTxHashThatThisPeerDidNotSee = await tx2.getTxHash();
|
|
54
|
-
await pool.addTxs([
|
|
83
|
+
await pool.addTxs([
|
|
84
|
+
tx1
|
|
85
|
+
]);
|
|
55
86
|
// this peer knows that tx2 was mined, but it does not have the tx object
|
|
56
|
-
await pool.markAsMined([
|
|
87
|
+
await pool.markAsMined([
|
|
88
|
+
await tx1.getTxHash(),
|
|
89
|
+
someTxHashThatThisPeerDidNotSee
|
|
90
|
+
], 1);
|
|
57
91
|
expect(await pool.getMinedTxHashes()).toEqual(expect.arrayContaining([
|
|
58
|
-
[
|
|
59
|
-
|
|
92
|
+
[
|
|
93
|
+
await tx1.getTxHash(),
|
|
94
|
+
1
|
|
95
|
+
],
|
|
96
|
+
[
|
|
97
|
+
someTxHashThatThisPeerDidNotSee,
|
|
98
|
+
1
|
|
99
|
+
]
|
|
60
100
|
]));
|
|
61
101
|
// reorg: both txs should now become available again
|
|
62
|
-
await pool.markMinedAsPending([
|
|
102
|
+
await pool.markMinedAsPending([
|
|
103
|
+
await tx1.getTxHash(),
|
|
104
|
+
someTxHashThatThisPeerDidNotSee
|
|
105
|
+
]);
|
|
63
106
|
await expect(pool.getMinedTxHashes()).resolves.toEqual([]);
|
|
64
|
-
await expect(pool.getPendingTxHashes()).resolves.toEqual([
|
|
107
|
+
await expect(pool.getPendingTxHashes()).resolves.toEqual([
|
|
108
|
+
await tx1.getTxHash()
|
|
109
|
+
]); // tx2 is not in the pool
|
|
65
110
|
});
|
|
66
|
-
it('Returns all transactions in the pool', async ()
|
|
111
|
+
it('Returns all transactions in the pool', async ()=>{
|
|
67
112
|
const tx1 = await mockTx(1);
|
|
68
113
|
const tx2 = await mockTx(2);
|
|
69
114
|
const tx3 = await mockTx(3);
|
|
70
|
-
await pool.addTxs([
|
|
115
|
+
await pool.addTxs([
|
|
116
|
+
tx1,
|
|
117
|
+
tx2,
|
|
118
|
+
tx3
|
|
119
|
+
]);
|
|
71
120
|
const poolTxs = await pool.getAllTxs();
|
|
72
121
|
expect(poolTxs).toHaveLength(3);
|
|
73
|
-
expect(poolTxs).toEqual(expect.arrayContaining([
|
|
122
|
+
expect(poolTxs).toEqual(expect.arrayContaining([
|
|
123
|
+
tx1,
|
|
124
|
+
tx2,
|
|
125
|
+
tx3
|
|
126
|
+
]));
|
|
74
127
|
});
|
|
75
|
-
it('Returns all txHashes in the pool', async ()
|
|
128
|
+
it('Returns all txHashes in the pool', async ()=>{
|
|
76
129
|
const tx1 = await mockTx(1);
|
|
77
130
|
const tx2 = await mockTx(2);
|
|
78
131
|
const tx3 = await mockTx(3);
|
|
79
|
-
await pool.addTxs([
|
|
132
|
+
await pool.addTxs([
|
|
133
|
+
tx1,
|
|
134
|
+
tx2,
|
|
135
|
+
tx3
|
|
136
|
+
]);
|
|
80
137
|
const poolTxHashes = await pool.getAllTxHashes();
|
|
81
138
|
expect(poolTxHashes).toHaveLength(3);
|
|
82
|
-
expect(poolTxHashes).toEqual(expect.arrayContaining([
|
|
139
|
+
expect(poolTxHashes).toEqual(expect.arrayContaining([
|
|
140
|
+
await tx1.getTxHash(),
|
|
141
|
+
await tx2.getTxHash(),
|
|
142
|
+
await tx3.getTxHash()
|
|
143
|
+
]));
|
|
83
144
|
});
|
|
84
|
-
it('Returns pending tx hashes sorted by priority', async ()
|
|
85
|
-
const withPriorityFee = (tx, fee)
|
|
145
|
+
it('Returns pending tx hashes sorted by priority', async ()=>{
|
|
146
|
+
const withPriorityFee = (tx, fee)=>{
|
|
86
147
|
unfreeze(tx.data.constants.txContext.gasSettings).maxPriorityFeesPerGas = new GasFees(fee, fee);
|
|
87
148
|
return tx;
|
|
88
149
|
};
|
|
@@ -90,10 +151,19 @@ export function describeTxPool(getTxPool) {
|
|
|
90
151
|
const tx2 = withPriorityFee(await mockTx(1), 100);
|
|
91
152
|
const tx3 = withPriorityFee(await mockTx(2), 200);
|
|
92
153
|
const tx4 = withPriorityFee(await mockTx(3), 3000);
|
|
93
|
-
await pool.addTxs([
|
|
154
|
+
await pool.addTxs([
|
|
155
|
+
tx1,
|
|
156
|
+
tx2,
|
|
157
|
+
tx3,
|
|
158
|
+
tx4
|
|
159
|
+
]);
|
|
94
160
|
const poolTxHashes = await pool.getPendingTxHashes();
|
|
95
161
|
expect(poolTxHashes).toHaveLength(4);
|
|
96
|
-
expect(poolTxHashes).toEqual(await Promise.all([
|
|
162
|
+
expect(poolTxHashes).toEqual(await Promise.all([
|
|
163
|
+
tx4,
|
|
164
|
+
tx1,
|
|
165
|
+
tx3,
|
|
166
|
+
tx2
|
|
167
|
+
].map((tx)=>tx.getTxHash())));
|
|
97
168
|
});
|
|
98
169
|
}
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcG9vbF90ZXN0X3N1aXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sL3R4X3Bvb2xfdGVzdF9zdWl0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUluRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQXVCO0lBQ3BELElBQUksSUFBWSxDQUFDO0lBRWpCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDL0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLEVBQUUsQ0FBQztRQUUzQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxNQUFNLE1BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEYsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMs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
|
package/dest/mocks/index.js
CHANGED
|
@@ -13,36 +13,45 @@ import { createLibp2p } from 'libp2p';
|
|
|
13
13
|
import { BootstrapNode } from '../bootstrap/bootstrap.js';
|
|
14
14
|
import { DiscV5Service } from '../services/discv5/discV5_service.js';
|
|
15
15
|
import { LibP2PService } from '../services/libp2p/libp2p_service.js';
|
|
16
|
-
import { ReqRespSubProtocol, noopValidator
|
|
16
|
+
import { ReqRespSubProtocol, noopValidator } from '../services/reqresp/interface.js';
|
|
17
17
|
import { pingHandler, statusHandler } from '../services/reqresp/protocols/index.js';
|
|
18
18
|
import { ReqResp } from '../services/reqresp/reqresp.js';
|
|
19
19
|
/**
|
|
20
20
|
* Creates a libp2p node, pre configured.
|
|
21
21
|
* @param boostrapAddrs - an optional list of bootstrap addresses
|
|
22
22
|
* @returns Lip2p node
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
port = port ?? (await getPort());
|
|
23
|
+
*/ export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableGossipSub = false, start = true) {
|
|
24
|
+
port = port ?? await getPort();
|
|
26
25
|
const options = {
|
|
27
26
|
start,
|
|
28
27
|
addresses: {
|
|
29
|
-
listen: [
|
|
30
|
-
|
|
28
|
+
listen: [
|
|
29
|
+
`/ip4/0.0.0.0/tcp/${port}`
|
|
30
|
+
],
|
|
31
|
+
announce: [
|
|
32
|
+
`/ip4/0.0.0.0/tcp/${port}`
|
|
33
|
+
]
|
|
31
34
|
},
|
|
32
|
-
connectionEncryption: [
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
connectionEncryption: [
|
|
36
|
+
noise()
|
|
37
|
+
],
|
|
38
|
+
streamMuxers: [
|
|
39
|
+
yamux()
|
|
40
|
+
],
|
|
41
|
+
transports: [
|
|
42
|
+
tcp()
|
|
43
|
+
],
|
|
35
44
|
services: {
|
|
36
45
|
identify: identify({
|
|
37
|
-
protocolPrefix: 'aztec'
|
|
38
|
-
})
|
|
39
|
-
}
|
|
46
|
+
protocolPrefix: 'aztec'
|
|
47
|
+
})
|
|
48
|
+
}
|
|
40
49
|
};
|
|
41
50
|
if (boostrapAddrs.length > 0) {
|
|
42
51
|
options.peerDiscovery = [
|
|
43
52
|
bootstrap({
|
|
44
|
-
list: boostrapAddrs
|
|
45
|
-
})
|
|
53
|
+
list: boostrapAddrs
|
|
54
|
+
})
|
|
46
55
|
];
|
|
47
56
|
}
|
|
48
57
|
if (peerId) {
|
|
@@ -50,7 +59,7 @@ export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableG
|
|
|
50
59
|
}
|
|
51
60
|
if (enableGossipSub) {
|
|
52
61
|
options.services.pubsub = gossipsub({
|
|
53
|
-
allowPublishToZeroTopicPeers: true
|
|
62
|
+
allowPublishToZeroTopicPeers: true
|
|
54
63
|
});
|
|
55
64
|
}
|
|
56
65
|
return await createLibp2p(options);
|
|
@@ -60,9 +69,8 @@ export async function createLibp2pNode(boostrapAddrs = [], peerId, port, enableG
|
|
|
60
69
|
* P2P functionality is operational, however everything else is default
|
|
61
70
|
*
|
|
62
71
|
*
|
|
63
|
-
*/
|
|
64
|
-
|
|
65
|
-
peerId = peerId ?? (await createSecp256k1PeerId());
|
|
72
|
+
*/ export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2BlockSource, worldStateSynchronizer, epochCache, mempools, telemetry, port = 0, peerId) {
|
|
73
|
+
peerId = peerId ?? await createSecp256k1PeerId();
|
|
66
74
|
const config = {
|
|
67
75
|
tcpAnnounceAddress: `127.0.0.1:${port}`,
|
|
68
76
|
udpAnnounceAddress: `127.0.0.1:${port}`,
|
|
@@ -73,7 +81,7 @@ export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2
|
|
|
73
81
|
minPeerCount: 1,
|
|
74
82
|
maxPeerCount: 5,
|
|
75
83
|
p2pEnabled: true,
|
|
76
|
-
peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex')
|
|
84
|
+
peerIdPrivateKey: Buffer.from(peerId.privateKey).toString('hex')
|
|
77
85
|
};
|
|
78
86
|
const discoveryService = new DiscV5Service(peerId, config, telemetry);
|
|
79
87
|
const proofVerifier = new AlwaysTrueCircuitVerifier();
|
|
@@ -85,9 +93,9 @@ export async function createTestLibP2PService(clientType, boostrapAddrs = [], l2
|
|
|
85
93
|
export const MOCK_SUB_PROTOCOL_HANDLERS = {
|
|
86
94
|
[ReqRespSubProtocol.PING]: pingHandler,
|
|
87
95
|
[ReqRespSubProtocol.STATUS]: statusHandler,
|
|
88
|
-
[ReqRespSubProtocol.TX]: (_msg)
|
|
89
|
-
[ReqRespSubProtocol.GOODBYE]: (_msg)
|
|
90
|
-
[ReqRespSubProtocol.BLOCK]: (_msg)
|
|
96
|
+
[ReqRespSubProtocol.TX]: (_msg)=>Promise.resolve(Buffer.from('tx')),
|
|
97
|
+
[ReqRespSubProtocol.GOODBYE]: (_msg)=>Promise.resolve(Buffer.from('goodbye')),
|
|
98
|
+
[ReqRespSubProtocol.BLOCK]: (_msg)=>Promise.resolve(Buffer.from('block'))
|
|
91
99
|
};
|
|
92
100
|
// By default, all requests are valid
|
|
93
101
|
// If you want to test an invalid response, you can override the validator
|
|
@@ -96,41 +104,43 @@ export const MOCK_SUB_PROTOCOL_VALIDATORS = {
|
|
|
96
104
|
[ReqRespSubProtocol.STATUS]: noopValidator,
|
|
97
105
|
[ReqRespSubProtocol.TX]: noopValidator,
|
|
98
106
|
[ReqRespSubProtocol.GOODBYE]: noopValidator,
|
|
99
|
-
[ReqRespSubProtocol.BLOCK]: noopValidator
|
|
107
|
+
[ReqRespSubProtocol.BLOCK]: noopValidator
|
|
100
108
|
};
|
|
101
109
|
/**
|
|
102
110
|
* @param numberOfNodes - the number of nodes to create
|
|
103
111
|
* @returns An array of the created nodes
|
|
104
|
-
*/
|
|
105
|
-
|
|
106
|
-
return timesParallel(numberOfNodes, () => createReqResp(peerScoring));
|
|
112
|
+
*/ export const createNodes = (peerScoring, numberOfNodes)=>{
|
|
113
|
+
return timesParallel(numberOfNodes, ()=>createReqResp(peerScoring));
|
|
107
114
|
};
|
|
108
|
-
export const startNodes = async (nodes, subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS, subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS)
|
|
109
|
-
for (const node of nodes)
|
|
115
|
+
export const startNodes = async (nodes, subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS, subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS)=>{
|
|
116
|
+
for (const node of nodes){
|
|
110
117
|
await node.req.start(subProtocolHandlers, subProtocolValidators);
|
|
111
118
|
}
|
|
112
119
|
};
|
|
113
|
-
export const stopNodes = async (nodes)
|
|
114
|
-
const stopPromises = nodes.flatMap(node
|
|
120
|
+
export const stopNodes = async (nodes)=>{
|
|
121
|
+
const stopPromises = nodes.flatMap((node)=>[
|
|
122
|
+
node.req.stop(),
|
|
123
|
+
node.p2p.stop()
|
|
124
|
+
]);
|
|
115
125
|
await Promise.all(stopPromises);
|
|
116
126
|
};
|
|
117
127
|
// Create a req resp node, exposing the underlying p2p node
|
|
118
|
-
export const createReqResp = async (peerScoring)
|
|
128
|
+
export const createReqResp = async (peerScoring)=>{
|
|
119
129
|
const p2p = await createLibp2pNode();
|
|
120
130
|
const config = {
|
|
121
131
|
overallRequestTimeoutMs: 4000,
|
|
122
|
-
individualRequestTimeoutMs: 2000
|
|
132
|
+
individualRequestTimeoutMs: 2000
|
|
123
133
|
};
|
|
124
134
|
const req = new ReqResp(config, p2p, peerScoring);
|
|
125
135
|
return {
|
|
126
136
|
p2p,
|
|
127
|
-
req
|
|
137
|
+
req
|
|
128
138
|
};
|
|
129
139
|
};
|
|
130
140
|
// Given a node list; hand shake all of the nodes with each other
|
|
131
|
-
export const connectToPeers = async (nodes)
|
|
132
|
-
for (const node of nodes)
|
|
133
|
-
for (const otherNode of nodes)
|
|
141
|
+
export const connectToPeers = async (nodes)=>{
|
|
142
|
+
for (const node of nodes){
|
|
143
|
+
for (const otherNode of nodes){
|
|
134
144
|
if (node === otherNode) {
|
|
135
145
|
continue;
|
|
136
146
|
}
|
|
@@ -159,7 +169,7 @@ export function createBootstrapNodeConfig(privateKey, port) {
|
|
|
159
169
|
minPeerCount: 10,
|
|
160
170
|
maxPeerCount: 100,
|
|
161
171
|
dataDirectory: undefined,
|
|
162
|
-
dataStoreMapSizeKB: 0
|
|
172
|
+
dataStoreMapSizeKB: 0
|
|
163
173
|
};
|
|
164
174
|
}
|
|
165
175
|
export function createBootstrapNodeFromPrivateKey(privateKey, port, telemetry = getTelemetryClient()) {
|
|
@@ -178,4 +188,3 @@ async function startBootstrapNode(config, telemetry) {
|
|
|
178
188
|
await bootstrapNode.start(config);
|
|
179
189
|
return bootstrapNode;
|
|
180
190
|
}
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9ja3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQXdCLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQW1DLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUdyRSxPQUFPLEVBQ0wsa0JBQWtCLEVBR2xCLGFBQWEsR0FDZCxNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDcEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3pE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
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PeerErrorSeverity } from '@aztec/circuit-types';
|
|
2
2
|
export class AttestationValidator {
|
|
3
|
-
|
|
3
|
+
epochCache;
|
|
4
|
+
constructor(epochCache){
|
|
4
5
|
this.epochCache = epochCache;
|
|
5
6
|
}
|
|
6
7
|
async validate(message) {
|
|
@@ -10,10 +11,9 @@ export class AttestationValidator {
|
|
|
10
11
|
return PeerErrorSeverity.HighToleranceError;
|
|
11
12
|
}
|
|
12
13
|
const attester = await message.getSender();
|
|
13
|
-
if (!
|
|
14
|
+
if (!await this.epochCache.isInCommittee(attester)) {
|
|
14
15
|
return PeerErrorSeverity.HighToleranceError;
|
|
15
16
|
}
|
|
16
17
|
return undefined;
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9hdHRlc3RhdGlvbl92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QyxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR25HLE1BQU0sT0FBTyxvQkFBb0I7SUFHL0IsWUFBWSxVQUFzQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUF5QjtRQUN0QyxNQUFNLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBRXpGLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0RixJQUFJLGdCQUFnQixLQUFLLFdBQVcsSUFBSSxnQkFBZ0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0RSxPQUFPLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO1FBQzlDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxPQUFPLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0YifQ==
|
|
@@ -1,2 +1 @@
|
|
|
1
1
|
export * from './attestation_validator.js';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYXR0ZXN0YXRpb25fdmFsaWRhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUMifQ==
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PeerErrorSeverity } from '@aztec/circuit-types';
|
|
2
2
|
export class BlockProposalValidator {
|
|
3
|
-
|
|
3
|
+
epochCache;
|
|
4
|
+
constructor(epochCache){
|
|
4
5
|
this.epochCache = epochCache;
|
|
5
6
|
}
|
|
6
7
|
async validate(block) {
|
|
@@ -18,4 +19,3 @@ export class BlockProposalValidator {
|
|
|
18
19
|
return undefined;
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci9ibG9ja19wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF5QyxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2hHLE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsWUFBWSxVQUFzQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFvQjtRQUNqQyxNQUFNLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQzVELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBRXpELDZEQUE2RDtRQUM3RCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEYsSUFBSSxnQkFBZ0IsS0FBSyxXQUFXLElBQUksZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEUsT0FBTyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQztRQUM5QyxDQUFDO1FBRUQscUVBQXFFO1FBQ3JFLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3hFLE9BQU8saUJBQWlCLENBQUMsa0JBQWtCLENBQUM7UUFDOUMsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRiJ9
|
|
@@ -1,2 +1 @@
|
|
|
1
1
|
export * from './block_proposal_validator.js';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsK0JBQStCLENBQUMifQ==
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PeerErrorSeverity } from '@aztec/circuit-types';
|
|
2
2
|
export class EpochProofQuoteValidator {
|
|
3
|
-
|
|
3
|
+
epochCache;
|
|
4
|
+
constructor(epochCache){
|
|
4
5
|
this.epochCache = epochCache;
|
|
5
6
|
}
|
|
6
7
|
validate(message) {
|
|
@@ -13,4 +14,3 @@ export class EpochProofQuoteValidator {
|
|
|
13
14
|
return Promise.resolve(undefined);
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2hfcHJvb2ZfcXVvdGVfdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2Vwb2NoX3Byb29mX3F1b3RlX3ZhbGlkYXRvci9lcG9jaF9wcm9vZl9xdW90ZV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEyQyxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2xHLE1BQU0sT0FBTyx3QkFBd0I7SUFHbkMsWUFBWSxVQUFzQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQXdCO1FBQy9CLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFdkQsNERBQTREO1FBQzVELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2xELElBQUksWUFBWSxLQUFLLEtBQUssSUFBSSxZQUFZLEtBQUssS0FBSyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzFELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNGIn0=
|
|
@@ -1,2 +1 @@
|
|
|
1
1
|
export { EpochProofQuoteValidator } from './epoch_proof_quote_validator.js';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvZXBvY2hfcHJvb2ZfcXVvdGVfdmFsaWRhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDIn0=
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export * from './tx_validator/index.js';
|
|
2
2
|
export * from './block_proposal_validator/index.js';
|
|
3
3
|
export * from './attestation_validator/index.js';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsa0NBQWtDLENBQUMifQ==
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
var _AggregateTxValidator_validators;
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
1
|
export class AggregateTxValidator {
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
#validators;
|
|
3
|
+
constructor(...validators){
|
|
6
4
|
if (validators.length === 0) {
|
|
7
5
|
throw new Error('At least one validator must be provided');
|
|
8
6
|
}
|
|
9
|
-
|
|
7
|
+
this.#validators = validators;
|
|
10
8
|
}
|
|
11
9
|
async validateTx(tx) {
|
|
12
|
-
const aggregate = {
|
|
13
|
-
|
|
10
|
+
const aggregate = {
|
|
11
|
+
result: 'valid',
|
|
12
|
+
reason: []
|
|
13
|
+
};
|
|
14
|
+
for (const validator of this.#validators){
|
|
14
15
|
const result = await validator.validateTx(tx);
|
|
15
16
|
if (result.result === 'invalid') {
|
|
16
17
|
aggregate.result = 'invalid';
|
|
17
18
|
aggregate.reason.push(...result.reason);
|
|
18
|
-
}
|
|
19
|
-
else if (result.result === 'skipped') {
|
|
19
|
+
} else if (result.result === 'skipped') {
|
|
20
20
|
if (aggregate.result === 'valid') {
|
|
21
21
|
aggregate.result = 'skipped';
|
|
22
22
|
}
|
|
@@ -29,5 +29,3 @@ export class AggregateTxValidator {
|
|
|
29
29
|
return aggregate;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
_AggregateTxValidator_validators = new WeakMap();
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvYWdncmVnYXRlX3R4X3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFBWSxHQUFHLFVBQTRCO1FBRDNDLG1EQUE4QjtRQUU1QixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCx1QkFBQSxJQUFJLG9DQUFlLFVBQVUsTUFBQSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUs7UUFDcEIsTUFBTSxTQUFTLEdBQTBDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDekYsS0FBSyxNQUFNLFNBQVMsSUFBSSx1QkFBQSxJQUFJLHdDQUFZLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNoQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztnQkFDN0IsU0FBUyxDQUFDLE1BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0MsQ0FBQztpQkFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDakMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsU0FBUyxDQUFDLE1BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDakMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLFNBQStCLENBQUM7SUFDekMsQ0FBQztDQUNGIn0=
|
|
@@ -1,21 +1,26 @@
|
|
|
1
|
-
var _BlockHeaderTxValidator_log, _BlockHeaderTxValidator_archiveSource;
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
1
|
import { Tx } from '@aztec/circuit-types';
|
|
4
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
5
3
|
export class BlockHeaderTxValidator {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
#log = createLogger('p2p:tx_validator:tx_block_header');
|
|
5
|
+
#archiveSource;
|
|
6
|
+
constructor(archiveSource){
|
|
7
|
+
this.#archiveSource = archiveSource;
|
|
10
8
|
}
|
|
11
9
|
async validateTx(tx) {
|
|
12
|
-
const [index] = await
|
|
10
|
+
const [index] = await this.#archiveSource.getArchiveIndices([
|
|
11
|
+
await tx.data.constants.historicalHeader.hash()
|
|
12
|
+
]);
|
|
13
13
|
if (index === undefined) {
|
|
14
|
-
|
|
15
|
-
return {
|
|
14
|
+
this.#log.warn(`Rejecting tx ${await Tx.getHash(tx)} for referencing an unknown block header`);
|
|
15
|
+
return {
|
|
16
|
+
result: 'invalid',
|
|
17
|
+
reason: [
|
|
18
|
+
'Block header not found'
|
|
19
|
+
]
|
|
20
|
+
};
|
|
16
21
|
}
|
|
17
|
-
return {
|
|
22
|
+
return {
|
|
23
|
+
result: 'valid'
|
|
24
|
+
};
|
|
18
25
|
}
|
|
19
26
|
}
|
|
20
|
-
_BlockHeaderTxValidator_log = new WeakMap(), _BlockHeaderTxValidator_archiveSource = new WeakMap();
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfaGVhZGVyX3ZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvYmxvY2tfaGVhZGVyX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQTZDLE1BQU0sc0JBQXNCLENBQUM7QUFFakcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTXJELE1BQU0sT0FBTyxzQkFBc0I7SUFJakMsWUFBWSxhQUE0QjtRQUh4QyxzQ0FBTyxZQUFZLENBQUMsa0NBQWtDLENBQUMsRUFBQztRQUN4RCx3REFBOEI7UUFHNUIsdUJBQUEsSUFBSSx5Q0FBa0IsYUFBYSxNQUFBLENBQUM7SUFDdEMsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBSztRQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSx1QkFBQSxJQUFJLDZDQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4Qix1QkFBQSxJQUFJLG1DQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7WUFDL0YsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO1FBQ25FLENBQUM7UUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7Q0FDRiJ9
|