@aztec/p2p 4.0.0-nightly.20260111 → 4.0.0-nightly.20260113
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/client/interface.d.ts +18 -5
- package/dest/client/interface.d.ts.map +1 -1
- package/dest/client/p2p_client.d.ts +9 -12
- package/dest/client/p2p_client.d.ts.map +1 -1
- package/dest/client/p2p_client.js +59 -103
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +225 -262
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +113 -108
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
- package/dest/mem_pools/attestation_pool/mocks.d.ts +7 -6
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
- package/dest/mem_pools/attestation_pool/mocks.js +9 -8
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.js +12 -10
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
- package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +5 -5
- package/dest/msg_validators/index.d.ts +2 -2
- package/dest/msg_validators/index.d.ts.map +1 -1
- package/dest/msg_validators/index.js +1 -1
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
- package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
- package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/index.js +3 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
- package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
- package/dest/msg_validators/{block_proposal_validator/block_proposal_validator.js → proposal_validator/proposal_validator.js} +19 -21
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
- package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +183 -0
- package/dest/services/dummy_service.d.ts +6 -2
- package/dest/services/dummy_service.d.ts.map +1 -1
- package/dest/services/dummy_service.js +3 -0
- package/dest/services/encoding.d.ts +1 -1
- package/dest/services/encoding.d.ts.map +1 -1
- package/dest/services/encoding.js +4 -2
- package/dest/services/libp2p/libp2p_service.d.ts +26 -10
- package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
- package/dest/services/libp2p/libp2p_service.js +218 -88
- package/dest/services/service.d.ts +16 -3
- package/dest/services/service.d.ts.map +1 -1
- package/dest/testbench/p2p_client_testbench_worker.js +25 -11
- package/dest/testbench/worker_client_manager.d.ts +1 -1
- package/dest/testbench/worker_client_manager.d.ts.map +1 -1
- package/dest/testbench/worker_client_manager.js +6 -1
- package/package.json +14 -14
- package/src/client/interface.ts +19 -4
- package/src/client/p2p_client.ts +69 -110
- package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
- package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +231 -287
- package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +162 -140
- package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
- package/src/mem_pools/attestation_pool/mocks.ts +13 -9
- package/src/msg_validators/attestation_validator/attestation_validator.ts +16 -13
- package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +7 -7
- package/src/msg_validators/index.ts +1 -1
- package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
- package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
- package/src/msg_validators/proposal_validator/index.ts +3 -0
- package/src/msg_validators/{block_proposal_validator/block_proposal_validator.ts → proposal_validator/proposal_validator.ts} +23 -28
- package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +206 -0
- package/src/services/dummy_service.ts +6 -0
- package/src/services/encoding.ts +3 -1
- package/src/services/libp2p/libp2p_service.ts +258 -94
- package/src/services/service.ts +19 -4
- package/src/testbench/p2p_client_testbench_worker.ts +34 -11
- package/src/testbench/worker_client_manager.ts +6 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
- 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/block_proposal_validator/index.js +0 -1
- package/src/msg_validators/block_proposal_validator/index.ts +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { EthAddress, L2BlockId } from '@aztec/stdlib/block';
|
|
2
2
|
import type { P2PApiFull } from '@aztec/stdlib/interfaces/server';
|
|
3
|
-
import type {
|
|
3
|
+
import type { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PClientType } from '@aztec/stdlib/p2p';
|
|
4
4
|
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
5
5
|
import type { PeerId } from '@libp2p/interface';
|
|
6
6
|
import type { ENR } from '@nethermindeth/enr';
|
|
7
7
|
import type { P2PConfig } from '../config.js';
|
|
8
8
|
import type { AuthRequest, StatusMessage } from '../services/index.js';
|
|
9
9
|
import type { ReqRespSubProtocol, ReqRespSubProtocolHandler, ReqRespSubProtocolValidators } from '../services/reqresp/interface.js';
|
|
10
|
-
import type { P2PBlockReceivedCallback } from '../services/service.js';
|
|
10
|
+
import type { P2PBlockReceivedCallback, P2PCheckpointReceivedCallback } from '../services/service.js';
|
|
11
11
|
/**
|
|
12
12
|
* Enum defining the possible states of the p2p client.
|
|
13
13
|
*/
|
|
@@ -40,8 +40,14 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
|
|
|
40
40
|
* @param proposal - the block proposal
|
|
41
41
|
*/
|
|
42
42
|
broadcastProposal(proposal: BlockProposal): Promise<void>;
|
|
43
|
-
/**
|
|
44
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Broadcasts a checkpoint proposal (last block in a checkpoint) to other peers.
|
|
45
|
+
*
|
|
46
|
+
* @param proposal - the checkpoint proposal
|
|
47
|
+
*/
|
|
48
|
+
broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void>;
|
|
49
|
+
/** Broadcasts checkpoint attestations to other peers. */
|
|
50
|
+
broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void>;
|
|
45
51
|
/**
|
|
46
52
|
* Registers a callback from the validator client that determines how to behave when
|
|
47
53
|
* foreign block proposals are received
|
|
@@ -49,6 +55,13 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
|
|
|
49
55
|
* @param handler - A function taking a received block proposal and producing an attestation
|
|
50
56
|
*/
|
|
51
57
|
registerBlockProposalHandler(callback: P2PBlockReceivedCallback): void;
|
|
58
|
+
/**
|
|
59
|
+
* Registers a callback from the validator client that determines how to behave when
|
|
60
|
+
* foreign checkpoint proposals are received
|
|
61
|
+
*
|
|
62
|
+
* @param handler - A function taking a received checkpoint proposal and producing attestations
|
|
63
|
+
*/
|
|
64
|
+
registerCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
|
|
52
65
|
/**
|
|
53
66
|
* Request a list of transactions from another peer by their tx hashes.
|
|
54
67
|
* @param txHashes - Hashes of the txs to query.
|
|
@@ -154,4 +167,4 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
|
|
|
154
167
|
/** If node running this P2P stack is validator, passes in validator address to P2P layer */
|
|
155
168
|
registerThisValidatorAddresses(address: EthAddress[]): void;
|
|
156
169
|
};
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2ludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pILE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxFQUNWLGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsNEJBQTRCLEVBQzdCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0Rzs7R0FFRztBQUNILG9CQUFZLGNBQWM7SUFDeEIsSUFBSSxJQUFBO0lBQ0osUUFBUSxJQUFBO0lBQ1IsT0FBTyxJQUFBO0lBQ1AsT0FBTyxJQUFBO0NBQ1I7QUFFRDs7R0FFRztBQUNILE1BQU0sV0FBVyxZQUFZO0lBQzNCOztPQUVHO0lBQ0gsS0FBSyxFQUFFLGNBQWMsQ0FBQztJQUN0Qjs7T0FFRztJQUNILGVBQWUsRUFBRSxTQUFTLENBQUM7Q0FDNUI7QUFFRDs7SUFFSTtBQUNKLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRztJQUM5RTs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFMUQ7Ozs7T0FJRztJQUNILDJCQUEyQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFekUseURBQXlEO0lBQ3pELCtCQUErQixDQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV0Rjs7Ozs7T0FLRztJQUdILDRCQUE0QixDQUFDLFFBQVEsRUFBRSx3QkFBd0IsR0FBRyxJQUFJLENBQUM7SUFFdkU7Ozs7O09BS0c7SUFDSCxpQ0FBaUMsQ0FBQyxRQUFRLEVBQUUsNkJBQTZCLEdBQUcsSUFBSSxDQUFDO0lBRWpGOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFMUU7OztRQUdJO0lBQ0osTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTlCOzs7O1FBSUk7SUFDSixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV6Qzs7OztRQUlJO0lBQ0osU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFN0M7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUU3RDs7OztPQUlHO0lBQ0gsb0JBQW9CLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFdEU7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFckQ7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFaEc7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUU3RDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRWxGLDJEQUEyRDtJQUMzRCxpQkFBaUIsSUFBSSxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUUvQyx3REFBd0Q7SUFDeEQsaUJBQWlCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXJDOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFekQ7OztPQUdHO0lBQ0gsS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV2Qjs7O09BR0c7SUFDSCxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXRCOzs7T0FHRztJQUNILE9BQU8sSUFBSSxPQUFPLENBQUM7SUFFbkI7O09BRUc7SUFDSCxTQUFTLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRW5DOztPQUVHO0lBQ0gsTUFBTSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUM7SUFFMUIsK0JBQStCO0lBQy9CLFdBQVcsSUFBSSxJQUFJLENBQUM7SUFFcEIsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTNELDhCQUE4QjtJQUM5QixRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVuQyxxQkFBcUI7SUFDckIsS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV2QixxQkFBcUIsQ0FDbkIsV0FBVyxFQUFFLGtCQUFrQixFQUMvQixPQUFPLEVBQUUseUJBQXlCLEVBQ2xDLFNBQVMsQ0FBQyxFQUFFLDRCQUE0QixDQUFDLGtCQUFrQixDQUFDLEdBQzNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqQix5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTVGLDRGQUE0RjtJQUM1Riw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzdELENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/client/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/client/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
|
4
4
|
import { type EthAddress, type L2BlockSource, type L2BlockStreamEvent, type L2Tips } from '@aztec/stdlib/block';
|
|
5
5
|
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
6
6
|
import { type PeerInfo } from '@aztec/stdlib/interfaces/server';
|
|
7
|
-
import {
|
|
7
|
+
import { type BlockProposal, CheckpointAttestation, type CheckpointProposal, type P2PClientType } from '@aztec/stdlib/p2p';
|
|
8
8
|
import type { Tx, TxHash } from '@aztec/stdlib/tx';
|
|
9
9
|
import { type TelemetryClient, WithTracer } from '@aztec/telemetry-client';
|
|
10
10
|
import type { PeerId } from '@libp2p/interface';
|
|
@@ -13,7 +13,7 @@ import { type P2PConfig } from '../config.js';
|
|
|
13
13
|
import type { MemPools } from '../mem_pools/interface.js';
|
|
14
14
|
import type { AuthRequest, StatusMessage } from '../services/index.js';
|
|
15
15
|
import { ReqRespSubProtocol, type ReqRespSubProtocolHandler, type ReqRespSubProtocolValidators } from '../services/reqresp/interface.js';
|
|
16
|
-
import type { P2PBlockReceivedCallback, P2PService } from '../services/service.js';
|
|
16
|
+
import type { P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PService } from '../services/service.js';
|
|
17
17
|
import { TxCollection } from '../services/tx_collection/tx_collection.js';
|
|
18
18
|
import { TxProvider } from '../services/tx_provider.js';
|
|
19
19
|
import { type P2P, type P2PSyncState } from './interface.js';
|
|
@@ -37,10 +37,7 @@ export declare class P2PClient<T extends P2PClientType = P2PClientType.Full> ext
|
|
|
37
37
|
private latestBlockNumberAtStart;
|
|
38
38
|
private provenBlockNumberAtStart;
|
|
39
39
|
private finalizedBlockNumberAtStart;
|
|
40
|
-
private
|
|
41
|
-
private synchedLatestBlockNumber;
|
|
42
|
-
private synchedProvenBlockNumber;
|
|
43
|
-
private synchedFinalizedBlockNumber;
|
|
40
|
+
private l2Tips;
|
|
44
41
|
private synchedLatestSlot;
|
|
45
42
|
private txPool;
|
|
46
43
|
private attestationPool;
|
|
@@ -66,7 +63,6 @@ export declare class P2PClient<T extends P2PClientType = P2PClientType.Full> ext
|
|
|
66
63
|
updateP2PConfig(config: Partial<P2PConfig>): Promise<void>;
|
|
67
64
|
getL2Tips(): Promise<L2Tips>;
|
|
68
65
|
handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
|
|
69
|
-
private setBlockHash;
|
|
70
66
|
/**
|
|
71
67
|
* Starts the P2P client.
|
|
72
68
|
* @returns An empty promise signalling the synching process.
|
|
@@ -82,11 +78,12 @@ export declare class P2PClient<T extends P2PClientType = P2PClientType.Full> ext
|
|
|
82
78
|
/** Triggers a sync to the archiver. Used for testing. */
|
|
83
79
|
sync(): Promise<void>;
|
|
84
80
|
broadcastProposal(proposal: BlockProposal): Promise<void>;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
81
|
+
broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void>;
|
|
82
|
+
broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void>;
|
|
83
|
+
getCheckpointAttestationsForSlot(slot: SlotNumber, proposalId?: string): Promise<CheckpointAttestation[]>;
|
|
84
|
+
addCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void>;
|
|
89
85
|
registerBlockProposalHandler(handler: P2PBlockReceivedCallback): void;
|
|
86
|
+
registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void;
|
|
90
87
|
/**
|
|
91
88
|
* Uses the batched Request Response protocol to request a set of transactions from the network.
|
|
92
89
|
*/
|
|
@@ -196,4 +193,4 @@ export declare class P2PClient<T extends P2PClientType = P2PClientType.Full> ext
|
|
|
196
193
|
markTxsAsNonEvictable(txHashes: TxHash[]): Promise<void>;
|
|
197
194
|
handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
|
|
198
195
|
}
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9wMnBfY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBRTlFLE9BQU8sRUFDTCxLQUFLLFVBQVUsRUFFZixLQUFLLGFBQWEsRUFFbEIsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxNQUFNLEVBRVosTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBVyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pFLE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIscUJBQXFCLEVBQ3JCLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssYUFBYSxFQUNuQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQWMsS0FBSyxlQUFlLEVBQUUsVUFBVSxFQUFpQyxNQUFNLHlCQUF5QixDQUFDO0FBRXRILE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBdUIsTUFBTSxjQUFjLENBQUM7QUFFbkUsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLGFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p2p_client.d.ts","sourceRoot":"","sources":["../../src/client/p2p_client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"p2p_client.d.ts","sourceRoot":"","sources":["../../src/client/p2p_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -370,11 +370,12 @@ function applyDecs2203RFactory() {
|
|
|
370
370
|
function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
|
|
371
371
|
return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
|
|
372
372
|
}
|
|
373
|
-
var _dec, _initProto;
|
|
374
|
-
import { GENESIS_BLOCK_HEADER_HASH
|
|
373
|
+
var _dec, _dec1, _initProto;
|
|
374
|
+
import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
|
|
375
375
|
import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
376
376
|
import { createLogger } from '@aztec/foundation/log';
|
|
377
377
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
378
|
+
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
378
379
|
import { L2BlockStream } from '@aztec/stdlib/block';
|
|
379
380
|
import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
380
381
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
@@ -388,6 +389,10 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
388
389
|
[Attributes.SLOT_NUMBER]: proposal.slotNumber,
|
|
389
390
|
[Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
|
|
390
391
|
[Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
|
|
392
|
+
})), _dec1 = trackSpan('p2pClient.broadcastCheckpointProposal', async (proposal)=>({
|
|
393
|
+
[Attributes.SLOT_NUMBER]: proposal.slotNumber,
|
|
394
|
+
[Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
|
|
395
|
+
[Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
|
|
391
396
|
}));
|
|
392
397
|
/**
|
|
393
398
|
* The P2P client implementation.
|
|
@@ -405,6 +410,11 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
405
410
|
_dec,
|
|
406
411
|
2,
|
|
407
412
|
"broadcastProposal"
|
|
413
|
+
],
|
|
414
|
+
[
|
|
415
|
+
_dec1,
|
|
416
|
+
2,
|
|
417
|
+
"broadcastCheckpointProposal"
|
|
408
418
|
]
|
|
409
419
|
], []));
|
|
410
420
|
}
|
|
@@ -415,10 +425,7 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
415
425
|
latestBlockNumberAtStart;
|
|
416
426
|
provenBlockNumberAtStart;
|
|
417
427
|
finalizedBlockNumberAtStart;
|
|
418
|
-
|
|
419
|
-
synchedLatestBlockNumber;
|
|
420
|
-
synchedProvenBlockNumber;
|
|
421
|
-
synchedFinalizedBlockNumber;
|
|
428
|
+
l2Tips;
|
|
422
429
|
synchedLatestSlot;
|
|
423
430
|
txPool;
|
|
424
431
|
attestationPool;
|
|
@@ -443,7 +450,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
443
450
|
this.attestationPool = mempools.attestationPool;
|
|
444
451
|
this.txProvider = new TxProvider(this.txCollection, this.txPool, this, this.log.createChild('tx-provider'), this.telemetry);
|
|
445
452
|
// Default to collecting all txs when we see a valid proposal
|
|
446
|
-
// This can be overridden by the validator client to
|
|
453
|
+
// This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
|
|
454
|
+
// Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
|
|
447
455
|
// TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
|
|
448
456
|
// validator-client code into here so we can validate a proposal is reasonable.
|
|
449
457
|
this.registerBlockProposalHandler(async (block, sender)=>{
|
|
@@ -452,23 +460,19 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
452
460
|
const constants = this.txCollection.getConstants();
|
|
453
461
|
const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
|
|
454
462
|
const deadline = new Date(nextSlotTimestampSeconds * 1000);
|
|
455
|
-
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.
|
|
463
|
+
const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
|
|
456
464
|
if (!parentBlock) {
|
|
457
465
|
this.log.debug(`Cannot collect txs for proposal as parent block not found`);
|
|
458
|
-
return;
|
|
466
|
+
return false;
|
|
459
467
|
}
|
|
460
468
|
const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
|
|
461
469
|
await this.txProvider.getTxsForBlockProposal(block, blockNumber, {
|
|
462
470
|
pinnedPeer: sender,
|
|
463
471
|
deadline
|
|
464
472
|
});
|
|
465
|
-
return
|
|
473
|
+
return true;
|
|
466
474
|
});
|
|
467
|
-
|
|
468
|
-
this.synchedBlockHashes = store.openMap('p2p_pool_block_hashes');
|
|
469
|
-
this.synchedLatestBlockNumber = store.openSingleton('p2p_pool_last_l2_block');
|
|
470
|
-
this.synchedProvenBlockNumber = store.openSingleton('p2p_pool_last_proven_l2_block');
|
|
471
|
-
this.synchedFinalizedBlockNumber = store.openSingleton('p2p_pool_last_finalized_l2_block');
|
|
475
|
+
this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
|
|
472
476
|
this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
|
|
473
477
|
}
|
|
474
478
|
registerThisValidatorAddresses(addresses) {
|
|
@@ -490,65 +494,26 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
490
494
|
return Promise.resolve(this.p2pService.getPeers(includePending));
|
|
491
495
|
}
|
|
492
496
|
getL2BlockHash(number) {
|
|
493
|
-
return this.
|
|
497
|
+
return this.l2Tips.getL2BlockHash(number);
|
|
494
498
|
}
|
|
495
499
|
updateP2PConfig(config) {
|
|
496
500
|
this.txPool.updateConfig(config);
|
|
497
501
|
this.p2pService.updateConfig(config);
|
|
498
502
|
return Promise.resolve();
|
|
499
503
|
}
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
let latestBlockHash;
|
|
503
|
-
const provenBlockNumber = await this.getSyncedProvenBlockNum();
|
|
504
|
-
let provenBlockHash;
|
|
505
|
-
const finalizedBlockNumber = await this.getSyncedFinalizedBlockNum();
|
|
506
|
-
let finalizedBlockHash;
|
|
507
|
-
if (latestBlockNumber > 0) {
|
|
508
|
-
latestBlockHash = await this.synchedBlockHashes.getAsync(latestBlockNumber);
|
|
509
|
-
if (typeof latestBlockHash === 'undefined') {
|
|
510
|
-
throw new Error(`Block hash for latest block ${latestBlockNumber} not found in p2p client`);
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
if (provenBlockNumber > 0) {
|
|
514
|
-
provenBlockHash = await this.synchedBlockHashes.getAsync(provenBlockNumber);
|
|
515
|
-
if (typeof provenBlockHash === 'undefined') {
|
|
516
|
-
throw new Error(`Block hash for proven block ${provenBlockNumber} not found in p2p client`);
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
if (finalizedBlockNumber > 0) {
|
|
520
|
-
finalizedBlockHash = await this.synchedBlockHashes.getAsync(finalizedBlockNumber);
|
|
521
|
-
if (typeof finalizedBlockHash === 'undefined') {
|
|
522
|
-
throw new Error(`Block hash for finalized block ${finalizedBlockNumber} not found in p2p client`);
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
const genesisHash = GENESIS_BLOCK_HEADER_HASH.toString();
|
|
526
|
-
return {
|
|
527
|
-
latest: {
|
|
528
|
-
hash: latestBlockHash ?? genesisHash,
|
|
529
|
-
number: latestBlockNumber
|
|
530
|
-
},
|
|
531
|
-
proven: {
|
|
532
|
-
hash: provenBlockHash ?? genesisHash,
|
|
533
|
-
number: provenBlockNumber
|
|
534
|
-
},
|
|
535
|
-
finalized: {
|
|
536
|
-
hash: finalizedBlockHash ?? genesisHash,
|
|
537
|
-
number: finalizedBlockNumber
|
|
538
|
-
}
|
|
539
|
-
};
|
|
504
|
+
getL2Tips() {
|
|
505
|
+
return this.l2Tips.getL2Tips();
|
|
540
506
|
}
|
|
541
507
|
async handleBlockStreamEvent(event) {
|
|
542
508
|
this.log.debug(`Handling block stream event ${event.type}`);
|
|
543
509
|
switch(event.type){
|
|
544
510
|
case 'blocks-added':
|
|
545
|
-
await this.handleLatestL2Blocks(event.blocks
|
|
511
|
+
await this.handleLatestL2Blocks(event.blocks);
|
|
546
512
|
break;
|
|
547
513
|
case 'chain-finalized':
|
|
548
514
|
{
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
const from = BlockNumber(await this.getSyncedFinalizedBlockNum() + 1);
|
|
515
|
+
const oldFinalizedBlockNum = await this.getSyncedFinalizedBlockNum();
|
|
516
|
+
const from = BlockNumber(oldFinalizedBlockNum + 1);
|
|
552
517
|
const limit = event.block.number - from + 1;
|
|
553
518
|
if (limit > 0) {
|
|
554
519
|
const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
|
|
@@ -557,28 +522,23 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
557
522
|
break;
|
|
558
523
|
}
|
|
559
524
|
case 'chain-proven':
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
|
|
563
|
-
await this.synchedProvenBlockNumber.set(event.block.number);
|
|
564
|
-
break;
|
|
565
|
-
}
|
|
525
|
+
this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
|
|
526
|
+
break;
|
|
566
527
|
case 'chain-pruned':
|
|
567
|
-
await this.setBlockHash(event.block);
|
|
568
528
|
this.txCollection.stopCollectingForBlocksAfter(event.block.number);
|
|
569
529
|
await this.handlePruneL2Blocks(event.block.number);
|
|
570
530
|
break;
|
|
531
|
+
case 'chain-checkpointed':
|
|
532
|
+
break;
|
|
571
533
|
default:
|
|
572
534
|
{
|
|
573
535
|
const _ = event;
|
|
574
536
|
break;
|
|
575
537
|
}
|
|
576
538
|
}
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
await this.synchedBlockHashes.set(block.number, block.hash.toString());
|
|
581
|
-
}
|
|
539
|
+
// Pass the event through to our l2 tips store
|
|
540
|
+
await this.l2Tips.handleBlockStreamEvent(event);
|
|
541
|
+
await this.startServiceIfSynched();
|
|
582
542
|
}
|
|
583
543
|
#assertIsReady() {
|
|
584
544
|
// this.log.info('Checking if p2p client is ready, current state: ', this.currentState);
|
|
@@ -598,9 +558,9 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
598
558
|
}
|
|
599
559
|
// get the current latest block numbers
|
|
600
560
|
const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
|
|
601
|
-
this.latestBlockNumberAtStart = latestBlockNumbers.
|
|
602
|
-
this.provenBlockNumberAtStart = latestBlockNumbers.proven.number;
|
|
603
|
-
this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.number;
|
|
561
|
+
this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
|
|
562
|
+
this.provenBlockNumberAtStart = latestBlockNumbers.proven.block.number;
|
|
563
|
+
this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.block.number;
|
|
604
564
|
const syncedLatestBlock = await this.getSyncedLatestBlockNum() + 1;
|
|
605
565
|
const syncedProvenBlock = await this.getSyncedProvenBlockNum() + 1;
|
|
606
566
|
const syncedFinalizedBlock = await this.getSyncedFinalizedBlockNum() + 1;
|
|
@@ -676,26 +636,28 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
676
636
|
this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
|
|
677
637
|
return this.p2pService.propagate(proposal);
|
|
678
638
|
}
|
|
679
|
-
|
|
680
|
-
this.log.verbose(`Broadcasting ${
|
|
681
|
-
|
|
639
|
+
broadcastCheckpointProposal(proposal) {
|
|
640
|
+
this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
|
|
641
|
+
return this.p2pService.propagate(proposal);
|
|
682
642
|
}
|
|
683
|
-
async
|
|
684
|
-
|
|
643
|
+
async broadcastCheckpointAttestations(attestations) {
|
|
644
|
+
this.log.verbose(`Broadcasting ${attestations.length} checkpoint attestations to peers`);
|
|
645
|
+
await Promise.all(attestations.map((att)=>this.p2pService.propagate(att)));
|
|
685
646
|
}
|
|
686
|
-
|
|
687
|
-
return this.attestationPool.
|
|
647
|
+
async getCheckpointAttestationsForSlot(slot, proposalId) {
|
|
648
|
+
return await (proposalId ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId) : this.attestationPool.getCheckpointAttestationsForSlot(slot));
|
|
688
649
|
}
|
|
689
|
-
|
|
690
|
-
return this.attestationPool.
|
|
691
|
-
attestation
|
|
692
|
-
]);
|
|
650
|
+
addCheckpointAttestations(attestations) {
|
|
651
|
+
return this.attestationPool.addCheckpointAttestations(attestations);
|
|
693
652
|
}
|
|
694
653
|
// REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
|
|
695
654
|
// ^ This pattern is not my favorite (md)
|
|
696
655
|
registerBlockProposalHandler(handler) {
|
|
697
656
|
this.p2pService.registerBlockReceivedCallback(handler);
|
|
698
657
|
}
|
|
658
|
+
registerCheckpointProposalHandler(handler) {
|
|
659
|
+
this.p2pService.registerCheckpointReceivedCallback(handler);
|
|
660
|
+
}
|
|
699
661
|
/**
|
|
700
662
|
* Uses the batched Request Response protocol to request a set of transactions from the network.
|
|
701
663
|
*/ async requestTxsByHash(txHashes, pinnedPeerId) {
|
|
@@ -886,16 +848,19 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
886
848
|
* Public function to check the latest block number that the P2P client is synced to.
|
|
887
849
|
* @returns Block number of latest L2 Block we've synced with.
|
|
888
850
|
*/ async getSyncedLatestBlockNum() {
|
|
889
|
-
|
|
851
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
852
|
+
return tips.proposed.number;
|
|
890
853
|
}
|
|
891
854
|
/**
|
|
892
855
|
* Public function to check the latest proven block number that the P2P client is synced to.
|
|
893
856
|
* @returns Block number of latest proven L2 Block we've synced with.
|
|
894
857
|
*/ async getSyncedProvenBlockNum() {
|
|
895
|
-
|
|
858
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
859
|
+
return tips.proven.block.number;
|
|
896
860
|
}
|
|
897
861
|
async getSyncedFinalizedBlockNum() {
|
|
898
|
-
|
|
862
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
863
|
+
return tips.finalized.block.number;
|
|
899
864
|
}
|
|
900
865
|
/** Returns latest L2 slot for which we have seen an L2 block. */ async getSyncedLatestSlot() {
|
|
901
866
|
return await this.synchedLatestSlot.getAsync() ?? BigInt(0);
|
|
@@ -936,14 +901,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
936
901
|
await this.txPool.clearNonEvictableTxs();
|
|
937
902
|
await this.startCollectingMissingTxs(blocks);
|
|
938
903
|
const lastBlock = blocks.at(-1);
|
|
939
|
-
await Promise.all(blocks.map(async (block)=>this.setBlockHash({
|
|
940
|
-
number: block.number,
|
|
941
|
-
hash: await block.hash().then((h)=>h.toString())
|
|
942
|
-
})));
|
|
943
|
-
await this.synchedLatestBlockNumber.set(lastBlock.number);
|
|
944
904
|
await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
|
|
945
905
|
this.log.verbose(`Synched to latest block ${lastBlock.number}`);
|
|
946
|
-
await this.startServiceIfSynched();
|
|
947
906
|
}
|
|
948
907
|
/** Request txs for unproven blocks so the prover node has more chances to get them. */ async startCollectingMissingTxs(blocks) {
|
|
949
908
|
try {
|
|
@@ -988,10 +947,8 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
988
947
|
permanently: true
|
|
989
948
|
});
|
|
990
949
|
await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
|
|
991
|
-
await this.attestationPool.
|
|
992
|
-
await this.synchedFinalizedBlockNumber.set(lastBlockNum);
|
|
950
|
+
await this.attestationPool.deleteCheckpointAttestationsOlderThan(lastBlockSlot);
|
|
993
951
|
this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
|
|
994
|
-
await this.startServiceIfSynched();
|
|
995
952
|
}
|
|
996
953
|
/**
|
|
997
954
|
* Updates the tx pool after a chain prune.
|
|
@@ -1032,16 +989,15 @@ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
|
|
|
1032
989
|
} else {
|
|
1033
990
|
await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
|
|
1034
991
|
}
|
|
1035
|
-
await this.synchedLatestBlockNumber.set(latestBlock);
|
|
1036
|
-
// no need to update block hashes, as they will be updated as new blocks are added
|
|
1037
992
|
}
|
|
1038
993
|
async startServiceIfSynched() {
|
|
1039
994
|
if (this.currentState !== P2PClientState.SYNCHING) {
|
|
1040
995
|
return;
|
|
1041
996
|
}
|
|
1042
|
-
const
|
|
1043
|
-
const
|
|
1044
|
-
const
|
|
997
|
+
const tips = await this.l2Tips.getL2Tips();
|
|
998
|
+
const syncedFinalizedBlock = tips.finalized.block.number;
|
|
999
|
+
const syncedProvenBlock = tips.proven.block.number;
|
|
1000
|
+
const syncedLatestBlock = tips.proposed.number;
|
|
1045
1001
|
if (syncedLatestBlock >= this.latestBlockNumberAtStart && syncedProvenBlock >= this.provenBlockNumberAtStart && syncedFinalizedBlock >= this.finalizedBlockNumberAtStart) {
|
|
1046
1002
|
this.log.info(`Completed P2P client sync to block ${syncedLatestBlock}. Starting service.`, {
|
|
1047
1003
|
syncedLatestBlock,
|