@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.
Files changed (228) hide show
  1. package/dest/abi/abi.d.ts +4 -3
  2. package/dest/abi/abi.d.ts.map +1 -1
  3. package/dest/abi/abi.js +5 -1
  4. package/dest/abi/contract_artifact.d.ts +7 -2
  5. package/dest/abi/contract_artifact.d.ts.map +1 -1
  6. package/dest/abi/contract_artifact.js +18 -19
  7. package/dest/avm/avm.d.ts +3 -2
  8. package/dest/avm/avm.d.ts.map +1 -1
  9. package/dest/avm/avm.js +9 -3
  10. package/dest/avm/avm_proving_request.d.ts +70 -70
  11. package/dest/block/l2_block.d.ts +1 -2
  12. package/dest/block/l2_block.d.ts.map +1 -1
  13. package/dest/block/l2_block.js +2 -3
  14. package/dest/block/l2_block_source.d.ts +3 -6
  15. package/dest/block/l2_block_source.d.ts.map +1 -1
  16. package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts +11 -20
  17. package/dest/block/l2_block_stream/event_driven_l2_block_stream.d.ts.map +1 -1
  18. package/dest/block/l2_block_stream/event_driven_l2_block_stream.js +12 -116
  19. package/dest/checkpoint/checkpoint_data.d.ts +14 -2
  20. package/dest/checkpoint/checkpoint_data.d.ts.map +1 -1
  21. package/dest/checkpoint/checkpoint_data.js +2 -1
  22. package/dest/checkpoint/index.d.ts +2 -1
  23. package/dest/checkpoint/index.d.ts.map +1 -1
  24. package/dest/checkpoint/index.js +1 -0
  25. package/dest/checkpoint/previous_checkpoint_inbox_rolling_hash.d.ts +21 -0
  26. package/dest/checkpoint/previous_checkpoint_inbox_rolling_hash.d.ts.map +1 -0
  27. package/dest/checkpoint/previous_checkpoint_inbox_rolling_hash.js +34 -0
  28. package/dest/checkpoint/simulation_overrides.d.ts +2 -2
  29. package/dest/checkpoint/simulation_overrides.d.ts.map +1 -1
  30. package/dest/checkpoint/simulation_overrides.js +11 -8
  31. package/dest/config/network-consensus-config.d.ts +4 -3
  32. package/dest/config/network-consensus-config.d.ts.map +1 -1
  33. package/dest/config/network-consensus-config.js +9 -4
  34. package/dest/config/node-rpc-config.d.ts +13 -1
  35. package/dest/config/node-rpc-config.d.ts.map +1 -1
  36. package/dest/config/node-rpc-config.js +34 -1
  37. package/dest/deserialization/index.d.ts +17 -17
  38. package/dest/deserialization/index.d.ts.map +1 -1
  39. package/dest/deserialization/index.js +18 -18
  40. package/dest/gas/gas_settings.d.ts +17 -5
  41. package/dest/gas/gas_settings.d.ts.map +1 -1
  42. package/dest/gas/gas_settings.js +4 -4
  43. package/dest/gas/tx_gas_limits.d.ts +3 -4
  44. package/dest/gas/tx_gas_limits.d.ts.map +1 -1
  45. package/dest/gas/tx_gas_limits.js +4 -5
  46. package/dest/interfaces/archiver.d.ts +2 -2
  47. package/dest/interfaces/archiver.d.ts.map +1 -1
  48. package/dest/interfaces/archiver.js +32 -5
  49. package/dest/interfaces/aztec-node-admin.d.ts +2 -1
  50. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  51. package/dest/interfaces/aztec-node.d.ts +22 -4
  52. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  53. package/dest/interfaces/aztec-node.js +11 -9
  54. package/dest/interfaces/block-builder.d.ts +11 -2
  55. package/dest/interfaces/block-builder.d.ts.map +1 -1
  56. package/dest/interfaces/configs.d.ts +7 -1
  57. package/dest/interfaces/configs.d.ts.map +1 -1
  58. package/dest/interfaces/configs.js +2 -1
  59. package/dest/interfaces/p2p.d.ts +18 -1
  60. package/dest/interfaces/p2p.d.ts.map +1 -1
  61. package/dest/interfaces/p2p.js +8 -0
  62. package/dest/interfaces/proving-job.d.ts +17 -42
  63. package/dest/interfaces/proving-job.d.ts.map +1 -1
  64. package/dest/interfaces/proving-job.js +16 -47
  65. package/dest/interfaces/server_circuit_prover.d.ts +8 -15
  66. package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
  67. package/dest/interfaces/validator.d.ts +7 -7
  68. package/dest/interfaces/validator.d.ts.map +1 -1
  69. package/dest/messaging/append_l1_to_l2_messages.d.ts +5 -5
  70. package/dest/messaging/append_l1_to_l2_messages.d.ts.map +1 -1
  71. package/dest/messaging/append_l1_to_l2_messages.js +4 -8
  72. package/dest/messaging/inbox_bucket.d.ts +77 -0
  73. package/dest/messaging/inbox_bucket.d.ts.map +1 -0
  74. package/dest/messaging/inbox_bucket.js +73 -0
  75. package/dest/messaging/inbox_consumption.d.ts +55 -0
  76. package/dest/messaging/inbox_consumption.d.ts.map +1 -0
  77. package/dest/messaging/inbox_consumption.js +53 -0
  78. package/dest/messaging/inbox_rolling_hash.d.ts +16 -0
  79. package/dest/messaging/inbox_rolling_hash.d.ts.map +1 -0
  80. package/dest/messaging/inbox_rolling_hash.js +23 -0
  81. package/dest/messaging/index.d.ts +6 -3
  82. package/dest/messaging/index.d.ts.map +1 -1
  83. package/dest/messaging/index.js +5 -2
  84. package/dest/messaging/l1_to_l2_message_bundle.d.ts +31 -0
  85. package/dest/messaging/l1_to_l2_message_bundle.d.ts.map +1 -0
  86. package/dest/messaging/l1_to_l2_message_bundle.js +51 -0
  87. package/dest/messaging/l1_to_l2_message_source.d.ts +44 -10
  88. package/dest/messaging/l1_to_l2_message_source.d.ts.map +1 -1
  89. package/dest/messaging/l1_to_l2_message_sponge.d.ts +40 -0
  90. package/dest/messaging/l1_to_l2_message_sponge.d.ts.map +1 -0
  91. package/dest/messaging/l1_to_l2_message_sponge.js +56 -0
  92. package/dest/noir/index.d.ts +3 -3
  93. package/dest/noir/index.d.ts.map +1 -1
  94. package/dest/p2p/block_proposal.d.ts +24 -9
  95. package/dest/p2p/block_proposal.d.ts.map +1 -1
  96. package/dest/p2p/block_proposal.js +42 -20
  97. package/dest/p2p/checkpoint_attestation.d.ts +1 -1
  98. package/dest/p2p/checkpoint_proposal.d.ts +13 -3
  99. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  100. package/dest/p2p/checkpoint_proposal.js +26 -8
  101. package/dest/p2p/consensus_payload.d.ts +1 -1
  102. package/dest/p2p/index.d.ts +2 -1
  103. package/dest/p2p/index.d.ts.map +1 -1
  104. package/dest/p2p/index.js +1 -0
  105. package/dest/p2p/validated_proposal.d.ts +35 -0
  106. package/dest/p2p/validated_proposal.d.ts.map +1 -0
  107. package/dest/p2p/validated_proposal.js +17 -0
  108. package/dest/p2p/wire_compat_fixtures.d.ts +7 -0
  109. package/dest/p2p/wire_compat_fixtures.d.ts.map +1 -0
  110. package/dest/p2p/wire_compat_fixtures.js +14 -0
  111. package/dest/parity/inbox_parity_private_inputs.d.ts +61 -0
  112. package/dest/parity/inbox_parity_private_inputs.d.ts.map +1 -0
  113. package/dest/parity/inbox_parity_private_inputs.js +79 -0
  114. package/dest/parity/index.d.ts +2 -3
  115. package/dest/parity/index.d.ts.map +1 -1
  116. package/dest/parity/index.js +1 -2
  117. package/dest/parity/parity_public_inputs.d.ts +15 -14
  118. package/dest/parity/parity_public_inputs.d.ts.map +1 -1
  119. package/dest/parity/parity_public_inputs.js +13 -15
  120. package/dest/proofs/proving_request_type.d.ts +11 -14
  121. package/dest/proofs/proving_request_type.d.ts.map +1 -1
  122. package/dest/proofs/proving_request_type.js +10 -13
  123. package/dest/rollup/block_constant_data.d.ts +8 -8
  124. package/dest/rollup/block_constant_data.js +4 -4
  125. package/dest/rollup/block_rollup_public_inputs.d.ts +18 -6
  126. package/dest/rollup/block_rollup_public_inputs.d.ts.map +1 -1
  127. package/dest/rollup/block_rollup_public_inputs.js +14 -7
  128. package/dest/rollup/block_root_rollup_private_inputs.d.ts +109 -113
  129. package/dest/rollup/block_root_rollup_private_inputs.d.ts.map +1 -1
  130. package/dest/rollup/block_root_rollup_private_inputs.js +79 -130
  131. package/dest/rollup/checkpoint_header.d.ts +14 -6
  132. package/dest/rollup/checkpoint_header.d.ts.map +1 -1
  133. package/dest/rollup/checkpoint_header.js +18 -14
  134. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +22 -2
  135. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
  136. package/dest/rollup/checkpoint_rollup_public_inputs.js +14 -3
  137. package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts +27 -6
  138. package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts.map +1 -1
  139. package/dest/rollup/checkpoint_root_rollup_private_inputs.js +17 -4
  140. package/dest/rollup/root_rollup_public_inputs.d.ts +10 -2
  141. package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
  142. package/dest/rollup/root_rollup_public_inputs.js +9 -3
  143. package/dest/stats/stats.d.ts +2 -2
  144. package/dest/stats/stats.d.ts.map +1 -1
  145. package/dest/tests/factories.d.ts +7 -7
  146. package/dest/tests/factories.d.ts.map +1 -1
  147. package/dest/tests/factories.js +26 -22
  148. package/dest/tests/fixtures.d.ts +1 -1
  149. package/dest/tests/fixtures.d.ts.map +1 -1
  150. package/dest/tests/fixtures.js +2 -0
  151. package/dest/tests/mocks.d.ts +4 -2
  152. package/dest/tests/mocks.d.ts.map +1 -1
  153. package/dest/tests/mocks.js +4 -7
  154. package/dest/tx/state_reference.d.ts +5 -2
  155. package/dest/tx/state_reference.d.ts.map +1 -1
  156. package/dest/tx/state_reference.js +5 -5
  157. package/package.json +8 -8
  158. package/src/abi/abi.ts +7 -2
  159. package/src/abi/contract_artifact.ts +20 -23
  160. package/src/avm/avm.ts +11 -1
  161. package/src/block/l2_block.ts +2 -3
  162. package/src/block/l2_block_source.ts +2 -5
  163. package/src/block/l2_block_stream/event_driven_l2_block_stream.ts +17 -143
  164. package/src/checkpoint/checkpoint_data.ts +14 -1
  165. package/src/checkpoint/index.ts +1 -0
  166. package/src/checkpoint/previous_checkpoint_inbox_rolling_hash.ts +46 -0
  167. package/src/checkpoint/simulation_overrides.ts +11 -8
  168. package/src/config/network-consensus-config.ts +17 -4
  169. package/src/config/node-rpc-config.ts +51 -1
  170. package/src/deserialization/index.ts +18 -18
  171. package/src/gas/README.md +4 -3
  172. package/src/gas/gas_settings.ts +7 -3
  173. package/src/gas/tx_gas_limits.ts +4 -12
  174. package/src/interfaces/archiver.ts +19 -2
  175. package/src/interfaces/aztec-node.ts +33 -12
  176. package/src/interfaces/block-builder.ts +10 -1
  177. package/src/interfaces/configs.ts +6 -0
  178. package/src/interfaces/p2p.ts +21 -0
  179. package/src/interfaces/proving-job.ts +19 -70
  180. package/src/interfaces/server_circuit_prover.ts +13 -37
  181. package/src/interfaces/validator.ts +6 -5
  182. package/src/kernel/private_kernel_reset_dimensions.ts +1 -1
  183. package/src/messaging/append_l1_to_l2_messages.ts +5 -13
  184. package/src/messaging/inbox_bucket.ts +125 -0
  185. package/src/messaging/inbox_consumption.ts +74 -0
  186. package/src/messaging/inbox_rolling_hash.ts +24 -0
  187. package/src/messaging/index.ts +5 -2
  188. package/src/messaging/l1_to_l2_message_bundle.ts +65 -0
  189. package/src/messaging/l1_to_l2_message_source.ts +48 -10
  190. package/src/messaging/l1_to_l2_message_sponge.ts +69 -0
  191. package/src/noir/index.ts +1 -2
  192. package/src/p2p/block_proposal.ts +41 -28
  193. package/src/p2p/checkpoint_proposal.ts +31 -6
  194. package/src/p2p/index.ts +1 -0
  195. package/src/p2p/validated_proposal.ts +43 -0
  196. package/src/p2p/wire_compat_fixtures.ts +23 -0
  197. package/src/parity/inbox_parity_private_inputs.ts +116 -0
  198. package/src/parity/index.ts +1 -2
  199. package/src/parity/parity_public_inputs.ts +12 -14
  200. package/src/proofs/proving_request_type.ts +2 -5
  201. package/src/rollup/block_constant_data.ts +4 -4
  202. package/src/rollup/block_rollup_public_inputs.ts +14 -5
  203. package/src/rollup/block_root_rollup_private_inputs.ts +117 -153
  204. package/src/rollup/checkpoint_header.ts +17 -13
  205. package/src/rollup/checkpoint_rollup_public_inputs.ts +15 -0
  206. package/src/rollup/checkpoint_root_rollup_private_inputs.ts +16 -3
  207. package/src/rollup/root_rollup_public_inputs.ts +10 -0
  208. package/src/stats/stats.ts +4 -5
  209. package/src/tests/factories.ts +38 -32
  210. package/src/tests/fixtures.ts +3 -0
  211. package/src/tests/mocks.ts +6 -7
  212. package/src/tx/state_reference.ts +5 -12
  213. package/dest/messaging/in_hash.d.ts +0 -6
  214. package/dest/messaging/in_hash.d.ts.map +0 -1
  215. package/dest/messaging/in_hash.js +0 -10
  216. package/dest/messaging/inbox_leaf.d.ts +0 -25
  217. package/dest/messaging/inbox_leaf.d.ts.map +0 -1
  218. package/dest/messaging/inbox_leaf.js +0 -42
  219. package/dest/parity/parity_base_private_inputs.d.ts +0 -39
  220. package/dest/parity/parity_base_private_inputs.d.ts.map +0 -1
  221. package/dest/parity/parity_base_private_inputs.js +0 -51
  222. package/dest/parity/parity_root_private_inputs.d.ts +0 -39
  223. package/dest/parity/parity_root_private_inputs.d.ts.map +0 -1
  224. package/dest/parity/parity_root_private_inputs.js +0 -46
  225. package/src/messaging/in_hash.ts +0 -12
  226. package/src/messaging/inbox_leaf.ts +0 -44
  227. package/src/parity/parity_base_private_inputs.ts +0 -71
  228. 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) to trigger an immediate reconciliation, while keeping the periodic poll as
89
- * the correctness fallback. Subsystems keep consuming the same {@link L2BlockStreamEvent}s; the archiver aggregate
90
- * event is handled entirely here.
91
- *
92
- * The event is passed through to the sync pass via {@link RunningPromise.trigger}. If, at the time the pass runs,
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 = (event)=>{
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(event).catch((err)=>this.log.error(`Error in event-triggered block stream sync`, err));
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(this.adapter, localData, handler, log, opts);
119
- this.runningPromise = new RunningPromise(this.runPass.bind(this), log, opts.pollIntervalMS ?? 1000);
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, and resolves once that pass completes. Concurrent
142
- * callers and periodic ticks coalesce onto a single pass; a caller that coalesces onto an already in-flight pass
143
- * can resolve against a pass that began just before it, so this guarantees freshness only up to that coalescing
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9kYXRhLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hlY2twb2ludC9jaGVja3BvaW50X2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFFWCxnQkFBZ0IsRUFFakIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHcEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFNUQsb0NBQW9DO0FBQ3BDLE1BQU0sTUFBTSxvQkFBb0IsR0FBRztJQUNqQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztJQUNuQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7SUFDekIsVUFBVSxFQUFFLFdBQVcsQ0FBQztJQUN4QixVQUFVLEVBQUUsTUFBTSxDQUFDO0NBQ3BCLENBQUM7QUFFRiw4REFBOEQ7QUFDOUQsTUFBTSxNQUFNLHdCQUF3QixHQUFHO0lBQ3JDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JDLEVBQUUsRUFBRSxlQUFlLENBQUM7Q0FDckIsQ0FBQztBQUVGLHVEQUF1RDtBQUN2RCxNQUFNLE1BQU0sNkJBQTZCLEdBQUc7SUFDMUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDO0lBQ2hDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztJQUN0QixtR0FBbUc7SUFDbkcscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0NBQy9CLENBQUM7QUFFRixzREFBc0Q7QUFDdEQsTUFBTSxNQUFNLDBCQUEwQixHQUFHO0lBQ3ZDLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIscUJBQXFCLEVBQUUsTUFBTSxDQUFDO0NBQy9CLENBQUM7QUFFRiwrREFBK0Q7QUFDL0QsTUFBTSxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsR0FBRyw2QkFBNkIsR0FBRyx3QkFBd0IsQ0FBQztBQUU3Rzs0REFDNEQ7QUFDNUQsTUFBTSxNQUFNLHVCQUF1QixHQUFHLG9CQUFvQixHQUFHLDBCQUEwQixDQUFDO0FBRXhGOzhGQUM4RjtBQUM5RixNQUFNLE1BQU0sc0JBQXNCLEdBQUcsdUJBQXVCLEdBQUcsNkJBQTZCLENBQUM7QUFFN0YsZUFBTyxNQUFNLDRCQUE0Qjs7Ozs7Ozs7Ozs7Ozs7O2lCQVN2QyxDQUFDO0FBRUgsZUFBTyxNQUFNLG9CQUFvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCOUIsQ0FBQyJ9
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;AAE7F,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;iBASvC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwB9B,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGVja3BvaW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxlQUFlLENBQUMifQ==
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"}
@@ -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
- * (validateBlockHeader, simulateProposeTx). The plan reflects "as if our pipelined parent
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltdWxhdGlvbl9vdmVycmlkZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGVja3BvaW50L3NpbXVsYXRpb25fb3ZlcnJpZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxLQUFLLFNBQVMsRUFDZCxjQUFjLEVBRWQsS0FBSyx1QkFBdUIsRUFDN0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlFLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbkUsS0FBSyxzQ0FBc0MsR0FBRztJQUM1Qyw4QkFBOEI7SUFDOUIsTUFBTSxFQUFFLGNBQWMsQ0FBQztJQUN2Qix3Q0FBd0M7SUFDeEMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDbkMsdUJBQXVCO0lBQ3ZCLEdBQUcsRUFBRSxNQUFNLENBQUM7SUFDWjs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsRUFBRSxzQkFBc0IsQ0FBQztJQUNoRDs7O09BR0c7SUFDSCxtQ0FBbUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQ3ZEOzs7T0FHRztJQUNILDRCQUE0QixFQUFFLGdCQUFnQixDQUFDO0lBQy9DOzs7O09BSUc7SUFDSCxnQkFBZ0IsRUFBRSw0QkFBNEIsQ0FBQztDQUNoRCxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsd0JBQXNCLHNDQUFzQyxDQUMxRCxLQUFLLEVBQUUsc0NBQXNDLEdBQzVDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUMsQ0FzRDlDO0FBcUJELEtBQUssNkJBQTZCLEdBQUc7SUFDbkMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDbkMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUM7SUFDL0MsTUFBTSxFQUFFLGNBQWMsQ0FBQztJQUN2QixHQUFHLEVBQUUsTUFBTSxDQUFDO0NBQ2IsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsd0JBQXNCLCtCQUErQixDQUNuRCxLQUFLLEVBQUUsNkJBQTZCLEdBQ25DLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBd0JoQyJ9
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,CAsD9C;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"}
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
- * (validateBlockHeader, simulateProposeTx). The plan reflects "as if our pipelined parent
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 load-bearing for `STFLib.canPruneAtTime`: without it the cell reads
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. The other fields
37
- // (headerHash, outHash, payloadDigest) are not strictly load-bearing for `canProposeAt` /
38
- // `validateBlockHeader`, but mirroring the full cell keeps the simulation byte-faithful with
39
- // what the actual `propose()` send will observe, which is a defense against future reads
40
- // taking dependencies on them.
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", "AZTEC_INBOX_LAG", "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"];
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1jb25zZW5zdXMtY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL25ldHdvcmstY29uc2Vuc3VzLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxpQkFBaUIsRUFBb0QsTUFBTSx3QkFBd0IsQ0FBQztBQUdsSCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVVoRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxlQUFPLE1BQU0sMEJBQTBCLDJsREFzREQsQ0FBQztBQUV2Qyw4RkFBOEY7QUFDOUYsTUFBTSxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQU8sMEJBQTBCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUUxRTs7Ozs7R0FLRztBQUNILE1BQU0sTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLEdBQUcsc0JBQXNCLENBQUMsR0FDeEcsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEdBQUcsd0JBQXdCLEdBQUcsb0NBQW9DLENBQUMsQ0FBQyxDQUFDO0FBWXZIOzs7Ozs7R0FNRztBQUNILHdCQUFnQixnQ0FBZ0MsQ0FDOUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FDaEQsc0JBQXNCLENBaUJ4QjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQWdCLDhCQUE4QixDQUFDLE1BQU0sRUFBRSxzQkFBc0IsR0FBRyxNQUFNLEVBQUUsQ0FtRXZGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsd0JBQWdCLDBCQUEwQixDQUN4QyxhQUFhLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUN4RCxHQUFHLEdBQUU7SUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQTtDQUFnQixFQUN4RCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEtBQUssSUFBSSxHQUMxQixNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQWlEeEI7QUFFRCw4R0FBOEc7QUFDOUcsd0JBQWdCLDJCQUEyQixDQUFDLEdBQUcsR0FBRTtJQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFBO0NBQWdCLEdBQUcsT0FBTyxDQUc3RyJ9
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;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
+ {"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 < 1) {
137
- errors.push(`maxBlocksPerCheckpoint must be at least 1 (got ${config.maxBlocksPerCheckpoint})`);
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1ycGMtY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL25vZGUtcnBjLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxrQkFBa0IsRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQztBQUl2RixlQUFPLE1BQU0scUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxDQXNCbkUsQ0FBQztBQUVGLE1BQU0sTUFBTSxhQUFhLEdBQUc7SUFDMUIsdUZBQXVGO0lBQ3ZGLDRCQUE0QixFQUFFLE1BQU0sQ0FBQztJQUNyQyxtSEFBbUg7SUFDbkgsdUNBQXVDLEVBQUUsTUFBTSxDQUFDO0lBQ2hELDhEQUE4RDtJQUM5RCxlQUFlLEVBQUUsTUFBTSxDQUFDO0lBQ3hCLHVEQUF1RDtJQUN2RCxjQUFjLEVBQUUsTUFBTSxDQUFDO0NBQ3hCLENBQUMifQ==
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,EAAsB,MAAM,0BAA0B,CAAC;AAIvF,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,CAAC,aAAa,CAsBnE,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;CACxB,CAAC"}
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
+ }