@aztec/stdlib 6.0.0-nightly.20260810 → 6.0.0-nightly.20260821
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/abi/abi.d.ts +4 -3
- package/dest/abi/abi.d.ts.map +1 -1
- package/dest/abi/abi.js +5 -1
- package/dest/abi/contract_artifact.d.ts +7 -2
- package/dest/abi/contract_artifact.d.ts.map +1 -1
- package/dest/abi/contract_artifact.js +18 -19
- package/dest/avm/avm.d.ts +3 -2
- package/dest/avm/avm.d.ts.map +1 -1
- package/dest/avm/avm.js +9 -3
- package/dest/avm/avm_proving_request.d.ts +70 -70
- package/dest/block/l2_block.d.ts +1 -2
- package/dest/block/l2_block.d.ts.map +1 -1
- package/dest/block/l2_block.js +2 -3
- package/dest/block/l2_block_source.d.ts +3 -6
- package/dest/block/l2_block_source.d.ts.map +1 -1
- package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts +11 -20
- package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts.map +1 -1
- package/dest/block/l2_block_stream/event_driven_l2_block_stream.js +12 -116
- package/dest/checkpoint/checkpoint_data.d.ts +14 -2
- package/dest/checkpoint/checkpoint_data.d.ts.map +1 -1
- package/dest/checkpoint/checkpoint_data.js +2 -1
- package/dest/checkpoint/index.d.ts +2 -1
- package/dest/checkpoint/index.d.ts.map +1 -1
- package/dest/checkpoint/index.js +1 -0
- package/dest/checkpoint/previous_checkpoint_inbox_rolling_hash.d.ts +21 -0
- package/dest/checkpoint/previous_checkpoint_inbox_rolling_hash.d.ts.map +1 -0
- package/dest/checkpoint/previous_checkpoint_inbox_rolling_hash.js +34 -0
- package/dest/checkpoint/simulation_overrides.d.ts +2 -2
- package/dest/checkpoint/simulation_overrides.d.ts.map +1 -1
- package/dest/checkpoint/simulation_overrides.js +11 -8
- package/dest/config/network-consensus-config.d.ts +4 -3
- package/dest/config/network-consensus-config.d.ts.map +1 -1
- package/dest/config/network-consensus-config.js +9 -4
- package/dest/config/node-rpc-config.d.ts +13 -1
- package/dest/config/node-rpc-config.d.ts.map +1 -1
- package/dest/config/node-rpc-config.js +34 -1
- package/dest/deserialization/index.d.ts +17 -17
- package/dest/deserialization/index.d.ts.map +1 -1
- package/dest/deserialization/index.js +18 -18
- package/dest/gas/gas_settings.d.ts +17 -5
- package/dest/gas/gas_settings.d.ts.map +1 -1
- package/dest/gas/gas_settings.js +4 -4
- package/dest/gas/tx_gas_limits.d.ts +3 -4
- package/dest/gas/tx_gas_limits.d.ts.map +1 -1
- package/dest/gas/tx_gas_limits.js +4 -5
- package/dest/interfaces/archiver.d.ts +2 -2
- package/dest/interfaces/archiver.d.ts.map +1 -1
- package/dest/interfaces/archiver.js +32 -5
- package/dest/interfaces/aztec-node-admin.d.ts +2 -1
- package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.d.ts +22 -4
- package/dest/interfaces/aztec-node.d.ts.map +1 -1
- package/dest/interfaces/aztec-node.js +11 -9
- package/dest/interfaces/block-builder.d.ts +11 -2
- package/dest/interfaces/block-builder.d.ts.map +1 -1
- package/dest/interfaces/configs.d.ts +7 -1
- package/dest/interfaces/configs.d.ts.map +1 -1
- package/dest/interfaces/configs.js +2 -1
- package/dest/interfaces/p2p.d.ts +18 -1
- package/dest/interfaces/p2p.d.ts.map +1 -1
- package/dest/interfaces/p2p.js +8 -0
- package/dest/interfaces/proving-job.d.ts +17 -42
- package/dest/interfaces/proving-job.d.ts.map +1 -1
- package/dest/interfaces/proving-job.js +16 -47
- package/dest/interfaces/server_circuit_prover.d.ts +8 -15
- package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
- package/dest/interfaces/validator.d.ts +7 -7
- package/dest/interfaces/validator.d.ts.map +1 -1
- package/dest/messaging/append_l1_to_l2_messages.d.ts +5 -5
- package/dest/messaging/append_l1_to_l2_messages.d.ts.map +1 -1
- package/dest/messaging/append_l1_to_l2_messages.js +4 -8
- package/dest/messaging/inbox_bucket.d.ts +77 -0
- package/dest/messaging/inbox_bucket.d.ts.map +1 -0
- package/dest/messaging/inbox_bucket.js +73 -0
- package/dest/messaging/inbox_consumption.d.ts +55 -0
- package/dest/messaging/inbox_consumption.d.ts.map +1 -0
- package/dest/messaging/inbox_consumption.js +53 -0
- package/dest/messaging/inbox_rolling_hash.d.ts +16 -0
- package/dest/messaging/inbox_rolling_hash.d.ts.map +1 -0
- package/dest/messaging/inbox_rolling_hash.js +23 -0
- package/dest/messaging/index.d.ts +6 -3
- package/dest/messaging/index.d.ts.map +1 -1
- package/dest/messaging/index.js +5 -2
- package/dest/messaging/l1_to_l2_message_bundle.d.ts +31 -0
- package/dest/messaging/l1_to_l2_message_bundle.d.ts.map +1 -0
- package/dest/messaging/l1_to_l2_message_bundle.js +51 -0
- package/dest/messaging/l1_to_l2_message_source.d.ts +44 -10
- package/dest/messaging/l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/messaging/l1_to_l2_message_sponge.d.ts +40 -0
- package/dest/messaging/l1_to_l2_message_sponge.d.ts.map +1 -0
- package/dest/messaging/l1_to_l2_message_sponge.js +56 -0
- package/dest/noir/index.d.ts +3 -3
- package/dest/noir/index.d.ts.map +1 -1
- package/dest/p2p/block_proposal.d.ts +24 -9
- package/dest/p2p/block_proposal.d.ts.map +1 -1
- package/dest/p2p/block_proposal.js +42 -20
- package/dest/p2p/checkpoint_attestation.d.ts +1 -1
- package/dest/p2p/checkpoint_proposal.d.ts +13 -3
- package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
- package/dest/p2p/checkpoint_proposal.js +26 -8
- package/dest/p2p/consensus_payload.d.ts +1 -1
- package/dest/p2p/index.d.ts +2 -1
- package/dest/p2p/index.d.ts.map +1 -1
- package/dest/p2p/index.js +1 -0
- package/dest/p2p/validated_proposal.d.ts +35 -0
- package/dest/p2p/validated_proposal.d.ts.map +1 -0
- package/dest/p2p/validated_proposal.js +17 -0
- package/dest/p2p/wire_compat_fixtures.d.ts +7 -0
- package/dest/p2p/wire_compat_fixtures.d.ts.map +1 -0
- package/dest/p2p/wire_compat_fixtures.js +14 -0
- package/dest/parity/inbox_parity_private_inputs.d.ts +61 -0
- package/dest/parity/inbox_parity_private_inputs.d.ts.map +1 -0
- package/dest/parity/inbox_parity_private_inputs.js +79 -0
- package/dest/parity/index.d.ts +2 -3
- package/dest/parity/index.d.ts.map +1 -1
- package/dest/parity/index.js +1 -2
- package/dest/parity/parity_public_inputs.d.ts +15 -14
- package/dest/parity/parity_public_inputs.d.ts.map +1 -1
- package/dest/parity/parity_public_inputs.js +13 -15
- package/dest/proofs/proving_request_type.d.ts +11 -14
- package/dest/proofs/proving_request_type.d.ts.map +1 -1
- package/dest/proofs/proving_request_type.js +10 -13
- package/dest/rollup/block_constant_data.d.ts +8 -8
- package/dest/rollup/block_constant_data.js +4 -4
- package/dest/rollup/block_rollup_public_inputs.d.ts +18 -6
- package/dest/rollup/block_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/block_rollup_public_inputs.js +14 -7
- package/dest/rollup/block_root_rollup_private_inputs.d.ts +109 -113
- package/dest/rollup/block_root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/block_root_rollup_private_inputs.js +79 -130
- package/dest/rollup/checkpoint_header.d.ts +14 -6
- package/dest/rollup/checkpoint_header.d.ts.map +1 -1
- package/dest/rollup/checkpoint_header.js +18 -14
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +22 -2
- package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_rollup_public_inputs.js +14 -3
- package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts +27 -6
- package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts.map +1 -1
- package/dest/rollup/checkpoint_root_rollup_private_inputs.js +17 -4
- package/dest/rollup/root_rollup_public_inputs.d.ts +10 -2
- package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
- package/dest/rollup/root_rollup_public_inputs.js +9 -3
- package/dest/stats/stats.d.ts +2 -2
- package/dest/stats/stats.d.ts.map +1 -1
- package/dest/tests/factories.d.ts +7 -7
- package/dest/tests/factories.d.ts.map +1 -1
- package/dest/tests/factories.js +26 -22
- package/dest/tests/fixtures.d.ts +1 -1
- package/dest/tests/fixtures.d.ts.map +1 -1
- package/dest/tests/fixtures.js +2 -0
- package/dest/tests/mocks.d.ts +4 -2
- package/dest/tests/mocks.d.ts.map +1 -1
- package/dest/tests/mocks.js +4 -7
- package/dest/tx/state_reference.d.ts +5 -2
- package/dest/tx/state_reference.d.ts.map +1 -1
- package/dest/tx/state_reference.js +5 -5
- package/package.json +8 -8
- package/src/abi/abi.ts +7 -2
- package/src/abi/contract_artifact.ts +20 -23
- package/src/avm/avm.ts +11 -1
- package/src/block/l2_block.ts +2 -3
- package/src/block/l2_block_source.ts +2 -5
- package/src/block/l2_block_stream/event_driven_l2_block_stream.ts +17 -143
- package/src/checkpoint/checkpoint_data.ts +14 -1
- package/src/checkpoint/index.ts +1 -0
- package/src/checkpoint/previous_checkpoint_inbox_rolling_hash.ts +46 -0
- package/src/checkpoint/simulation_overrides.ts +11 -8
- package/src/config/network-consensus-config.ts +17 -4
- package/src/config/node-rpc-config.ts +51 -1
- package/src/deserialization/index.ts +18 -18
- package/src/gas/README.md +4 -3
- package/src/gas/gas_settings.ts +7 -3
- package/src/gas/tx_gas_limits.ts +4 -12
- package/src/interfaces/archiver.ts +19 -2
- package/src/interfaces/aztec-node.ts +33 -12
- package/src/interfaces/block-builder.ts +10 -1
- package/src/interfaces/configs.ts +6 -0
- package/src/interfaces/p2p.ts +21 -0
- package/src/interfaces/proving-job.ts +19 -70
- package/src/interfaces/server_circuit_prover.ts +13 -37
- package/src/interfaces/validator.ts +6 -5
- package/src/kernel/private_kernel_reset_dimensions.ts +1 -1
- package/src/messaging/append_l1_to_l2_messages.ts +5 -13
- package/src/messaging/inbox_bucket.ts +125 -0
- package/src/messaging/inbox_consumption.ts +74 -0
- package/src/messaging/inbox_rolling_hash.ts +24 -0
- package/src/messaging/index.ts +5 -2
- package/src/messaging/l1_to_l2_message_bundle.ts +65 -0
- package/src/messaging/l1_to_l2_message_source.ts +48 -10
- package/src/messaging/l1_to_l2_message_sponge.ts +69 -0
- package/src/noir/index.ts +1 -2
- package/src/p2p/block_proposal.ts +41 -28
- package/src/p2p/checkpoint_proposal.ts +31 -6
- package/src/p2p/index.ts +1 -0
- package/src/p2p/validated_proposal.ts +43 -0
- package/src/p2p/wire_compat_fixtures.ts +23 -0
- package/src/parity/inbox_parity_private_inputs.ts +116 -0
- package/src/parity/index.ts +1 -2
- package/src/parity/parity_public_inputs.ts +12 -14
- package/src/proofs/proving_request_type.ts +2 -5
- package/src/rollup/block_constant_data.ts +4 -4
- package/src/rollup/block_rollup_public_inputs.ts +14 -5
- package/src/rollup/block_root_rollup_private_inputs.ts +117 -153
- package/src/rollup/checkpoint_header.ts +17 -13
- package/src/rollup/checkpoint_rollup_public_inputs.ts +15 -0
- package/src/rollup/checkpoint_root_rollup_private_inputs.ts +16 -3
- package/src/rollup/root_rollup_public_inputs.ts +10 -0
- package/src/stats/stats.ts +4 -5
- package/src/tests/factories.ts +38 -32
- package/src/tests/fixtures.ts +3 -0
- package/src/tests/mocks.ts +6 -7
- package/src/tx/state_reference.ts +5 -12
- package/dest/messaging/in_hash.d.ts +0 -6
- package/dest/messaging/in_hash.d.ts.map +0 -1
- package/dest/messaging/in_hash.js +0 -10
- package/dest/messaging/inbox_leaf.d.ts +0 -25
- package/dest/messaging/inbox_leaf.d.ts.map +0 -1
- package/dest/messaging/inbox_leaf.js +0 -42
- package/dest/parity/parity_base_private_inputs.d.ts +0 -39
- package/dest/parity/parity_base_private_inputs.d.ts.map +0 -1
- package/dest/parity/parity_base_private_inputs.js +0 -51
- package/dest/parity/parity_root_private_inputs.d.ts +0 -39
- package/dest/parity/parity_root_private_inputs.d.ts.map +0 -1
- package/dest/parity/parity_root_private_inputs.js +0 -46
- package/src/messaging/in_hash.ts +0 -12
- package/src/messaging/inbox_leaf.ts +0 -44
- package/src/parity/parity_base_private_inputs.ts +0 -71
- package/src/parity/parity_root_private_inputs.ts +0 -64
|
@@ -1,122 +1,36 @@
|
|
|
1
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
2
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
3
3
|
import { L2BlockSourceEvents } from '../l2_block_source.js';
|
|
4
|
-
import { localTipsMatch } from './interfaces.js';
|
|
5
4
|
import { L2BlockStream } from './l2_block_stream.js';
|
|
6
|
-
/** Derives the metadata-only {@link BlockData} view of a hydrated {@link L2Block}. */ async function l2BlockToBlockData(block) {
|
|
7
|
-
return {
|
|
8
|
-
header: block.header,
|
|
9
|
-
archive: block.archive,
|
|
10
|
-
blockHash: await block.hash(),
|
|
11
|
-
checkpointNumber: block.checkpointNumber,
|
|
12
|
-
indexWithinCheckpoint: block.indexWithinCheckpoint
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
5
|
/** Returns the event emitter of a source that exposes one, or undefined for plain (e.g. RPC-backed) sources. */ function getEmitter(source) {
|
|
16
6
|
return 'events' in source ? source.events : undefined;
|
|
17
7
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Wraps a block source so a single sync pass can be served from blocks delivered by an aggregate update event,
|
|
20
|
-
* avoiding round-trips to archiver storage. The fast path is only armed (via {@link activate}) for a pass that is
|
|
21
|
-
* confirmed caught up to the event's pre-pass tips: in that case the event's `blocksAdded` contiguously cover the
|
|
22
|
-
* pass's download range and `toTips` is the exact post-pass tip, so `getL2Tips` can report it without querying the
|
|
23
|
-
* source. When the fast path is not armed, every read delegates to the source, so a stale or partial cache never
|
|
24
|
-
* changes the sync outcome.
|
|
25
|
-
*/ class HotBlockSourceAdapter {
|
|
26
|
-
source;
|
|
27
|
-
log;
|
|
28
|
-
/** Set for the duration of one fast-path pass; undefined when reads must delegate to the source. */ active;
|
|
29
|
-
constructor(source, log){
|
|
30
|
-
this.source = source;
|
|
31
|
-
this.log = log;
|
|
32
|
-
}
|
|
33
|
-
/** Arms the fast path for the current pass: serve these blocks and report `toTips` as the source tips. */ activate(blocks, toTips) {
|
|
34
|
-
const byNumber = new Map();
|
|
35
|
-
for (const block of blocks){
|
|
36
|
-
byNumber.set(block.number, block);
|
|
37
|
-
}
|
|
38
|
-
this.active = {
|
|
39
|
-
byNumber,
|
|
40
|
-
toTips
|
|
41
|
-
};
|
|
42
|
-
this.log.trace(`Armed hot-block fast path`, {
|
|
43
|
-
blocks: byNumber.size,
|
|
44
|
-
toTips
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
/** Disarms the fast path so subsequent reads delegate to the source again. */ deactivate() {
|
|
48
|
-
this.active = undefined;
|
|
49
|
-
}
|
|
50
|
-
getL2Tips() {
|
|
51
|
-
return this.active ? Promise.resolve(this.active.toTips) : this.source.getL2Tips();
|
|
52
|
-
}
|
|
53
|
-
getBlocks(query) {
|
|
54
|
-
const served = this.active ? this.tryServeBlocksFromCache(query) : undefined;
|
|
55
|
-
return served ? Promise.resolve(served) : this.source.getBlocks(query);
|
|
56
|
-
}
|
|
57
|
-
getBlockData(query) {
|
|
58
|
-
if (this.active && 'number' in query) {
|
|
59
|
-
const block = this.active.byNumber.get(query.number);
|
|
60
|
-
if (block) {
|
|
61
|
-
return l2BlockToBlockData(block);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return this.source.getBlockData(query);
|
|
65
|
-
}
|
|
66
|
-
/** Serves a block range from the cache only when it is fully covered by contiguous cached blocks. */ tryServeBlocksFromCache(query) {
|
|
67
|
-
// Only the by-range form is cacheable, and only for the full (not checkpointed-only) chain: the cache may hold
|
|
68
|
-
// uncheckpointed blocks that an onlyCheckpointed query must not receive.
|
|
69
|
-
if (!this.active || !('from' in query) || query.onlyCheckpointed) {
|
|
70
|
-
return undefined;
|
|
71
|
-
}
|
|
72
|
-
const from = query.from;
|
|
73
|
-
const to = from + query.limit - 1;
|
|
74
|
-
const blocks = [];
|
|
75
|
-
for(let n = from; n <= to; n++){
|
|
76
|
-
const block = this.active.byNumber.get(n);
|
|
77
|
-
if (!block) {
|
|
78
|
-
// A gap inside the requested range: bail out and let the source serve the whole range.
|
|
79
|
-
return undefined;
|
|
80
|
-
}
|
|
81
|
-
blocks.push(block);
|
|
82
|
-
}
|
|
83
|
-
return blocks;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
8
|
/**
|
|
87
9
|
* Event-driven wrapper around {@link L2BlockStream}. Subscribes to the source's aggregate `l2BlockSourceUpdated`
|
|
88
|
-
* event (when the source exposes one)
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* the stream's local tips match the event's `fromTips` (it is caught up to where the event began), the event's
|
|
94
|
-
* hydrated blocks are served back through a hot-block cache and the event's `toTips` is reported as the source tips
|
|
95
|
-
* — so the triggered sync re-reads neither block bodies nor tips from the archiver. Otherwise the pass delegates
|
|
96
|
-
* entirely to the source, and the periodic poll guarantees eventual catch-up.
|
|
10
|
+
* event (when the source exposes one) and uses it purely as a doorbell: each event triggers an immediate
|
|
11
|
+
* reconciliation pass instead of waiting for the next tick, while the periodic poll remains the correctness
|
|
12
|
+
* fallback. Every pass reads tips and blocks authoritatively from the source, so a missed, stale, or duplicated
|
|
13
|
+
* event only affects latency. Subsystems keep consuming the same {@link L2BlockStreamEvent}s; the archiver
|
|
14
|
+
* aggregate event is handled entirely here.
|
|
97
15
|
*/ export class EventDrivenL2BlockStream {
|
|
98
|
-
localData;
|
|
99
16
|
log;
|
|
100
|
-
adapter;
|
|
101
17
|
blockStream;
|
|
102
18
|
runningPromise;
|
|
103
19
|
emitter;
|
|
104
20
|
started;
|
|
105
21
|
onSourceUpdated;
|
|
106
22
|
constructor(source, localData, handler, log = createLogger('types:event_driven_block_stream'), opts = {}){
|
|
107
|
-
this.localData = localData;
|
|
108
23
|
this.log = log;
|
|
109
24
|
this.started = false;
|
|
110
|
-
this.onSourceUpdated = (
|
|
25
|
+
this.onSourceUpdated = ()=>{
|
|
111
26
|
// Fire-and-forget: trigger coalesces with any in-flight or periodic pass (see RunningPromise.trigger), so a
|
|
112
27
|
// burst of events does not run passes concurrently. Errors are swallowed by the inner stream's own handler.
|
|
113
|
-
void this.runningPromise.trigger(
|
|
28
|
+
void this.runningPromise.trigger().catch((err)=>this.log.error(`Error in event-triggered block stream sync`, err));
|
|
114
29
|
};
|
|
115
|
-
this.adapter = new HotBlockSourceAdapter(source, log);
|
|
116
30
|
// The inner stream's own RunningPromise is never started; this wrapper owns the polling loop and drives the
|
|
117
31
|
// stream through `sync()` (which runs `work()` directly when the inner loop is stopped).
|
|
118
|
-
this.blockStream = new L2BlockStream(
|
|
119
|
-
this.runningPromise = new RunningPromise(this.
|
|
32
|
+
this.blockStream = new L2BlockStream(source, localData, handler, log, opts);
|
|
33
|
+
this.runningPromise = new RunningPromise(()=>this.blockStream.sync(), log, opts.pollIntervalMS ?? 1000);
|
|
120
34
|
this.emitter = getEmitter(source);
|
|
121
35
|
}
|
|
122
36
|
start() {
|
|
@@ -138,28 +52,10 @@ import { L2BlockStream } from './l2_block_stream.js';
|
|
|
138
52
|
return this.runningPromise.isRunning();
|
|
139
53
|
}
|
|
140
54
|
/**
|
|
141
|
-
* Runs a synchronization pass now, bypassing the poll interval
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
* window. The periodic poll and per-pass reorg handling make the gap a latency effect, never a correctness one.
|
|
55
|
+
* Runs a synchronization pass now, bypassing the poll interval. Resolves once a pass that started after this call
|
|
56
|
+
* completes, so the caller observes state at least as fresh as the moment it asked. Concurrent callers coalesce
|
|
57
|
+
* onto a single such pass. Rejects if the stream is stopped before that pass runs.
|
|
145
58
|
*/ sync() {
|
|
146
59
|
return this.runningPromise.trigger();
|
|
147
60
|
}
|
|
148
|
-
/**
|
|
149
|
-
* Runs a single pass over the underlying block stream. When triggered by an aggregate event and the stream is
|
|
150
|
-
* caught up to the event's pre-pass tips, the event's blocks and tips serve the pass directly; the fast path is
|
|
151
|
-
* always disarmed afterwards so a subsequent poll-driven pass reads from the source.
|
|
152
|
-
*/ async runPass(event) {
|
|
153
|
-
if (event) {
|
|
154
|
-
const localTips = await this.localData.getL2Tips();
|
|
155
|
-
if (localTipsMatch(localTips, event.fromTips)) {
|
|
156
|
-
this.adapter.activate(event.blocksAdded, event.toTips);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
try {
|
|
160
|
-
await this.blockStream.sync();
|
|
161
|
-
} finally{
|
|
162
|
-
this.adapter.deactivate();
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
61
|
}
|
|
@@ -29,6 +29,17 @@ export type ProposedOnlyCheckpointData = {
|
|
|
29
29
|
totalManaUsed: bigint;
|
|
30
30
|
feeAssetPriceModifier: bigint;
|
|
31
31
|
};
|
|
32
|
+
/** Inbox consumption record of a proposed checkpoint, mirroring what `propose` writes for it on L1. */
|
|
33
|
+
export type ProposedInboxConsumption = {
|
|
34
|
+
/**
|
|
35
|
+
* Cumulative Inbox message count consumed as of this checkpoint: its last block's L1-to-L2 message tree leaf count
|
|
36
|
+
* under compact indexing. L1 records this per checkpoint and reads it back as the parent total
|
|
37
|
+
* when validating the next checkpoint's consumption, so a simulation against a not-yet-mined parent must override
|
|
38
|
+
* the parent's cell with it — otherwise the parent reads as having consumed nothing and the child's consumption
|
|
39
|
+
* looks larger than it is.
|
|
40
|
+
*/
|
|
41
|
+
inboxMsgTotal: bigint;
|
|
42
|
+
};
|
|
32
43
|
/** Lightweight checkpoint metadata without full block data. */
|
|
33
44
|
export type CheckpointData = CommonCheckpointData & StorageEnrichedCheckpointData & L1EnrichedCheckpointData;
|
|
34
45
|
/** Input for setting a proposed checkpoint. The archive and checkpointOutHash are computed
|
|
@@ -36,7 +47,7 @@ export type CheckpointData = CommonCheckpointData & StorageEnrichedCheckpointDat
|
|
|
36
47
|
export type ProposedCheckpointInput = CommonCheckpointData & ProposedOnlyCheckpointData;
|
|
37
48
|
/** Full data for a proposed checkpoint (proposed but not yet L1-confirmed).
|
|
38
49
|
* Includes fee-relevant fields used during pipelining to compute the fee header override. */
|
|
39
|
-
export type ProposedCheckpointData = ProposedCheckpointInput & StorageEnrichedCheckpointData;
|
|
50
|
+
export type ProposedCheckpointData = ProposedCheckpointInput & StorageEnrichedCheckpointData & ProposedInboxConsumption;
|
|
40
51
|
export declare const ProposedCheckpointDataSchema: z.ZodObject<{
|
|
41
52
|
checkpointNumber: z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt, z.ZodString]>, z.ZodCoercedNumber<string | number | bigint>>, z.ZodTransform<CheckpointNumber, number>>;
|
|
42
53
|
header: import("@aztec/foundation/schemas").ZodFor<CheckpointHeader>;
|
|
@@ -52,6 +63,7 @@ export declare const ProposedCheckpointDataSchema: z.ZodObject<{
|
|
|
52
63
|
blockCount: z.ZodNumber;
|
|
53
64
|
totalManaUsed: z.ZodPipe<z.ZodUnion<readonly [z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodCoercedBigInt<string | number | bigint>>;
|
|
54
65
|
feeAssetPriceModifier: z.ZodPipe<z.ZodUnion<readonly [z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodCoercedBigInt<string | number | bigint>>;
|
|
66
|
+
inboxMsgTotal: z.ZodPipe<z.ZodUnion<readonly [z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodCoercedBigInt<string | number | bigint>>;
|
|
55
67
|
}, z.core.$strip>;
|
|
56
68
|
export declare const CheckpointDataSchema: z.ZodPipe<z.ZodObject<{
|
|
57
69
|
checkpointNumber: z.ZodPipe<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt, z.ZodString]>, z.ZodCoercedNumber<string | number | bigint>>, z.ZodTransform<CheckpointNumber, number>>;
|
|
@@ -94,4 +106,4 @@ export declare const CheckpointDataSchema: z.ZodPipe<z.ZodObject<{
|
|
|
94
106
|
attestations: CommitteeAttestation[];
|
|
95
107
|
l1: L1PublishedData;
|
|
96
108
|
}>>;
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9kYXRhLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hlY2twb2ludC9jaGVja3BvaW50X2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFFWCxnQkFBZ0IsRUFFakIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHcEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFNUQsb0NBQW9DO0FBQ3BDLE1BQU0sTUFBTSxvQkFBb0IsR0FBRztJQUNqQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztJQUNuQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7SUFDekIsVUFBVSxFQUFFLFdBQVcsQ0FBQztJQUN4QixVQUFVLEVBQUUsTUFBTSxDQUFDO0NBQ3BCLENBQUM7QUFFRiw4REFBOEQ7QUFDOUQsTUFBTSxNQUFNLHdCQUF3QixHQUFHO0lBQ3JDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JDLEVBQUUsRUFBRSxlQUFlLENBQUM7Q0FDckIsQ0FBQztBQUVGLHVEQUF1RDtBQUN2RCxNQUFNLE1BQU0sNkJBQTZCLEdBQUc7SUFDMUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDO0lBQ2hDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztJQUN0QixtR0FBbUc7SUFDbkcscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0NBQy9CLENBQUM7QUFFRixzREFBc0Q7QUFDdEQsTUFBTSxNQUFNLDBCQUEwQixHQUFHO0lBQ3ZDLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0NBQy9CLENBQUM7QUFFRix1R0FBdUc7QUFDdkcsTUFBTSxNQUFNLHdCQUF3QixHQUFHO0lBQ3JDOzs7Ozs7T0FNRztJQUNILGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDdkIsQ0FBQztBQUVGLCtEQUErRDtBQUMvRCxNQUFNLE1BQU0sY0FBYyxHQUFHLG9CQUFvQixHQUFHLDZCQUE2QixHQUFHLHdCQUF3QixDQUFDO0FBRTdHOzREQUM0RDtBQUM1RCxNQUFNLE1BQU0sdUJBQXVCLEdBQUcsb0JBQW9CLEdBQUcsMEJBQTBCLENBQUM7QUFFeEY7OEZBQzhGO0FBQzlGLE1BQU0sTUFBTSxzQkFBc0IsR0FBRyx1QkFBdUIsR0FBRyw2QkFBNkIsR0FBRyx3QkFBd0IsQ0FBQztBQUV4SCxlQUFPLE1BQU0sNEJBQTRCOzs7Ozs7Ozs7Ozs7Ozs7O2lCQVV2QyxDQUFDO0FBRUgsZUFBTyxNQUFNLG9CQUFvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCOUIsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint_data.d.ts","sourceRoot":"","sources":["../../src/checkpoint/checkpoint_data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,gBAAgB,EAEjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,oCAAoC;AACpC,MAAM,MAAM,oBAAoB,GAAG;IACjC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,EAAE,EAAE,eAAe,CAAC;CACrB,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,sBAAsB,CAAC;IAChC,iBAAiB,EAAE,EAAE,CAAC;IACtB,mGAAmG;IACnG,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,sDAAsD;AACtD,MAAM,MAAM,0BAA0B,GAAG;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,6BAA6B,GAAG,wBAAwB,CAAC;AAE7G;4DAC4D;AAC5D,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG,0BAA0B,CAAC;AAExF;8FAC8F;AAC9F,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,GAAG,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"checkpoint_data.d.ts","sourceRoot":"","sources":["../../src/checkpoint/checkpoint_data.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,gBAAgB,EAEjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,oCAAoC;AACpC,MAAM,MAAM,oBAAoB,GAAG;IACjC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,WAAW,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,EAAE,EAAE,eAAe,CAAC;CACrB,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,sBAAsB,CAAC;IAChC,iBAAiB,EAAE,EAAE,CAAC;IACtB,mGAAmG;IACnG,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,sDAAsD;AACtD,MAAM,MAAM,0BAA0B,GAAG;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,6BAA6B,GAAG,wBAAwB,CAAC;AAE7G;4DAC4D;AAC5D,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG,0BAA0B,CAAC;AAExF;8FAC8F;AAC9F,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,GAAG,6BAA6B,GAAG,wBAAwB,CAAC;AAExH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;iBAUvC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwB9B,CAAC"}
|
|
@@ -13,7 +13,8 @@ export const ProposedCheckpointDataSchema = z.object({
|
|
|
13
13
|
startBlock: BlockNumberSchema,
|
|
14
14
|
blockCount: z.number(),
|
|
15
15
|
totalManaUsed: schemas.BigInt,
|
|
16
|
-
feeAssetPriceModifier: schemas.BigInt
|
|
16
|
+
feeAssetPriceModifier: schemas.BigInt,
|
|
17
|
+
inboxMsgTotal: schemas.BigInt
|
|
17
18
|
});
|
|
18
19
|
export const CheckpointDataSchema = z.object({
|
|
19
20
|
checkpointNumber: CheckpointNumberSchema,
|
|
@@ -3,8 +3,9 @@ export * from './checkpoint_data.js';
|
|
|
3
3
|
export * from './checkpoint_info.js';
|
|
4
4
|
export * from './checkpoint_reexecution_tracker.js';
|
|
5
5
|
export * from './digest.js';
|
|
6
|
+
export * from './previous_checkpoint_inbox_rolling_hash.js';
|
|
6
7
|
export * from './previous_checkpoint_out_hashes.js';
|
|
7
8
|
export * from './published_checkpoint.js';
|
|
8
9
|
export * from './simulation_overrides.js';
|
|
9
10
|
export * from './validate.js';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGVja3BvaW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGVBQWUsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/checkpoint/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,aAAa,CAAC;AAC5B,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/checkpoint/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,aAAa,CAAC;AAC5B,cAAc,6CAA6C,CAAC;AAC5D,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC"}
|
package/dest/checkpoint/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export * from './checkpoint_data.js';
|
|
|
3
3
|
export * from './checkpoint_info.js';
|
|
4
4
|
export * from './checkpoint_reexecution_tracker.js';
|
|
5
5
|
export * from './digest.js';
|
|
6
|
+
export * from './previous_checkpoint_inbox_rolling_hash.js';
|
|
6
7
|
export * from './previous_checkpoint_out_hashes.js';
|
|
7
8
|
export * from './published_checkpoint.js';
|
|
8
9
|
export * from './simulation_overrides.js';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
import type { Logger } from '@aztec/foundation/log';
|
|
4
|
+
import type { L2BlockSource } from '../block/l2_block_source.js';
|
|
5
|
+
import type { ProposedCheckpointData } from './checkpoint_data.js';
|
|
6
|
+
/**
|
|
7
|
+
* Returns the inbox rolling hash chain-start for `checkpointNumber`: the `inboxRollingHash` of the immediately
|
|
8
|
+
* preceding checkpoint. Unlike the epoch out-hash tree, the rolling-hash chain is continuous across epoch boundaries,
|
|
9
|
+
* so the parent is always `checkpointNumber - 1` regardless of epoch. The genesis checkpoint (and the first checkpoint
|
|
10
|
+
* built on it) starts the chain at zero.
|
|
11
|
+
*
|
|
12
|
+
* Under proposer pipelining the parent may not be confirmed on L1 yet, so the locally-known proposed checkpoint is
|
|
13
|
+
* preferred when it is the parent, mirroring `getPreviousCheckpointOutHashes`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getPreviousCheckpointInboxRollingHash(input: {
|
|
16
|
+
blockSource: Pick<L2BlockSource, 'getCheckpointData' | 'getProposedCheckpointData'>;
|
|
17
|
+
checkpointNumber: CheckpointNumber;
|
|
18
|
+
proposedCheckpointData?: ProposedCheckpointData;
|
|
19
|
+
log?: Logger;
|
|
20
|
+
}): Promise<Fr>;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlvdXNfY2hlY2twb2ludF9pbmJveF9yb2xsaW5nX2hhc2guZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGVja3BvaW50L3ByZXZpb3VzX2NoZWNrcG9pbnRfaW5ib3hfcm9sbGluZ19oYXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5FOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQXNCLHFDQUFxQyxDQUFDLEtBQUssRUFBRTtJQUNqRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsR0FBRywyQkFBMkIsQ0FBQyxDQUFDO0lBQ3BGLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO0lBQ25DLHNCQUFzQixDQUFDLEVBQUUsc0JBQXNCLENBQUM7SUFDaEQsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2QsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBd0JkIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previous_checkpoint_inbox_rolling_hash.d.ts","sourceRoot":"","sources":["../../src/checkpoint/previous_checkpoint_inbox_rolling_hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;;;;;;;GAQG;AACH,wBAAsB,qCAAqC,CAAC,KAAK,EAAE;IACjE,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,mBAAmB,GAAG,2BAA2B,CAAC,CAAC;IACpF,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,EAAE,CAAC,CAwBd"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the inbox rolling hash chain-start for `checkpointNumber`: the `inboxRollingHash` of the immediately
|
|
5
|
+
* preceding checkpoint. Unlike the epoch out-hash tree, the rolling-hash chain is continuous across epoch boundaries,
|
|
6
|
+
* so the parent is always `checkpointNumber - 1` regardless of epoch. The genesis checkpoint (and the first checkpoint
|
|
7
|
+
* built on it) starts the chain at zero.
|
|
8
|
+
*
|
|
9
|
+
* Under proposer pipelining the parent may not be confirmed on L1 yet, so the locally-known proposed checkpoint is
|
|
10
|
+
* preferred when it is the parent, mirroring `getPreviousCheckpointOutHashes`.
|
|
11
|
+
*/ export async function getPreviousCheckpointInboxRollingHash(input) {
|
|
12
|
+
const { blockSource, checkpointNumber, proposedCheckpointData, log } = input;
|
|
13
|
+
if (checkpointNumber <= 1) {
|
|
14
|
+
return Fr.ZERO;
|
|
15
|
+
}
|
|
16
|
+
const parent = CheckpointNumber(checkpointNumber - 1);
|
|
17
|
+
if (proposedCheckpointData?.checkpointNumber === parent) {
|
|
18
|
+
log?.debug(`Using pipelined parent cp ${parent} inbox rolling hash for cp ${checkpointNumber}`);
|
|
19
|
+
return proposedCheckpointData.header.inboxRollingHash;
|
|
20
|
+
}
|
|
21
|
+
const confirmed = await blockSource.getCheckpointData({
|
|
22
|
+
number: parent
|
|
23
|
+
});
|
|
24
|
+
if (confirmed) {
|
|
25
|
+
return confirmed.header.inboxRollingHash;
|
|
26
|
+
}
|
|
27
|
+
const proposed = await blockSource.getProposedCheckpointData({
|
|
28
|
+
number: parent
|
|
29
|
+
});
|
|
30
|
+
if (proposed) {
|
|
31
|
+
return proposed.header.inboxRollingHash;
|
|
32
|
+
}
|
|
33
|
+
throw new Error(`Cannot source inbox rolling hash for parent checkpoint ${parent} of checkpoint ${checkpointNumber}`);
|
|
34
|
+
}
|
|
@@ -36,7 +36,7 @@ type CheckpointSimulationOverridesPlanInput = {
|
|
|
36
36
|
/**
|
|
37
37
|
* Builds the SimulationOverridesPlan describing the simulated L1 rollup state for a checkpoint's
|
|
38
38
|
* enqueue-time simulations: `canProposeAt` (in Sequencer.doWork) and the propose-related sims
|
|
39
|
-
* (
|
|
39
|
+
* (validateCheckpointHeader, simulateProposeTx). The plan reflects "as if our pipelined parent
|
|
40
40
|
* checkpoint has landed and any required invalidation has executed" — the gap that needs to be
|
|
41
41
|
* bridged at enqueue time.
|
|
42
42
|
*
|
|
@@ -58,4 +58,4 @@ type PipelinedParentFeeHeaderInput = {
|
|
|
58
58
|
*/
|
|
59
59
|
export declare function computePipelinedParentFeeHeader(input: PipelinedParentFeeHeaderInput): Promise<FeeHeader | undefined>;
|
|
60
60
|
export {};
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltdWxhdGlvbl9vdmVycmlkZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGVja3BvaW50L3NpbXVsYXRpb25fb3ZlcnJpZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLFNBQVMsRUFDZCxjQUFjLEVBRWQsS0FBSyx1QkFBdUIsRUFDN0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlFLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbkUsS0FBSyxzQ0FBc0MsR0FBRztJQUM1Qyw4QkFBOEI7SUFDOUIsTUFBTSxFQUFFLGNBQWMsQ0FBQztJQUN2Qix3Q0FBd0M7SUFDeEMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDbkMsdUJBQXVCO0lBQ3ZCLEdBQUcsRUFBRSxNQUFNLENBQUM7SUFDWjs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsRUFBRSxzQkFBc0IsQ0FBQztJQUNoRDs7O09BR0c7SUFDSCxtQ0FBbUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQ3ZEOzs7T0FHRztJQUNILDRCQUE0QixFQUFFLGdCQUFnQixDQUFDO0lBQy9DOzs7O09BSUc7SUFDSCxnQkFBZ0IsRUFBRSw0QkFBNEIsQ0FBQztDQUNoRCxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsd0JBQXNCLHNDQUFzQyxDQUMxRCxLQUFLLEVBQUUsc0NBQXNDLEdBQzVDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUMsQ0F5RDlDO0FBcUJELEtBQUssNkJBQTZCLEdBQUc7SUFDbkMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDbkMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUM7SUFDL0MsTUFBTSxFQUFFLGNBQWMsQ0FBQztJQUN2QixHQUFHLEVBQUUsTUFBTSxDQUFDO0NBQ2IsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsd0JBQXNCLCtCQUErQixDQUNuRCxLQUFLLEVBQUUsNkJBQTZCLEdBQ25DLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBd0JoQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulation_overrides.d.ts","sourceRoot":"","sources":["../../src/checkpoint/simulation_overrides.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,cAAc,EAEd,KAAK,uBAAuB,EAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGnE,KAAK,sCAAsC,GAAG;IAC5C,8BAA8B;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,wCAAwC;IACxC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD;;;OAGG;IACH,mCAAmC,CAAC,EAAE,gBAAgB,CAAC;IACvD;;;OAGG;IACH,4BAA4B,EAAE,gBAAgB,CAAC;IAC/C;;;;OAIG;IACH,gBAAgB,EAAE,4BAA4B,CAAC;CAChD,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,sCAAsC,CAC1D,KAAK,EAAE,sCAAsC,GAC5C,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"simulation_overrides.d.ts","sourceRoot":"","sources":["../../src/checkpoint/simulation_overrides.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,cAAc,EAEd,KAAK,uBAAuB,EAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGnE,KAAK,sCAAsC,GAAG;IAC5C,8BAA8B;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,wCAAwC;IACxC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD;;;OAGG;IACH,mCAAmC,CAAC,EAAE,gBAAgB,CAAC;IACvD;;;OAGG;IACH,4BAA4B,EAAE,gBAAgB,CAAC;IAC/C;;;;OAIG;IACH,gBAAgB,EAAE,4BAA4B,CAAC;CAChD,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,sCAAsC,CAC1D,KAAK,EAAE,sCAAsC,GAC5C,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAyD9C;AAqBD,KAAK,6BAA6B,GAAG;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAwBhC"}
|
|
@@ -4,7 +4,7 @@ import { computeCheckpointPayloadDigest } from './digest.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* Builds the SimulationOverridesPlan describing the simulated L1 rollup state for a checkpoint's
|
|
6
6
|
* enqueue-time simulations: `canProposeAt` (in Sequencer.doWork) and the propose-related sims
|
|
7
|
-
* (
|
|
7
|
+
* (validateCheckpointHeader, simulateProposeTx). The plan reflects "as if our pipelined parent
|
|
8
8
|
* checkpoint has landed and any required invalidation has executed" — the gap that needs to be
|
|
9
9
|
* bridged at enqueue time.
|
|
10
10
|
*
|
|
@@ -27,21 +27,24 @@ import { computeCheckpointPayloadDigest } from './digest.js';
|
|
|
27
27
|
proven: overridenChainTip
|
|
28
28
|
});
|
|
29
29
|
if (input.proposedCheckpointData) {
|
|
30
|
-
const { header, archive, checkpointOutHash, feeAssetPriceModifier } = input.proposedCheckpointData;
|
|
30
|
+
const { header, archive, checkpointOutHash, feeAssetPriceModifier, inboxMsgTotal } = input.proposedCheckpointData;
|
|
31
31
|
builder.withPendingArchive(archive.root);
|
|
32
32
|
// Override every locally-derivable `tempCheckpointLogs[parent]` field that L1 will eventually
|
|
33
|
-
// write. `slotNumber` is
|
|
33
|
+
// write. `slotNumber` is required by `STFLib.canPruneAtTime`: without it the cell reads
|
|
34
34
|
// slotNumber 0, the contract treats the pending tip as belonging to an expired epoch, and
|
|
35
35
|
// `getEffectivePendingCheckpointNumber` silently collapses pending back to proven — producing
|
|
36
|
-
// a spurious `Rollup__InvalidArchive` against the on-chain genesis archive.
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
//
|
|
36
|
+
// a spurious `Rollup__InvalidArchive` against the on-chain genesis archive. `inboxMsgTotal` is
|
|
37
|
+
// read by `ProposeLib.validateInboxConsumption` as the parent's consumed total: left at zero it
|
|
38
|
+
// makes our consumption look like the Inbox's entire history and trips
|
|
39
|
+
// `Rollup__TooManyInboxMessagesConsumed`. The remaining fields (headerHash, outHash,
|
|
40
|
+
// payloadDigest) are not read by `canProposeAt` / `validateCheckpointHeader`, but mirroring the full
|
|
41
|
+
// cell keeps the simulation byte-faithful with what the actual `propose()` send will observe,
|
|
42
|
+
// which is a defense against future reads taking dependencies on them.
|
|
41
43
|
builder.withPendingTempCheckpointLogFields({
|
|
42
44
|
headerHash: header.hash(),
|
|
43
45
|
outHash: checkpointOutHash,
|
|
44
46
|
slotNumber: header.slotNumber,
|
|
47
|
+
inboxMsgTotal,
|
|
45
48
|
payloadDigest: computeCheckpointPayloadDigest({
|
|
46
49
|
header,
|
|
47
50
|
archiveRoot: archive.root,
|
|
@@ -18,7 +18,7 @@ import type { SequencerConfig } from '../interfaces/configs.js';
|
|
|
18
18
|
* AZTEC_SLASHER_ENABLED, PROVER_REAL_PROOFS, TRANSACTIONS_DISABLED, and AZTEC_ENTRY_QUEUE_* (mainnet-only genesis
|
|
19
19
|
* params enforced by L1).
|
|
20
20
|
*/
|
|
21
|
-
export declare const NETWORK_CONSENSUS_ENV_VARS: readonly ["ETHEREUM_SLOT_DURATION", "AZTEC_SLOT_DURATION", "AZTEC_EPOCH_DURATION", "SEQ_BLOCK_DURATION_MS", "MAX_BLOCKS_PER_CHECKPOINT", "CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS", "L1_CHAIN_ID", "AZTEC_TARGET_COMMITTEE_SIZE", "AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET", "AZTEC_LAG_IN_EPOCHS_FOR_RANDAO", "AZTEC_ACTIVATION_THRESHOLD", "AZTEC_EJECTION_THRESHOLD", "AZTEC_LOCAL_EJECTION_THRESHOLD", "AZTEC_EXIT_DELAY_SECONDS", "
|
|
21
|
+
export declare const NETWORK_CONSENSUS_ENV_VARS: readonly ["ETHEREUM_SLOT_DURATION", "AZTEC_SLOT_DURATION", "AZTEC_EPOCH_DURATION", "SEQ_BLOCK_DURATION_MS", "MAX_BLOCKS_PER_CHECKPOINT", "CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS", "L1_CHAIN_ID", "AZTEC_TARGET_COMMITTEE_SIZE", "AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET", "AZTEC_LAG_IN_EPOCHS_FOR_RANDAO", "AZTEC_ACTIVATION_THRESHOLD", "AZTEC_EJECTION_THRESHOLD", "AZTEC_LOCAL_EJECTION_THRESHOLD", "AZTEC_EXIT_DELAY_SECONDS", "AZTEC_PROOF_SUBMISSION_EPOCHS", "AZTEC_MANA_TARGET", "AZTEC_PROVING_COST_PER_MANA", "AZTEC_INITIAL_ETH_PER_FEE_ASSET", "AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE", "AZTEC_GOVERNANCE_PROPOSER_QUORUM", "AZTEC_SLASHING_QUORUM", "AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS", "AZTEC_SLASHING_LIFETIME_IN_ROUNDS", "AZTEC_SLASHING_OFFSET_IN_ROUNDS", "AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS", "AZTEC_SLASHING_VETOER", "AZTEC_SLASHING_DISABLE_DURATION", "AZTEC_SLASH_AMOUNT_SMALL", "AZTEC_SLASH_AMOUNT_MEDIUM", "AZTEC_SLASH_AMOUNT_LARGE", "SLASH_OFFENSE_EXPIRATION_ROUNDS", "SLASH_MAX_PAYLOAD_SIZE", "SLASH_EXECUTE_ROUNDS_LOOK_BACK", "SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS", "SLASH_DATA_WITHHOLDING_PENALTY", "SLASH_INACTIVITY_TARGET_PERCENTAGE", "SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD", "SLASH_INACTIVITY_PENALTY", "SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY", "SLASH_DUPLICATE_PROPOSAL_PENALTY", "SLASH_DUPLICATE_ATTESTATION_PENALTY", "SLASH_PROPOSE_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS_PENALTY", "SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY", "SLASH_UNKNOWN_PENALTY", "SLASH_INVALID_BLOCK_PENALTY", "SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY", "SLASH_GRACE_PERIOD_L2_SLOTS"];
|
|
22
22
|
/** A consensus-critical environment variable name; see {@link NETWORK_CONSENSUS_ENV_VARS}. */
|
|
23
23
|
export type ConsensusEnvVar = (typeof NETWORK_CONSENSUS_ENV_VARS)[number];
|
|
24
24
|
/**
|
|
@@ -43,7 +43,8 @@ export declare function getConsensusConfigFromNetworkEnv(values: Record<string,
|
|
|
43
43
|
* The check requires `maxBlocksPerCheckpoint` to be *exactly* what a {@link ProposerTimetable} built from the
|
|
44
44
|
* same slot timings and the production default budgets derives. This exact-equality requirement ensures the
|
|
45
45
|
* published network value is precisely what the production default budgets produce, so every node running those
|
|
46
|
-
* defaults agrees on the per-checkpoint block count without clamping.
|
|
46
|
+
* defaults agrees on the per-checkpoint block count without clamping. It must also be at least
|
|
47
|
+
* {@link MIN_BLOCKS_FOR_INBOX_CATCHUP}, without which the network is permanently haltable.
|
|
47
48
|
*/
|
|
48
49
|
export declare function validateNetworkConsensusConfig(config: NetworkConsensusConfig): string[];
|
|
49
50
|
/**
|
|
@@ -69,4 +70,4 @@ export declare function checkConsensusEnvOverrides(networkConfig: Record<string,
|
|
|
69
70
|
export declare function allowsNetworkConfigOverride(env?: {
|
|
70
71
|
[key: string]: string | undefined;
|
|
71
72
|
}): boolean;
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1jb25zZW5zdXMtY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL25ldHdvcmstY29uc2Vuc3VzLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBb0QsTUFBTSx3QkFBd0IsQ0FBQztBQUlsSCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVdoRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxlQUFPLE1BQU0sMEJBQTBCLHdrREFxREQsQ0FBQztBQUV2Qyw4RkFBOEY7QUFDOUYsTUFBTSxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQU8sMEJBQTBCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUUxRTs7Ozs7R0FLRztBQUNILE1BQU0sTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLEdBQUcsc0JBQXNCLENBQUMsR0FDeEcsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEdBQUcsd0JBQXdCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDO0FBWXZIOzs7Ozs7R0FNRztBQUNILHdCQUFnQixnQ0FBZ0MsQ0FDOUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FDaEQsc0JBQXNCLENBaUJ4QjtBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILHdCQUFnQiw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLEdBQUcsTUFBTSxFQUFFLENBOEV2RjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILHdCQUFnQiwwQkFBMEIsQ0FDeEMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFDeEQsR0FBRyxHQUFFO0lBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUE7Q0FBZ0IsRUFDeEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxLQUFLLElBQUksR0FDMUIsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FpRHhCO0FBRUQsOEdBQThHO0FBQzlHLHdCQUFnQiwyQkFBMkIsQ0FBQyxHQUFHLEdBQUU7SUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQTtDQUFnQixHQUFHLE9BQU8sQ0FHN0cifQ==
|
|
@@ -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,EAAoD,MAAM,wBAAwB,CAAC;
|
|
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;AAIlH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAWhE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,0BAA0B,wkDAqDD,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;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,EAAE,CA8EvF;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,5 +1,7 @@
|
|
|
1
1
|
import { l1ContractsConfigMappings, validateSlotDurations } from '@aztec/ethereum/config';
|
|
2
2
|
import { pickConfigMappings } from '@aztec/foundation/config';
|
|
3
|
+
import { MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT } from '../deserialization/index.js';
|
|
4
|
+
import { MIN_BLOCKS_FOR_INBOX_CATCHUP } from '../messaging/inbox_consumption.js';
|
|
3
5
|
import { DEFAULT_CHECKPOINT_PROPOSAL_INIT_TIME, DEFAULT_CHECKPOINT_PROPOSAL_PREPARE_TIME, DEFAULT_MIN_BLOCK_DURATION, DEFAULT_P2P_PROPAGATION_TIME } from '../timetable/budgets.js';
|
|
4
6
|
import { ProposerTimetable } from '../timetable/proposer_timetable.js';
|
|
5
7
|
import { sharedSequencerConfigMappings } from './sequencer-config.js';
|
|
@@ -37,7 +39,6 @@ import { sharedSequencerConfigMappings } from './sequencer-config.js';
|
|
|
37
39
|
'AZTEC_EJECTION_THRESHOLD',
|
|
38
40
|
'AZTEC_LOCAL_EJECTION_THRESHOLD',
|
|
39
41
|
'AZTEC_EXIT_DELAY_SECONDS',
|
|
40
|
-
'AZTEC_INBOX_LAG',
|
|
41
42
|
'AZTEC_PROOF_SUBMISSION_EPOCHS',
|
|
42
43
|
'AZTEC_MANA_TARGET',
|
|
43
44
|
'AZTEC_PROVING_COST_PER_MANA',
|
|
@@ -115,7 +116,8 @@ import { sharedSequencerConfigMappings } from './sequencer-config.js';
|
|
|
115
116
|
* The check requires `maxBlocksPerCheckpoint` to be *exactly* what a {@link ProposerTimetable} built from the
|
|
116
117
|
* same slot timings and the production default budgets derives. This exact-equality requirement ensures the
|
|
117
118
|
* published network value is precisely what the production default budgets produce, so every node running those
|
|
118
|
-
* defaults agrees on the per-checkpoint block count without clamping.
|
|
119
|
+
* defaults agrees on the per-checkpoint block count without clamping. It must also be at least
|
|
120
|
+
* {@link MIN_BLOCKS_FOR_INBOX_CATCHUP}, without which the network is permanently haltable.
|
|
119
121
|
*/ export function validateNetworkConsensusConfig(config) {
|
|
120
122
|
const errors = [];
|
|
121
123
|
for (const [field, value] of Object.entries(config)){
|
|
@@ -133,8 +135,11 @@ import { sharedSequencerConfigMappings } from './sequencer-config.js';
|
|
|
133
135
|
if (config.blockDurationMs / 1000 > config.aztecSlotDuration) {
|
|
134
136
|
errors.push(`blockDurationMs (${config.blockDurationMs}ms) exceeds aztecSlotDuration (${config.aztecSlotDuration}s)`);
|
|
135
137
|
}
|
|
136
|
-
if (config.maxBlocksPerCheckpoint <
|
|
137
|
-
errors.push(`maxBlocksPerCheckpoint must be at least
|
|
138
|
+
if (config.maxBlocksPerCheckpoint < MIN_BLOCKS_FOR_INBOX_CATCHUP) {
|
|
139
|
+
errors.push(`maxBlocksPerCheckpoint must be at least ${MIN_BLOCKS_FOR_INBOX_CATCHUP} so a checkpoint can always clear a ` + `mandatory streaming-Inbox backlog (got ${config.maxBlocksPerCheckpoint}); lower the block duration or raise ` + `the slot duration so the proposer budgets derive at least that many blocks`);
|
|
140
|
+
}
|
|
141
|
+
if (config.maxBlocksPerCheckpoint > MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT) {
|
|
142
|
+
errors.push(`maxBlocksPerCheckpoint (${config.maxBlocksPerCheckpoint}) exceeds the ` + `${MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT} blocks nodes will build or attest to, so the network would ` + `reject block indices its own configuration admits`);
|
|
138
143
|
}
|
|
139
144
|
if (config.checkpointProposalSyncGraceSeconds < 0) {
|
|
140
145
|
errors.push(`checkpointProposalSyncGraceSeconds must be non-negative (got ${config.checkpointProposalSyncGraceSeconds})`);
|
|
@@ -9,5 +9,17 @@ export type NodeRPCConfig = {
|
|
|
9
9
|
rpcMaxBatchSize: number;
|
|
10
10
|
/** The maximum body size the RPC server will accept */
|
|
11
11
|
rpcMaxBodySize: string;
|
|
12
|
+
/** HTTP keep-alive timeout for JSON RPC connections in milliseconds. */
|
|
13
|
+
rpcHttpKeepAliveTimeoutMs: number;
|
|
14
|
+
/** Timeout for receiving complete HTTP headers on JSON RPC connections in milliseconds. */
|
|
15
|
+
rpcHttpHeadersTimeoutMs: number;
|
|
16
|
+
/** Origins allowed to make credentialed cross-origin requests to the RPC server. */
|
|
17
|
+
rpcCorsAllowedOrigins: string[];
|
|
18
|
+
/** Headers allowed in cross-origin requests to the RPC server. */
|
|
19
|
+
rpcCorsAllowedHeaders: string[];
|
|
20
|
+
/** Whether to allow credentialed cross-origin requests from any origin. */
|
|
21
|
+
rpcCorsAllowAnyOrigin: boolean;
|
|
12
22
|
};
|
|
13
|
-
|
|
23
|
+
/** Resolves the CORS origin policy for an RPC server. */
|
|
24
|
+
export declare function getRpcCorsAllowedOrigins(config: Pick<NodeRPCConfig, 'rpcCorsAllowedOrigins' | 'rpcCorsAllowAnyOrigin'>): string[];
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1ycGMtY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL25vZGUtcnBjLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBMkMsTUFBTSwwQkFBMEIsQ0FBQztBQVU1RyxlQUFPLE1BQU0scUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxDQWlEbkUsQ0FBQztBQUVGLE1BQU0sTUFBTSxhQUFhLEdBQUc7SUFDMUIsdUZBQXVGO0lBQ3ZGLDRCQUE0QixFQUFFLE1BQU0sQ0FBQztJQUNyQyxtSEFBbUg7SUFDbkgsdUNBQXVDLEVBQUUsTUFBTSxDQUFDO0lBQ2hELDhEQUE4RDtJQUM5RCxlQUFlLEVBQUUsTUFBTSxDQUFDO0lBQ3hCLHVEQUF1RDtJQUN2RCxjQUFjLEVBQUUsTUFBTSxDQUFDO0lBQ3ZCLHdFQUF3RTtJQUN4RSx5QkFBeUIsRUFBRSxNQUFNLENBQUM7SUFDbEMsMkZBQTJGO0lBQzNGLHVCQUF1QixFQUFFLE1BQU0sQ0FBQztJQUNoQyxvRkFBb0Y7SUFDcEYscUJBQXFCLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDaEMsa0VBQWtFO0lBQ2xFLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ2hDLDJFQUEyRTtJQUMzRSxxQkFBcUIsRUFBRSxPQUFPLENBQUM7Q0FDaEMsQ0FBQztBQUVGLHlEQUF5RDtBQUN6RCx3QkFBZ0Isd0JBQXdCLENBQ3RDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDLEdBQzdFLE1BQU0sRUFBRSxDQUVWIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-rpc-config.d.ts","sourceRoot":"","sources":["../../src/config/node-rpc-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"node-rpc-config.d.ts","sourceRoot":"","sources":["../../src/config/node-rpc-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA2C,MAAM,0BAA0B,CAAC;AAU5G,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,CAAC,aAAa,CAiDnE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,uFAAuF;IACvF,4BAA4B,EAAE,MAAM,CAAC;IACrC,mHAAmH;IACnH,uCAAuC,EAAE,MAAM,CAAC;IAChD,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,yBAAyB,EAAE,MAAM,CAAC;IAClC,2FAA2F;IAC3F,uBAAuB,EAAE,MAAM,CAAC;IAChC,oFAAoF;IACpF,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,kEAAkE;IAClE,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,2EAA2E;IAC3E,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,uBAAuB,GAAG,uBAAuB,CAAC,GAC7E,MAAM,EAAE,CAEV"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { numberConfigHelper } from '@aztec/foundation/config';
|
|
1
|
+
import { booleanConfigHelper, numberConfigHelper } from '@aztec/foundation/config';
|
|
2
2
|
import { DEFAULT_MAX_DEBUG_LOG_MEMORY_READS } from '../avm/avm.js';
|
|
3
|
+
const parseCommaSeparatedList = (value)=>value.split(',').map((item)=>item.trim()).filter(Boolean);
|
|
3
4
|
export const nodeRpcConfigMappings = {
|
|
4
5
|
rpcSimulatePublicMaxGasLimit: {
|
|
5
6
|
env: 'RPC_SIMULATE_PUBLIC_MAX_GAS_LIMIT',
|
|
@@ -20,5 +21,37 @@ export const nodeRpcConfigMappings = {
|
|
|
20
21
|
env: 'RPC_MAX_BODY_SIZE',
|
|
21
22
|
description: 'Maximum allowed batch size for JSON RPC batch requests.',
|
|
22
23
|
defaultValue: '1mb'
|
|
24
|
+
},
|
|
25
|
+
rpcHttpKeepAliveTimeoutMs: {
|
|
26
|
+
env: 'RPC_HTTP_KEEP_ALIVE_TIMEOUT_MS',
|
|
27
|
+
description: 'HTTP keep-alive timeout for JSON RPC connections in milliseconds.',
|
|
28
|
+
...numberConfigHelper(5_000)
|
|
29
|
+
},
|
|
30
|
+
rpcHttpHeadersTimeoutMs: {
|
|
31
|
+
env: 'RPC_HTTP_HEADERS_TIMEOUT_MS',
|
|
32
|
+
description: 'Timeout for receiving complete HTTP headers on JSON RPC connections in milliseconds.',
|
|
33
|
+
...numberConfigHelper(60_000)
|
|
34
|
+
},
|
|
35
|
+
rpcCorsAllowedOrigins: {
|
|
36
|
+
env: 'RPC_CORS_ALLOWED_ORIGINS',
|
|
37
|
+
description: 'Origins allowed to make credentialed cross-origin JSON RPC requests, separated by commas.',
|
|
38
|
+
parseEnv: parseCommaSeparatedList,
|
|
39
|
+
defaultValue: []
|
|
40
|
+
},
|
|
41
|
+
rpcCorsAllowedHeaders: {
|
|
42
|
+
env: 'RPC_CORS_ALLOWED_HEADERS',
|
|
43
|
+
description: 'Headers allowed in cross-origin JSON RPC requests, separated by commas.',
|
|
44
|
+
parseEnv: parseCommaSeparatedList,
|
|
45
|
+
defaultValue: []
|
|
46
|
+
},
|
|
47
|
+
rpcCorsAllowAnyOrigin: {
|
|
48
|
+
env: 'RPC_CORS_ALLOW_ANY_ORIGIN',
|
|
49
|
+
description: 'Allow credentialed cross-origin JSON RPC requests from any origin.',
|
|
50
|
+
...booleanConfigHelper(false)
|
|
23
51
|
}
|
|
24
52
|
};
|
|
53
|
+
/** Resolves the CORS origin policy for an RPC server. */ export function getRpcCorsAllowedOrigins(config) {
|
|
54
|
+
return config.rpcCorsAllowAnyOrigin ? [
|
|
55
|
+
'*'
|
|
56
|
+
] : config.rpcCorsAllowedOrigins;
|
|
57
|
+
}
|