@aztec/stdlib 0.87.3-nightly.20250529 → 0.87.4

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 (182) hide show
  1. package/dest/abi/abi.d.ts +0 -3
  2. package/dest/abi/abi.d.ts.map +1 -1
  3. package/dest/abi/abi.js +0 -38
  4. package/dest/avm/avm.d.ts +12 -696
  5. package/dest/avm/avm.d.ts.map +1 -1
  6. package/dest/avm/avm.js +8 -16
  7. package/dest/avm/avm_accumulated_data.d.ts +0 -77
  8. package/dest/avm/avm_accumulated_data.d.ts.map +1 -1
  9. package/dest/avm/avm_accumulated_data.js +0 -67
  10. package/dest/avm/avm_circuit_public_inputs.d.ts +3 -73
  11. package/dest/avm/avm_circuit_public_inputs.d.ts.map +1 -1
  12. package/dest/avm/avm_circuit_public_inputs.js +9 -19
  13. package/dest/avm/avm_proving_request.d.ts +0 -366
  14. package/dest/avm/avm_proving_request.d.ts.map +1 -1
  15. package/dest/block/body.d.ts +1 -1
  16. package/dest/block/body.d.ts.map +1 -1
  17. package/dest/block/body.js +2 -2
  18. package/dest/block/index.d.ts +0 -1
  19. package/dest/block/index.d.ts.map +1 -1
  20. package/dest/block/index.js +0 -1
  21. package/dest/block/l2_block.d.ts +2 -3
  22. package/dest/block/l2_block.d.ts.map +1 -1
  23. package/dest/block/l2_block.js +5 -10
  24. package/dest/block/l2_block_source.d.ts +4 -9
  25. package/dest/block/l2_block_source.d.ts.map +1 -1
  26. package/dest/block/l2_block_source.js +0 -1
  27. package/dest/block/published_l2_block.d.ts +69 -99
  28. package/dest/block/published_l2_block.d.ts.map +1 -1
  29. package/dest/block/published_l2_block.js +12 -38
  30. package/dest/block/test/l2_tips_store_test_suite.js +1 -1
  31. package/dest/interfaces/archiver.js +2 -2
  32. package/dest/interfaces/aztec-node.js +2 -2
  33. package/dest/interfaces/p2p.d.ts +2 -5
  34. package/dest/interfaces/p2p.d.ts.map +1 -1
  35. package/dest/interfaces/p2p.js +2 -1
  36. package/dest/interfaces/proving-job.d.ts +4 -370
  37. package/dest/interfaces/proving-job.d.ts.map +1 -1
  38. package/dest/interfaces/proving-job.js +2 -2
  39. package/dest/interfaces/server_circuit_prover.d.ts +2 -3
  40. package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
  41. package/dest/kernel/hints/find_private_kernel_reset_dimensions.js +1 -1
  42. package/dest/kernel/hints/key_validation_hint.d.ts +6 -2
  43. package/dest/kernel/hints/key_validation_hint.d.ts.map +1 -1
  44. package/dest/kernel/hints/key_validation_hint.js +7 -5
  45. package/dest/kernel/hints/private_kernel_reset_hints.d.ts +7 -7
  46. package/dest/kernel/hints/private_kernel_reset_hints.d.ts.map +1 -1
  47. package/dest/kernel/hints/private_kernel_reset_hints.js +4 -8
  48. package/dest/kernel/hints/read_request_hints.d.ts +8 -8
  49. package/dest/kernel/hints/read_request_hints.d.ts.map +1 -1
  50. package/dest/kernel/index.d.ts +0 -1
  51. package/dest/kernel/index.d.ts.map +1 -1
  52. package/dest/kernel/index.js +0 -1
  53. package/dest/kernel/private_kernel_data.d.ts +25 -6
  54. package/dest/kernel/private_kernel_data.d.ts.map +1 -1
  55. package/dest/kernel/private_kernel_data.js +19 -8
  56. package/dest/kernel/private_kernel_reset_circuit_private_inputs.d.ts +4 -7
  57. package/dest/kernel/private_kernel_reset_circuit_private_inputs.d.ts.map +1 -1
  58. package/dest/kernel/private_kernel_reset_circuit_private_inputs.js +6 -10
  59. package/dest/kernel/private_kernel_reset_dimensions.d.ts +10 -10
  60. package/dest/kernel/private_kernel_reset_dimensions.d.ts.map +1 -1
  61. package/dest/kernel/private_kernel_reset_dimensions.js +29 -29
  62. package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts +1 -10
  63. package/dest/kernel/private_kernel_tail_circuit_private_inputs.d.ts.map +1 -1
  64. package/dest/kernel/private_kernel_tail_circuit_private_inputs.js +3 -8
  65. package/dest/kernel/public_call_request.d.ts +0 -54
  66. package/dest/kernel/public_call_request.d.ts.map +1 -1
  67. package/dest/kernel/public_call_request.js +0 -58
  68. package/dest/logs/contract_class_log.d.ts +4 -0
  69. package/dest/logs/contract_class_log.d.ts.map +1 -1
  70. package/dest/logs/contract_class_log.js +33 -0
  71. package/dest/logs/log_with_tx_data.d.ts +3 -3
  72. package/dest/logs/log_with_tx_data.d.ts.map +1 -1
  73. package/dest/logs/log_with_tx_data.js +13 -9
  74. package/dest/logs/private_log.d.ts +0 -1
  75. package/dest/logs/private_log.d.ts.map +1 -1
  76. package/dest/logs/private_log.js +0 -3
  77. package/dest/logs/public_log.d.ts +0 -1
  78. package/dest/logs/public_log.d.ts.map +1 -1
  79. package/dest/logs/public_log.js +0 -3
  80. package/dest/logs/tx_scoped_l2_log.d.ts.map +1 -1
  81. package/dest/logs/tx_scoped_l2_log.js +0 -1
  82. package/dest/rollup/avm_proof_data.d.ts +5 -7
  83. package/dest/rollup/avm_proof_data.d.ts.map +1 -1
  84. package/dest/rollup/avm_proof_data.js +4 -12
  85. package/dest/rollup/base_rollup_hints.d.ts +4 -4
  86. package/dest/rollup/base_rollup_hints.d.ts.map +1 -1
  87. package/dest/rollup/base_rollup_hints.js +8 -8
  88. package/dest/rollup/previous_rollup_block_data.d.ts +15 -6
  89. package/dest/rollup/previous_rollup_block_data.d.ts.map +1 -1
  90. package/dest/rollup/previous_rollup_block_data.js +13 -8
  91. package/dest/rollup/previous_rollup_data.d.ts +15 -6
  92. package/dest/rollup/previous_rollup_data.d.ts.map +1 -1
  93. package/dest/rollup/previous_rollup_data.js +13 -8
  94. package/dest/rollup/private_tube_data.d.ts +3 -3
  95. package/dest/rollup/private_tube_data.d.ts.map +1 -1
  96. package/dest/rollup/private_tube_data.js +3 -3
  97. package/dest/rollup/public_tube_data.d.ts +3 -3
  98. package/dest/rollup/public_tube_data.d.ts.map +1 -1
  99. package/dest/rollup/public_tube_data.js +3 -3
  100. package/dest/rollup/root_rollup.d.ts +10 -9
  101. package/dest/rollup/root_rollup.d.ts.map +1 -1
  102. package/dest/rollup/root_rollup.js +20 -9
  103. package/dest/tests/factories.d.ts +1 -2
  104. package/dest/tests/factories.d.ts.map +1 -1
  105. package/dest/tests/factories.js +19 -25
  106. package/dest/tests/mocks.d.ts.map +1 -1
  107. package/dest/tests/mocks.js +3 -4
  108. package/dest/tx/processed_tx.d.ts.map +1 -1
  109. package/dest/tx/processed_tx.js +5 -2
  110. package/dest/tx/tx.d.ts +25 -10
  111. package/dest/tx/tx.d.ts.map +1 -1
  112. package/dest/tx/tx.js +50 -25
  113. package/dest/tx/tx_effect.d.ts +1 -1
  114. package/dest/tx/tx_effect.d.ts.map +1 -1
  115. package/dest/tx/tx_effect.js +2 -2
  116. package/dest/validators/types.d.ts +0 -4
  117. package/dest/validators/types.d.ts.map +1 -1
  118. package/dest/vks/index.d.ts +1 -1
  119. package/dest/vks/index.d.ts.map +1 -1
  120. package/dest/vks/index.js +1 -1
  121. package/dest/vks/{vk_data.d.ts → vk_witness_data.d.ts} +8 -8
  122. package/dest/vks/vk_witness_data.d.ts.map +1 -0
  123. package/dest/vks/{vk_data.js → vk_witness_data.js} +10 -10
  124. package/package.json +7 -7
  125. package/src/abi/abi.ts +0 -37
  126. package/src/avm/avm.ts +0 -14
  127. package/src/avm/avm_accumulated_data.ts +0 -93
  128. package/src/avm/avm_circuit_public_inputs.ts +2 -22
  129. package/src/block/body.ts +2 -7
  130. package/src/block/index.ts +0 -1
  131. package/src/block/l2_block.ts +3 -8
  132. package/src/block/l2_block_source.ts +3 -9
  133. package/src/block/published_l2_block.ts +24 -38
  134. package/src/block/test/l2_tips_store_test_suite.ts +1 -1
  135. package/src/interfaces/archiver.ts +2 -2
  136. package/src/interfaces/aztec-node.ts +2 -2
  137. package/src/interfaces/p2p.ts +3 -8
  138. package/src/interfaces/proving-job.ts +3 -3
  139. package/src/interfaces/server_circuit_prover.ts +2 -3
  140. package/src/kernel/hints/find_private_kernel_reset_dimensions.ts +3 -3
  141. package/src/kernel/hints/key_validation_hint.ts +6 -4
  142. package/src/kernel/hints/private_kernel_reset_hints.ts +43 -34
  143. package/src/kernel/hints/read_request_hints.ts +15 -27
  144. package/src/kernel/index.ts +0 -1
  145. package/src/kernel/private_kernel_data.ts +29 -7
  146. package/src/kernel/private_kernel_reset_circuit_private_inputs.ts +13 -16
  147. package/src/kernel/private_kernel_reset_dimensions.ts +27 -27
  148. package/src/kernel/private_kernel_tail_circuit_private_inputs.ts +2 -10
  149. package/src/kernel/public_call_request.ts +0 -66
  150. package/src/logs/contract_class_log.ts +36 -0
  151. package/src/logs/log_with_tx_data.ts +11 -7
  152. package/src/logs/private_log.ts +0 -4
  153. package/src/logs/public_log.ts +0 -4
  154. package/src/logs/tx_scoped_l2_log.ts +0 -1
  155. package/src/rollup/avm_proof_data.ts +7 -14
  156. package/src/rollup/base_rollup_hints.ts +4 -4
  157. package/src/rollup/previous_rollup_block_data.ts +12 -6
  158. package/src/rollup/previous_rollup_data.ts +12 -6
  159. package/src/rollup/private_tube_data.ts +4 -4
  160. package/src/rollup/public_tube_data.ts +4 -4
  161. package/src/rollup/root_rollup.ts +19 -6
  162. package/src/tests/factories.ts +32 -36
  163. package/src/tests/mocks.ts +3 -6
  164. package/src/tx/processed_tx.ts +5 -4
  165. package/src/tx/tx.ts +54 -28
  166. package/src/tx/tx_effect.ts +5 -23
  167. package/src/validators/types.ts +0 -2
  168. package/src/vks/index.ts +1 -1
  169. package/src/vks/{vk_data.ts → vk_witness_data.ts} +6 -6
  170. package/dest/block/proposal/committee_attestation.d.ts +0 -34
  171. package/dest/block/proposal/committee_attestation.d.ts.map +0 -1
  172. package/dest/block/proposal/committee_attestation.js +0 -59
  173. package/dest/block/proposal/index.d.ts +0 -2
  174. package/dest/block/proposal/index.d.ts.map +0 -1
  175. package/dest/block/proposal/index.js +0 -1
  176. package/dest/kernel/padded_side_effects.d.ts +0 -26
  177. package/dest/kernel/padded_side_effects.d.ts.map +0 -1
  178. package/dest/kernel/padded_side_effects.js +0 -51
  179. package/dest/vks/vk_data.d.ts.map +0 -1
  180. package/src/block/proposal/committee_attestation.ts +0 -70
  181. package/src/block/proposal/index.ts +0 -1
  182. package/src/kernel/padded_side_effects.ts +0 -73
@@ -96,6 +96,8 @@ export class ContractClassLogFields {
96
96
 
97
97
  export class ContractClassLog {
98
98
  static SIZE_IN_BYTES = Fr.SIZE_IN_BYTES * CONTRACT_CLASS_LOG_LENGTH;
99
+ // Keeps original first field pre-siloing. Only set by silo().
100
+ public unsiloedFirstField?: Fr | undefined;
99
101
 
100
102
  constructor(
101
103
  public contractAddress: AztecAddress,
@@ -178,6 +180,40 @@ export class ContractClassLog {
178
180
  );
179
181
  }
180
182
 
183
+ setUnsiloedFirstField(field: Fr) {
184
+ this.unsiloedFirstField = field;
185
+ }
186
+
187
+ toUnsiloed() {
188
+ if (this.contractAddress.isZero()) {
189
+ return this;
190
+ }
191
+ if (this.unsiloedFirstField) {
192
+ return new ContractClassLog(
193
+ this.contractAddress,
194
+ new ContractClassLogFields([this.unsiloedFirstField].concat(this.fields.fields.slice(1))),
195
+ this.emittedLength,
196
+ );
197
+ } else {
198
+ return this;
199
+ }
200
+ }
201
+
202
+ // TODO(#13914): Don't need to silo the contract class logs.
203
+ async silo() {
204
+ if (this.contractAddress.isZero()) {
205
+ return this;
206
+ }
207
+
208
+ const fields = this.fields.clone();
209
+ const unsiloedField = fields.fields[0];
210
+ const siloedField = await poseidon2Hash([this.contractAddress, unsiloedField]);
211
+ fields.fields[0] = siloedField;
212
+ const cloned = new ContractClassLog(this.contractAddress, fields, this.emittedLength);
213
+ cloned.setUnsiloedFirstField(unsiloedField);
214
+ return cloned;
215
+ }
216
+
181
217
  async hash() {
182
218
  return await this.fields.hash();
183
219
  }
@@ -1,13 +1,14 @@
1
- import { MAX_NOTE_HASHES_PER_TX, PUBLIC_LOG_PLAINTEXT_LEN } from '@aztec/constants';
1
+ import { MAX_NOTE_HASHES_PER_TX, PUBLIC_LOG_SIZE_IN_FIELDS } from '@aztec/constants';
2
2
  import { Fr } from '@aztec/foundation/fields';
3
3
  import { TxHash } from '@aztec/stdlib/tx';
4
4
 
5
- // TypeScript representation of the Noir aztec::oracle::message_discovery::PublicLogWithTxData struct. This is used as a
6
- // response for PXE's custom getPublicLogByTag oracle.
7
- export class PublicLogWithTxData {
5
+ // TypeScript representation of the Noir aztec::oracle::message_discovery::LogWithTxData struct. This is used as a
6
+ // response for PXE's custom getLogByTag oracle.
7
+ export class LogWithTxData {
8
8
  constructor(
9
9
  // The emitted fields of a log.
10
- public logPlaintext: Fr[],
10
+ // For public logs, the contract address is prepended to the content.
11
+ public logContent: Fr[],
11
12
  public txHash: TxHash,
12
13
  public uniqueNoteHashesInTx: Fr[],
13
14
  public firstNullifierInTx: Fr,
@@ -15,7 +16,10 @@ export class PublicLogWithTxData {
15
16
 
16
17
  toNoirSerialization(): (Fr | Fr[])[] {
17
18
  return [
18
- ...toBoundedVecSerialization(this.logPlaintext, PUBLIC_LOG_PLAINTEXT_LEN),
19
+ // The log fields length is PUBLIC_LOG_SIZE_IN_FIELDS. + 1 because the contract address is prepended to the content.
20
+ // This is only used for public logs currently, so the maxLength is PUBLIC_LOG_SIZE_IN_FIELDS + 1.
21
+ // TODO(#11639): this could also be used for private logs.
22
+ ...toBoundedVecSerialization(this.logContent, PUBLIC_LOG_SIZE_IN_FIELDS + 1),
19
23
  this.txHash.hash,
20
24
  ...toBoundedVecSerialization(this.uniqueNoteHashesInTx, MAX_NOTE_HASHES_PER_TX),
21
25
  this.firstNullifierInTx,
@@ -23,7 +27,7 @@ export class PublicLogWithTxData {
23
27
  }
24
28
 
25
29
  static noirSerializationOfEmpty(): (Fr | Fr[])[] {
26
- return new PublicLogWithTxData([], TxHash.zero(), [], new Fr(0)).toNoirSerialization();
30
+ return new LogWithTxData([], TxHash.zero(), [], new Fr(0)).toNoirSerialization();
27
31
  }
28
32
  }
29
33
 
@@ -44,10 +44,6 @@ export class PrivateLog {
44
44
  return this.fields.slice(0, this.emittedLength);
45
45
  }
46
46
 
47
- getEmittedFieldsWithoutTag() {
48
- return this.fields.slice(1, this.emittedLength);
49
- }
50
-
51
47
  toBlobFields(): Fr[] {
52
48
  return [new Fr(this.emittedLength)].concat(this.getEmittedFields());
53
49
  }
@@ -50,10 +50,6 @@ export class PublicLog {
50
50
  return this.fields.slice(0, this.emittedLength);
51
51
  }
52
52
 
53
- getEmittedFieldsWithoutTag() {
54
- return this.fields.slice(1, this.emittedLength);
55
- }
56
-
57
53
  toBlobFields(): Fr[] {
58
54
  return [new Fr(this.emittedLength), this.contractAddress.toField()].concat(this.getEmittedFields());
59
55
  }
@@ -6,7 +6,6 @@ import { TxHash } from '../tx/tx_hash.js';
6
6
  import { PrivateLog } from './private_log.js';
7
7
  import { PublicLog } from './public_log.js';
8
8
 
9
- // TODO(#14460): Split to private and public versions instead of having this weird mix.
10
9
  export class TxScopedL2Log {
11
10
  constructor(
12
11
  /*
@@ -1,16 +1,15 @@
1
- import { AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED } from '@aztec/constants';
2
- import { Fr } from '@aztec/foundation/fields';
1
+ import { AVM_PROOF_LENGTH_IN_FIELDS } from '@aztec/constants';
3
2
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
4
3
 
5
4
  import { AvmCircuitPublicInputs } from '../avm/avm_circuit_public_inputs.js';
6
5
  import { RecursiveProof, makeEmptyRecursiveProof } from '../proofs/recursive_proof.js';
7
- import { VkData } from '../vks/vk_data.js';
6
+ import { VkWitnessData } from '../vks/vk_witness_data.js';
8
7
 
9
8
  export class AvmProofData {
10
9
  constructor(
11
10
  public publicInputs: AvmCircuitPublicInputs,
12
- public proof: RecursiveProof<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>,
13
- public vkData: VkData,
11
+ public proof: RecursiveProof<typeof AVM_PROOF_LENGTH_IN_FIELDS>,
12
+ public vkData: VkWitnessData,
14
13
  ) {}
15
14
 
16
15
  static fromBuffer(buffer: Buffer | BufferReader) {
@@ -18,7 +17,7 @@ export class AvmProofData {
18
17
  return new AvmProofData(
19
18
  reader.readObject(AvmCircuitPublicInputs),
20
19
  RecursiveProof.fromBuffer(reader),
21
- reader.readObject(VkData),
20
+ reader.readObject(VkWitnessData),
22
21
  );
23
22
  }
24
23
 
@@ -29,14 +28,8 @@ export class AvmProofData {
29
28
  static empty() {
30
29
  return new AvmProofData(
31
30
  AvmCircuitPublicInputs.empty(),
32
- makeEmptyRecursiveProof(AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED),
33
- VkData.empty(),
31
+ makeEmptyRecursiveProof(AVM_PROOF_LENGTH_IN_FIELDS),
32
+ VkWitnessData.empty(),
34
33
  );
35
34
  }
36
35
  }
37
-
38
- // TODO(#14234)[Unconditional PIs validation]: remove this function.
39
- export function enhanceProofWithPiValidationFlag(proof: Fr[], skipPublicInputsValidation: boolean): Fr[] {
40
- const skipPublicInputsField = skipPublicInputsValidation ? new Fr(1) : new Fr(0);
41
- return [skipPublicInputsField].concat(proof).slice(0, AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED);
42
- }
@@ -39,7 +39,7 @@ export class PrivateBaseRollupHints {
39
39
  /**
40
40
  * Preimages to the kernel's contractClassLogsHashes.
41
41
  */
42
- public contractClassLogsFields: Tuple<ContractClassLogFields, typeof MAX_CONTRACT_CLASS_LOGS_PER_TX>,
42
+ public contractClassLogsPreimages: Tuple<ContractClassLogFields, typeof MAX_CONTRACT_CLASS_LOGS_PER_TX>,
43
43
  /**
44
44
  * Data which is not modified by the base rollup circuit.
45
45
  */
@@ -57,7 +57,7 @@ export class PrivateBaseRollupHints {
57
57
  fields.stateDiffHints,
58
58
  fields.feePayerFeeJuiceBalanceReadHint,
59
59
  fields.archiveRootMembershipWitness,
60
- fields.contractClassLogsFields,
60
+ fields.contractClassLogsPreimages,
61
61
  fields.constants,
62
62
  ] as const;
63
63
  }
@@ -121,7 +121,7 @@ export class PublicBaseRollupHints {
121
121
  /**
122
122
  * Preimages to the kernel's contractClassLogsHashes.
123
123
  */
124
- public contractClassLogsFields: Tuple<ContractClassLogFields, typeof MAX_CONTRACT_CLASS_LOGS_PER_TX>,
124
+ public contractClassLogsPreimages: Tuple<ContractClassLogFields, typeof MAX_CONTRACT_CLASS_LOGS_PER_TX>,
125
125
  /**
126
126
  * Data which is not modified by the base rollup circuit.
127
127
  */
@@ -136,7 +136,7 @@ export class PublicBaseRollupHints {
136
136
  return [
137
137
  fields.startSpongeBlob,
138
138
  fields.archiveRootMembershipWitness,
139
- fields.contractClassLogsFields,
139
+ fields.contractClassLogsPreimages,
140
140
  fields.constants,
141
141
  ] as const;
142
142
  }
@@ -1,8 +1,9 @@
1
- import { NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH } from '@aztec/constants';
1
+ import { NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, VK_TREE_HEIGHT } from '@aztec/constants';
2
2
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
3
+ import { MembershipWitness } from '@aztec/foundation/trees';
3
4
 
4
5
  import { RecursiveProof } from '../proofs/recursive_proof.js';
5
- import { VkData } from '../vks/index.js';
6
+ import { VerificationKeyAsFields } from '../vks/verification_key.js';
6
7
  import { BlockRootOrBlockMergePublicInputs } from './block_root_or_block_merge_public_inputs.js';
7
8
 
8
9
  /**
@@ -19,9 +20,13 @@ export class PreviousRollupBlockData {
19
20
  */
20
21
  public proof: RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
21
22
  /**
22
- * The verification key and the witness of the vk in the vk tree.
23
+ * The verification key of the block merge or block root rollup circuit.
23
24
  */
24
- public vkData: VkData,
25
+ public vk: VerificationKeyAsFields,
26
+ /**
27
+ * Sibling path of the rollup circuit's vk in a big tree of rollup circuit vks.
28
+ */
29
+ public vkWitness: MembershipWitness<typeof VK_TREE_HEIGHT>,
25
30
  ) {}
26
31
 
27
32
  /**
@@ -29,7 +34,7 @@ export class PreviousRollupBlockData {
29
34
  * @returns The buffer of the serialized previous rollup data.
30
35
  */
31
36
  public toBuffer(): Buffer {
32
- return serializeToBuffer(this.blockRootOrBlockMergePublicInputs, this.proof, this.vkData);
37
+ return serializeToBuffer(this.blockRootOrBlockMergePublicInputs, this.proof, this.vk, this.vkWitness);
33
38
  }
34
39
 
35
40
  /**
@@ -42,7 +47,8 @@ export class PreviousRollupBlockData {
42
47
  return new PreviousRollupBlockData(
43
48
  reader.readObject(BlockRootOrBlockMergePublicInputs),
44
49
  RecursiveProof.fromBuffer(reader, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH),
45
- reader.readObject(VkData),
50
+ reader.readObject(VerificationKeyAsFields),
51
+ MembershipWitness.fromBuffer(reader, VK_TREE_HEIGHT),
46
52
  );
47
53
  }
48
54
  }
@@ -1,8 +1,9 @@
1
- import { NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH } from '@aztec/constants';
1
+ import { NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, VK_TREE_HEIGHT } from '@aztec/constants';
2
2
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
3
+ import { MembershipWitness } from '@aztec/foundation/trees';
3
4
 
4
5
  import { RecursiveProof } from '../proofs/recursive_proof.js';
5
- import { VkData } from '../vks/index.js';
6
+ import { VerificationKeyAsFields } from '../vks/verification_key.js';
6
7
  import { BaseOrMergeRollupPublicInputs } from './base_or_merge_rollup_public_inputs.js';
7
8
 
8
9
  /**
@@ -19,9 +20,13 @@ export class PreviousRollupData {
19
20
  */
20
21
  public proof: RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
21
22
  /**
22
- * The verification key and the witness of the vk in the vk tree.
23
+ * The verification key of the base or merge rollup circuit.
23
24
  */
24
- public vkData: VkData,
25
+ public vk: VerificationKeyAsFields,
26
+ /**
27
+ * Sibling path of the rollup circuit's vk in a big tree of rollup circuit vks.
28
+ */
29
+ public vkWitness: MembershipWitness<typeof VK_TREE_HEIGHT>,
25
30
  ) {}
26
31
 
27
32
  /**
@@ -29,7 +34,7 @@ export class PreviousRollupData {
29
34
  * @returns The buffer of the serialized previous rollup data.
30
35
  */
31
36
  public toBuffer(): Buffer {
32
- return serializeToBuffer(this.baseOrMergeRollupPublicInputs, this.proof, this.vkData);
37
+ return serializeToBuffer(this.baseOrMergeRollupPublicInputs, this.proof, this.vk, this.vkWitness);
33
38
  }
34
39
 
35
40
  /**
@@ -42,7 +47,8 @@ export class PreviousRollupData {
42
47
  return new PreviousRollupData(
43
48
  reader.readObject(BaseOrMergeRollupPublicInputs),
44
49
  RecursiveProof.fromBuffer(reader, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH),
45
- reader.readObject(VkData),
50
+ reader.readObject(VerificationKeyAsFields),
51
+ MembershipWitness.fromBuffer(reader, VK_TREE_HEIGHT),
46
52
  );
47
53
  }
48
54
  }
@@ -3,20 +3,20 @@ import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
3
3
 
4
4
  import { PrivateToRollupKernelCircuitPublicInputs } from '../kernel/private_to_rollup_kernel_circuit_public_inputs.js';
5
5
  import { RecursiveProof, makeEmptyRecursiveProof } from '../proofs/recursive_proof.js';
6
- import { VkData } from '../vks/index.js';
6
+ import { VkWitnessData } from '../vks/vk_witness_data.js';
7
7
 
8
8
  export class PrivateTubeData {
9
9
  constructor(
10
10
  public publicInputs: PrivateToRollupKernelCircuitPublicInputs,
11
11
  public proof: RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
12
- public vkData: VkData,
12
+ public vkData: VkWitnessData,
13
13
  ) {}
14
14
 
15
15
  static empty() {
16
16
  return new PrivateTubeData(
17
17
  PrivateToRollupKernelCircuitPublicInputs.empty(),
18
18
  makeEmptyRecursiveProof(NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH),
19
- VkData.empty(),
19
+ VkWitnessData.empty(),
20
20
  );
21
21
  }
22
22
 
@@ -25,7 +25,7 @@ export class PrivateTubeData {
25
25
  return new PrivateTubeData(
26
26
  reader.readObject(PrivateToRollupKernelCircuitPublicInputs),
27
27
  RecursiveProof.fromBuffer(reader, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH),
28
- reader.readObject(VkData),
28
+ reader.readObject(VkWitnessData),
29
29
  );
30
30
  }
31
31
 
@@ -3,20 +3,20 @@ import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
3
3
 
4
4
  import { PrivateToPublicKernelCircuitPublicInputs } from '../kernel/private_to_public_kernel_circuit_public_inputs.js';
5
5
  import { RecursiveProof, makeEmptyRecursiveProof } from '../proofs/recursive_proof.js';
6
- import { VkData } from '../vks/index.js';
6
+ import { VkWitnessData } from '../vks/vk_witness_data.js';
7
7
 
8
8
  export class PublicTubeData {
9
9
  constructor(
10
10
  public publicInputs: PrivateToPublicKernelCircuitPublicInputs,
11
11
  public proof: RecursiveProof<typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>,
12
- public vkData: VkData,
12
+ public vkData: VkWitnessData,
13
13
  ) {}
14
14
 
15
15
  static empty() {
16
16
  return new PublicTubeData(
17
17
  PrivateToPublicKernelCircuitPublicInputs.empty(),
18
18
  makeEmptyRecursiveProof(NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH),
19
- VkData.empty(),
19
+ VkWitnessData.empty(),
20
20
  );
21
21
  }
22
22
 
@@ -25,7 +25,7 @@ export class PublicTubeData {
25
25
  return new PublicTubeData(
26
26
  reader.readObject(PrivateToPublicKernelCircuitPublicInputs),
27
27
  RecursiveProof.fromBuffer(reader, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH),
28
- reader.readObject(VkData),
28
+ reader.readObject(VkWitnessData),
29
29
  );
30
30
  }
31
31
 
@@ -7,6 +7,7 @@ import { BufferReader, type Tuple, serializeToBuffer, serializeToFields } from '
7
7
  import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
8
8
  import type { FieldsOf } from '@aztec/foundation/types';
9
9
 
10
+ import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js';
10
11
  import { FeeRecipient } from './block_root_or_block_merge_public_inputs.js';
11
12
  import { PreviousRollupBlockData } from './previous_rollup_block_data.js';
12
13
 
@@ -99,10 +100,13 @@ export class RootRollupInputs {
99
100
  */
100
101
  export class RootRollupPublicInputs {
101
102
  constructor(
102
- /** Root of the archive tree before this rollup is processed */
103
- public previousArchiveRoot: Fr,
104
- /** Root of the archive tree after this rollup is processed */
105
- public endArchiveRoot: Fr,
103
+ /** Snapshot of archive tree before/after this rollup been processed */
104
+ public previousArchive: AppendOnlyTreeSnapshot,
105
+ public endArchive: AppendOnlyTreeSnapshot,
106
+ // This is a u64 in nr, but GlobalVariables contains this as a u64 and is mapped to ts as a field, so I'm doing the same here
107
+ public endTimestamp: Fr,
108
+ public endBlockNumber: Fr,
109
+ public outHash: Fr,
106
110
  public proposedBlockHeaderHashes: Tuple<Fr, typeof AZTEC_MAX_EPOCH_DURATION>,
107
111
  public fees: Tuple<FeeRecipient, typeof AZTEC_MAX_EPOCH_DURATION>,
108
112
  public chainId: Fr,
@@ -115,8 +119,11 @@ export class RootRollupPublicInputs {
115
119
 
116
120
  static getFields(fields: FieldsOf<RootRollupPublicInputs>) {
117
121
  return [
118
- fields.previousArchiveRoot,
119
- fields.endArchiveRoot,
122
+ fields.previousArchive,
123
+ fields.endArchive,
124
+ fields.endTimestamp,
125
+ fields.endBlockNumber,
126
+ fields.outHash,
120
127
  fields.proposedBlockHeaderHashes,
121
128
  fields.fees,
122
129
  fields.chainId,
@@ -148,6 +155,9 @@ export class RootRollupPublicInputs {
148
155
  public static fromBuffer(buffer: Buffer | BufferReader): RootRollupPublicInputs {
149
156
  const reader = BufferReader.asReader(buffer);
150
157
  return new RootRollupPublicInputs(
158
+ reader.readObject(AppendOnlyTreeSnapshot),
159
+ reader.readObject(AppendOnlyTreeSnapshot),
160
+ Fr.fromBuffer(reader),
151
161
  Fr.fromBuffer(reader),
152
162
  Fr.fromBuffer(reader),
153
163
  reader.readArray(AZTEC_MAX_EPOCH_DURATION, Fr),
@@ -182,6 +192,9 @@ export class RootRollupPublicInputs {
182
192
  /** Creates a random instance. */
183
193
  static random() {
184
194
  return new RootRollupPublicInputs(
195
+ AppendOnlyTreeSnapshot.random(),
196
+ AppendOnlyTreeSnapshot.random(),
197
+ Fr.random(),
185
198
  Fr.random(),
186
199
  Fr.random(),
187
200
  makeTuple(AZTEC_MAX_EPOCH_DURATION, Fr.random),
@@ -1,7 +1,7 @@
1
1
  import { makeBlockBlobPublicInputs, makeSpongeBlob } from '@aztec/blob-lib/testing';
2
2
  import {
3
3
  ARCHIVE_HEIGHT,
4
- AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED,
4
+ AVM_PROOF_LENGTH_IN_FIELDS,
5
5
  AZTEC_MAX_EPOCH_DURATION,
6
6
  BLOBS_PER_BLOCK,
7
7
  CONTRACT_CLASS_LOG_SIZE_IN_FIELDS,
@@ -55,7 +55,6 @@ import { ContractStorageRead } from '../avm/contract_storage_read.js';
55
55
  import { ContractStorageUpdateRequest } from '../avm/contract_storage_update_request.js';
56
56
  import {
57
57
  AvmAccumulatedData,
58
- AvmAccumulatedDataArrayLengths,
59
58
  AvmAppendLeavesHint,
60
59
  AvmBytecodeCommitmentHint,
61
60
  AvmCircuitInputs,
@@ -116,11 +115,7 @@ import { PrivateCallRequest } from '../kernel/private_call_request.js';
116
115
  import { PrivateCircuitPublicInputs } from '../kernel/private_circuit_public_inputs.js';
117
116
  import { PrivateLogData } from '../kernel/private_log_data.js';
118
117
  import { PrivateToRollupKernelCircuitPublicInputs } from '../kernel/private_to_rollup_kernel_circuit_public_inputs.js';
119
- import {
120
- CountedPublicCallRequest,
121
- PublicCallRequest,
122
- PublicCallRequestArrayLengths,
123
- } from '../kernel/public_call_request.js';
118
+ import { CountedPublicCallRequest, PublicCallRequest } from '../kernel/public_call_request.js';
124
119
  import { PublicKeys, computeAddress } from '../keys/index.js';
125
120
  import { ContractClassLogFields } from '../logs/index.js';
126
121
  import { PrivateLog } from '../logs/private_log.js';
@@ -173,8 +168,8 @@ import { TxConstantData } from '../tx/tx_constant_data.js';
173
168
  import { TxContext } from '../tx/tx_context.js';
174
169
  import { TxRequest } from '../tx/tx_request.js';
175
170
  import { RollupTypes, Vector } from '../types/index.js';
176
- import { VkData } from '../vks/index.js';
177
171
  import { VerificationKey, VerificationKeyAsFields, VerificationKeyData } from '../vks/verification_key.js';
172
+ import { VkWitnessData } from '../vks/vk_witness_data.js';
178
173
  import { mockTx } from './mocks.js';
179
174
 
180
175
  /**
@@ -373,10 +368,6 @@ function makeAvmAccumulatedData(seed = 1) {
373
368
  );
374
369
  }
375
370
 
376
- function makeAvmAccumulatedDataArrayLengths(seed = 1) {
377
- return new AvmAccumulatedDataArrayLengths(seed, seed + 1, seed + 2, seed + 3, seed + 4);
378
- }
379
-
380
371
  export function makeGas(seed = 1) {
381
372
  return new Gas(seed, seed + 1);
382
373
  }
@@ -462,7 +453,6 @@ function makeAvmCircuitPublicInputs(seed = 1) {
462
453
  makeGas(seed + 0x20),
463
454
  makeGasSettings(),
464
455
  makeAztecAddress(seed + 0x40),
465
- makePublicCallRequestArrayLengths(seed + 0x40),
466
456
  makeTuple(MAX_ENQUEUED_CALLS_PER_TX, makePublicCallRequest, seed + 0x100),
467
457
  makeTuple(MAX_ENQUEUED_CALLS_PER_TX, makePublicCallRequest, seed + 0x200),
468
458
  makePublicCallRequest(seed + 0x300),
@@ -472,7 +462,6 @@ function makeAvmCircuitPublicInputs(seed = 1) {
472
462
  makePrivateToAvmAccumulatedData(seed + 0x600),
473
463
  makeTreeSnapshots(seed + 0x700),
474
464
  makeGas(seed + 0x750),
475
- makeAvmAccumulatedDataArrayLengths(seed + 0x800),
476
465
  makeAvmAccumulatedData(seed + 0x800),
477
466
  fr(seed + 0x900),
478
467
  false,
@@ -544,10 +533,6 @@ export function makePublicCallRequest(seed = 1) {
544
533
  return new PublicCallRequest(makeAztecAddress(seed), makeAztecAddress(seed + 1), false, fr(seed + 0x3));
545
534
  }
546
535
 
547
- export function makePublicCallRequestArrayLengths(seed = 1) {
548
- return new PublicCallRequestArrayLengths(seed, seed + 1, seed % 2 === 0);
549
- }
550
-
551
536
  function makeCountedPublicCallRequest(seed = 1) {
552
537
  return new CountedPublicCallRequest(makePublicCallRequest(seed), seed + 0x100);
553
538
  }
@@ -757,7 +742,8 @@ export function makePreviousRollupData(
757
742
  NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
758
743
  seed + 0x50,
759
744
  ),
760
- makeVkData(seed + 0x100),
745
+ VerificationKeyAsFields.makeFakeHonk(),
746
+ makeMembershipWitness(VK_TREE_HEIGHT, seed + 0x120),
761
747
  );
762
748
  }
763
749
 
@@ -777,7 +763,8 @@ export function makePreviousRollupBlockData(
777
763
  NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
778
764
  seed + 0x50,
779
765
  ),
780
- makeVkData(seed + 0x100),
766
+ VerificationKeyAsFields.makeFakeHonk(),
767
+ makeMembershipWitness(VK_TREE_HEIGHT, seed + 0x120),
781
768
  );
782
769
  }
783
770
 
@@ -894,10 +881,13 @@ export function makeRootParityInputs(seed = 0): RootParityInputs {
894
881
  */
895
882
  export function makeRootRollupPublicInputs(seed = 0): RootRollupPublicInputs {
896
883
  return new RootRollupPublicInputs(
897
- fr(seed + 0x100),
898
- fr(seed + 0x200),
899
- makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x300),
900
- makeTuple(AZTEC_MAX_EPOCH_DURATION, () => makeFeeRecipient(seed), 0x500),
884
+ makeAppendOnlyTreeSnapshot(seed + 0x100),
885
+ makeAppendOnlyTreeSnapshot(seed + 0x200),
886
+ fr(seed + 0x300),
887
+ fr(seed + 0x400),
888
+ fr(seed + 0x500),
889
+ makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x650),
890
+ makeTuple(AZTEC_MAX_EPOCH_DURATION, () => makeFeeRecipient(seed), 0x600),
901
891
  fr(seed + 0x700),
902
892
  fr(seed + 0x701),
903
893
  fr(seed + 0x702),
@@ -1080,15 +1070,15 @@ export function makePrivateBaseStateDiffHints(seed = 1): PrivateBaseStateDiffHin
1080
1070
  );
1081
1071
  }
1082
1072
 
1083
- function makeVkData(seed = 1) {
1084
- return new VkData(VerificationKeyData.makeFakeHonk(), seed, makeTuple(VK_TREE_HEIGHT, fr, seed + 0x100));
1073
+ function makeVkWitnessData(seed = 1) {
1074
+ return new VkWitnessData(VerificationKeyData.makeFakeHonk(), seed, makeTuple(VK_TREE_HEIGHT, fr, seed + 0x100));
1085
1075
  }
1086
1076
 
1087
1077
  function makePrivateTubeData(seed = 1, kernelPublicInputs?: PrivateToRollupKernelCircuitPublicInputs) {
1088
1078
  return new PrivateTubeData(
1089
1079
  kernelPublicInputs ?? makePrivateToRollupKernelCircuitPublicInputs(seed, true),
1090
1080
  makeRecursiveProof<typeof TUBE_PROOF_LENGTH>(TUBE_PROOF_LENGTH, seed + 0x100),
1091
- makeVkData(seed + 0x200),
1081
+ makeVkWitnessData(seed + 0x200),
1092
1082
  );
1093
1083
  }
1094
1084
 
@@ -1105,7 +1095,11 @@ function makePrivateBaseRollupHints(seed = 1) {
1105
1095
 
1106
1096
  const archiveRootMembershipWitness = makeMembershipWitness(ARCHIVE_HEIGHT, seed + 0x9000);
1107
1097
 
1108
- const contractClassLogsFields = makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, makeContractClassLogFields, seed + 0x800);
1098
+ const contractClassLogsPreimages = makeTuple(
1099
+ MAX_CONTRACT_CLASS_LOGS_PER_TX,
1100
+ makeContractClassLogFields,
1101
+ seed + 0x800,
1102
+ );
1109
1103
 
1110
1104
  const constants = makeConstantRollupData(0x100);
1111
1105
 
@@ -1117,7 +1111,7 @@ function makePrivateBaseRollupHints(seed = 1) {
1117
1111
  stateDiffHints,
1118
1112
  feePayerFeeJuiceBalanceReadHint,
1119
1113
  archiveRootMembershipWitness,
1120
- contractClassLogsFields,
1114
+ contractClassLogsPreimages,
1121
1115
  constants,
1122
1116
  });
1123
1117
  }
@@ -1127,14 +1121,18 @@ function makePublicBaseRollupHints(seed = 1) {
1127
1121
 
1128
1122
  const archiveRootMembershipWitness = makeMembershipWitness(ARCHIVE_HEIGHT, seed + 0x9000);
1129
1123
 
1130
- const contractClassLogsFields = makeTuple(MAX_CONTRACT_CLASS_LOGS_PER_TX, makeContractClassLogFields, seed + 0x800);
1124
+ const contractClassLogsPreimages = makeTuple(
1125
+ MAX_CONTRACT_CLASS_LOGS_PER_TX,
1126
+ makeContractClassLogFields,
1127
+ seed + 0x800,
1128
+ );
1131
1129
 
1132
1130
  const constants = makeConstantRollupData(0x100);
1133
1131
 
1134
1132
  return PublicBaseRollupHints.from({
1135
1133
  startSpongeBlob,
1136
1134
  archiveRootMembershipWitness,
1137
- contractClassLogsFields,
1135
+ contractClassLogsPreimages,
1138
1136
  constants,
1139
1137
  });
1140
1138
  }
@@ -1153,15 +1151,15 @@ function makePublicTubeData(seed = 1) {
1153
1151
  return new PublicTubeData(
1154
1152
  makePrivateToPublicKernelCircuitPublicInputs(seed),
1155
1153
  makeRecursiveProof<typeof TUBE_PROOF_LENGTH>(TUBE_PROOF_LENGTH, seed + 0x100),
1156
- makeVkData(seed + 0x200),
1154
+ makeVkWitnessData(seed + 0x200),
1157
1155
  );
1158
1156
  }
1159
1157
 
1160
1158
  function makeAvmProofData(seed = 1) {
1161
1159
  return new AvmProofData(
1162
1160
  makeAvmCircuitPublicInputs(seed),
1163
- makeRecursiveProof<typeof AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED>(AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED, seed + 0x100),
1164
- makeVkData(seed + 0x200),
1161
+ makeRecursiveProof<typeof AVM_PROOF_LENGTH_IN_FIELDS>(AVM_PROOF_LENGTH_IN_FIELDS, seed + 0x100),
1162
+ makeVkWitnessData(seed + 0x200),
1165
1163
  );
1166
1164
  }
1167
1165
 
@@ -1488,7 +1486,6 @@ export function makeAvmTxHint(seed = 0): AvmTxHint {
1488
1486
  return new AvmTxHint(
1489
1487
  `txhash-${seed}`,
1490
1488
  makeGlobalVariables(seed),
1491
- makeGasSettings(),
1492
1489
  {
1493
1490
  noteHashes: makeArray((seed % 20) + 4, i => new Fr(i), seed + 0x1000),
1494
1491
  nullifiers: makeArray((seed % 20) + 4, i => new Fr(i), seed + 0x2000),
@@ -1500,7 +1497,6 @@ export function makeAvmTxHint(seed = 0): AvmTxHint {
1500
1497
  makeArray((seed % 20) + 4, i => makeAvmEnqueuedCallHint(i), seed + 0x5000), // setupEnqueuedCalls
1501
1498
  makeArray((seed % 20) + 4, i => makeAvmEnqueuedCallHint(i), seed + 0x6000), // appLogicEnqueuedCalls
1502
1499
  makeAvmEnqueuedCallHint(seed + 0x7000), // teardownEnqueuedCall
1503
- makeGas(seed + 0x8000), // gasUsedByPrivate
1504
1500
  );
1505
1501
  }
1506
1502
 
@@ -6,7 +6,6 @@ import { Fr } from '@aztec/foundation/fields';
6
6
 
7
7
  import type { ContractArtifact } from '../abi/abi.js';
8
8
  import { AztecAddress } from '../aztec-address/index.js';
9
- import { CommitteeAttestation } from '../block/index.js';
10
9
  import { L2Block } from '../block/l2_block.js';
11
10
  import type { PublishedL2Block } from '../block/published_l2_block.js';
12
11
  import { computeContractAddressFromInstance } from '../contract/contract_address.js';
@@ -300,7 +299,7 @@ export async function randomPublishedL2Block(
300
299
  };
301
300
 
302
301
  const signers = opts.signers ?? times(3, () => Secp256k1Signer.random());
303
- const atts = await Promise.all(
302
+ const attestations = await Promise.all(
304
303
  signers.map(signer =>
305
304
  makeBlockAttestation({
306
305
  signer,
@@ -311,8 +310,6 @@ export async function randomPublishedL2Block(
311
310
  }),
312
311
  ),
313
312
  );
314
- const attestations = atts.map(
315
- (attestation, i) => new CommitteeAttestation(signers[i].address, attestation.signature),
316
- );
317
- return { block, l1, attestations };
313
+ const signatures = attestations.map(attestation => attestation.signature);
314
+ return { block, l1, signatures };
318
315
  }