@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.
- package/README.md +256 -0
- package/dest/block_proposal_handler.d.ts +20 -10
- package/dest/block_proposal_handler.d.ts.map +1 -1
- package/dest/block_proposal_handler.js +333 -72
- package/dest/checkpoint_builder.d.ts +70 -0
- package/dest/checkpoint_builder.d.ts.map +1 -0
- package/dest/checkpoint_builder.js +155 -0
- package/dest/config.d.ts +1 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +10 -0
- package/dest/duties/validation_service.d.ts +26 -10
- package/dest/duties/validation_service.d.ts.map +1 -1
- package/dest/duties/validation_service.js +51 -21
- package/dest/factory.d.ts +10 -7
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +2 -2
- package/dest/index.d.ts +3 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -0
- package/dest/tx_validator/index.d.ts +3 -0
- package/dest/tx_validator/index.d.ts.map +1 -0
- package/dest/tx_validator/index.js +2 -0
- package/dest/tx_validator/nullifier_cache.d.ts +14 -0
- package/dest/tx_validator/nullifier_cache.d.ts.map +1 -0
- package/dest/tx_validator/nullifier_cache.js +24 -0
- package/dest/tx_validator/tx_validator_factory.d.ts +18 -0
- package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -0
- package/dest/tx_validator/tx_validator_factory.js +53 -0
- package/dest/validator.d.ts +39 -15
- package/dest/validator.d.ts.map +1 -1
- package/dest/validator.js +297 -449
- package/package.json +16 -12
- package/src/block_proposal_handler.ts +249 -39
- package/src/checkpoint_builder.ts +267 -0
- package/src/config.ts +10 -0
- package/src/duties/validation_service.ts +79 -25
- package/src/factory.ts +13 -8
- package/src/index.ts +2 -0
- package/src/tx_validator/index.ts +2 -0
- package/src/tx_validator/nullifier_cache.ts +30 -0
- package/src/tx_validator/tx_validator_factory.ts +133 -0
- 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 {
|
|
8
|
-
import type {
|
|
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 {
|
|
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:
|
|
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
|
|
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(
|
|
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,
|
|
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":"AACA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"block_proposal_handler.d.ts","sourceRoot":"","sources":["../src/block_proposal_handler.ts"],"names":[],"mappings":"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"}
|