@aztec/validator-client 4.0.0-nightly.20260112 → 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.
Files changed (42) hide show
  1. package/README.md +256 -0
  2. package/dest/block_proposal_handler.d.ts +20 -10
  3. package/dest/block_proposal_handler.d.ts.map +1 -1
  4. package/dest/block_proposal_handler.js +333 -72
  5. package/dest/checkpoint_builder.d.ts +70 -0
  6. package/dest/checkpoint_builder.d.ts.map +1 -0
  7. package/dest/checkpoint_builder.js +155 -0
  8. package/dest/config.d.ts +1 -1
  9. package/dest/config.d.ts.map +1 -1
  10. package/dest/config.js +10 -0
  11. package/dest/duties/validation_service.d.ts +26 -10
  12. package/dest/duties/validation_service.d.ts.map +1 -1
  13. package/dest/duties/validation_service.js +51 -21
  14. package/dest/factory.d.ts +10 -7
  15. package/dest/factory.d.ts.map +1 -1
  16. package/dest/factory.js +2 -2
  17. package/dest/index.d.ts +3 -1
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +2 -0
  20. package/dest/tx_validator/index.d.ts +3 -0
  21. package/dest/tx_validator/index.d.ts.map +1 -0
  22. package/dest/tx_validator/index.js +2 -0
  23. package/dest/tx_validator/nullifier_cache.d.ts +14 -0
  24. package/dest/tx_validator/nullifier_cache.d.ts.map +1 -0
  25. package/dest/tx_validator/nullifier_cache.js +24 -0
  26. package/dest/tx_validator/tx_validator_factory.d.ts +18 -0
  27. package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -0
  28. package/dest/tx_validator/tx_validator_factory.js +53 -0
  29. package/dest/validator.d.ts +39 -15
  30. package/dest/validator.d.ts.map +1 -1
  31. package/dest/validator.js +297 -449
  32. package/package.json +16 -12
  33. package/src/block_proposal_handler.ts +249 -39
  34. package/src/checkpoint_builder.ts +267 -0
  35. package/src/config.ts +10 -0
  36. package/src/duties/validation_service.ts +79 -25
  37. package/src/factory.ts +13 -8
  38. package/src/index.ts +2 -0
  39. package/src/tx_validator/index.ts +2 -0
  40. package/src/tx_validator/nullifier_cache.ts +30 -0
  41. package/src/tx_validator/tx_validator_factory.ts +133 -0
  42. package/src/validator.ts +400 -94
package/README.md ADDED
@@ -0,0 +1,256 @@
1
+ # Validator Client
2
+
3
+ The validator client handles consensus duties for Aztec validators: validating block proposals, attesting to checkpoints, and detecting slashable some offenses. Validators do NOT attest to individual blocks. Attestations are only created for checkpoint proposals that aggregate an entire slot's worth of blocks.
4
+
5
+ ## Key Concepts
6
+
7
+ ### Slots, Blocks, and Checkpoints
8
+
9
+ - **Slot**: A fixed time window (e.g., 72 seconds) during which a designated proposer builds blocks
10
+ - **Block**: A single batch of transactions executed and validated within a slot
11
+ - **Checkpoint**: The collection of all blocks built in a slot, attested by validators and published to L1
12
+ - **Sub-slot**: A fixed-duration window within a slot for building each block (e.g., 8 seconds)
13
+
14
+ A proposer builds several blocks during their slot. These blocks share the same `slotNumber` but have incrementing `blockNumber` and `indexWithinCheckpoint` values.
15
+
16
+ ### Block Proposals
17
+
18
+ A `BlockProposal` is broadcast by the proposer for each block **except the last one** in a slot:
19
+
20
+ ```
21
+ BlockProposal {
22
+ blockHeader // Per-block header with global variables
23
+ indexWithinCheckpoint // 0, 1, 2, ... position within checkpoint
24
+ inHash // L1-to-L2 messages hash (constant across checkpoint)
25
+ archive // Archive root after this block
26
+ txHashes // Transaction hashes in order
27
+ signature // Proposer's signature
28
+ signedTxs? // Optional full transactions for DA
29
+ }
30
+ ```
31
+
32
+ Validators receive block proposals, validate them, and re-execute transactions—but they do **not** create attestations for individual blocks.
33
+
34
+ ### Checkpoint Proposals
35
+
36
+ A `CheckpointProposal` is broadcast at the end of a slot along with the last block:
37
+
38
+ ```
39
+ CheckpointProposal {
40
+ checkpointHeader // Aggregated header for consensus
41
+ archive // Final archive root after all blocks
42
+ signature // Proposer's signature over checkpoint
43
+ lastBlock? { // Last block info (extracted as BlockProposal)
44
+ blockHeader
45
+ indexWithinCheckpoint
46
+ txHashes
47
+ signature
48
+ signedTxs?
49
+ }
50
+ }
51
+ ```
52
+
53
+ The `checkpointHeader` contains aggregated data: `blockHeadersHash` (hash of all block headers), `contentCommitment` (blobsHash, inHash, outHash), and shared global variables.
54
+
55
+ ### Checkpoint Attestations
56
+
57
+ Validators who have validated all blocks in a checkpoint create a `CheckpointAttestation`:
58
+
59
+ ```
60
+ CheckpointAttestation {
61
+ payload { // What's being attested to
62
+ checkpointHeader // The checkpoint header
63
+ archive // The final archive root
64
+ }
65
+ signature // Validator's signature
66
+ proposerSignature // Copy of proposer's signature (for verification)
67
+ }
68
+ ```
69
+
70
+ Attestations are collected by the proposer and submitted to L1 along with the checkpoint.
71
+
72
+ ## Key Invariants
73
+
74
+ These rules must always hold:
75
+
76
+ 1. **Attestations are checkpoint-only**: Validators never attest to individual `BlockProposal`s
77
+ 2. **Global variables match within checkpoint**: All blocks within the same checkpoint must have identical global variables (except `blockNumber`), which includes the slot number
78
+ 3. **inHash is constant**: All blocks in a checkpoint share the same L1-to-L2 messages hash
79
+ 4. **Sequential indexWithinCheckpoint**: Block N must have `indexWithinCheckpoint = parent.indexWithinCheckpoint + 1`
80
+
81
+ ## Validation Flow
82
+
83
+ ### Block Proposal Validation
84
+
85
+ When a `BlockProposal` is received via P2P, the `BlockProposalHandler` performs:
86
+
87
+ ```
88
+ 1. Verify proposer signature
89
+ 2. Check proposal is from current/next slot proposer (via BlockProposalValidator)
90
+ 3. Find parent block by archive root (wait/retry if not synced)
91
+ 4. Compute checkpoint number from parent
92
+ 5. If indexWithinCheckpoint > 0:
93
+ - Validate global variables match parent (chainId, version, slotNumber,
94
+ timestamp, coinbase, feeRecipient, gasFees)
95
+ 6. Verify inHash matches computed from L1-to-L2 messages
96
+ 7. Collect transactions from pool/network/proposal
97
+ 8. Re-execute transactions (if enabled)
98
+ 9. Compare re-execution result with proposal
99
+ ```
100
+
101
+ ### Checkpoint Proposal Validation
102
+
103
+ When a `CheckpointProposal` is received, before creating attestations:
104
+
105
+ ```
106
+ 1. Verify proposer signature
107
+ 2. Wait for last block to sync (by archive root)
108
+ 3. Collect all blocks in this slot
109
+ 4. Recompute blockHeadersHash from collected headers
110
+ 5. Verify blockHeadersHash matches checkpointHeader
111
+ 6. Verify checkpoint header fields match last block's global variables:
112
+ - slotNumber, coinbase, feeRecipient, gasFees
113
+ 7. Verify lastArchiveRoot matches first block's lastArchive
114
+ ```
115
+
116
+ ### Attestation Creation
117
+
118
+ After successful checkpoint validation:
119
+
120
+ ```
121
+ 1. Check if any of our validator addresses are in the committee
122
+ 2. For each address in committee:
123
+ - Sign ConsensusPayload (checkpointHeader + archive)
124
+ - Create CheckpointAttestation with our signature + proposer signature
125
+ 3. Add attestations to attestation pool
126
+ 4. Broadcast attestations to peers
127
+ ```
128
+
129
+ ## Sequence Diagram
130
+
131
+ ```
132
+ Time | Proposer | Validator
133
+ -----|------------------------------|------------------------------------
134
+ 2s | Build Block 0 |
135
+ 10s | Broadcast BlockProposal 0 |
136
+ | Build Block 1 |
137
+ 12s | | Receive BlockProposal 0
138
+ | | Validate + re-execute Block 0
139
+ 18s | Broadcast BlockProposal 1 |
140
+ | Build Block 2 |
141
+ 20s | | Receive BlockProposal 1
142
+ | | Validate + re-execute Block 1
143
+ ... | |
144
+ 42s | Build Block 4 (last) |
145
+ | Assemble CheckpointProposal |
146
+ | Broadcast CheckpointProposal |
147
+ 44s | | Receive CheckpointProposal
148
+ | | Extract + validate Block 4
149
+ | | Validate checkpoint (blockHeadersHash)
150
+ 52s | | Create CheckpointAttestations
151
+ | | Broadcast attestations
152
+ 54s | Receive attestations |
153
+ 55s | Finalize + publish to L1 |
154
+ ```
155
+
156
+ ## Configuration
157
+
158
+ | Flag | Purpose |
159
+ |------|---------|
160
+ | `validatorReexecute` | Re-execute transactions to verify proposals |
161
+ | `fishermanMode` | Validate proposals but don't broadcast attestations (monitoring only) |
162
+ | `alwaysReexecuteBlockProposals` | Force re-execution even when not in committee |
163
+ | `slashBroadcastedInvalidBlockPenalty` | Penalty amount for invalid proposals (0 = disabled) |
164
+ | `validatorReexecuteDeadlineMs` | Time reserved at end of slot for propagation/publishing |
165
+ | `attestationPollingIntervalMs` | How often to poll for attestations when collecting |
166
+ | `disabledValidators` | Validator addresses to exclude from duties |
167
+
168
+ ### Fisherman Mode
169
+
170
+ When `fishermanMode: true`, the validator:
171
+ - Validates all proposals (block and checkpoint)
172
+ - Re-executes transactions
173
+ - Creates attestations internally for validation
174
+ - Does **not** broadcast attestations to the network
175
+ - Does **not** add attestations to the pool
176
+
177
+ This is useful for monitoring network health without participating in consensus.
178
+
179
+ ### Key Methods
180
+
181
+ **ValidatorClient** (`validator.ts`):
182
+ - `validateBlockProposal(proposal, sender)` → `boolean`: Validates block, optionally re-executes, emits slash events
183
+ - `attestToCheckpointProposal(proposal, sender)` → `CheckpointAttestation[]?`: Validates checkpoint and creates attestations
184
+ - `collectAttestations(proposal, required, deadline)` → `CheckpointAttestation[]`: Waits for attestations from other validators
185
+ - `createBlockProposal(...)` → `BlockProposal`: Creates and signs a block proposal (used by sequencer)
186
+ - `createCheckpointProposal(...)` → `CheckpointProposal`: Creates and signs a checkpoint proposal
187
+
188
+ **BlockProposalHandler** (`block_proposal_handler.ts`):
189
+ - `handleBlockProposal(proposal, sender, shouldReexecute)` → `ValidationResult`: Full block validation pipeline
190
+ - `reexecuteTransactions(proposal, blockNumber, txs, messages)` → `ReexecutionResult`: Re-runs transactions and compares state
191
+
192
+ **ValidationService** (`duties/validation_service.ts`):
193
+ - `createBlockProposal(...)` → `BlockProposal`: Signs block proposal with validator key
194
+ - `createCheckpointProposal(...)` → `CheckpointProposal`: Signs checkpoint proposal
195
+ - `attestToCheckpointProposal(proposal, attestors)` → `CheckpointAttestation[]`: Creates attestations for given addresses
196
+
197
+ ## Testing Patterns
198
+
199
+ ### Common Mocks
200
+
201
+ Tests typically mock these dependencies:
202
+
203
+ ```typescript
204
+ let epochCache: MockProxy<EpochCache>;
205
+ let blockSource: MockProxy<L2BlockSource>;
206
+ let txProvider: MockProxy<TxProvider>;
207
+ let blockBuilder: MockProxy<IFullNodeBlockBuilder>;
208
+ let p2pClient: MockProxy<P2P>;
209
+
210
+ beforeEach(() => {
211
+ epochCache = mock<EpochCache>();
212
+ blockSource = mock<L2BlockSource>();
213
+ // ... etc
214
+ });
215
+ ```
216
+
217
+ ### Creating Test Proposals
218
+
219
+ Use factory functions from `@aztec/stdlib/testing`:
220
+
221
+ ```typescript
222
+ import { makeBlockProposal, makeCheckpointProposal, makeL2BlockHeader } from '@aztec/stdlib/testing';
223
+
224
+ // These are async - always await
225
+ const blockProposal = await makeBlockProposal({
226
+ blockHeader: makeL2BlockHeader(1, 100, 100), // epoch, block, slot
227
+ indexWithinCheckpoint: 0,
228
+ signer: Secp256k1Signer.random(),
229
+ });
230
+
231
+ const checkpointProposal = await makeCheckpointProposal({
232
+ checkpointHeader: makeL2BlockHeader(1, 100, 100).toCheckpointHeader(),
233
+ signer: proposer,
234
+ lastBlock: { blockHeader, txs },
235
+ });
236
+ ```
237
+
238
+ ### Mocking for Re-execution Tests
239
+
240
+ For tests that exercise re-execution:
241
+
242
+ ```typescript
243
+ // Mock parent block lookup
244
+ blockSource.getBlockHeaderByArchive.mockResolvedValue(parentBlockHeader);
245
+ blockSource.getL2BlockNew.mockResolvedValue({
246
+ checkpointNumber: CheckpointNumber(1),
247
+ indexWithinCheckpoint: 0,
248
+ header: { globalVariables: parentGlobalVariables },
249
+ });
250
+
251
+ // Mock block builder result
252
+ blockBuilder.buildBlock.mockResolvedValue({
253
+ block: expectedBlock,
254
+ failedTxs: [],
255
+ });
256
+ ```
@@ -1,19 +1,20 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
1
+ import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
2
2
  import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { DateProvider } from '@aztec/foundation/timer';
4
4
  import type { P2P, PeerId } from '@aztec/p2p';
5
5
  import { TxProvider } from '@aztec/p2p';
6
6
  import { BlockProposalValidator } from '@aztec/p2p/msg_validators';
7
- import type { L2Block, L2BlockSource } from '@aztec/stdlib/block';
8
- import type { IFullNodeBlockBuilder, ValidatorClientFullConfig } from '@aztec/stdlib/interfaces/server';
7
+ import type { L2BlockNew, L2BlockSink, L2BlockSource } from '@aztec/stdlib/block';
8
+ import type { ValidatorClientFullConfig, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
9
9
  import { type L1ToL2MessageSource } from '@aztec/stdlib/messaging';
10
- import { type BlockProposal } from '@aztec/stdlib/p2p';
10
+ import type { BlockProposal } from '@aztec/stdlib/p2p';
11
11
  import { type FailedTx, type Tx } from '@aztec/stdlib/tx';
12
12
  import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
13
+ import type { FullNodeCheckpointsBuilder } from './checkpoint_builder.js';
13
14
  import type { ValidatorMetrics } from './metrics.js';
14
- export type BlockProposalValidationFailureReason = 'invalid_proposal' | 'parent_block_not_found' | 'parent_block_wrong_slot' | 'in_hash_mismatch' | 'block_number_already_exists' | 'txs_not_available' | 'state_mismatch' | 'failed_txs' | 'timeout' | 'unknown_error';
15
+ export type BlockProposalValidationFailureReason = 'invalid_proposal' | 'parent_block_not_found' | 'parent_block_wrong_slot' | 'in_hash_mismatch' | 'global_variables_mismatch' | 'block_number_already_exists' | 'txs_not_available' | 'state_mismatch' | 'failed_txs' | 'timeout' | 'unknown_error';
15
16
  type ReexecuteTransactionsResult = {
16
- block: L2Block;
17
+ block: L2BlockNew;
17
18
  failedTxs: FailedTx[];
18
19
  reexecutionTimeMs: number;
19
20
  totalManaUsed: number;
@@ -31,7 +32,8 @@ export type BlockProposalValidationFailureResult = {
31
32
  };
32
33
  export type BlockProposalValidationResult = BlockProposalValidationSuccessResult | BlockProposalValidationFailureResult;
33
34
  export declare class BlockProposalHandler {
34
- private blockBuilder;
35
+ private checkpointsBuilder;
36
+ private worldState;
35
37
  private blockSource;
36
38
  private l1ToL2MessageSource;
37
39
  private txProvider;
@@ -41,13 +43,21 @@ export declare class BlockProposalHandler {
41
43
  private dateProvider;
42
44
  private log;
43
45
  readonly tracer: Tracer;
44
- constructor(blockBuilder: IFullNodeBlockBuilder, blockSource: L2BlockSource, l1ToL2MessageSource: L1ToL2MessageSource, txProvider: TxProvider, blockProposalValidator: BlockProposalValidator, config: ValidatorClientFullConfig, metrics?: ValidatorMetrics | undefined, dateProvider?: DateProvider, telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
46
+ constructor(checkpointsBuilder: FullNodeCheckpointsBuilder, worldState: WorldStateSynchronizer, blockSource: L2BlockSource & L2BlockSink, l1ToL2MessageSource: L1ToL2MessageSource, txProvider: TxProvider, blockProposalValidator: BlockProposalValidator, config: ValidatorClientFullConfig, metrics?: ValidatorMetrics | undefined, dateProvider?: DateProvider, telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
45
47
  registerForReexecution(p2pClient: P2P): BlockProposalHandler;
46
48
  handleBlockProposal(proposal: BlockProposal, proposalSender: PeerId, shouldReexecute: boolean): Promise<BlockProposalValidationResult>;
47
49
  private getParentBlock;
50
+ private computeCheckpointNumber;
51
+ /**
52
+ * Validates that a non-first block in a checkpoint has consistent global variables with its parent.
53
+ * For blocks with indexWithinCheckpoint > 0, all global variables except blockNumber must match the parent.
54
+ * @returns A failure result if validation fails, undefined if validation passes
55
+ */
56
+ private validateNonFirstBlockInCheckpoint;
48
57
  private getReexecutionDeadline;
58
+ private getBlocksInCheckpoint;
49
59
  private getReexecuteFailureReason;
50
- reexecuteTransactions(proposal: BlockProposal, blockNumber: BlockNumber, txs: Tx[], l1ToL2Messages: Fr[]): Promise<ReexecuteTransactionsResult>;
60
+ reexecuteTransactions(proposal: BlockProposal, blockNumber: BlockNumber, checkpointNumber: CheckpointNumber, txs: Tx[], l1ToL2Messages: Fr[]): Promise<ReexecuteTransactionsResult>;
51
61
  }
52
62
  export {};
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfaGFuZGxlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2NrX3Byb3Bvc2FsX2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBZ0MsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJcEQsT0FBTyxFQUFFLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEUsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBbUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsS0FBSyxhQUFhLEVBQW9CLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFlLEtBQUssUUFBUSxFQUFtQixLQUFLLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBT3hGLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLE1BQU0sRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyRCxNQUFNLE1BQU0sb0NBQW9DLEdBQzVDLGtCQUFrQixHQUNsQix3QkFBd0IsR0FDeEIseUJBQXlCLEdBQ3pCLGtCQUFrQixHQUNsQiw2QkFBNkIsR0FDN0IsbUJBQW1CLEdBQ25CLGdCQUFnQixHQUNoQixZQUFZLEdBQ1osU0FBUyxHQUNULGVBQWUsQ0FBQztBQUVwQixLQUFLLDJCQUEyQixHQUFHO0lBQ2pDLEtBQUssRUFBRSxPQUFPLENBQUM7SUFDZixTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDdEIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0lBQzFCLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDdkIsQ0FBQztBQUVGLE1BQU0sTUFBTSxvQ0FBb0MsR0FBRztJQUNqRCxPQUFPLEVBQUUsSUFBSSxDQUFDO0lBQ2QsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUN6QixpQkFBaUIsQ0FBQyxFQUFFLDJCQUEyQixDQUFDO0NBQ2pELENBQUM7QUFFRixNQUFNLE1BQU0sb0NBQW9DLEdBQUc7SUFDakQsT0FBTyxFQUFFLEtBQUssQ0FBQztJQUNmLE1BQU0sRUFBRSxvQ0FBb0MsQ0FBQztJQUM3QyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDMUIsaUJBQWlCLENBQUMsRUFBRSwyQkFBMkIsQ0FBQztDQUNqRCxDQUFDO0FBRUYsTUFBTSxNQUFNLDZCQUE2QixHQUFHLG9DQUFvQyxHQUFHLG9DQUFvQyxDQUFDO0FBRXhILHFCQUFhLG9CQUFvQjtJQUk3QixPQUFPLENBQUMsWUFBWTtJQUNwQixPQUFPLENBQUMsV0FBVztJQUNuQixPQUFPLENBQUMsbUJBQW1CO0lBQzNCLE9BQU8sQ0FBQyxVQUFVO0lBQ2xCLE9BQU8sQ0FBQyxzQkFBc0I7SUFDOUIsT0FBTyxDQUFDLE1BQU07SUFDZCxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxZQUFZO0lBRXBCLE9BQU8sQ0FBQyxHQUFHO0lBWmIsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixZQUNVLFlBQVksRUFBRSxxQkFBcUIsRUFDbkMsV0FBVyxFQUFFLGFBQWEsRUFDMUIsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQ3hDLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLHNCQUFzQixFQUFFLHNCQUFzQixFQUM5QyxNQUFNLEVBQUUseUJBQXlCLEVBQ2pDLE9BQU8sQ0FBQyw4QkFBa0IsRUFDMUIsWUFBWSxHQUFFLFlBQWlDLEVBQ3ZELFNBQVMsR0FBRSxlQUFzQyxFQUN6QyxHQUFHLHlDQUFtRCxFQU0vRDtJQUVELHNCQUFzQixDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsb0JBQW9CLENBeUIzRDtJQUVLLG1CQUFtQixDQUN2QixRQUFRLEVBQUUsYUFBYSxFQUN2QixjQUFjLEVBQUUsTUFBTSxFQUN0QixlQUFlLEVBQUUsT0FBTyxHQUN2QixPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FrR3hDO1lBRWEsY0FBYztJQXFDNUIsT0FBTyxDQUFDLHNCQUFzQjtJQU05QixPQUFPLENBQUMseUJBQXlCO0lBWTNCLHFCQUFxQixDQUN6QixRQUFRLEVBQUUsYUFBYSxFQUN2QixXQUFXLEVBQUUsV0FBVyxFQUN4QixHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQ1QsY0FBYyxFQUFFLEVBQUUsRUFBRSxHQUNuQixPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0F3RXRDO0NBQ0YifQ==
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfaGFuZGxlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2NrX3Byb3Bvc2FsX2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBYyxNQUFNLGlDQUFpQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUlwRCxPQUFPLEVBQUUsWUFBWSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEYsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsRUFBbUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRyxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQStDLEtBQUssUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPdkcsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLEtBQUssTUFBTSxFQUFzQixNQUFNLHlCQUF5QixDQUFDO0FBRWhHLE9BQU8sS0FBSyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFckQsTUFBTSxNQUFNLG9DQUFvQyxHQUM1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
@@ -1 +1 @@
1
- {"version":3,"file":"block_proposal_handler.d.ts","sourceRoot":"","sources":["../src/block_proposal_handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"block_proposal_handler.d.ts","sourceRoot":"","sources":["../src/block_proposal_handler.ts"],"names":[],"mappings":"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"}