@aztec/stdlib 0.0.1-commit.03f7ef2 → 0.0.1-commit.1142ef1

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 (258) hide show
  1. package/dest/abi/contract_artifact.d.ts +2 -2
  2. package/dest/abi/contract_artifact.d.ts.map +1 -1
  3. package/dest/abi/contract_artifact.js +1 -1
  4. package/dest/abi/selector.js +3 -1
  5. package/dest/avm/avm_accumulated_data.js +5 -2
  6. package/dest/avm/avm_circuit_public_inputs.js +3 -1
  7. package/dest/avm/public_data_update_request.js +3 -1
  8. package/dest/avm/public_inner_call_request.js +3 -1
  9. package/dest/avm/revert_code.js +3 -1
  10. package/dest/aztec-address/index.js +4 -2
  11. package/dest/block/attestation_info.d.ts +5 -5
  12. package/dest/block/attestation_info.d.ts.map +1 -1
  13. package/dest/block/attestation_info.js +4 -4
  14. package/dest/block/body.js +3 -1
  15. package/dest/block/l2_block.d.ts +6 -3
  16. package/dest/block/l2_block.d.ts.map +1 -1
  17. package/dest/block/l2_block.js +6 -4
  18. package/dest/block/l2_block_code_to_purge.d.ts +2 -3
  19. package/dest/block/l2_block_code_to_purge.d.ts.map +1 -1
  20. package/dest/block/l2_block_code_to_purge.js +2 -8
  21. package/dest/block/l2_block_header.d.ts +8 -12
  22. package/dest/block/l2_block_header.d.ts.map +1 -1
  23. package/dest/block/l2_block_header.js +25 -18
  24. package/dest/block/l2_block_new.d.ts +1 -2
  25. package/dest/block/l2_block_new.d.ts.map +1 -1
  26. package/dest/block/l2_block_new.js +4 -1
  27. package/dest/block/l2_block_source.d.ts +245 -41
  28. package/dest/block/l2_block_source.d.ts.map +1 -1
  29. package/dest/block/l2_block_source.js +23 -5
  30. package/dest/block/l2_block_stream/index.d.ts +2 -1
  31. package/dest/block/l2_block_stream/index.d.ts.map +1 -1
  32. package/dest/block/l2_block_stream/index.js +1 -0
  33. package/dest/block/l2_block_stream/interfaces.d.ts +12 -5
  34. package/dest/block/l2_block_stream/interfaces.d.ts.map +1 -1
  35. package/dest/block/l2_block_stream/l2_block_stream.d.ts +4 -2
  36. package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
  37. package/dest/block/l2_block_stream/l2_block_stream.js +102 -30
  38. package/dest/block/l2_block_stream/l2_tips_memory_store.d.ts +24 -16
  39. package/dest/block/l2_block_stream/l2_tips_memory_store.d.ts.map +1 -1
  40. package/dest/block/l2_block_stream/l2_tips_memory_store.js +55 -61
  41. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +49 -0
  42. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -0
  43. package/dest/block/l2_block_stream/l2_tips_store_base.js +179 -0
  44. package/dest/block/test/l2_tips_store_test_suite.d.ts +1 -1
  45. package/dest/block/test/l2_tips_store_test_suite.d.ts.map +1 -1
  46. package/dest/block/test/l2_tips_store_test_suite.js +483 -38
  47. package/dest/block/validate_block_result.d.ts +24 -24
  48. package/dest/block/validate_block_result.d.ts.map +1 -1
  49. package/dest/block/validate_block_result.js +13 -13
  50. package/dest/checkpoint/checkpoint.d.ts +1 -1
  51. package/dest/checkpoint/checkpoint.d.ts.map +1 -1
  52. package/dest/checkpoint/checkpoint.js +1 -0
  53. package/dest/checkpoint/checkpoint_info.d.ts +32 -3
  54. package/dest/checkpoint/checkpoint_info.d.ts.map +1 -1
  55. package/dest/checkpoint/checkpoint_info.js +34 -1
  56. package/dest/checkpoint/index.d.ts +2 -1
  57. package/dest/checkpoint/index.d.ts.map +1 -1
  58. package/dest/checkpoint/index.js +1 -0
  59. package/dest/database-version/version_manager.js +3 -1
  60. package/dest/gas/gas.js +3 -1
  61. package/dest/gas/gas_fees.js +3 -1
  62. package/dest/interfaces/api_limit.d.ts +2 -1
  63. package/dest/interfaces/api_limit.d.ts.map +1 -1
  64. package/dest/interfaces/api_limit.js +1 -0
  65. package/dest/interfaces/archiver.d.ts +6 -6
  66. package/dest/interfaces/archiver.d.ts.map +1 -1
  67. package/dest/interfaces/archiver.js +6 -4
  68. package/dest/interfaces/aztec-node-admin.d.ts +16 -10
  69. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  70. package/dest/interfaces/aztec-node-admin.js +3 -3
  71. package/dest/interfaces/aztec-node.d.ts +11 -10
  72. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  73. package/dest/interfaces/aztec-node.js +10 -5
  74. package/dest/interfaces/configs.d.ts +6 -1
  75. package/dest/interfaces/configs.d.ts.map +1 -1
  76. package/dest/interfaces/configs.js +2 -1
  77. package/dest/interfaces/p2p.d.ts +7 -9
  78. package/dest/interfaces/p2p.d.ts.map +1 -1
  79. package/dest/interfaces/p2p.js +3 -4
  80. package/dest/interfaces/proving-job.d.ts +170 -170
  81. package/dest/interfaces/proving-job.d.ts.map +1 -1
  82. package/dest/interfaces/proving-job.js +1 -7
  83. package/dest/interfaces/server_circuit_prover.d.ts +4 -3
  84. package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
  85. package/dest/interfaces/validator.d.ts +41 -7
  86. package/dest/interfaces/validator.d.ts.map +1 -1
  87. package/dest/interfaces/validator.js +3 -1
  88. package/dest/interfaces/world_state.d.ts +8 -6
  89. package/dest/interfaces/world_state.d.ts.map +1 -1
  90. package/dest/kernel/claimed_length_array.js +3 -1
  91. package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts +6 -5
  92. package/dest/kernel/hints/build_note_hash_read_request_hints.d.ts.map +1 -1
  93. package/dest/kernel/hints/build_note_hash_read_request_hints.js +5 -6
  94. package/dest/kernel/hints/transient_data_squashing_hint.js +3 -1
  95. package/dest/kernel/log_hash.js +3 -1
  96. package/dest/kernel/private_log_data.js +5 -2
  97. package/dest/kernel/private_to_avm_accumulated_data.js +5 -2
  98. package/dest/kernel/private_to_public_accumulated_data.js +3 -1
  99. package/dest/kernel/private_to_rollup_accumulated_data.js +3 -1
  100. package/dest/kernel/private_validation_requests.js +3 -1
  101. package/dest/kernel/public_call_request.js +5 -2
  102. package/dest/logs/contract_class_log.js +3 -1
  103. package/dest/logs/index.d.ts +1 -2
  104. package/dest/logs/index.d.ts.map +1 -1
  105. package/dest/logs/index.js +0 -1
  106. package/dest/logs/private_log.js +3 -1
  107. package/dest/logs/public_log.js +3 -1
  108. package/dest/logs/tx_scoped_l2_log.d.ts +18 -39
  109. package/dest/logs/tx_scoped_l2_log.d.ts.map +1 -1
  110. package/dest/logs/tx_scoped_l2_log.js +29 -50
  111. package/dest/messaging/in_hash.d.ts +4 -2
  112. package/dest/messaging/in_hash.d.ts.map +1 -1
  113. package/dest/messaging/in_hash.js +3 -1
  114. package/dest/messaging/l2_to_l1_membership.d.ts +88 -6
  115. package/dest/messaging/l2_to_l1_membership.d.ts.map +1 -1
  116. package/dest/messaging/l2_to_l1_membership.js +158 -42
  117. package/dest/messaging/out_hash.d.ts +2 -1
  118. package/dest/messaging/out_hash.d.ts.map +1 -1
  119. package/dest/messaging/out_hash.js +13 -4
  120. package/dest/p2p/attestation_utils.d.ts +3 -3
  121. package/dest/p2p/attestation_utils.d.ts.map +1 -1
  122. package/dest/p2p/attestation_utils.js +1 -1
  123. package/dest/p2p/block_proposal.d.ts +85 -21
  124. package/dest/p2p/block_proposal.d.ts.map +1 -1
  125. package/dest/p2p/block_proposal.js +120 -37
  126. package/dest/p2p/checkpoint_attestation.d.ts +77 -0
  127. package/dest/p2p/checkpoint_attestation.d.ts.map +1 -0
  128. package/dest/p2p/{block_attestation.js → checkpoint_attestation.js} +22 -19
  129. package/dest/p2p/checkpoint_proposal.d.ts +154 -0
  130. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -0
  131. package/dest/p2p/checkpoint_proposal.js +217 -0
  132. package/dest/p2p/consensus_payload.d.ts +6 -7
  133. package/dest/p2p/consensus_payload.d.ts.map +1 -1
  134. package/dest/p2p/consensus_payload.js +3 -2
  135. package/dest/p2p/gossipable.d.ts +4 -3
  136. package/dest/p2p/gossipable.d.ts.map +1 -1
  137. package/dest/p2p/gossipable.js +16 -5
  138. package/dest/p2p/index.d.ts +4 -2
  139. package/dest/p2p/index.d.ts.map +1 -1
  140. package/dest/p2p/index.js +3 -1
  141. package/dest/p2p/signature_utils.d.ts +5 -3
  142. package/dest/p2p/signature_utils.d.ts.map +1 -1
  143. package/dest/p2p/signature_utils.js +3 -1
  144. package/dest/p2p/signed_txs.d.ts +40 -0
  145. package/dest/p2p/signed_txs.d.ts.map +1 -0
  146. package/dest/p2p/signed_txs.js +70 -0
  147. package/dest/p2p/topic_type.d.ts +3 -2
  148. package/dest/p2p/topic_type.d.ts.map +1 -1
  149. package/dest/p2p/topic_type.js +8 -2
  150. package/dest/rollup/block_rollup_public_inputs.d.ts +4 -9
  151. package/dest/rollup/block_rollup_public_inputs.d.ts.map +1 -1
  152. package/dest/rollup/block_rollup_public_inputs.js +6 -10
  153. package/dest/rollup/checkpoint_constant_data.js +3 -1
  154. package/dest/rollup/checkpoint_header.d.ts +15 -12
  155. package/dest/rollup/checkpoint_header.d.ts.map +1 -1
  156. package/dest/rollup/checkpoint_header.js +33 -19
  157. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +6 -1
  158. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
  159. package/dest/rollup/checkpoint_rollup_public_inputs.js +6 -2
  160. package/dest/rollup/root_rollup_public_inputs.d.ts +8 -3
  161. package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
  162. package/dest/rollup/root_rollup_public_inputs.js +6 -3
  163. package/dest/tests/factories.d.ts +38 -7
  164. package/dest/tests/factories.d.ts.map +1 -1
  165. package/dest/tests/factories.js +77 -13
  166. package/dest/tests/mocks.d.ts +59 -10
  167. package/dest/tests/mocks.d.ts.map +1 -1
  168. package/dest/tests/mocks.js +89 -41
  169. package/dest/trees/append_only_tree_snapshot.js +3 -1
  170. package/dest/tx/block_header.js +3 -1
  171. package/dest/tx/call_context.js +3 -1
  172. package/dest/tx/global_variable_builder.d.ts +2 -2
  173. package/dest/tx/global_variable_builder.d.ts.map +1 -1
  174. package/dest/tx/global_variables.js +3 -1
  175. package/dest/tx/index.d.ts +1 -2
  176. package/dest/tx/index.d.ts.map +1 -1
  177. package/dest/tx/index.js +0 -1
  178. package/dest/tx/private_execution_result.d.ts +1 -5
  179. package/dest/tx/private_execution_result.d.ts.map +1 -1
  180. package/dest/tx/private_execution_result.js +3 -20
  181. package/dest/tx/public_call_request_with_calldata.js +3 -1
  182. package/dest/tx/state_reference.js +3 -1
  183. package/dest/tx/tree_snapshots.js +3 -1
  184. package/dest/tx/tx.d.ts +10 -3
  185. package/dest/tx/tx.d.ts.map +1 -1
  186. package/dest/tx/tx.js +12 -3
  187. package/dest/tx/tx_effect.d.ts +1 -1
  188. package/dest/tx/tx_effect.d.ts.map +1 -1
  189. package/dest/tx/tx_effect.js +6 -2
  190. package/dest/tx/tx_execution_request.d.ts +1 -1
  191. package/dest/tx/tx_execution_request.d.ts.map +1 -1
  192. package/dest/tx/tx_execution_request.js +6 -2
  193. package/package.json +8 -8
  194. package/src/abi/contract_artifact.ts +10 -10
  195. package/src/block/attestation_info.ts +9 -6
  196. package/src/block/l2_block.ts +6 -5
  197. package/src/block/l2_block_code_to_purge.ts +3 -11
  198. package/src/block/l2_block_header.ts +26 -17
  199. package/src/block/l2_block_new.ts +5 -1
  200. package/src/block/l2_block_source.ts +66 -16
  201. package/src/block/l2_block_stream/index.ts +1 -0
  202. package/src/block/l2_block_stream/interfaces.ts +12 -4
  203. package/src/block/l2_block_stream/l2_block_stream.ts +121 -38
  204. package/src/block/l2_block_stream/l2_tips_memory_store.ts +62 -56
  205. package/src/block/l2_block_stream/l2_tips_store_base.ts +226 -0
  206. package/src/block/test/l2_tips_store_test_suite.ts +485 -36
  207. package/src/block/validate_block_result.ts +35 -31
  208. package/src/checkpoint/checkpoint.ts +1 -0
  209. package/src/checkpoint/checkpoint_info.ts +45 -2
  210. package/src/checkpoint/index.ts +1 -0
  211. package/src/interfaces/api_limit.ts +1 -0
  212. package/src/interfaces/archiver.ts +14 -6
  213. package/src/interfaces/aztec-node-admin.ts +7 -4
  214. package/src/interfaces/aztec-node.ts +43 -13
  215. package/src/interfaces/configs.ts +5 -0
  216. package/src/interfaces/p2p.ts +8 -12
  217. package/src/interfaces/proving-job.ts +2 -11
  218. package/src/interfaces/server_circuit_prover.ts +3 -2
  219. package/src/interfaces/validator.ts +57 -7
  220. package/src/interfaces/world_state.ts +9 -7
  221. package/src/kernel/hints/build_note_hash_read_request_hints.ts +5 -8
  222. package/src/logs/index.ts +0 -1
  223. package/src/logs/tx_scoped_l2_log.ts +37 -53
  224. package/src/messaging/in_hash.ts +3 -1
  225. package/src/messaging/l2_to_l1_membership.ts +176 -52
  226. package/src/messaging/out_hash.ts +17 -7
  227. package/src/p2p/attestation_utils.ts +3 -3
  228. package/src/p2p/block_proposal.ts +185 -41
  229. package/src/p2p/{block_attestation.ts → checkpoint_attestation.ts} +31 -25
  230. package/src/p2p/checkpoint_proposal.ts +337 -0
  231. package/src/p2p/consensus_payload.ts +5 -2
  232. package/src/p2p/gossipable.ts +14 -4
  233. package/src/p2p/index.ts +3 -1
  234. package/src/p2p/signature_utils.ts +3 -1
  235. package/src/p2p/signed_txs.ts +83 -0
  236. package/src/p2p/topic_type.ts +3 -2
  237. package/src/rollup/block_rollup_public_inputs.ts +3 -9
  238. package/src/rollup/checkpoint_header.ts +43 -20
  239. package/src/rollup/checkpoint_rollup_public_inputs.ts +6 -0
  240. package/src/rollup/root_rollup_public_inputs.ts +6 -0
  241. package/src/tests/factories.ts +98 -17
  242. package/src/tests/mocks.ts +166 -64
  243. package/src/tx/global_variable_builder.ts +1 -1
  244. package/src/tx/index.ts +0 -1
  245. package/src/tx/private_execution_result.ts +0 -15
  246. package/src/tx/tx.ts +11 -2
  247. package/src/tx/tx_effect.ts +3 -1
  248. package/src/tx/tx_execution_request.ts +2 -0
  249. package/dest/logs/log_with_tx_data.d.ts +0 -19
  250. package/dest/logs/log_with_tx_data.d.ts.map +0 -1
  251. package/dest/logs/log_with_tx_data.js +0 -49
  252. package/dest/p2p/block_attestation.d.ts +0 -80
  253. package/dest/p2p/block_attestation.d.ts.map +0 -1
  254. package/dest/tx/content_commitment.d.ts +0 -49
  255. package/dest/tx/content_commitment.d.ts.map +0 -1
  256. package/dest/tx/content_commitment.js +0 -90
  257. package/src/logs/log_with_tx_data.ts +0 -46
  258. package/src/tx/content_commitment.ts +0 -113
@@ -14,12 +14,13 @@ import { z } from 'zod';
14
14
  import { AztecAddress } from '../aztec-address/index.js';
15
15
  import { GasFees } from '../gas/index.js';
16
16
  import { schemas } from '../schemas/index.js';
17
- import { ContentCommitment } from '../tx/content_commitment.js';
17
+ import type { GlobalVariables } from '../tx/global_variables.js';
18
18
  import type { UInt64 } from '../types/shared.js';
19
19
 
20
20
  /**
21
21
  * Header of a checkpoint. A checkpoint is a collection of blocks submitted to L1 all within the same slot.
22
22
  * TODO(palla/mbps): Should this include chainId and version as well? Is this used just in circuits?
23
+ * TODO(palla/mbps): What about CheckpointNumber?
23
24
  */
24
25
  export class CheckpointHeader {
25
26
  constructor(
@@ -27,8 +28,10 @@ export class CheckpointHeader {
27
28
  public lastArchiveRoot: Fr,
28
29
  /** Hash of the headers of all blocks in this checkpoint. */
29
30
  public blockHeadersHash: Fr,
30
- /** Content commitment of the L2 block. */
31
- public contentCommitment: ContentCommitment,
31
+ /** Hash of the blobs in the checkpoint. */
32
+ public blobsHash: Fr,
33
+ /** Root of the l1 to l2 messages subtree. */
34
+ public inHash: Fr,
32
35
  /** Slot number of the L2 block */
33
36
  public slotNumber: SlotNumber,
34
37
  /** Timestamp of the L2 block. */
@@ -48,7 +51,8 @@ export class CheckpointHeader {
48
51
  .object({
49
52
  lastArchiveRoot: schemas.Fr,
50
53
  blockHeadersHash: schemas.Fr,
51
- contentCommitment: ContentCommitment.schema,
54
+ blobsHash: schemas.Fr,
55
+ inHash: schemas.Fr,
52
56
  slotNumber: schemas.SlotNumber,
53
57
  timestamp: schemas.BigInt,
54
58
  coinbase: schemas.EthAddress,
@@ -63,7 +67,8 @@ export class CheckpointHeader {
63
67
  return [
64
68
  fields.lastArchiveRoot,
65
69
  fields.blockHeadersHash,
66
- fields.contentCommitment,
70
+ fields.blobsHash,
71
+ fields.inHash,
67
72
  fields.slotNumber,
68
73
  fields.timestamp,
69
74
  fields.coinbase,
@@ -83,7 +88,8 @@ export class CheckpointHeader {
83
88
  return new CheckpointHeader(
84
89
  reader.readObject(Fr),
85
90
  reader.readObject(Fr),
86
- reader.readObject(ContentCommitment),
91
+ reader.readObject(Fr),
92
+ reader.readObject(Fr),
87
93
  SlotNumber(Fr.fromBuffer(reader).toNumber()),
88
94
  reader.readUInt64(),
89
95
  reader.readObject(EthAddress),
@@ -97,7 +103,8 @@ export class CheckpointHeader {
97
103
  return (
98
104
  this.lastArchiveRoot.equals(other.lastArchiveRoot) &&
99
105
  this.blockHeadersHash.equals(other.blockHeadersHash) &&
100
- this.contentCommitment.equals(other.contentCommitment) &&
106
+ this.blobsHash.equals(other.blobsHash) &&
107
+ this.inHash.equals(other.inHash) &&
101
108
  this.slotNumber === other.slotNumber &&
102
109
  this.timestamp === other.timestamp &&
103
110
  this.coinbase.equals(other.coinbase) &&
@@ -107,12 +114,24 @@ export class CheckpointHeader {
107
114
  );
108
115
  }
109
116
 
117
+ /** Returns true if the global variables match those in the checkpoint header. */
118
+ matchesGlobalVariables(other: GlobalVariables) {
119
+ return (
120
+ this.coinbase.equals(other.coinbase) &&
121
+ this.feeRecipient.equals(other.feeRecipient) &&
122
+ this.gasFees.equals(other.gasFees) &&
123
+ this.slotNumber === other.slotNumber &&
124
+ this.timestamp === other.timestamp
125
+ );
126
+ }
127
+
110
128
  toBuffer() {
111
129
  // Note: The order here must match the order in the ProposedHeaderLib solidity library.
112
130
  return serializeToBuffer([
113
131
  this.lastArchiveRoot,
114
132
  this.blockHeadersHash,
115
- this.contentCommitment,
133
+ this.blobsHash,
134
+ this.inHash,
116
135
  new Fr(this.slotNumber),
117
136
  bigintToUInt64BE(this.timestamp),
118
137
  this.coinbase,
@@ -130,7 +149,8 @@ export class CheckpointHeader {
130
149
  return CheckpointHeader.from({
131
150
  lastArchiveRoot: Fr.ZERO,
132
151
  blockHeadersHash: Fr.ZERO,
133
- contentCommitment: ContentCommitment.empty(),
152
+ blobsHash: Fr.ZERO,
153
+ inHash: Fr.ZERO,
134
154
  slotNumber: SlotNumber.ZERO,
135
155
  timestamp: 0n,
136
156
  coinbase: EthAddress.ZERO,
@@ -141,13 +161,12 @@ export class CheckpointHeader {
141
161
  });
142
162
  }
143
163
 
144
- static random(
145
- overrides: Partial<FieldsOf<CheckpointHeader>> & Partial<FieldsOf<ContentCommitment>> = {},
146
- ): CheckpointHeader {
164
+ static random(overrides: Partial<FieldsOf<CheckpointHeader>> = {}): CheckpointHeader {
147
165
  return CheckpointHeader.from({
148
166
  lastArchiveRoot: Fr.random(),
149
167
  blockHeadersHash: Fr.random(),
150
- contentCommitment: ContentCommitment.random(overrides),
168
+ blobsHash: Fr.random(),
169
+ inHash: Fr.random(),
151
170
  slotNumber: SlotNumber(Math.floor(Math.random() * 1000) + 1),
152
171
  timestamp: BigInt(Math.floor(Date.now() / 1000)),
153
172
  coinbase: EthAddress.random(),
@@ -162,7 +181,8 @@ export class CheckpointHeader {
162
181
  return (
163
182
  this.lastArchiveRoot.isZero() &&
164
183
  this.blockHeadersHash.isZero() &&
165
- this.contentCommitment.isEmpty() &&
184
+ this.blobsHash.isZero() &&
185
+ this.inHash.isZero() &&
166
186
  this.slotNumber === 0 &&
167
187
  this.timestamp === 0n &&
168
188
  this.coinbase.isZero() &&
@@ -188,7 +208,8 @@ export class CheckpointHeader {
188
208
  return new CheckpointHeader(
189
209
  Fr.fromString(header.lastArchiveRoot),
190
210
  Fr.fromString(header.blockHeadersHash),
191
- ContentCommitment.fromViem(header.contentCommitment),
211
+ Fr.fromString(header.blobsHash),
212
+ Fr.fromString(header.inHash),
192
213
  SlotNumber.fromBigInt(header.slotNumber),
193
214
  header.timestamp,
194
215
  new EthAddress(hexToBuffer(header.coinbase)),
@@ -210,7 +231,8 @@ export class CheckpointHeader {
210
231
  return {
211
232
  lastArchiveRoot: this.lastArchiveRoot.toString(),
212
233
  blockHeadersHash: this.blockHeadersHash.toString(),
213
- contentCommitment: this.contentCommitment.toViem(),
234
+ blobsHash: this.blobsHash.toString(),
235
+ inHash: this.inHash.toString(),
214
236
  slotNumber: BigInt(this.slotNumber),
215
237
  timestamp: this.timestamp,
216
238
  coinbase: this.coinbase.toString(),
@@ -227,7 +249,8 @@ export class CheckpointHeader {
227
249
  return {
228
250
  lastArchive: this.lastArchiveRoot.toString(),
229
251
  blockHeadersHash: this.blockHeadersHash.toString(),
230
- contentCommitment: this.contentCommitment.toInspect(),
252
+ blobsHash: this.blobsHash.toString(),
253
+ inHash: this.inHash.toString(),
231
254
  slotNumber: this.slotNumber,
232
255
  timestamp: this.timestamp,
233
256
  coinbase: this.coinbase.toString(),
@@ -238,16 +261,16 @@ export class CheckpointHeader {
238
261
  }
239
262
 
240
263
  [inspect.custom]() {
241
- const gasfees = `da:${this.gasFees.feePerDaGas}, l2:${this.gasFees.feePerL2Gas}`;
242
264
  return `Header {
243
265
  lastArchiveRoot: ${this.lastArchiveRoot.toString()},
244
266
  blockHeadersHash: ${this.blockHeadersHash.toString()},
245
- contentCommitment: ${inspect(this.contentCommitment)},
267
+ blobsHash: ${inspect(this.blobsHash)},
268
+ inHash: ${inspect(this.inHash)},
246
269
  slotNumber: ${this.slotNumber},
247
270
  timestamp: ${this.timestamp},
248
271
  coinbase: ${this.coinbase.toString()},
249
272
  feeRecipient: ${this.feeRecipient.toString()},
250
- gasFees: ${gasfees},
273
+ gasFees: { da:${this.gasFees.feePerDaGas}, l2:${this.gasFees.feePerL2Gas} },
251
274
  totalManaUsed: ${this.totalManaUsed.toBigInt()},
252
275
  }`;
253
276
  }
@@ -31,6 +31,10 @@ export class CheckpointRollupPublicInputs {
31
31
  * The hashes of the headers of the constituent checkpoints.
32
32
  */
33
33
  public checkpointHeaderHashes: Tuple<Fr, typeof AZTEC_MAX_EPOCH_DURATION>,
34
+ /**
35
+ * The `out_hash` values from all checkpoints in this checkpoint range.
36
+ */
37
+ public outHashes: Tuple<Fr, typeof AZTEC_MAX_EPOCH_DURATION>,
34
38
  /**
35
39
  * The summed transaction fees and recipients of the constituent checkpoints.
36
40
  */
@@ -56,6 +60,7 @@ export class CheckpointRollupPublicInputs {
56
60
  reader.readObject(AppendOnlyTreeSnapshot),
57
61
  reader.readObject(AppendOnlyTreeSnapshot),
58
62
  reader.readArray(AZTEC_MAX_EPOCH_DURATION, Fr),
63
+ reader.readArray(AZTEC_MAX_EPOCH_DURATION, Fr),
59
64
  reader.readArray(AZTEC_MAX_EPOCH_DURATION, FeeRecipient),
60
65
  reader.readObject(BlobAccumulator),
61
66
  reader.readObject(BlobAccumulator),
@@ -69,6 +74,7 @@ export class CheckpointRollupPublicInputs {
69
74
  this.previousArchive,
70
75
  this.newArchive,
71
76
  this.checkpointHeaderHashes,
77
+ this.outHashes,
72
78
  this.fees,
73
79
  this.startBlobAccumulator,
74
80
  this.endBlobAccumulator,
@@ -21,6 +21,9 @@ export class RootRollupPublicInputs {
21
21
  public previousArchiveRoot: Fr,
22
22
  /** Root of the archive tree after this rollup is processed */
23
23
  public endArchiveRoot: Fr,
24
+ /** Root of the unbalanced merkle tree consisting of the `out_hash` values from all checkpoints in this rollup. */
25
+ public outHash: Fr,
26
+ /** Hashes of checkpoint headers for this rollup. */
24
27
  public checkpointHeaderHashes: Tuple<Fr, typeof AZTEC_MAX_EPOCH_DURATION>,
25
28
  public fees: Tuple<FeeRecipient, typeof AZTEC_MAX_EPOCH_DURATION>,
26
29
  public constants: EpochConstantData,
@@ -31,6 +34,7 @@ export class RootRollupPublicInputs {
31
34
  return [
32
35
  fields.previousArchiveRoot,
33
36
  fields.endArchiveRoot,
37
+ fields.outHash,
34
38
  fields.checkpointHeaderHashes,
35
39
  fields.fees,
36
40
  fields.constants,
@@ -58,6 +62,7 @@ export class RootRollupPublicInputs {
58
62
  public static fromBuffer(buffer: Buffer | BufferReader): RootRollupPublicInputs {
59
63
  const reader = BufferReader.asReader(buffer);
60
64
  return new RootRollupPublicInputs(
65
+ Fr.fromBuffer(reader),
61
66
  Fr.fromBuffer(reader),
62
67
  Fr.fromBuffer(reader),
63
68
  reader.readArray(AZTEC_MAX_EPOCH_DURATION, Fr),
@@ -88,6 +93,7 @@ export class RootRollupPublicInputs {
88
93
  /** Creates a random instance. Used for testing only - will not prove/verify. */
89
94
  static random() {
90
95
  return new RootRollupPublicInputs(
96
+ Fr.random(),
91
97
  Fr.random(),
92
98
  Fr.random(),
93
99
  makeTuple(AZTEC_MAX_EPOCH_DURATION, Fr.random),
@@ -43,7 +43,7 @@ import {
43
43
  VK_TREE_HEIGHT,
44
44
  } from '@aztec/constants';
45
45
  import { type FieldsOf, makeTuple } from '@aztec/foundation/array';
46
- import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
46
+ import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
47
47
  import { compact } from '@aztec/foundation/collection';
48
48
  import { Grumpkin } from '@aztec/foundation/crypto/grumpkin';
49
49
  import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
@@ -88,6 +88,7 @@ import { PublicDataRead } from '../avm/public_data_read.js';
88
88
  import { PublicDataWrite } from '../avm/public_data_write.js';
89
89
  import { AztecAddress } from '../aztec-address/index.js';
90
90
  import { L2BlockHeader } from '../block/l2_block_header.js';
91
+ import type { L2Tips } from '../block/l2_block_source.js';
91
92
  import {
92
93
  type ContractClassPublic,
93
94
  ContractDeploymentData,
@@ -131,6 +132,7 @@ import { PublicKeys, computeAddress } from '../keys/index.js';
131
132
  import { ContractClassLog, ContractClassLogFields } from '../logs/index.js';
132
133
  import { PrivateLog } from '../logs/private_log.js';
133
134
  import { FlatPublicLogs, PublicLog } from '../logs/public_log.js';
135
+ import { TxScopedL2Log } from '../logs/tx_scoped_l2_log.js';
134
136
  import { CountedL2ToL1Message, L2ToL1Message, ScopedL2ToL1Message } from '../messaging/l2_to_l1_message.js';
135
137
  import { ParityBasePrivateInputs } from '../parity/parity_base_private_inputs.js';
136
138
  import { ParityPublicInputs } from '../parity/parity_public_inputs.js';
@@ -163,7 +165,6 @@ import { NullifierLeaf, NullifierLeafPreimage } from '../trees/nullifier_leaf.js
163
165
  import { PublicDataTreeLeaf, PublicDataTreeLeafPreimage } from '../trees/public_data_leaf.js';
164
166
  import { BlockHeader } from '../tx/block_header.js';
165
167
  import { CallContext } from '../tx/call_context.js';
166
- import { ContentCommitment } from '../tx/content_commitment.js';
167
168
  import { FunctionData } from '../tx/function_data.js';
168
169
  import { GlobalVariables } from '../tx/global_variables.js';
169
170
  import { PartialStateReference } from '../tx/partial_state_reference.js';
@@ -173,6 +174,7 @@ import { StateReference } from '../tx/state_reference.js';
173
174
  import { TreeSnapshots } from '../tx/tree_snapshots.js';
174
175
  import { TxConstantData } from '../tx/tx_constant_data.js';
175
176
  import { TxContext } from '../tx/tx_context.js';
177
+ import { TxHash } from '../tx/tx_hash.js';
176
178
  import { TxRequest } from '../tx/tx_request.js';
177
179
  import { Vector } from '../types/index.js';
178
180
  import { VkData } from '../vks/index.js';
@@ -835,7 +837,6 @@ export function makeBlockRollupPublicInputs(seed = 0): BlockRollupPublicInputs {
835
837
  makeSpongeBlob(seed + 0x600),
836
838
  makeSpongeBlob(seed + 0x700),
837
839
  BigInt(seed + 0x800),
838
- BigInt(seed + 0x810),
839
840
  fr(seed + 0x820),
840
841
  fr(seed + 0x830),
841
842
  fr(seed + 0x840),
@@ -850,10 +851,11 @@ export function makeCheckpointRollupPublicInputs(seed = 0) {
850
851
  makeAppendOnlyTreeSnapshot(seed + 0x100),
851
852
  makeAppendOnlyTreeSnapshot(seed + 0x200),
852
853
  makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x300),
853
- makeTuple(AZTEC_MAX_EPOCH_DURATION, () => makeFeeRecipient(seed), 0x400),
854
- makeBlobAccumulator(seed + 0x500),
854
+ makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x400),
855
+ makeTuple(AZTEC_MAX_EPOCH_DURATION, () => makeFeeRecipient(seed), 0x500),
855
856
  makeBlobAccumulator(seed + 0x600),
856
- makeFinalBlobBatchingChallenges(seed + 0x700),
857
+ makeBlobAccumulator(seed + 0x700),
858
+ makeFinalBlobBatchingChallenges(seed + 0x800),
857
859
  );
858
860
  }
859
861
 
@@ -885,20 +887,14 @@ export function makeRootRollupPublicInputs(seed = 0): RootRollupPublicInputs {
885
887
  return new RootRollupPublicInputs(
886
888
  fr(seed + 0x100),
887
889
  fr(seed + 0x200),
888
- makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x300),
890
+ fr(seed + 0x300),
891
+ makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x400),
889
892
  makeTuple(AZTEC_MAX_EPOCH_DURATION, () => makeFeeRecipient(seed), 0x500),
890
893
  makeEpochConstantData(seed + 0x600),
891
894
  makeFinalBlobAccumulator(seed + 0x700),
892
895
  );
893
896
  }
894
897
 
895
- /**
896
- * Makes content commitment
897
- */
898
- export function makeContentCommitment(seed = 0): ContentCommitment {
899
- return new ContentCommitment(fr(seed + 0x100), fr(seed + 0x200), fr(seed + 0x300));
900
- }
901
-
902
898
  export function makeBlockHeader(
903
899
  seed = 0,
904
900
  overrides: Partial<FieldsOf<Omit<BlockHeader, 'globalVariables'>>> & Partial<FieldsOf<GlobalVariables>> = {},
@@ -922,7 +918,8 @@ export function makeL2BlockHeader(
922
918
  ) {
923
919
  return new L2BlockHeader(
924
920
  makeAppendOnlyTreeSnapshot(seed + 0x100),
925
- overrides?.contentCommitment ?? makeContentCommitment(seed + 0x200),
921
+ overrides?.blobsHash ?? fr(seed + 0x200),
922
+ overrides?.inHash ?? fr(seed + 0x300),
926
923
  overrides?.state ?? makeStateReference(seed + 0x600),
927
924
  makeGlobalVariables((seed += 0x700), {
928
925
  ...(blockNumber !== undefined ? { blockNumber: BlockNumber(blockNumber) } : {}),
@@ -939,7 +936,8 @@ export function makeCheckpointHeader(seed = 0) {
939
936
  return CheckpointHeader.from({
940
937
  lastArchiveRoot: fr(seed + 0x100),
941
938
  blockHeadersHash: fr(seed + 0x150),
942
- contentCommitment: makeContentCommitment(seed + 0x200),
939
+ blobsHash: fr(seed + 0x200),
940
+ inHash: fr(seed + 0x210),
943
941
  slotNumber: SlotNumber(seed + 0x300),
944
942
  timestamp: BigInt(seed + 0x400),
945
943
  coinbase: makeEthAddress(seed + 0x500),
@@ -986,7 +984,7 @@ function makeCountedL2ToL1Message(seed = 0) {
986
984
  return new CountedL2ToL1Message(makeL2ToL1Message(seed), seed + 2);
987
985
  }
988
986
 
989
- function makeScopedL2ToL1Message(seed = 1) {
987
+ export function makeScopedL2ToL1Message(seed = 1) {
990
988
  return new ScopedL2ToL1Message(makeL2ToL1Message(seed), makeAztecAddress(seed + 3));
991
989
  }
992
990
 
@@ -1696,3 +1694,86 @@ export async function makeAvmCircuitInputs(
1696
1694
  export function fr(n: number): Fr {
1697
1695
  return new Fr(BigInt(n));
1698
1696
  }
1697
+
1698
+ /**
1699
+ * Creates a random TxScopedL2Log with private log data.
1700
+ */
1701
+ export function randomTxScopedPrivateL2Log(opts?: {
1702
+ tag?: Fr;
1703
+ txHash?: TxHash;
1704
+ blockNumber?: number;
1705
+ blockTimestamp?: bigint;
1706
+ noteHashes?: Fr[];
1707
+ firstNullifier?: Fr;
1708
+ }) {
1709
+ const log = PrivateLog.random(opts?.tag);
1710
+ return new TxScopedL2Log(
1711
+ opts?.txHash ?? TxHash.random(),
1712
+ BlockNumber(opts?.blockNumber ?? 1),
1713
+ opts?.blockTimestamp ?? 1n,
1714
+ log.getEmittedFields(),
1715
+ opts?.noteHashes ?? [Fr.random(), Fr.random()],
1716
+ opts?.firstNullifier ?? Fr.random(),
1717
+ );
1718
+ }
1719
+
1720
+ /**
1721
+ * Creates a random TxScopedL2Log with public log data.
1722
+ */
1723
+ export async function randomTxScopedPublicL2Log(opts?: {
1724
+ txHash?: TxHash;
1725
+ blockNumber?: number;
1726
+ blockTimestamp?: bigint;
1727
+ noteHashes?: Fr[];
1728
+ firstNullifier?: Fr;
1729
+ }) {
1730
+ const log = await PublicLog.random();
1731
+ return new TxScopedL2Log(
1732
+ opts?.txHash ?? TxHash.random(),
1733
+ BlockNumber(opts?.blockNumber ?? 1),
1734
+ opts?.blockTimestamp ?? 1n,
1735
+ log.getEmittedFields(),
1736
+ opts?.noteHashes ?? [Fr.random(), Fr.random()],
1737
+ opts?.firstNullifier ?? Fr.random(),
1738
+ );
1739
+ }
1740
+
1741
+ /**
1742
+ * Creates L2Tips with all tips pointing to the same block number.
1743
+ * Useful for mocking aztecNode.getL2Tips() in tests.
1744
+ * @param blockNumber - The block number to use for all tips.
1745
+ * @param hash - Optional hash for the block (defaults to empty string).
1746
+ * @param checkpointNumber - Optional checkpoint number (defaults to blockNumber).
1747
+ * @param checkpointHash - Optional checkpoint hash (defaults to block hash).
1748
+ * @returns L2Tips object with all tips at the same block.
1749
+ */
1750
+ export function makeL2Tips(
1751
+ blockNumber: number | BlockNumber,
1752
+ hash = '',
1753
+ checkpointNumber?: number | CheckpointNumber,
1754
+ checkpointHash?: string,
1755
+ ): L2Tips {
1756
+ const bn = typeof blockNumber === 'number' ? BlockNumber(blockNumber) : blockNumber;
1757
+ const cpn =
1758
+ checkpointNumber !== undefined
1759
+ ? typeof checkpointNumber === 'number'
1760
+ ? CheckpointNumber(checkpointNumber)
1761
+ : checkpointNumber
1762
+ : CheckpointNumber(bn);
1763
+ const cph = checkpointHash ?? hash;
1764
+ return {
1765
+ proposed: { number: bn, hash },
1766
+ checkpointed: {
1767
+ block: { number: bn, hash },
1768
+ checkpoint: { number: cpn, hash: cph },
1769
+ },
1770
+ proven: {
1771
+ block: { number: bn, hash },
1772
+ checkpoint: { number: cpn, hash: cph },
1773
+ },
1774
+ finalized: {
1775
+ block: { number: bn, hash },
1776
+ checkpoint: { number: cpn, hash: cph },
1777
+ },
1778
+ };
1779
+ }