@aztec/stdlib 5.0.0-rc.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/block/attestation_info.d.ts +1 -1
- package/dest/block/attestation_info.d.ts.map +1 -1
- package/dest/block/attestation_info.js +7 -4
- package/dest/block/l2_block_source.d.ts +34 -3
- package/dest/block/l2_block_source.d.ts.map +1 -1
- package/dest/block/l2_block_source.js +15 -0
- package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts +39 -0
- package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts.map +1 -0
- package/dest/block/l2_block_stream/event_driven_l2_block_stream.js +165 -0
- package/dest/block/l2_block_stream/index.d.ts +2 -1
- package/dest/block/l2_block_stream/index.d.ts.map +1 -1
- package/dest/block/l2_block_stream/index.js +1 -0
- package/dest/block/l2_block_stream/interfaces.d.ts +16 -2
- package/dest/block/l2_block_stream/interfaces.d.ts.map +1 -1
- package/dest/block/l2_block_stream/interfaces.js +25 -1
- package/dest/block/l2_block_stream/l2_block_stream.d.ts +21 -35
- package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
- package/dest/block/l2_block_stream/l2_block_stream.js +5 -30
- package/dest/block/proposal/attestations_and_signers.d.ts +19 -1
- package/dest/block/proposal/attestations_and_signers.d.ts.map +1 -1
- package/dest/block/proposal/attestations_and_signers.js +47 -7
- package/dest/block/validate_block_result.d.ts +16 -1
- package/dest/block/validate_block_result.d.ts.map +1 -1
- package/dest/block/validate_block_result.js +18 -3
- package/dest/config/network-consensus-config.d.ts +1 -1
- package/dest/config/network-consensus-config.d.ts.map +1 -1
- package/dest/config/network-consensus-config.js +2 -10
- package/dest/contract/contract_address.d.ts +5 -4
- package/dest/contract/contract_address.d.ts.map +1 -1
- package/dest/contract/contract_instance.d.ts +16 -2
- package/dest/contract/contract_instance.d.ts.map +1 -1
- package/dest/contract/contract_instance.js +45 -0
- package/dest/contract/interfaces/contract_instance.d.ts +71 -10
- package/dest/contract/interfaces/contract_instance.d.ts.map +1 -1
- package/dest/contract/interfaces/contract_instance.js +7 -2
- package/dest/contract/partial_address.d.ts +9 -3
- package/dest/contract/partial_address.d.ts.map +1 -1
- package/dest/contract/partial_address.js +8 -2
- package/dest/database-version/version_manager.d.ts +18 -4
- package/dest/database-version/version_manager.d.ts.map +1 -1
- package/dest/database-version/version_manager.js +76 -6
- package/dest/ha-signing/config.d.ts +19 -5
- package/dest/ha-signing/config.d.ts.map +1 -1
- package/dest/ha-signing/config.js +9 -3
- package/dest/ha-signing/local_config.d.ts +10 -2
- package/dest/ha-signing/local_config.d.ts.map +1 -1
- package/dest/ha-signing/local_config.js +8 -2
- package/dest/hash/hash.d.ts +1 -2
- package/dest/hash/hash.d.ts.map +1 -1
- package/dest/hash/hash.js +0 -7
- package/dest/interfaces/archiver.d.ts +8 -1
- package/dest/interfaces/archiver.d.ts.map +1 -1
- package/dest/interfaces/archiver.js +2 -1
- package/dest/interfaces/aztec-node-admin.d.ts +5 -2
- package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
- package/dest/interfaces/configs.d.ts +4 -1
- package/dest/interfaces/configs.d.ts.map +1 -1
- package/dest/interfaces/configs.js +1 -0
- package/dest/interfaces/private_kernel_prover.d.ts +9 -11
- package/dest/interfaces/private_kernel_prover.d.ts.map +1 -1
- package/dest/interfaces/proving-job.d.ts +87 -74
- package/dest/interfaces/proving-job.d.ts.map +1 -1
- package/dest/interfaces/proving-job.js +13 -4
- package/dest/interfaces/server_circuit_prover.d.ts +3 -3
- package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
- package/dest/interfaces/validator.d.ts +7 -3
- package/dest/interfaces/validator.d.ts.map +1 -1
- package/dest/interfaces/world_state.d.ts +14 -1
- package/dest/interfaces/world_state.d.ts.map +1 -1
- package/dest/kernel/hints/find_private_kernel_reset_dimensions.d.ts +8 -2
- package/dest/kernel/hints/find_private_kernel_reset_dimensions.d.ts.map +1 -1
- package/dest/kernel/hints/find_private_kernel_reset_dimensions.js +12 -74
- package/dest/kernel/index.d.ts +2 -2
- package/dest/kernel/index.d.ts.map +1 -1
- package/dest/kernel/index.js +1 -1
- package/dest/kernel/private_circuit_public_inputs.d.ts +13 -3
- package/dest/kernel/private_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_circuit_public_inputs.js +14 -7
- package/dest/kernel/private_context_inputs.d.ts +4 -3
- package/dest/kernel/private_context_inputs.d.ts.map +1 -1
- package/dest/kernel/private_context_inputs.js +7 -3
- package/dest/kernel/private_kernel_circuit_public_inputs.d.ts +7 -1
- package/dest/kernel/private_kernel_circuit_public_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_circuit_public_inputs.js +7 -0
- package/dest/kernel/private_kernel_init_2_circuit_private_inputs.d.ts +2 -3
- package/dest/kernel/private_kernel_init_2_circuit_private_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_init_2_circuit_private_inputs.js +3 -5
- package/dest/kernel/private_kernel_init_3_circuit_private_inputs.d.ts +2 -3
- package/dest/kernel/private_kernel_init_3_circuit_private_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_init_3_circuit_private_inputs.js +3 -5
- package/dest/kernel/private_kernel_init_circuit_private_inputs.d.ts +1 -9
- package/dest/kernel/private_kernel_init_circuit_private_inputs.d.ts.map +1 -1
- package/dest/kernel/private_kernel_init_circuit_private_inputs.js +2 -6
- package/dest/kernel/private_kernel_reset_dimensions.d.ts +7 -8
- package/dest/kernel/private_kernel_reset_dimensions.d.ts.map +1 -1
- package/dest/kernel/private_kernel_reset_tail_circuit_private_inputs.d.ts +29 -0
- package/dest/kernel/private_kernel_reset_tail_circuit_private_inputs.d.ts.map +1 -0
- package/dest/kernel/private_kernel_reset_tail_circuit_private_inputs.js +36 -0
- package/dest/keys/derivation.d.ts +41 -6
- package/dest/keys/derivation.d.ts.map +1 -1
- package/dest/keys/derivation.js +49 -26
- package/dest/logs/app_tagging_secret.d.ts +16 -8
- package/dest/logs/app_tagging_secret.d.ts.map +1 -1
- package/dest/logs/app_tagging_secret.js +24 -27
- package/dest/logs/index.d.ts +1 -3
- package/dest/logs/index.d.ts.map +1 -1
- package/dest/logs/index.js +0 -2
- package/dest/logs/shared_secret_derivation.d.ts +19 -6
- package/dest/logs/shared_secret_derivation.d.ts.map +1 -1
- package/dest/logs/shared_secret_derivation.js +26 -11
- package/dest/messaging/l1_to_l2_message.d.ts +23 -2
- package/dest/messaging/l1_to_l2_message.d.ts.map +1 -1
- package/dest/messaging/l1_to_l2_message.js +36 -11
- package/dest/p2p/attestation_utils.d.ts +1 -1
- package/dest/p2p/attestation_utils.d.ts.map +1 -1
- package/dest/p2p/attestation_utils.js +8 -1
- package/dest/p2p/checkpoint_attestation.d.ts +9 -1
- package/dest/p2p/checkpoint_attestation.d.ts.map +1 -1
- package/dest/p2p/checkpoint_attestation.js +10 -0
- package/dest/p2p/signature_utils.d.ts +10 -1
- package/dest/p2p/signature_utils.d.ts.map +1 -1
- package/dest/p2p/signature_utils.js +9 -1
- package/dest/rollup/avm_proof_data.d.ts +3 -3
- package/dest/rollup/avm_proof_data.d.ts.map +1 -1
- package/dest/stats/stats.d.ts +2 -2
- package/dest/stats/stats.d.ts.map +1 -1
- package/dest/tests/factories.d.ts +1 -1
- package/dest/tests/factories.d.ts.map +1 -1
- package/dest/tests/factories.js +4 -3
- package/dest/tx/private_tx_constant_data.d.ts +18 -2
- package/dest/tx/private_tx_constant_data.d.ts.map +1 -1
- package/dest/tx/private_tx_constant_data.js +13 -4
- package/dest/tx/simulated_tx.d.ts +10 -6
- package/dest/tx/simulated_tx.d.ts.map +1 -1
- package/dest/world-state/genesis_data.d.ts +9 -1
- package/dest/world-state/genesis_data.d.ts.map +1 -1
- package/dest/world-state/genesis_data.js +1 -0
- package/package.json +8 -8
- package/src/block/attestation_info.ts +7 -2
- package/src/block/l2_block_source.ts +54 -2
- package/src/block/l2_block_stream/event_driven_l2_block_stream.ts +207 -0
- package/src/block/l2_block_stream/index.ts +1 -0
- package/src/block/l2_block_stream/interfaces.ts +35 -1
- package/src/block/l2_block_stream/l2_block_stream.ts +35 -62
- package/src/block/proposal/attestations_and_signers.ts +53 -7
- package/src/block/validate_block_result.ts +48 -2
- package/src/config/network-consensus-config.ts +2 -13
- package/src/contract/contract_address.ts +4 -3
- package/src/contract/contract_instance.ts +62 -1
- package/src/contract/interfaces/contract_instance.ts +26 -8
- package/src/contract/partial_address.ts +8 -2
- package/src/database-version/version_manager.ts +96 -6
- package/src/ha-signing/config.ts +23 -5
- package/src/ha-signing/local_config.ts +20 -1
- package/src/hash/hash.ts +0 -8
- package/src/interfaces/archiver.ts +8 -0
- package/src/interfaces/configs.ts +3 -0
- package/src/interfaces/private_kernel_prover.ts +10 -12
- package/src/interfaces/proving-job.ts +15 -3
- package/src/interfaces/server_circuit_prover.ts +2 -2
- package/src/interfaces/world_state.ts +14 -0
- package/src/kernel/hints/find_private_kernel_reset_dimensions.ts +22 -112
- package/src/kernel/index.ts +1 -1
- package/src/kernel/private_circuit_public_inputs.ts +12 -1
- package/src/kernel/private_context_inputs.ts +10 -3
- package/src/kernel/private_kernel_circuit_public_inputs.ts +9 -0
- package/src/kernel/private_kernel_init_2_circuit_private_inputs.ts +0 -3
- package/src/kernel/private_kernel_init_3_circuit_private_inputs.ts +0 -3
- package/src/kernel/private_kernel_init_circuit_private_inputs.ts +0 -6
- package/src/kernel/private_kernel_reset_dimensions.ts +15 -5
- package/src/kernel/private_kernel_reset_tail_circuit_private_inputs.ts +69 -0
- package/src/keys/derivation.ts +69 -24
- package/src/logs/app_tagging_secret.ts +34 -27
- package/src/logs/index.ts +0 -2
- package/src/logs/shared_secret_derivation.ts +31 -15
- package/src/messaging/l1_to_l2_message.ts +51 -13
- package/src/p2p/attestation_utils.ts +8 -1
- package/src/p2p/checkpoint_attestation.ts +12 -0
- package/src/p2p/signature_utils.ts +9 -0
- package/src/rollup/avm_proof_data.ts +2 -2
- package/src/stats/stats.ts +2 -2
- package/src/tests/factories.ts +3 -6
- package/src/tx/private_tx_constant_data.ts +25 -2
- package/src/world-state/genesis_data.ts +10 -0
- package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts +0 -47
- package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts.map +0 -1
- package/dest/kernel/private_kernel_tail_circuit_private_inputs.js +0 -38
- package/dest/logs/message_context.d.ts +0 -17
- package/dest/logs/message_context.d.ts.map +0 -1
- package/dest/logs/message_context.js +0 -9
- package/dest/logs/pending_tagged_log.d.ts +0 -11
- package/dest/logs/pending_tagged_log.d.ts.map +0 -1
- package/dest/logs/pending_tagged_log.js +0 -4
- package/src/kernel/private_kernel_tail_circuit_private_inputs.ts +0 -58
- package/src/logs/message_context.ts +0 -18
- package/src/logs/pending_tagged_log.ts +0 -12
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
import { type L2BlockSource } from '../l2_block_source.js';
|
|
2
|
-
import type
|
|
2
|
+
import { type L2BlockStreamEventHandler, type L2BlockStreamLocalDataProvider } from './interfaces.js';
|
|
3
3
|
/** Subset of the block source the stream depends on. Checkpoint payloads are no longer fetched here. */
|
|
4
|
-
type L2BlockStreamSource = Pick<L2BlockSource, 'getBlocks' | 'getBlockData' | 'getL2Tips'>;
|
|
4
|
+
export type L2BlockStreamSource = Pick<L2BlockSource, 'getBlocks' | 'getBlockData' | 'getL2Tips'>;
|
|
5
|
+
/** Options accepted by {@link L2BlockStream} and {@link EventDrivenL2BlockStream}. */
|
|
6
|
+
export type L2BlockStreamOptions = {
|
|
7
|
+
pollIntervalMS?: number;
|
|
8
|
+
batchSize?: number;
|
|
9
|
+
startingBlock?: number;
|
|
10
|
+
/** Instead of downloading all blocks, only fetch the smallest subset that results in reliable reorg detection. */
|
|
11
|
+
skipFinalized?: boolean;
|
|
12
|
+
/** When true, checkpoint events will not be emitted. Blocks are still fetched but only blocks-added events are emitted. */
|
|
13
|
+
ignoreCheckpoints?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* When true, the block download loop is skipped entirely: `getBlocks` is never called and `blocks-added` is
|
|
16
|
+
* never emitted. Only the tip events (`chain-proposed`/`chain-checkpointed`/`chain-proven`/`chain-finalized`)
|
|
17
|
+
* and `chain-pruned` are emitted, driven by the `getL2Tips` snapshot. For consumers that track tips but never
|
|
18
|
+
* consume block payloads.
|
|
19
|
+
*/
|
|
20
|
+
tipsOnly?: boolean;
|
|
21
|
+
};
|
|
5
22
|
/** Creates a stream of events for new blocks, chain tips updates, and reorgs, out of polling an archiver or a node. */
|
|
6
23
|
export declare class L2BlockStream {
|
|
7
24
|
private l2BlockSource;
|
|
@@ -12,22 +29,7 @@ export declare class L2BlockStream {
|
|
|
12
29
|
private readonly runningPromise;
|
|
13
30
|
private isSyncing;
|
|
14
31
|
private hasStarted;
|
|
15
|
-
constructor(l2BlockSource: L2BlockStreamSource, localData: L2BlockStreamLocalDataProvider, handler: L2BlockStreamEventHandler, log?: import("@aztec/foundation/log").Logger, opts?:
|
|
16
|
-
pollIntervalMS?: number;
|
|
17
|
-
batchSize?: number;
|
|
18
|
-
startingBlock?: number;
|
|
19
|
-
/** Instead of downloading all blocks, only fetch the smallest subset that results in reliable reorg detection. */
|
|
20
|
-
skipFinalized?: boolean;
|
|
21
|
-
/** When true, checkpoint events will not be emitted. Blocks are still fetched but only blocks-added events are emitted. */
|
|
22
|
-
ignoreCheckpoints?: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* When true, the block download loop is skipped entirely: `getBlocks` is never called and `blocks-added` is
|
|
25
|
-
* never emitted. Only the tip events (`chain-proposed`/`chain-checkpointed`/`chain-proven`/`chain-finalized`)
|
|
26
|
-
* and `chain-pruned` are emitted, driven by the `getL2Tips` snapshot. For consumers that track tips but never
|
|
27
|
-
* consume block payloads.
|
|
28
|
-
*/
|
|
29
|
-
tipsOnly?: boolean;
|
|
30
|
-
});
|
|
32
|
+
constructor(l2BlockSource: L2BlockStreamSource, localData: L2BlockStreamLocalDataProvider, handler: L2BlockStreamEventHandler, log?: import("@aztec/foundation/log").Logger, opts?: L2BlockStreamOptions);
|
|
31
33
|
start(): void;
|
|
32
34
|
stop(): Promise<void>;
|
|
33
35
|
isRunning(): boolean;
|
|
@@ -39,24 +41,8 @@ export declare class L2BlockStream {
|
|
|
39
41
|
sync(): Promise<void>;
|
|
40
42
|
protected work(): Promise<void>;
|
|
41
43
|
private downloadBlocks;
|
|
42
|
-
/**
|
|
43
|
-
* Returns whether the source tip differs from the local one and therefore warrants a tier event. Compares block
|
|
44
|
-
* number and, when both hashes are known, block hash. The hash comparison is skipped when the local hash is
|
|
45
|
-
* undefined or missing: world-state legitimately reports `undefined` hashes for tips ahead of its synced range,
|
|
46
|
-
* and comparing against an undefined hash would re-emit the event on every poll.
|
|
47
|
-
*/
|
|
48
|
-
private tipDiffers;
|
|
49
|
-
/**
|
|
50
|
-
* Block-only variant of {@link tipDiffers} for the proposed tip (an {@link L2BlockId}, with no checkpoint). Compares
|
|
51
|
-
* block number and, when the local hash is known, block hash. The hash comparison is skipped when the local hash is
|
|
52
|
-
* undefined: world-state reports `undefined` for its proposed hash, and a strict comparison would re-emit
|
|
53
|
-
* `chain-proposed` on every poll for it. ({@link L2TipsStoreBase} consumers always carry a hash, so the leniency is
|
|
54
|
-
* inert for them.)
|
|
55
|
-
*/
|
|
56
|
-
private blockTipDiffers;
|
|
57
44
|
private areBlockHashesEqualAt;
|
|
58
45
|
private getBlockHashFromSource;
|
|
59
46
|
private emitEvent;
|
|
60
47
|
}
|
|
61
|
-
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfYmxvY2tfc3RyZWFtLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svbDJfYmxvY2tfc3RyZWFtL2wyX2Jsb2NrX3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBRUwsS0FBSyxhQUFhLEVBSW5CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxLQUFLLEVBRVYseUJBQXlCLEVBQ3pCLDhCQUE4QixFQUUvQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLHdHQUF3RztBQUN4RyxLQUFLLG1CQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxHQUFHLGNBQWMsR0FBRyxXQUFXLENBQUMsQ0FBQztBQUUzRix1SEFBdUg7QUFDdkgscUJBQWEsYUFBYTtJQU10QixPQUFPLENBQUMsYUFBYTtJQUNyQixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsT0FBTztJQUNmLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztJQUNwQixPQUFPLENBQUMsSUFBSTtJQVRkLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFpQjtJQUNoRCxPQUFPLENBQUMsU0FBUyxDQUFTO0lBQzFCLE9BQU8sQ0FBQyxVQUFVLENBQVM7SUFFM0IsWUFDVSxhQUFhLEVBQUUsbUJBQW1CLEVBQ2xDLFNBQVMsRUFBRSw4QkFBOEIsRUFDekMsT0FBTyxFQUFFLHlCQUF5QixFQUN6QixHQUFHLHlDQUFxQyxFQUNqRCxJQUFJLEdBQUU7UUFDWixjQUFjLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDeEIsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ25CLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN2QixrSEFBa0g7UUFDbEgsYUFBYSxDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQ3hCLDJIQUEySDtRQUMzSCxpQkFBaUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQztRQUM1Qjs7Ozs7V0FLRztRQUNILFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQztLQUNmLEVBYVA7SUFFTSxLQUFLLFNBR1g7SUFFWSxJQUFJLGtCQUVoQjtJQUVNLFNBQVMsWUFFZjtJQUVEOzs7O09BSUc7SUFDVSxJQUFJLGtCQUloQjtJQUVELFVBQWdCLElBQUksa0JBa0luQjtZQVNhLGNBQWM7SUE2RDVCOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLFVBQVU7SUFJbEI7Ozs7OztPQU1HO0lBQ0gsT0FBTyxDQUFDLGVBQWU7WUFtQlQscUJBQXFCO0lBd0NuQyxPQUFPLENBQUMsc0JBQXNCO1lBT2hCLFNBQVM7Q0FleEIifQ==
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDJfYmxvY2tfc3RyZWFtLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svbDJfYmxvY2tfc3RyZWFtL2wyX2Jsb2NrX3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQWtCLEtBQUssYUFBYSxFQUFtQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVHLE9BQU8sRUFFTCxLQUFLLHlCQUF5QixFQUM5QixLQUFLLDhCQUE4QixFQUVwQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpCLHdHQUF3RztBQUN4RyxNQUFNLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEdBQUcsY0FBYyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0FBRWxHLHNGQUFzRjtBQUN0RixNQUFNLE1BQU0sb0JBQW9CLEdBQUc7SUFDakMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3hCLFNBQVMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNuQixhQUFhLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDdkIsa0hBQWtIO0lBQ2xILGFBQWEsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUN4QiwySEFBMkg7SUFDM0gsaUJBQWlCLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDNUI7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUM7Q0FDcEIsQ0FBQztBQUVGLHVIQUF1SDtBQUN2SCxxQkFBYSxhQUFhO0lBTXRCLE9BQU8sQ0FBQyxhQUFhO0lBQ3JCLE9BQU8sQ0FBQyxTQUFTO0lBQ2pCLE9BQU8sQ0FBQyxPQUFPO0lBQ2YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHO0lBQ3BCLE9BQU8sQ0FBQyxJQUFJO0lBVGQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQWlCO0lBQ2hELE9BQU8sQ0FBQyxTQUFTLENBQVM7SUFDMUIsT0FBTyxDQUFDLFVBQVUsQ0FBUztJQUUzQixZQUNVLGFBQWEsRUFBRSxtQkFBbUIsRUFDbEMsU0FBUyxFQUFFLDhCQUE4QixFQUN6QyxPQUFPLEVBQUUseUJBQXlCLEVBQ3pCLEdBQUcseUNBQXFDLEVBQ2pELElBQUksR0FBRSxvQkFBeUIsRUFheEM7SUFFTSxLQUFLLFNBR1g7SUFFWSxJQUFJLGtCQUVoQjtJQUVNLFNBQVMsWUFFZjtJQUVEOzs7O09BSUc7SUFDVSxJQUFJLGtCQUloQjtJQUVELFVBQWdCLElBQUksa0JBd0luQjtZQVNhLGNBQWM7WUFtRWQscUJBQXFCO0lBd0NuQyxPQUFPLENBQUMsc0JBQXNCO1lBT2hCLFNBQVM7Q0FleEIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l2_block_stream.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/l2_block_stream.ts"],"names":[],"mappings":"AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"l2_block_stream.d.ts","sourceRoot":"","sources":["../../../src/block/l2_block_stream/l2_block_stream.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,aAAa,EAAmC,MAAM,uBAAuB,CAAC;AAC5G,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EAEpC,MAAM,iBAAiB,CAAC;AAEzB,wGAAwG;AACxG,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,cAAc,GAAG,WAAW,CAAC,CAAC;AAElG,sFAAsF;AACtF,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kHAAkH;IAClH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2HAA2H;IAC3H,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,uHAAuH;AACvH,qBAAa,aAAa;IAMtB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,IAAI;IATd,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAE3B,YACU,aAAa,EAAE,mBAAmB,EAClC,SAAS,EAAE,8BAA8B,EACzC,OAAO,EAAE,yBAAyB,EACzB,GAAG,yCAAqC,EACjD,IAAI,GAAE,oBAAyB,EAaxC;IAEM,KAAK,SAGX;IAEY,IAAI,kBAEhB;IAEM,SAAS,YAEf;IAED;;;;OAIG;IACU,IAAI,kBAIhB;IAED,UAAgB,IAAI,kBAwInB;YASa,cAAc;YAmEd,qBAAqB;IAwCnC,OAAO,CAAC,sBAAsB;YAOhB,SAAS;CAexB"}
|
|
@@ -3,6 +3,7 @@ import { AbortError } from '@aztec/foundation/error';
|
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
5
5
|
import { makeL2BlockId } from '../l2_block_source.js';
|
|
6
|
+
import { localBlockIdDiffers } from './interfaces.js';
|
|
6
7
|
/** Creates a stream of events for new blocks, chain tips updates, and reorgs, out of polling an archiver or a node. */ export class L2BlockStream {
|
|
7
8
|
l2BlockSource;
|
|
8
9
|
localData;
|
|
@@ -129,28 +130,28 @@ import { makeL2BlockId } from '../l2_block_source.js';
|
|
|
129
130
|
// End-of-pass reconciliation: chain-proposed fires against the pre-pass baseline (a post-prune re-read would
|
|
130
131
|
// equal the source tip and suppress it), then the tiers highest-to-lowest so the finalized <= proven <=
|
|
131
132
|
// checkpointed <= proposed invariant holds mid-pass.
|
|
132
|
-
if (
|
|
133
|
+
if (localBlockIdDiffers(prePassProposed, sourceTips.proposed)) {
|
|
133
134
|
await this.emitEvent({
|
|
134
135
|
type: 'chain-proposed',
|
|
135
136
|
block: sourceTips.proposed
|
|
136
137
|
});
|
|
137
138
|
}
|
|
138
139
|
const reconcileTips = pruned ? await this.localData.getL2Tips() : localTips;
|
|
139
|
-
if (!this.opts.ignoreCheckpoints &&
|
|
140
|
+
if (!this.opts.ignoreCheckpoints && localBlockIdDiffers(reconcileTips.checkpointed?.block, sourceTips.checkpointed.block)) {
|
|
140
141
|
await this.emitEvent({
|
|
141
142
|
type: 'chain-checkpointed',
|
|
142
143
|
block: sourceTips.checkpointed.block,
|
|
143
144
|
checkpoint: sourceTips.checkpointed.checkpoint
|
|
144
145
|
});
|
|
145
146
|
}
|
|
146
|
-
if (reconcileTips.proven !== undefined &&
|
|
147
|
+
if (reconcileTips.proven !== undefined && localBlockIdDiffers(reconcileTips.proven.block, sourceTips.proven.block)) {
|
|
147
148
|
await this.emitEvent({
|
|
148
149
|
type: 'chain-proven',
|
|
149
150
|
block: sourceTips.proven.block,
|
|
150
151
|
checkpoint: sourceTips.proven.checkpoint
|
|
151
152
|
});
|
|
152
153
|
}
|
|
153
|
-
if (reconcileTips.finalized !== undefined &&
|
|
154
|
+
if (reconcileTips.finalized !== undefined && localBlockIdDiffers(reconcileTips.finalized.block, sourceTips.finalized.block)) {
|
|
154
155
|
await this.emitEvent({
|
|
155
156
|
type: 'chain-finalized',
|
|
156
157
|
block: sourceTips.finalized.block,
|
|
@@ -230,32 +231,6 @@ import { makeL2BlockId } from '../l2_block_source.js';
|
|
|
230
231
|
return true;
|
|
231
232
|
}
|
|
232
233
|
/**
|
|
233
|
-
* Returns whether the source tip differs from the local one and therefore warrants a tier event. Compares block
|
|
234
|
-
* number and, when both hashes are known, block hash. The hash comparison is skipped when the local hash is
|
|
235
|
-
* undefined or missing: world-state legitimately reports `undefined` hashes for tips ahead of its synced range,
|
|
236
|
-
* and comparing against an undefined hash would re-emit the event on every poll.
|
|
237
|
-
*/ tipDiffers(localBlock, sourceTip) {
|
|
238
|
-
return this.blockTipDiffers(localBlock, sourceTip.block);
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Block-only variant of {@link tipDiffers} for the proposed tip (an {@link L2BlockId}, with no checkpoint). Compares
|
|
242
|
-
* block number and, when the local hash is known, block hash. The hash comparison is skipped when the local hash is
|
|
243
|
-
* undefined: world-state reports `undefined` for its proposed hash, and a strict comparison would re-emit
|
|
244
|
-
* `chain-proposed` on every poll for it. ({@link L2TipsStoreBase} consumers always carry a hash, so the leniency is
|
|
245
|
-
* inert for them.)
|
|
246
|
-
*/ blockTipDiffers(localBlock, sourceBlock) {
|
|
247
|
-
if (localBlock === undefined) {
|
|
248
|
-
return true;
|
|
249
|
-
}
|
|
250
|
-
if (sourceBlock.number !== localBlock.number) {
|
|
251
|
-
return true;
|
|
252
|
-
}
|
|
253
|
-
if (localBlock.hash === undefined) {
|
|
254
|
-
return false;
|
|
255
|
-
}
|
|
256
|
-
return sourceBlock.hash !== localBlock.hash;
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
234
|
* Returns whether the source and local agree on the block hash at a given height.
|
|
260
235
|
* @param blockNumber - The block number to test.
|
|
261
236
|
* @param args - A cache of data already requested from source (to avoid re-requesting it) and the source's
|
|
@@ -45,4 +45,22 @@ export declare class MaliciousCommitteeAttestationsAndSigners extends CommitteeA
|
|
|
45
45
|
constructor(attestations: CommitteeAttestation[], signers: EthAddress[], signatureContext: CoordinationSignatureContext);
|
|
46
46
|
getSigners(): EthAddress[];
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Malicious extension of CommitteeAttestationsAndSigners that rewrites every non-proposer signature slot's
|
|
50
|
+
* recovery byte to yParity form (v ∈ {0, 1}) in the packed output, after the honest `packAttestations` has
|
|
51
|
+
* already canonicalized it to v ∈ {27, 28}. Models a malicious selected proposer that hand-crafts
|
|
52
|
+
* `propose()` calldata L1 accepts but no honest node can byte-replay: each rewritten signature still
|
|
53
|
+
* recovers to the same member (r, s and the recovery parity are preserved), the bitmap bits stay set, and
|
|
54
|
+
* `getSigners()` stays consistent, so `propose()` does not revert `SignersSizeMismatch` -- yet the
|
|
55
|
+
* checkpoint can never be proven (`ECDSA.recover` rejects v ∉ {27, 28}). The proposer's own slot is left
|
|
56
|
+
* canonical so L1 `verifyProposer` (which recovers that slot) still accepts the checkpoint. For testing only.
|
|
57
|
+
*/
|
|
58
|
+
export declare class MaliciousYParityCommitteeAttestationsAndSigners extends CommitteeAttestationsAndSigners {
|
|
59
|
+
/** Committee index of the proposer's own slot, left canonical so `propose()` passes `verifyProposer`. */
|
|
60
|
+
private proposerIndex;
|
|
61
|
+
constructor(attestations: CommitteeAttestation[],
|
|
62
|
+
/** Committee index of the proposer's own slot, left canonical so `propose()` passes `verifyProposer`. */
|
|
63
|
+
proposerIndex: number, signatureContext: CoordinationSignatureContext);
|
|
64
|
+
getPackedAttestations(): ViemCommitteeAttestations;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25zX2FuZF9zaWduZXJzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmxvY2svcHJvcG9zYWwvYXR0ZXN0YXRpb25zX2FuZF9zaWduZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJM0UsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQ0wsS0FBSyw0QkFBNEIsRUFDakMsS0FBSyx5QkFBeUIsRUFDOUIsS0FBSyxRQUFRLEVBRWQsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUUscUJBQWEsK0JBQWdDLFlBQVcsUUFBUTtJQUlyRCxZQUFZLEVBQUUsb0JBQW9CLEVBQUU7YUFDM0IsZ0JBQWdCLEVBQUUsNEJBQTRCO0lBSmhFLFFBQVEsQ0FBQyxXQUFXLEVBQUUseUJBQXlCLENBQTRCO0lBRTNFLFlBQ1MsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEVBQzNCLGdCQUFnQixFQUFFLDRCQUE0QixFQUM1RDtJQUVKLE1BQU0sS0FBSyxNQUFNOzs7Ozs7Ozs7Ozs7UUFPaEI7SUFFRCxnQkFBZ0IsSUFBSSxNQUFNLENBV3pCO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSw0QkFBNEIsR0FBRywrQkFBK0IsQ0FFNUY7SUFFRCxRQUFRLFNBRVA7SUFFRCxVQUFVLGlCQUVUO0lBRUQscUJBQXFCLDJCQUVwQjtJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLHlCQUF5QixDQW1FdkY7SUFFRCxxQkFBcUIsSUFBSSx5QkFBeUIsQ0FFakQ7Q0FDRjtBQUVEOzs7OztHQUtHO0FBQ0gscUJBQWEsd0NBQXlDLFNBQVEsK0JBQStCO0lBR3pGLE9BQU8sQ0FBQyxPQUFPO0lBRmpCLFlBQ0UsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEVBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFDN0IsZ0JBQWdCLEVBQUUsNEJBQTRCLEVBRy9DO0lBRVEsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUVsQztDQUNGO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gscUJBQWEsK0NBQWdELFNBQVEsK0JBQStCO0lBR2hHLHlHQUF5RztJQUN6RyxPQUFPLENBQUMsYUFBYTtJQUh2QixZQUNFLFlBQVksRUFBRSxvQkFBb0IsRUFBRTtJQUNwQyx5R0FBeUc7SUFDakcsYUFBYSxFQUFFLE1BQU0sRUFDN0IsZ0JBQWdCLEVBQUUsNEJBQTRCLEVBRy9DO0lBRVEscUJBQXFCLElBQUkseUJBQXlCLENBbUIxRDtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attestations_and_signers.d.ts","sourceRoot":"","sources":["../../../src/block/proposal/attestations_and_signers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAI3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,QAAQ,EAEd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE9E,qBAAa,+BAAgC,YAAW,QAAQ;IAIrD,YAAY,EAAE,oBAAoB,EAAE;aAC3B,gBAAgB,EAAE,4BAA4B;IAJhE,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAA4B;IAE3E,YACS,YAAY,EAAE,oBAAoB,EAAE,EAC3B,gBAAgB,EAAE,4BAA4B,EAC5D;IAEJ,MAAM,KAAK,MAAM;;;;;;;;;;;;QAOhB;IAED,gBAAgB,IAAI,MAAM,CAWzB;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,4BAA4B,GAAG,+BAA+B,CAE5F;IAED,QAAQ,SAEP;IAED,UAAU,iBAET;IAED,qBAAqB,2BAEpB;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,yBAAyB,
|
|
1
|
+
{"version":3,"file":"attestations_and_signers.d.ts","sourceRoot":"","sources":["../../../src/block/proposal/attestations_and_signers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAI3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,QAAQ,EAEd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE9E,qBAAa,+BAAgC,YAAW,QAAQ;IAIrD,YAAY,EAAE,oBAAoB,EAAE;aAC3B,gBAAgB,EAAE,4BAA4B;IAJhE,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAA4B;IAE3E,YACS,YAAY,EAAE,oBAAoB,EAAE,EAC3B,gBAAgB,EAAE,4BAA4B,EAC5D;IAEJ,MAAM,KAAK,MAAM;;;;;;;;;;;;QAOhB;IAED,gBAAgB,IAAI,MAAM,CAWzB;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,4BAA4B,GAAG,+BAA+B,CAE5F;IAED,QAAQ,SAEP;IAED,UAAU,iBAET;IAED,qBAAqB,2BAEpB;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,oBAAoB,EAAE,GAAG,yBAAyB,CAmEvF;IAED,qBAAqB,IAAI,yBAAyB,CAEjD;CACF;AAED;;;;;GAKG;AACH,qBAAa,wCAAyC,SAAQ,+BAA+B;IAGzF,OAAO,CAAC,OAAO;IAFjB,YACE,YAAY,EAAE,oBAAoB,EAAE,EAC5B,OAAO,EAAE,UAAU,EAAE,EAC7B,gBAAgB,EAAE,4BAA4B,EAG/C;IAEQ,UAAU,IAAI,UAAU,EAAE,CAElC;CACF;AAED;;;;;;;;;GASG;AACH,qBAAa,+CAAgD,SAAQ,+BAA+B;IAGhG,yGAAyG;IACzG,OAAO,CAAC,aAAa;IAHvB,YACE,YAAY,EAAE,oBAAoB,EAAE;IACpC,yGAAyG;IACjG,aAAa,EAAE,MAAM,EAC7B,gBAAgB,EAAE,4BAA4B,EAG/C;IAEQ,qBAAqB,IAAI,yBAAyB,CAmB1D;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { hexToBuffer } from '@aztec/foundation/string';
|
|
1
|
+
import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
|
|
2
2
|
import { encodeAbiParameters, parseAbiParameters } from 'viem';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { coordinationSignatureContextSchema } from '../../p2p/signature_utils.js';
|
|
@@ -58,8 +58,10 @@ export class CommitteeAttestationsAndSigners {
|
|
|
58
58
|
let totalDataSize = 0;
|
|
59
59
|
for (const attestation of viemAttestations){
|
|
60
60
|
const signature = attestation.signature;
|
|
61
|
-
//
|
|
62
|
-
|
|
61
|
+
// A slot is empty (a non-signing member, packed as its address) only when r, s and v are all zero
|
|
62
|
+
// — matching Signature.isEmpty() and getSigners(), so the bitmap popcount and the signers list can
|
|
63
|
+
// never disagree (which would revert propose() with SignersSizeMismatch).
|
|
64
|
+
const isEmpty = signature.v === 0 && BigInt(signature.r) === 0n && BigInt(signature.s) === 0n;
|
|
63
65
|
if (!isEmpty) {
|
|
64
66
|
totalDataSize += 65; // v (1) + r (32) + s (32)
|
|
65
67
|
} else {
|
|
@@ -71,15 +73,17 @@ export class CommitteeAttestationsAndSigners {
|
|
|
71
73
|
// Pack the data
|
|
72
74
|
for (const [i, attestation] of viemAttestations.entries()){
|
|
73
75
|
const signature = attestation.signature;
|
|
74
|
-
//
|
|
75
|
-
const isEmpty = signature.v === 0;
|
|
76
|
+
// Empty iff r, s and v are all zero (see the size-tally loop above).
|
|
77
|
+
const isEmpty = signature.v === 0 && BigInt(signature.r) === 0n && BigInt(signature.s) === 0n;
|
|
76
78
|
if (!isEmpty) {
|
|
77
79
|
// Set bit in bitmap (bit 7-0 in each byte, left to right)
|
|
78
80
|
const byteIndex = Math.floor(i / 8);
|
|
79
81
|
const bitIndex = 7 - i % 8;
|
|
80
82
|
signatureIndices[byteIndex] = (signatureIndices[byteIndex] ?? 0) | 1 << bitIndex;
|
|
81
|
-
// Pack signature: v + r + s
|
|
82
|
-
|
|
83
|
+
// Pack signature: v + r + s. Canonicalize a yParity recovery byte (v = 0/1) to 27/28 — it
|
|
84
|
+
// recovers to the same signer, but L1 ECDSA.recover only accepts 27/28. Any other value is left
|
|
85
|
+
// as-is so a genuinely malformed signature still fails on L1 rather than being silently rewritten.
|
|
86
|
+
signaturesOrAddresses[dataIndex] = signature.v === 0 || signature.v === 1 ? signature.v + 27 : signature.v;
|
|
83
87
|
dataIndex++;
|
|
84
88
|
// Pack r (32 bytes)
|
|
85
89
|
const rBytes = Buffer.from(signature.r.slice(2), 'hex');
|
|
@@ -119,3 +123,39 @@ export class CommitteeAttestationsAndSigners {
|
|
|
119
123
|
return this.signers;
|
|
120
124
|
}
|
|
121
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Malicious extension of CommitteeAttestationsAndSigners that rewrites every non-proposer signature slot's
|
|
128
|
+
* recovery byte to yParity form (v ∈ {0, 1}) in the packed output, after the honest `packAttestations` has
|
|
129
|
+
* already canonicalized it to v ∈ {27, 28}. Models a malicious selected proposer that hand-crafts
|
|
130
|
+
* `propose()` calldata L1 accepts but no honest node can byte-replay: each rewritten signature still
|
|
131
|
+
* recovers to the same member (r, s and the recovery parity are preserved), the bitmap bits stay set, and
|
|
132
|
+
* `getSigners()` stays consistent, so `propose()` does not revert `SignersSizeMismatch` -- yet the
|
|
133
|
+
* checkpoint can never be proven (`ECDSA.recover` rejects v ∉ {27, 28}). The proposer's own slot is left
|
|
134
|
+
* canonical so L1 `verifyProposer` (which recovers that slot) still accepts the checkpoint. For testing only.
|
|
135
|
+
*/ export class MaliciousYParityCommitteeAttestationsAndSigners extends CommitteeAttestationsAndSigners {
|
|
136
|
+
proposerIndex;
|
|
137
|
+
constructor(attestations, /** Committee index of the proposer's own slot, left canonical so `propose()` passes `verifyProposer`. */ proposerIndex, signatureContext){
|
|
138
|
+
super(attestations, signatureContext), this.proposerIndex = proposerIndex;
|
|
139
|
+
}
|
|
140
|
+
getPackedAttestations() {
|
|
141
|
+
const packed = super.getPackedAttestations();
|
|
142
|
+
const data = hexToBuffer(packed.signaturesOrAddresses);
|
|
143
|
+
// Walk the packed byte-vector and rewrite every non-proposer signed slot's v-byte to yParity form. A
|
|
144
|
+
// signed slot occupies 65 bytes (v, r, s); an empty slot occupies 20 bytes (address only).
|
|
145
|
+
let offset = 0;
|
|
146
|
+
for(let i = 0; i < this.attestations.length; i++){
|
|
147
|
+
const isSigned = !this.attestations[i].signature.isEmpty();
|
|
148
|
+
if (isSigned && i !== this.proposerIndex) {
|
|
149
|
+
// `packAttestations` canonicalized v to 27/28; rewrite back to the equivalent yParity byte (0/1),
|
|
150
|
+
// preserving the recovery parity so the signature still recovers to the same member.
|
|
151
|
+
const v = data[offset];
|
|
152
|
+
data[offset] = v >= 27 ? v - 27 : v;
|
|
153
|
+
}
|
|
154
|
+
offset += isSigned ? 65 : 20;
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
signatureIndices: packed.signatureIndices,
|
|
158
|
+
signaturesOrAddresses: bufferToHex(data)
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ViemCommitteeAttestations } from '@aztec/ethereum/contracts';
|
|
1
2
|
import { EpochNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
4
|
import { type ZodFor } from '@aztec/foundation/schemas';
|
|
@@ -19,6 +20,14 @@ export type ValidateCheckpointNegativeResult = {
|
|
|
19
20
|
attestors: EthAddress[];
|
|
20
21
|
/** Committee attestations for this checkpoint as they were posted to L1 */
|
|
21
22
|
attestations: CommitteeAttestation[];
|
|
23
|
+
/**
|
|
24
|
+
* The exact packed `CommitteeAttestations` tuple as posted to L1 calldata, carried verbatim so the
|
|
25
|
+
* invalidation evidence is byte-faithful to the stored `attestationsHash`. A repack via
|
|
26
|
+
* `packAttestations` is not a round-trip inverse of `fromPacked`, so it would diverge from the hash
|
|
27
|
+
* and revert `invalidateBadAttestation`/`invalidateInsufficientAttestations`. Always populated on the
|
|
28
|
+
* calldata validation path, the only production source of invalidation evidence.
|
|
29
|
+
*/
|
|
30
|
+
verbatimAttestations: ViemCommitteeAttestations;
|
|
22
31
|
/** Reason for the checkpoint being invalid: not enough attestations were posted */
|
|
23
32
|
reason: 'insufficient-attestations';
|
|
24
33
|
} | {
|
|
@@ -35,6 +44,12 @@ export type ValidateCheckpointNegativeResult = {
|
|
|
35
44
|
attestors: EthAddress[];
|
|
36
45
|
/** Committee attestations for this checkpoint as they were posted to L1 */
|
|
37
46
|
attestations: CommitteeAttestation[];
|
|
47
|
+
/**
|
|
48
|
+
* The exact packed `CommitteeAttestations` tuple as posted to L1 calldata, carried verbatim so the
|
|
49
|
+
* invalidation evidence is byte-faithful to the stored `attestationsHash`. See the same field on the
|
|
50
|
+
* insufficient-attestations variant for why a repack cannot be used.
|
|
51
|
+
*/
|
|
52
|
+
verbatimAttestations: ViemCommitteeAttestations;
|
|
38
53
|
/** Reason for the checkpoint being invalid: an invalid attestation was posted */
|
|
39
54
|
reason: 'invalid-attestation';
|
|
40
55
|
/** Index in the attestations array of the invalid attestation posted */
|
|
@@ -47,4 +62,4 @@ export type ValidateCheckpointResult = {
|
|
|
47
62
|
export declare const ValidateCheckpointResultSchema: ZodFor<ValidateCheckpointResult>;
|
|
48
63
|
export declare function serializeValidateCheckpointResult(result: ValidateCheckpointResult): Buffer;
|
|
49
64
|
export declare function deserializeValidateCheckpointResult(bufferOrReader: Buffer | BufferReader): ValidateCheckpointResult;
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVfYmxvY2tfcmVzdWx0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvY2svdmFsaWRhdGVfYmxvY2tfcmVzdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFXLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSw2QkFBNkIsQ0FBQztBQUs5RSxPQUFPLEVBQ0wsS0FBSyxjQUFjLEVBSXBCLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFM0Usd0RBQXdEO0FBQ3hELE1BQU0sTUFBTSxnQ0FBZ0MsR0FDeEM7SUFDRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQ2IsOENBQThDO0lBQzlDLFVBQVUsRUFBRSxjQUFjLENBQUM7SUFDM0Isa0VBQWtFO0lBQ2xFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN4QixrREFBa0Q7SUFDbEQsS0FBSyxFQUFFLFdBQVcsQ0FBQztJQUNuQiw0Q0FBNEM7SUFDNUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLG9FQUFvRTtJQUNwRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDeEIsMkVBQTJFO0lBQzNFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JDOzs7Ozs7T0FNRztJQUNILG9CQUFvQixFQUFFLHlCQUF5QixDQUFDO0lBQ2hELG1GQUFtRjtJQUNuRixNQUFNLEVBQUUsMkJBQTJCLENBQUM7Q0FDckMsR0FDRDtJQUNFLEtBQUssRUFBRSxLQUFLLENBQUM7SUFDYiw4Q0FBOEM7SUFDOUMsVUFBVSxFQUFFLGNBQWMsQ0FBQztJQUMzQixrRUFBa0U7SUFDbEUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3hCLGtEQUFrRDtJQUNsRCxLQUFLLEVBQUUsV0FBVyxDQUFDO0lBQ25CLDRDQUE0QztJQUM1QyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2Isb0VBQW9FO0lBQ3BFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN4QiwyRUFBMkU7SUFDM0UsWUFBWSxFQUFFLG9CQUFvQixFQUFFLENBQUM7SUFDckM7Ozs7T0FJRztJQUNILG9CQUFvQixFQUFFLHlCQUF5QixDQUFDO0lBQ2hELGlGQUFpRjtJQUNqRixNQUFNLEVBQUUscUJBQXFCLENBQUM7SUFDOUIsd0VBQXdFO0lBQ3hFLFlBQVksRUFBRSxNQUFNLENBQUM7Q0FDdEIsQ0FBQztBQUVOLHlEQUF5RDtBQUN6RCxNQUFNLE1BQU0sd0JBQXdCLEdBQUc7SUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFBO0NBQUUsR0FBRyxnQ0FBZ0MsQ0FBQztBQVExRixlQUFPLE1BQU0sOEJBQThCLEVBQUUsTUFBTSxDQUFDLHdCQUF3QixDQXlCMUUsQ0FBQztBQUVILHdCQUFnQixpQ0FBaUMsQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLEdBQUcsTUFBTSxDQTJCMUY7QUFFRCx3QkFBZ0IsbUNBQW1DLENBQUMsY0FBYyxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsd0JBQXdCLENBc0NuSCJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate_block_result.d.ts","sourceRoot":"","sources":["../../src/block/validate_block_result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"validate_block_result.d.ts","sourceRoot":"","sources":["../../src/block/validate_block_result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAqB,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAK9E,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,wDAAwD;AACxD,MAAM,MAAM,gCAAgC,GACxC;IACE,KAAK,EAAE,KAAK,CAAC;IACb,8CAA8C;IAC9C,UAAU,EAAE,cAAc,CAAC;IAC3B,kEAAkE;IAClE,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,kDAAkD;IAClD,KAAK,EAAE,WAAW,CAAC;IACnB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,2EAA2E;IAC3E,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC;;;;;;OAMG;IACH,oBAAoB,EAAE,yBAAyB,CAAC;IAChD,mFAAmF;IACnF,MAAM,EAAE,2BAA2B,CAAC;CACrC,GACD;IACE,KAAK,EAAE,KAAK,CAAC;IACb,8CAA8C;IAC9C,UAAU,EAAE,cAAc,CAAC;IAC3B,kEAAkE;IAClE,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,kDAAkD;IAClD,KAAK,EAAE,WAAW,CAAC;IACnB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,2EAA2E;IAC3E,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC;;;;OAIG;IACH,oBAAoB,EAAE,yBAAyB,CAAC;IAChD,iFAAiF;IACjF,MAAM,EAAE,qBAAqB,CAAC;IAC9B,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,yDAAyD;AACzD,MAAM,MAAM,wBAAwB,GAAG;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG,gCAAgC,CAAC;AAQ1F,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,wBAAwB,CAyB1E,CAAC;AAEH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CA2B1F;AAED,wBAAgB,mCAAmC,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,wBAAwB,CAsCnH"}
|
|
@@ -2,10 +2,15 @@ import { EpochNumber, EpochNumberSchema } from '@aztec/foundation/branded-types'
|
|
|
2
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
3
|
import { schemas } from '@aztec/foundation/schemas';
|
|
4
4
|
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
5
|
+
import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
|
|
5
6
|
import { z } from 'zod';
|
|
6
7
|
import { CheckpointInfoSchema, deserializeCheckpointInfo, serializeCheckpointInfo } from '../checkpoint/checkpoint_info.js';
|
|
7
8
|
import { MAX_COMMITTEE_SIZE } from '../deserialization/index.js';
|
|
8
9
|
import { CommitteeAttestation } from './proposal/committee_attestation.js';
|
|
10
|
+
/** Zod schema for the raw packed `CommitteeAttestations` viem tuple (two 0x-prefixed hex strings). */ const ViemCommitteeAttestationsSchema = z.object({
|
|
11
|
+
signatureIndices: schemas.HexStringWith0x,
|
|
12
|
+
signaturesOrAddresses: schemas.HexStringWith0x
|
|
13
|
+
});
|
|
9
14
|
export const ValidateCheckpointResultSchema = z.union([
|
|
10
15
|
z.object({
|
|
11
16
|
valid: z.literal(true)
|
|
@@ -18,6 +23,7 @@ export const ValidateCheckpointResultSchema = z.union([
|
|
|
18
23
|
seed: schemas.BigInt,
|
|
19
24
|
attestors: z.array(schemas.EthAddress),
|
|
20
25
|
attestations: z.array(CommitteeAttestation.schema),
|
|
26
|
+
verbatimAttestations: ViemCommitteeAttestationsSchema,
|
|
21
27
|
reason: z.literal('insufficient-attestations')
|
|
22
28
|
}),
|
|
23
29
|
z.object({
|
|
@@ -28,6 +34,7 @@ export const ValidateCheckpointResultSchema = z.union([
|
|
|
28
34
|
seed: schemas.BigInt,
|
|
29
35
|
attestors: z.array(schemas.EthAddress),
|
|
30
36
|
attestations: z.array(CommitteeAttestation.schema),
|
|
37
|
+
verbatimAttestations: ViemCommitteeAttestationsSchema,
|
|
31
38
|
reason: z.literal('invalid-attestation'),
|
|
32
39
|
invalidIndex: z.number()
|
|
33
40
|
})
|
|
@@ -37,7 +44,9 @@ export function serializeValidateCheckpointResult(result) {
|
|
|
37
44
|
return serializeToBuffer(true);
|
|
38
45
|
}
|
|
39
46
|
const checkpointBuffer = serializeCheckpointInfo(result.checkpoint);
|
|
40
|
-
|
|
47
|
+
const signatureIndices = hexToBuffer(result.verbatimAttestations.signatureIndices);
|
|
48
|
+
const signaturesOrAddresses = hexToBuffer(result.verbatimAttestations.signaturesOrAddresses);
|
|
49
|
+
return serializeToBuffer(result.valid, result.reason, checkpointBuffer.length, checkpointBuffer, result.committee.length, result.committee, result.epoch, result.seed ?? 0n, result.attestors.length, result.attestors, result.attestations.length, result.attestations, result.reason === 'invalid-attestation' ? result.invalidIndex : 0, signatureIndices.length, signatureIndices, signaturesOrAddresses.length, signaturesOrAddresses);
|
|
41
50
|
}
|
|
42
51
|
export function deserializeValidateCheckpointResult(bufferOrReader) {
|
|
43
52
|
const reader = BufferReader.asReader(bufferOrReader);
|
|
@@ -55,6 +64,10 @@ export function deserializeValidateCheckpointResult(bufferOrReader) {
|
|
|
55
64
|
const attestors = reader.readVector(EthAddress, MAX_COMMITTEE_SIZE);
|
|
56
65
|
const attestations = reader.readVector(CommitteeAttestation, MAX_COMMITTEE_SIZE);
|
|
57
66
|
const invalidIndex = reader.readNumber();
|
|
67
|
+
const verbatimAttestations = {
|
|
68
|
+
signatureIndices: bufferToHex(reader.readBuffer()),
|
|
69
|
+
signaturesOrAddresses: bufferToHex(reader.readBuffer())
|
|
70
|
+
};
|
|
58
71
|
if (reason === 'insufficient-attestations') {
|
|
59
72
|
return {
|
|
60
73
|
valid,
|
|
@@ -64,7 +77,8 @@ export function deserializeValidateCheckpointResult(bufferOrReader) {
|
|
|
64
77
|
epoch,
|
|
65
78
|
seed,
|
|
66
79
|
attestors,
|
|
67
|
-
attestations
|
|
80
|
+
attestations,
|
|
81
|
+
verbatimAttestations
|
|
68
82
|
};
|
|
69
83
|
} else if (reason === 'invalid-attestation') {
|
|
70
84
|
return {
|
|
@@ -76,7 +90,8 @@ export function deserializeValidateCheckpointResult(bufferOrReader) {
|
|
|
76
90
|
seed,
|
|
77
91
|
attestors,
|
|
78
92
|
invalidIndex,
|
|
79
|
-
attestations
|
|
93
|
+
attestations,
|
|
94
|
+
verbatimAttestations
|
|
80
95
|
};
|
|
81
96
|
} else {
|
|
82
97
|
const _ = reason;
|
|
@@ -69,4 +69,4 @@ export declare function checkConsensusEnvOverrides(networkConfig: Record<string,
|
|
|
69
69
|
export declare function allowsNetworkConfigOverride(env?: {
|
|
70
70
|
[key: string]: string | undefined;
|
|
71
71
|
}): boolean;
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1jb25zZW5zdXMtY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL25ldHdvcmstY29uc2Vuc3VzLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBb0QsTUFBTSx3QkFBd0IsQ0FBQztBQUdsSCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVVoRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxlQUFPLE1BQU0sMEJBQTBCLDJsREFzREQsQ0FBQztBQUV2Qyw4RkFBOEY7QUFDOUYsTUFBTSxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQU8sMEJBQTBCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUUxRTs7Ozs7R0FLRztBQUNILE1BQU0sTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLEdBQUcsc0JBQXNCLENBQUMsR0FDeEcsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEdBQUcsd0JBQXdCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDO0FBWXZIOzs7Ozs7R0FNRztBQUNILHdCQUFnQixnQ0FBZ0MsQ0FDOUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FDaEQsc0JBQXNCLENBaUJ4QjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQWdCLDhCQUE4QixDQUFDLE1BQU0sRUFBRSxzQkFBc0IsR0FBRyxNQUFNLEVBQUUsQ0FtRXZGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsd0JBQWdCLDBCQUEwQixDQUN4QyxhQUFhLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUN4RCxHQUFHLEdBQUU7SUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQTtDQUFnQixFQUN4RCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEtBQUssSUFBSSxHQUMxQixNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQWlEeEI7QUFFRCw4R0FBOEc7QUFDOUcsd0JBQWdCLDJCQUEyQixDQUFDLEdBQUcsR0FBRTtJQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFBO0NBQWdCLEdBQUcsT0FBTyxDQUc3RyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-consensus-config.d.ts","sourceRoot":"","sources":["../../src/config/network-consensus-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"network-consensus-config.d.ts","sourceRoot":"","sources":["../../src/config/network-consensus-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAoD,MAAM,wBAAwB,CAAC;AAGlH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAUhE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,0BAA0B,2lDAsDD,CAAC;AAEvC,8FAA8F;AAC9F,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,GAAG,sBAAsB,CAAC,GACxG,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,wBAAwB,GAAG,oCAAoC,CAAC,CAAC,CAAC;AAYvH;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAChD,sBAAsB,CAiBxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAmEvF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EACxD,GAAG,GAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAgB,EACxD,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiDxB;AAED,8GAA8G;AAC9G,wBAAgB,2BAA2B,CAAC,GAAG,GAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAgB,GAAG,OAAO,CAG7G"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l1ContractsConfigMappings } from '@aztec/ethereum/config';
|
|
1
|
+
import { l1ContractsConfigMappings, validateSlotDurations } from '@aztec/ethereum/config';
|
|
2
2
|
import { pickConfigMappings } from '@aztec/foundation/config';
|
|
3
3
|
import { DEFAULT_CHECKPOINT_PROPOSAL_INIT_TIME, DEFAULT_CHECKPOINT_PROPOSAL_PREPARE_TIME, DEFAULT_MIN_BLOCK_DURATION, DEFAULT_P2P_PROPAGATION_TIME } from '../timetable/budgets.js';
|
|
4
4
|
import { ProposerTimetable } from '../timetable/proposer_timetable.js';
|
|
@@ -126,18 +126,10 @@ import { sharedSequencerConfigMappings } from './sequencer-config.js';
|
|
|
126
126
|
if (errors.length > 0) {
|
|
127
127
|
return errors;
|
|
128
128
|
}
|
|
129
|
-
|
|
130
|
-
errors.push(`ethereumSlotDuration must be positive (got ${config.ethereumSlotDuration})`);
|
|
131
|
-
}
|
|
129
|
+
errors.push(...validateSlotDurations(config));
|
|
132
130
|
if (config.blockDurationMs <= 0) {
|
|
133
131
|
errors.push(`blockDurationMs must be positive (got ${config.blockDurationMs})`);
|
|
134
132
|
}
|
|
135
|
-
if (config.aztecSlotDuration <= 0) {
|
|
136
|
-
errors.push(`aztecSlotDuration must be positive (got ${config.aztecSlotDuration})`);
|
|
137
|
-
}
|
|
138
|
-
if (config.ethereumSlotDuration > 0 && config.aztecSlotDuration % config.ethereumSlotDuration !== 0) {
|
|
139
|
-
errors.push(`aztecSlotDuration (${config.aztecSlotDuration}s) must be a multiple of ethereumSlotDuration ` + `(${config.ethereumSlotDuration}s)`);
|
|
140
|
-
}
|
|
141
133
|
if (config.blockDurationMs / 1000 > config.aztecSlotDuration) {
|
|
142
134
|
errors.push(`blockDurationMs (${config.blockDurationMs}ms) exceeds aztecSlotDuration (${config.aztecSlotDuration}s)`);
|
|
143
135
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { type FunctionAbi, FunctionSelector } from '../abi/index.js';
|
|
3
3
|
import type { AztecAddress } from '../aztec-address/index.js';
|
|
4
|
-
import type { ContractInstance } from './interfaces/contract_instance.js';
|
|
4
|
+
import type { ContractInstance, ContractInstancePreimage } from './interfaces/contract_instance.js';
|
|
5
|
+
import type { PartialAddress } from './partial_address.js';
|
|
5
6
|
/**
|
|
6
7
|
* Returns the deployment address for a given contract instance.
|
|
7
8
|
* ```
|
|
@@ -11,7 +12,7 @@ import type { ContractInstance } from './interfaces/contract_instance.js';
|
|
|
11
12
|
* ```
|
|
12
13
|
* @param instance - A contract instance for which to calculate the deployment address.
|
|
13
14
|
*/
|
|
14
|
-
export declare function computeContractAddressFromInstance(instance:
|
|
15
|
+
export declare function computeContractAddressFromInstance(instance: ContractInstancePreimage | ({
|
|
15
16
|
originalContractClassId: Fr;
|
|
16
17
|
saltedInitializationHash: Fr;
|
|
17
18
|
} & Pick<ContractInstance, 'publicKeys'>)): Promise<AztecAddress>;
|
|
@@ -22,7 +23,7 @@ export declare function computeContractAddressFromInstance(instance: ContractIns
|
|
|
22
23
|
export declare function computePartialAddress(instance: Pick<ContractInstance, 'originalContractClassId' | 'initializationHash' | 'salt' | 'deployer' | 'immutablesHash'> | {
|
|
23
24
|
originalContractClassId: Fr;
|
|
24
25
|
saltedInitializationHash: Fr;
|
|
25
|
-
}): Promise<
|
|
26
|
+
}): Promise<PartialAddress>;
|
|
26
27
|
/**
|
|
27
28
|
* Computes the salted initialization hash for an address, defined as the hash of the salt and initialization hash.
|
|
28
29
|
* @param instance - Contract instance for which to compute the salted initialization hash.
|
|
@@ -42,4 +43,4 @@ export declare function computeInitializationHash(initFn: FunctionAbi | undefine
|
|
|
42
43
|
* @returns The hash.
|
|
43
44
|
*/
|
|
44
45
|
export declare function computeInitializationHashFromEncodedArgs(initFn: FunctionSelector, encodedArgs: Fr[]): Promise<Fr>;
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RfYWRkcmVzcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0L2NvbnRyYWN0X2FkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxLQUFLLFdBQVcsRUFBRSxnQkFBZ0IsRUFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUc5RCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BHLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSTNEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQXNCLGtDQUFrQyxDQUN0RCxRQUFRLEVBQ0osd0JBQXdCLEdBQ3hCLENBQUM7SUFBRSx1QkFBdUIsRUFBRSxFQUFFLENBQUM7SUFBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUE7Q0FBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQyxHQUN6RyxPQUFPLENBQUMsWUFBWSxDQUFDLENBR3ZCO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQXNCLHFCQUFxQixDQUN6QyxRQUFRLEVBQ0osSUFBSSxDQUFDLGdCQUFnQixFQUFFLHlCQUF5QixHQUFHLG9CQUFvQixHQUFHLE1BQU0sR0FBRyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsR0FDakg7SUFBRSx1QkFBdUIsRUFBRSxFQUFFLENBQUM7SUFBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUE7Q0FBRSxHQUNoRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBVXpCO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQWdCLCtCQUErQixDQUM3QyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLG9CQUFvQixHQUFHLE1BQU0sR0FBRyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsR0FDOUYsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUtiO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBc0IseUJBQXlCLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FPekc7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFzQix3Q0FBd0MsQ0FDNUQsTUFBTSxFQUFFLGdCQUFnQixFQUN4QixXQUFXLEVBQUUsRUFBRSxFQUFFLEdBQ2hCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FHYiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract_address.d.ts","sourceRoot":"","sources":["../../src/contract/contract_address.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,KAAK,WAAW,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"contract_address.d.ts","sourceRoot":"","sources":["../../src/contract/contract_address.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,KAAK,WAAW,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D;;;;;;;;GAQG;AACH,wBAAsB,kCAAkC,CACtD,QAAQ,EACJ,wBAAwB,GACxB,CAAC;IAAE,uBAAuB,EAAE,EAAE,CAAC;IAAC,wBAAwB,EAAE,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,GACzG,OAAO,CAAC,YAAY,CAAC,CAGvB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EACJ,IAAI,CAAC,gBAAgB,EAAE,yBAAyB,GAAG,oBAAoB,GAAG,MAAM,GAAG,UAAU,GAAG,gBAAgB,CAAC,GACjH;IAAE,uBAAuB,EAAE,EAAE,CAAC;IAAC,wBAAwB,EAAE,EAAE,CAAA;CAAE,GAChE,OAAO,CAAC,cAAc,CAAC,CAUzB;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,GAAG,MAAM,GAAG,UAAU,GAAG,gBAAgB,CAAC,GAC9F,OAAO,CAAC,EAAE,CAAC,CAKb;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAOzG;AAED;;;;;GAKG;AACH,wBAAsB,wCAAwC,CAC5D,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,EAAE,EAAE,GAChB,OAAO,CAAC,EAAE,CAAC,CAGb"}
|
|
@@ -4,7 +4,7 @@ import type { FieldsOf } from '@aztec/foundation/types';
|
|
|
4
4
|
import { type ContractArtifact, type FunctionAbi } from '../abi/index.js';
|
|
5
5
|
import { AztecAddress } from '../aztec-address/index.js';
|
|
6
6
|
import { PublicKeys } from '../keys/public_keys.js';
|
|
7
|
-
import type { ContractInstance, ContractInstanceWithAddress } from './interfaces/contract_instance.js';
|
|
7
|
+
import type { ContractInstance, ContractInstancePreimage, ContractInstancePreimageWithAddress, ContractInstanceWithAddress } from './interfaces/contract_instance.js';
|
|
8
8
|
export type ContractInstantiationData = {
|
|
9
9
|
constructorArtifact?: FunctionAbi | string;
|
|
10
10
|
constructorArgs?: any[];
|
|
@@ -31,6 +31,20 @@ export declare class SerializableContractInstance {
|
|
|
31
31
|
static random(opts?: Partial<FieldsOf<ContractInstance>>): Promise<SerializableContractInstance>;
|
|
32
32
|
static default(): SerializableContractInstance;
|
|
33
33
|
}
|
|
34
|
+
export declare class SerializableContractInstancePreimage {
|
|
35
|
+
readonly version: 2;
|
|
36
|
+
readonly salt: Fr;
|
|
37
|
+
readonly deployer: AztecAddress;
|
|
38
|
+
readonly originalContractClassId: Fr;
|
|
39
|
+
readonly initializationHash: Fr;
|
|
40
|
+
readonly immutablesHash: Fr;
|
|
41
|
+
readonly publicKeys: PublicKeys;
|
|
42
|
+
constructor(instance: ContractInstancePreimage);
|
|
43
|
+
toBuffer(): Buffer<ArrayBufferLike>;
|
|
44
|
+
/** Returns a copy of this object with its address included. */
|
|
45
|
+
withAddress(address: AztecAddress): ContractInstancePreimageWithAddress;
|
|
46
|
+
static fromBuffer(bufferOrReader: Buffer | BufferReader): SerializableContractInstancePreimage;
|
|
47
|
+
}
|
|
34
48
|
/**
|
|
35
49
|
* Generates a Contract Instance from some instantiation params.
|
|
36
50
|
* @param artifact - The account contract build artifact.
|
|
@@ -38,4 +52,4 @@ export declare class SerializableContractInstance {
|
|
|
38
52
|
* @returns - The contract instance
|
|
39
53
|
*/
|
|
40
54
|
export declare function getContractInstanceFromInstantiationParams(artifact: ContractArtifact, opts: ContractInstantiationData): Promise<ContractInstanceWithAddress>;
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RfaW5zdGFuY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdC9jb250cmFjdF9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBaUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRixPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsS0FBSyxnQkFBZ0IsRUFDckIsS0FBSyxXQUFXLEVBS2pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU1wRCxPQUFPLEtBQUssRUFDVixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLG1DQUFtQyxFQUNuQywyQkFBMkIsRUFDNUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUkzQyxNQUFNLE1BQU0seUJBQXlCLEdBQUc7SUFDdEMsbUJBQW1CLENBQUMsRUFBRSxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQzNDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQzNCLElBQUksRUFBRSxFQUFFLENBQUM7SUFDVCxVQUFVLENBQUMsRUFBRSxVQUFVLENBQUM7SUFDeEIsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDO0lBQ3hCLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUNyQixDQUFDO0FBRUYscUJBQWEsNEJBQTRCO0lBQ3ZDLFNBQWdCLE9BQU8sSUFBVztJQUNsQyxTQUFnQixJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3pCLFNBQWdCLFFBQVEsRUFBRSxZQUFZLENBQUM7SUFDdkMsU0FBZ0Isc0JBQXNCLEVBQUUsRUFBRSxDQUFDO0lBQzNDLFNBQWdCLHVCQUF1QixFQUFFLEVBQUUsQ0FBQztJQUM1QyxTQUFnQixrQkFBa0IsRUFBRSxFQUFFLENBQUM7SUFDdkMsU0FBZ0IsY0FBYyxFQUFFLEVBQUUsQ0FBQztJQUNuQyxTQUFnQixVQUFVLEVBQUUsVUFBVSxDQUFDO0lBRXZDLFlBQVksUUFBUSxFQUFFLGdCQUFnQixFQVdyQztJQUVNLFFBQVEsNEJBV2Q7SUFFRCwrREFBK0Q7SUFDL0QsV0FBVyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsMkJBQTJCLENBRTlEO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsTUFBTSxHQUFHLFlBQVksZ0NBWXREO0lBRUQsT0FBYSxNQUFNLENBQUMsSUFBSSxHQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBTSx5Q0FZakU7SUFFRCxNQUFNLENBQUMsT0FBTyxpQ0FXYjtDQUNGO0FBRUQscUJBQWEsb0NBQW9DO0lBQy9DLFNBQWdCLE9BQU8sSUFBVztJQUNsQyxTQUFnQixJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQ3pCLFNBQWdCLFFBQVEsRUFBRSxZQUFZLENBQUM7SUFDdkMsU0FBZ0IsdUJBQXVCLEVBQUUsRUFBRSxDQUFDO0lBQzVDLFNBQWdCLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztJQUN2QyxTQUFnQixjQUFjLEVBQUUsRUFBRSxDQUFDO0lBQ25DLFNBQWdCLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFFdkMsWUFBWSxRQUFRLEVBQUUsd0JBQXdCLEVBVTdDO0lBRU0sUUFBUSw0QkFVZDtJQUVELCtEQUErRDtJQUMvRCxXQUFXLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRyxtQ0FBbUMsQ0FFdEU7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxNQUFNLEdBQUcsWUFBWSxHQUFHLG9DQUFvQyxDQWU3RjtDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBc0IsMENBQTBDLENBQzlELFFBQVEsRUFBRSxnQkFBZ0IsRUFDMUIsSUFBSSxFQUFFLHlCQUF5QixHQUM5QixPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0EyQnRDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract_instance.d.ts","sourceRoot":"","sources":["../../src/contract/contract_instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,YAAY,EAAiC,MAAM,6BAA6B,CAAC;AAC1F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAKjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMpD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"contract_instance.d.ts","sourceRoot":"","sources":["../../src/contract/contract_instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,YAAY,EAAiC,MAAM,6BAA6B,CAAC;AAC1F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAKjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMpD,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACxB,mCAAmC,EACnC,2BAA2B,EAC5B,MAAM,mCAAmC,CAAC;AAI3C,MAAM,MAAM,yBAAyB,GAAG;IACtC,mBAAmB,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC3C,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,EAAE,CAAC;IACT,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,cAAc,CAAC,EAAE,EAAE,CAAC;CACrB,CAAC;AAEF,qBAAa,4BAA4B;IACvC,SAAgB,OAAO,IAAW;IAClC,SAAgB,IAAI,EAAE,EAAE,CAAC;IACzB,SAAgB,QAAQ,EAAE,YAAY,CAAC;IACvC,SAAgB,sBAAsB,EAAE,EAAE,CAAC;IAC3C,SAAgB,uBAAuB,EAAE,EAAE,CAAC;IAC5C,SAAgB,kBAAkB,EAAE,EAAE,CAAC;IACvC,SAAgB,cAAc,EAAE,EAAE,CAAC;IACnC,SAAgB,UAAU,EAAE,UAAU,CAAC;IAEvC,YAAY,QAAQ,EAAE,gBAAgB,EAWrC;IAEM,QAAQ,4BAWd;IAED,+DAA+D;IAC/D,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,2BAA2B,CAE9D;IAED,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,gCAYtD;IAED,OAAa,MAAM,CAAC,IAAI,GAAE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAM,yCAYjE;IAED,MAAM,CAAC,OAAO,iCAWb;CACF;AAED,qBAAa,oCAAoC;IAC/C,SAAgB,OAAO,IAAW;IAClC,SAAgB,IAAI,EAAE,EAAE,CAAC;IACzB,SAAgB,QAAQ,EAAE,YAAY,CAAC;IACvC,SAAgB,uBAAuB,EAAE,EAAE,CAAC;IAC5C,SAAgB,kBAAkB,EAAE,EAAE,CAAC;IACvC,SAAgB,cAAc,EAAE,EAAE,CAAC;IACnC,SAAgB,UAAU,EAAE,UAAU,CAAC;IAEvC,YAAY,QAAQ,EAAE,wBAAwB,EAU7C;IAEM,QAAQ,4BAUd;IAED,+DAA+D;IAC/D,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,mCAAmC,CAEtE;IAED,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,oCAAoC,CAe7F;CACF;AAED;;;;;GAKG;AACH,wBAAsB,0CAA0C,CAC9D,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,2BAA2B,CAAC,CA2BtC"}
|