@aztec/stdlib 1.0.0-staging.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dest/block/l2_block_stream/l2_block_stream.js +1 -1
  2. package/dest/block/proposal/committee_attestation.d.ts +3 -3
  3. package/dest/block/proposal/committee_attestation.d.ts.map +1 -1
  4. package/dest/block/proposal/committee_attestation.js +2 -41
  5. package/dest/contract/contract_instance_update.d.ts +1 -2
  6. package/dest/contract/contract_instance_update.d.ts.map +1 -1
  7. package/dest/contract/contract_instance_update.js +6 -6
  8. package/dest/contract/interfaces/contract_data_source.d.ts +2 -5
  9. package/dest/contract/interfaces/contract_data_source.d.ts.map +1 -1
  10. package/dest/contract/interfaces/contract_instance_update.d.ts +8 -9
  11. package/dest/contract/interfaces/contract_instance_update.d.ts.map +1 -1
  12. package/dest/contract/interfaces/contract_instance_update.js +1 -1
  13. package/dest/hash/hash.d.ts +1 -1
  14. package/dest/hash/hash.d.ts.map +1 -1
  15. package/dest/hash/hash.js +3 -7
  16. package/dest/interfaces/archiver.js +1 -1
  17. package/dest/interfaces/aztec-node.d.ts +1 -1
  18. package/dest/interfaces/client.d.ts +0 -1
  19. package/dest/interfaces/client.d.ts.map +1 -1
  20. package/dest/interfaces/client.js +0 -1
  21. package/dest/interfaces/proving-job.d.ts +1 -22
  22. package/dest/interfaces/proving-job.d.ts.map +1 -1
  23. package/dest/interfaces/proving-job.js +0 -13
  24. package/dest/interfaces/server.d.ts +0 -1
  25. package/dest/interfaces/server.d.ts.map +1 -1
  26. package/dest/interfaces/server.js +0 -1
  27. package/dest/interfaces/server_circuit_prover.d.ts +0 -2
  28. package/dest/interfaces/server_circuit_prover.d.ts.map +1 -1
  29. package/dest/kernel/hints/rollup_validation_requests.d.ts +10 -6
  30. package/dest/kernel/hints/rollup_validation_requests.d.ts.map +1 -1
  31. package/dest/kernel/hints/rollup_validation_requests.js +11 -9
  32. package/dest/kernel/private_circuit_public_inputs.d.ts +6 -6
  33. package/dest/kernel/private_circuit_public_inputs.d.ts.map +1 -1
  34. package/dest/kernel/private_circuit_public_inputs.js +10 -10
  35. package/dest/proofs/proving_request_type.d.ts +7 -8
  36. package/dest/proofs/proving_request_type.d.ts.map +1 -1
  37. package/dest/proofs/proving_request_type.js +7 -8
  38. package/dest/rollup/base_or_merge_rollup_public_inputs.d.ts +9 -0
  39. package/dest/rollup/base_or_merge_rollup_public_inputs.d.ts.map +1 -1
  40. package/dest/rollup/base_or_merge_rollup_public_inputs.js +8 -3
  41. package/dest/rollup/empty_block_root_rollup_inputs.d.ts +3 -2
  42. package/dest/rollup/empty_block_root_rollup_inputs.d.ts.map +1 -1
  43. package/dest/rollup/empty_block_root_rollup_inputs.js +6 -3
  44. package/dest/rollup/index.d.ts +0 -1
  45. package/dest/rollup/index.d.ts.map +1 -1
  46. package/dest/rollup/index.js +0 -1
  47. package/dest/shared_mutable/scheduled_delay_change.d.ts +5 -5
  48. package/dest/shared_mutable/scheduled_delay_change.d.ts.map +1 -1
  49. package/dest/shared_mutable/scheduled_delay_change.js +5 -5
  50. package/dest/shared_mutable/scheduled_value_change.d.ts +3 -4
  51. package/dest/shared_mutable/scheduled_value_change.d.ts.map +1 -1
  52. package/dest/shared_mutable/scheduled_value_change.js +7 -7
  53. package/dest/shared_mutable/shared_mutable_values.js +7 -7
  54. package/dest/stats/stats.d.ts +1 -1
  55. package/dest/stats/stats.d.ts.map +1 -1
  56. package/dest/tests/factories.d.ts.map +1 -1
  57. package/dest/tests/factories.js +6 -6
  58. package/dest/tx/index.d.ts +1 -1
  59. package/dest/tx/index.d.ts.map +1 -1
  60. package/dest/tx/index.js +1 -1
  61. package/dest/tx/max_block_number.d.ts +54 -0
  62. package/dest/tx/max_block_number.d.ts.map +1 -0
  63. package/dest/tx/max_block_number.js +64 -0
  64. package/dest/tx/offchain_effect.d.ts.map +1 -1
  65. package/dest/tx/offchain_effect.js +0 -1
  66. package/dest/tx/validator/error_texts.d.ts +1 -1
  67. package/dest/tx/validator/error_texts.d.ts.map +1 -1
  68. package/dest/tx/validator/error_texts.js +1 -1
  69. package/dest/types/shared.d.ts +8 -0
  70. package/dest/types/shared.d.ts.map +1 -1
  71. package/dest/types/shared.js +8 -0
  72. package/dest/vks/verification_key.d.ts +0 -1
  73. package/dest/vks/verification_key.d.ts.map +1 -1
  74. package/dest/vks/verification_key.js +0 -5
  75. package/package.json +7 -7
  76. package/src/block/l2_block_stream/l2_block_stream.ts +1 -1
  77. package/src/block/proposal/committee_attestation.ts +3 -49
  78. package/src/contract/contract_instance_update.ts +6 -7
  79. package/src/contract/interfaces/contract_data_source.ts +2 -5
  80. package/src/contract/interfaces/contract_instance_update.ts +3 -4
  81. package/src/hash/hash.ts +3 -7
  82. package/src/interfaces/archiver.ts +1 -1
  83. package/src/interfaces/aztec-node.ts +1 -1
  84. package/src/interfaces/client.ts +0 -1
  85. package/src/interfaces/proving-job.ts +0 -21
  86. package/src/interfaces/server.ts +0 -1
  87. package/src/interfaces/server_circuit_prover.ts +0 -9
  88. package/src/kernel/hints/rollup_validation_requests.ts +10 -8
  89. package/src/kernel/private_circuit_public_inputs.ts +8 -8
  90. package/src/proofs/proving_request_type.ts +0 -1
  91. package/src/rollup/base_or_merge_rollup_public_inputs.ts +8 -0
  92. package/src/rollup/empty_block_root_rollup_inputs.ts +7 -2
  93. package/src/rollup/index.ts +0 -1
  94. package/src/shared_mutable/scheduled_delay_change.ts +6 -6
  95. package/src/shared_mutable/scheduled_value_change.ts +5 -7
  96. package/src/shared_mutable/shared_mutable_values.ts +9 -9
  97. package/src/stats/stats.ts +0 -1
  98. package/src/tests/factories.ts +6 -4
  99. package/src/tx/index.ts +1 -1
  100. package/src/tx/max_block_number.ts +81 -0
  101. package/src/tx/offchain_effect.ts +0 -1
  102. package/src/tx/validator/error_texts.ts +1 -1
  103. package/src/types/shared.ts +9 -0
  104. package/src/vks/verification_key.ts +0 -6
  105. package/dest/rollup/padding_block_root_rollup_inputs.d.ts +0 -20
  106. package/dest/rollup/padding_block_root_rollup_inputs.d.ts.map +0 -1
  107. package/dest/rollup/padding_block_root_rollup_inputs.js +0 -39
  108. package/dest/tx/include_by_timestamp.d.ts +0 -54
  109. package/dest/tx/include_by_timestamp.d.ts.map +0 -1
  110. package/dest/tx/include_by_timestamp.js +0 -72
  111. package/src/rollup/padding_block_root_rollup_inputs.ts +0 -47
  112. package/src/tx/include_by_timestamp.ts +0 -90
@@ -3,4 +3,3 @@ export * from './aztec-node.js';
3
3
  export * from './aztec-node-admin.js';
4
4
  export * from './private_kernel_prover.js';
5
5
  export * from './get_logs_response.js';
6
- export * from './api_limit.js';
@@ -21,7 +21,6 @@ import { BlockMergeRollupInputs } from '../rollup/block_merge_rollup.js';
21
21
  import { BlockRootOrBlockMergePublicInputs } from '../rollup/block_root_or_block_merge_public_inputs.js';
22
22
  import { BlockRootRollupInputs, SingleTxBlockRootRollupInputs } from '../rollup/block_root_rollup.js';
23
23
  import { EmptyBlockRootRollupInputs } from '../rollup/empty_block_root_rollup_inputs.js';
24
- import { PaddingBlockRootRollupInputs } from '../rollup/index.js';
25
24
  import { MergeRollupInputs } from '../rollup/merge_rollup.js';
26
25
  import { PrivateBaseRollupInputs } from '../rollup/private_base_rollup_inputs.js';
27
26
  import { PublicBaseRollupInputs } from '../rollup/public_base_rollup_inputs.js';
@@ -88,8 +87,6 @@ export function mapProvingRequestTypeToCircuitName(type: ProvingRequestType): Se
88
87
  return 'merge-rollup';
89
88
  case ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP:
90
89
  return 'empty-block-root-rollup';
91
- case ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP:
92
- return 'padding-block-root-rollup';
93
90
  case ProvingRequestType.BLOCK_ROOT_ROLLUP:
94
91
  return 'block-root-rollup';
95
92
  case ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP:
@@ -124,10 +121,6 @@ export const ProvingJobInputs = z.discriminatedUnion('type', [
124
121
  inputs: SingleTxBlockRootRollupInputs.schema,
125
122
  }),
126
123
  z.object({ type: z.literal(ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP), inputs: EmptyBlockRootRollupInputs.schema }),
127
- z.object({
128
- type: z.literal(ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP),
129
- inputs: PaddingBlockRootRollupInputs.schema,
130
- }),
131
124
  z.object({ type: z.literal(ProvingRequestType.BLOCK_MERGE_ROLLUP), inputs: BlockMergeRollupInputs.schema }),
132
125
  z.object({ type: z.literal(ProvingRequestType.ROOT_ROLLUP), inputs: RootRollupInputs.schema }),
133
126
  z.object({ type: z.literal(ProvingRequestType.TUBE_PROOF), inputs: TubeInputs.schema }),
@@ -145,8 +138,6 @@ export function getProvingJobInputClassFor(type: ProvingRequestType) {
145
138
  return MergeRollupInputs;
146
139
  case ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP:
147
140
  return EmptyBlockRootRollupInputs;
148
- case ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP:
149
- return PaddingBlockRootRollupInputs;
150
141
  case ProvingRequestType.BLOCK_ROOT_ROLLUP:
151
142
  return BlockRootRollupInputs;
152
143
  case ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP:
@@ -176,7 +167,6 @@ export type ProvingJobInputsMap = {
176
167
  [ProvingRequestType.PUBLIC_BASE_ROLLUP]: PublicBaseRollupInputs;
177
168
  [ProvingRequestType.MERGE_ROLLUP]: MergeRollupInputs;
178
169
  [ProvingRequestType.EMPTY_BLOCK_ROOT_ROLLUP]: EmptyBlockRootRollupInputs;
179
- [ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP]: PaddingBlockRootRollupInputs;
180
170
  [ProvingRequestType.BLOCK_ROOT_ROLLUP]: BlockRootRollupInputs;
181
171
  [ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP]: SingleTxBlockRootRollupInputs;
182
172
  [ProvingRequestType.BLOCK_MERGE_ROLLUP]: BlockMergeRollupInputs;
@@ -219,13 +209,6 @@ export const ProvingJobResult = z.discriminatedUnion('type', [
219
209
  NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
220
210
  ),
221
211
  }),
222
- z.object({
223
- type: z.literal(ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP),
224
- result: schemaForPublicInputsAndRecursiveProof(
225
- BlockRootOrBlockMergePublicInputs.schema,
226
- NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH,
227
- ),
228
- }),
229
212
  z.object({
230
213
  type: z.literal(ProvingRequestType.BLOCK_ROOT_ROLLUP),
231
214
  result: schemaForPublicInputsAndRecursiveProof(
@@ -283,10 +266,6 @@ export type ProvingJobResultsMap = {
283
266
  BlockRootOrBlockMergePublicInputs,
284
267
  typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
285
268
  >;
286
- [ProvingRequestType.PADDING_BLOCK_ROOT_ROLLUP]: PublicInputsAndRecursiveProof<
287
- BlockRootOrBlockMergePublicInputs,
288
- typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
289
- >;
290
269
  [ProvingRequestType.SINGLE_TX_BLOCK_ROOT_ROLLUP]: PublicInputsAndRecursiveProof<
291
270
  BlockRootOrBlockMergePublicInputs,
292
271
  typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH
@@ -19,4 +19,3 @@ export * from './server_circuit_prover.js';
19
19
  export * from './service.js';
20
20
  export * from './tx-collector.js';
21
21
  export * from './world_state.js';
22
- export * from './api_limit.js';
@@ -15,7 +15,6 @@ import type { BlockMergeRollupInputs } from '../rollup/block_merge_rollup.js';
15
15
  import type { BlockRootOrBlockMergePublicInputs } from '../rollup/block_root_or_block_merge_public_inputs.js';
16
16
  import type { BlockRootRollupInputs, SingleTxBlockRootRollupInputs } from '../rollup/block_root_rollup.js';
17
17
  import type { EmptyBlockRootRollupInputs } from '../rollup/empty_block_root_rollup_inputs.js';
18
- import type { PaddingBlockRootRollupInputs } from '../rollup/index.js';
19
18
  import type { MergeRollupInputs } from '../rollup/merge_rollup.js';
20
19
  import type { PrivateBaseRollupInputs } from '../rollup/private_base_rollup_inputs.js';
21
20
  import type { PublicBaseRollupInputs } from '../rollup/public_base_rollup_inputs.js';
@@ -122,14 +121,6 @@ export interface ServerCircuitProver {
122
121
  PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
123
122
  >;
124
123
 
125
- getPaddingBlockRootRollupProof(
126
- input: PaddingBlockRootRollupInputs,
127
- signal?: AbortSignal,
128
- epochNumber?: number,
129
- ): Promise<
130
- PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>
131
- >;
132
-
133
124
  /**
134
125
  * Creates a proof for the given input.
135
126
  * @param input - Input to the circuit.
@@ -4,15 +4,17 @@ import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from
4
4
  import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
5
5
  import type { FieldsOf } from '@aztec/foundation/types';
6
6
 
7
- import { IncludeByTimestamp } from '../../tx/include_by_timestamp.js';
7
+ import { MaxBlockNumber } from '../../tx/max_block_number.js';
8
8
 
9
9
  /**
10
10
  * Validation requests directed at the rollup, accumulated during the execution of the transaction.
11
11
  */
12
12
  export class RollupValidationRequests {
13
13
  constructor(
14
- /** The highest timestamp of a block in which this transaction can still be included. */
15
- public includeByTimestamp: IncludeByTimestamp,
14
+ /**
15
+ * The largest block number in which this transaction can be included.
16
+ */
17
+ public maxBlockNumber: MaxBlockNumber,
16
18
  ) {}
17
19
 
18
20
  getSize() {
@@ -20,7 +22,7 @@ export class RollupValidationRequests {
20
22
  }
21
23
 
22
24
  toBuffer() {
23
- return serializeToBuffer(this.includeByTimestamp);
25
+ return serializeToBuffer(this.maxBlockNumber);
24
26
  }
25
27
 
26
28
  toString() {
@@ -28,12 +30,12 @@ export class RollupValidationRequests {
28
30
  }
29
31
 
30
32
  static getFields(fields: FieldsOf<RollupValidationRequests>) {
31
- return [fields.includeByTimestamp] as const;
33
+ return [fields.maxBlockNumber] as const;
32
34
  }
33
35
 
34
36
  static fromFields(fields: Fr[] | FieldReader) {
35
37
  const reader = FieldReader.asReader(fields);
36
- return new RollupValidationRequests(IncludeByTimestamp.fromFields(reader));
38
+ return new RollupValidationRequests(MaxBlockNumber.fromFields(reader));
37
39
  }
38
40
 
39
41
  toFields(): Fr[] {
@@ -53,7 +55,7 @@ export class RollupValidationRequests {
53
55
  */
54
56
  static fromBuffer(buffer: Buffer | BufferReader) {
55
57
  const reader = BufferReader.asReader(buffer);
56
- return new RollupValidationRequests(reader.readObject(IncludeByTimestamp));
58
+ return new RollupValidationRequests(reader.readObject(MaxBlockNumber));
57
59
  }
58
60
 
59
61
  /**
@@ -66,6 +68,6 @@ export class RollupValidationRequests {
66
68
  }
67
69
 
68
70
  static empty() {
69
- return new RollupValidationRequests(IncludeByTimestamp.empty());
71
+ return new RollupValidationRequests(MaxBlockNumber.empty());
70
72
  }
71
73
  }
@@ -30,7 +30,7 @@ import { PrivateLogData } from '../kernel/private_log_data.js';
30
30
  import { CountedL2ToL1Message } from '../messaging/l2_to_l1_message.js';
31
31
  import { BlockHeader } from '../tx/block_header.js';
32
32
  import { CallContext } from '../tx/call_context.js';
33
- import { IncludeByTimestamp } from '../tx/include_by_timestamp.js';
33
+ import { MaxBlockNumber } from '../tx/max_block_number.js';
34
34
  import { TxContext } from '../tx/tx_context.js';
35
35
  import { ReadRequest } from './hints/read_request.js';
36
36
  import { NoteHash } from './note_hash.js';
@@ -64,9 +64,9 @@ export class PrivateCircuitPublicInputs {
64
64
  */
65
65
  public isFeePayer: boolean,
66
66
  /**
67
- * The highest timestamp of a block in which the transaction can still be included.
67
+ * The maximum block number in which this transaction can be included and be valid.
68
68
  */
69
- public includeByTimestamp: IncludeByTimestamp,
69
+ public maxBlockNumber: MaxBlockNumber,
70
70
  /**
71
71
  * Read requests created by the corresponding function call.
72
72
  */
@@ -158,7 +158,7 @@ export class PrivateCircuitPublicInputs {
158
158
  reader.readObject(Fr),
159
159
  reader.readObject(Fr),
160
160
  reader.readBoolean(),
161
- reader.readObject(IncludeByTimestamp),
161
+ reader.readObject(MaxBlockNumber),
162
162
  reader.readArray(MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, ReadRequest),
163
163
  reader.readArray(MAX_NULLIFIER_READ_REQUESTS_PER_CALL, ReadRequest),
164
164
  reader.readArray(MAX_KEY_VALIDATION_REQUESTS_PER_CALL, KeyValidationRequestAndGenerator),
@@ -185,7 +185,7 @@ export class PrivateCircuitPublicInputs {
185
185
  reader.readField(),
186
186
  reader.readField(),
187
187
  reader.readBoolean(),
188
- reader.readObject(IncludeByTimestamp),
188
+ reader.readObject(MaxBlockNumber),
189
189
  reader.readArray(MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, ReadRequest),
190
190
  reader.readArray(MAX_NULLIFIER_READ_REQUESTS_PER_CALL, ReadRequest),
191
191
  reader.readArray(MAX_KEY_VALIDATION_REQUESTS_PER_CALL, KeyValidationRequestAndGenerator),
@@ -215,7 +215,7 @@ export class PrivateCircuitPublicInputs {
215
215
  Fr.ZERO,
216
216
  Fr.ZERO,
217
217
  false,
218
- IncludeByTimestamp.empty(),
218
+ MaxBlockNumber.empty(),
219
219
  makeTuple(MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, ReadRequest.empty),
220
220
  makeTuple(MAX_NULLIFIER_READ_REQUESTS_PER_CALL, ReadRequest.empty),
221
221
  makeTuple(MAX_KEY_VALIDATION_REQUESTS_PER_CALL, KeyValidationRequestAndGenerator.empty),
@@ -241,7 +241,7 @@ export class PrivateCircuitPublicInputs {
241
241
  this.returnsHash.isZero() &&
242
242
  this.minRevertibleSideEffectCounter.isZero() &&
243
243
  !this.isFeePayer &&
244
- this.includeByTimestamp.isEmpty() &&
244
+ this.maxBlockNumber.isEmpty() &&
245
245
  isEmptyArray(this.noteHashReadRequests) &&
246
246
  isEmptyArray(this.nullifierReadRequests) &&
247
247
  isEmptyArray(this.keyValidationRequestsAndGenerators) &&
@@ -272,7 +272,7 @@ export class PrivateCircuitPublicInputs {
272
272
  fields.returnsHash,
273
273
  fields.minRevertibleSideEffectCounter,
274
274
  fields.isFeePayer,
275
- fields.includeByTimestamp,
275
+ fields.maxBlockNumber,
276
276
  fields.noteHashReadRequests,
277
277
  fields.nullifierReadRequests,
278
278
  fields.keyValidationRequestsAndGenerators,
@@ -5,7 +5,6 @@ export enum ProvingRequestType {
5
5
  PUBLIC_BASE_ROLLUP,
6
6
  MERGE_ROLLUP,
7
7
  EMPTY_BLOCK_ROOT_ROLLUP,
8
- PADDING_BLOCK_ROOT_ROLLUP,
9
8
  BLOCK_ROOT_ROLLUP,
10
9
  SINGLE_TX_BLOCK_ROOT_ROLLUP,
11
10
  BLOCK_MERGE_ROLLUP,
@@ -5,6 +5,7 @@ import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
5
5
  import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
6
6
 
7
7
  import { PartialStateReference } from '../tx/partial_state_reference.js';
8
+ import { RollupTypes } from '../types/shared.js';
8
9
  import { BlockConstantData } from './block_constant_data.js';
9
10
 
10
11
  /**
@@ -12,6 +13,10 @@ import { BlockConstantData } from './block_constant_data.js';
12
13
  */
13
14
  export class BaseOrMergeRollupPublicInputs {
14
15
  constructor(
16
+ /**
17
+ * Specifies from which type of rollup circuit these inputs are from.
18
+ */
19
+ public rollupType: RollupTypes,
15
20
  /**
16
21
  * Number of txs in this rollup.
17
22
  */
@@ -54,6 +59,7 @@ export class BaseOrMergeRollupPublicInputs {
54
59
  /** Returns an empty instance. */
55
60
  static empty() {
56
61
  return new BaseOrMergeRollupPublicInputs(
62
+ RollupTypes.Base,
57
63
  0,
58
64
  BlockConstantData.empty(),
59
65
  PartialStateReference.empty(),
@@ -75,6 +81,7 @@ export class BaseOrMergeRollupPublicInputs {
75
81
  static fromBuffer(buffer: Buffer | BufferReader): BaseOrMergeRollupPublicInputs {
76
82
  const reader = BufferReader.asReader(buffer);
77
83
  return new BaseOrMergeRollupPublicInputs(
84
+ reader.readNumber(),
78
85
  reader.readNumber(),
79
86
  reader.readObject(BlockConstantData),
80
87
  reader.readObject(PartialStateReference),
@@ -93,6 +100,7 @@ export class BaseOrMergeRollupPublicInputs {
93
100
  */
94
101
  toBuffer() {
95
102
  return serializeToBuffer(
103
+ this.rollupType,
96
104
  this.numTxs,
97
105
  this.constants,
98
106
 
@@ -13,6 +13,7 @@ export class EmptyBlockRootRollupInputs {
13
13
  constructor(
14
14
  public readonly data: BlockRootRollupData,
15
15
  public readonly constants: BlockConstantData,
16
+ public readonly isPadding: boolean,
16
17
  ) {}
17
18
 
18
19
  /**
@@ -46,7 +47,7 @@ export class EmptyBlockRootRollupInputs {
46
47
  * @returns An array of fields.
47
48
  */
48
49
  static getFields(fields: FieldsOf<EmptyBlockRootRollupInputs>) {
49
- return [fields.data, fields.constants] as const;
50
+ return [fields.data, fields.constants, fields.isPadding] as const;
50
51
  }
51
52
 
52
53
  /**
@@ -56,7 +57,11 @@ export class EmptyBlockRootRollupInputs {
56
57
  */
57
58
  static fromBuffer(buffer: Buffer | BufferReader): EmptyBlockRootRollupInputs {
58
59
  const reader = BufferReader.asReader(buffer);
59
- return new EmptyBlockRootRollupInputs(reader.readObject(BlockRootRollupData), reader.readObject(BlockConstantData));
60
+ return new EmptyBlockRootRollupInputs(
61
+ reader.readObject(BlockRootRollupData),
62
+ reader.readObject(BlockConstantData),
63
+ reader.readBoolean(),
64
+ );
60
65
  }
61
66
 
62
67
  /**
@@ -8,7 +8,6 @@ export * from './empty_block_root_rollup_inputs.js';
8
8
  export * from './epoch_constant_data.js';
9
9
  export * from './block_root_rollup.js';
10
10
  export * from './merge_rollup.js';
11
- export * from './padding_block_root_rollup_inputs.js';
12
11
  export * from './previous_rollup_block_data.js';
13
12
  export * from './previous_rollup_data.js';
14
13
  export * from './private_base_rollup_inputs.js';
@@ -1,17 +1,17 @@
1
- import type { UInt64 } from '../types/shared.js';
1
+ import type { UInt32 } from '../types/shared.js';
2
2
 
3
3
  export class ScheduledDelayChange {
4
4
  constructor(
5
- public pre: UInt64 | undefined,
6
- public post: UInt64 | undefined,
7
- public timestampOfChange: UInt64,
5
+ public pre: UInt32 | undefined,
6
+ public post: UInt32 | undefined,
7
+ public blockOfChange: UInt32,
8
8
  ) {}
9
9
 
10
10
  static empty() {
11
- return new this(undefined, undefined, 0n);
11
+ return new this(undefined, undefined, 0);
12
12
  }
13
13
 
14
14
  isEmpty(): boolean {
15
- return this.pre === undefined && this.post === undefined && this.timestampOfChange === 0n;
15
+ return this.pre === undefined && this.post === undefined && this.blockOfChange === 0;
16
16
  }
17
17
  }
@@ -1,12 +1,10 @@
1
1
  import { Fr } from '@aztec/foundation/fields';
2
2
 
3
- import type { UInt64 } from '../types/shared.js';
4
-
5
3
  export class ScheduledValueChange {
6
4
  constructor(
7
5
  public previous: Fr[],
8
6
  public post: Fr[],
9
- public timestampOfChange: UInt64,
7
+ public blockOfChange: number,
10
8
  ) {
11
9
  if (this.previous.length !== this.post.length) {
12
10
  throw new Error('Previous and post must have the same length');
@@ -14,15 +12,15 @@ export class ScheduledValueChange {
14
12
  }
15
13
 
16
14
  static empty(valueSize: number) {
17
- return new this(Array(valueSize).fill(new Fr(0)), Array(valueSize).fill(new Fr(0)), 0n);
15
+ return new this(Array(valueSize).fill(new Fr(0)), Array(valueSize).fill(new Fr(0)), 0);
18
16
  }
19
17
 
20
18
  isEmpty(): boolean {
21
- return this.previous.every(v => v.isZero()) && this.post.every(v => v.isZero()) && this.timestampOfChange === 0n;
19
+ return this.previous.every(v => v.isZero()) && this.post.every(v => v.isZero()) && this.blockOfChange === 0;
22
20
  }
23
21
 
24
- getCurrentAt(timestamp: UInt64) {
25
- if (timestamp < this.timestampOfChange) {
22
+ getCurrentAt(blockNumber: number) {
23
+ if (blockNumber < this.blockOfChange) {
26
24
  return this.previous;
27
25
  } else {
28
26
  return this.post;
@@ -22,20 +22,20 @@ export class SharedMutableValues {
22
22
  // Extract fields for ScheduledValueChange
23
23
  const svcPre = reader.readFieldArray(UPDATES_VALUE_SIZE);
24
24
  const svcPost = reader.readFieldArray(UPDATES_VALUE_SIZE);
25
- const svcTimestampOfChange = firstField & 0xffffffffn;
26
- const svc = new ScheduledValueChange(svcPre, svcPost, svcTimestampOfChange);
25
+ const svcBlockOfChange = firstField & 0xffffffffn;
26
+ const svc = new ScheduledValueChange(svcPre, svcPost, Number(svcBlockOfChange));
27
27
 
28
28
  // Extract fields for ScheduledDelayChange from first field
29
- const sdcTimestampOfChange = (firstField >> 32n) & 0xffffffffn;
29
+ const sdcBlockOfChange = (firstField >> 32n) & 0xffffffffn;
30
30
  const sdcIsPostSome = (firstField >> 64n) & 1n;
31
31
  const sdcPost = (firstField >> 72n) & 0xffffffffn;
32
32
  const sdcIsPreSome = (firstField >> 104n) & 1n;
33
33
  const sdcPre = (firstField >> 112n) & 0xffffffffn;
34
34
 
35
35
  const sdc = new ScheduledDelayChange(
36
- sdcIsPreSome ? sdcPre : undefined,
37
- sdcIsPostSome ? sdcPost : undefined,
38
- sdcTimestampOfChange,
36
+ sdcIsPreSome ? Number(sdcPre) : undefined,
37
+ sdcIsPostSome ? Number(sdcPost) : undefined,
38
+ Number(sdcBlockOfChange),
39
39
  );
40
40
 
41
41
  return new this(svc, sdc);
@@ -43,9 +43,9 @@ export class SharedMutableValues {
43
43
 
44
44
  toFields(): Fr[] {
45
45
  // Pack format matches Noir implementation:
46
- // [ sdc.pre_inner: u32 | sdc.pre_is_some: u8 | sdc.post_inner: u32 | sdc.post_is_some: u8 | sdc.timestamp_of_change: u32 | svc.timestamp_of_change: u32 ]
47
- let firstField = this.svc.timestampOfChange;
48
- firstField |= this.sdc.timestampOfChange << 32n;
46
+ // [ sdc.pre_inner: u32 | sdc.pre_is_some: u8 | sdc.post_inner: u32 | sdc.post_is_some: u8 | sdc.block_of_change: u32 | svc.block_of_change: u32 ]
47
+ let firstField = BigInt(this.svc.blockOfChange);
48
+ firstField |= BigInt(this.sdc.blockOfChange) << 32n;
49
49
  firstField |= (this.sdc.post === undefined ? 0n : 1n) << 64n;
50
50
  firstField |= BigInt(this.sdc.post || 0) << 72n;
51
51
  firstField |= (this.sdc.pre === undefined ? 0n : 1n) << 104n;
@@ -92,7 +92,6 @@ export type ServerCircuitName =
92
92
  | 'block-root-rollup'
93
93
  | 'single-tx-block-root-rollup'
94
94
  | 'empty-block-root-rollup'
95
- | 'padding-block-root-rollup'
96
95
  | 'block-merge-rollup'
97
96
  | 'root-rollup'
98
97
  | 'avm-circuit'
@@ -165,7 +165,7 @@ import { CallContext } from '../tx/call_context.js';
165
165
  import { ContentCommitment } from '../tx/content_commitment.js';
166
166
  import { FunctionData } from '../tx/function_data.js';
167
167
  import { GlobalVariables } from '../tx/global_variables.js';
168
- import { IncludeByTimestamp } from '../tx/include_by_timestamp.js';
168
+ import { MaxBlockNumber } from '../tx/max_block_number.js';
169
169
  import { PartialStateReference } from '../tx/partial_state_reference.js';
170
170
  import { makeProcessedTxFromPrivateOnlyTx, makeProcessedTxFromTxWithPublicCalls } from '../tx/processed_tx.js';
171
171
  import { PublicCallRequestWithCalldata } from '../tx/public_call_request_with_calldata.js';
@@ -174,7 +174,7 @@ import { TreeSnapshots } from '../tx/tree_snapshots.js';
174
174
  import { TxConstantData } from '../tx/tx_constant_data.js';
175
175
  import { TxContext } from '../tx/tx_context.js';
176
176
  import { TxRequest } from '../tx/tx_request.js';
177
- import { Vector } from '../types/index.js';
177
+ import { RollupTypes, Vector } from '../types/index.js';
178
178
  import { VkData } from '../vks/index.js';
179
179
  import { VerificationKey, VerificationKeyAsFields, VerificationKeyData } from '../vks/verification_key.js';
180
180
  import { mockTx } from './mocks.js';
@@ -308,7 +308,7 @@ export function makeContractStorageRead(seed = 1): ContractStorageRead {
308
308
  }
309
309
 
310
310
  export function makeRollupValidationRequests(seed = 1) {
311
- return new RollupValidationRequests(new IncludeByTimestamp(true, BigInt(seed + 0x31415)));
311
+ return new RollupValidationRequests(new MaxBlockNumber(true, seed + 0x31415));
312
312
  }
313
313
 
314
314
  function makeTxConstantData(seed = 1) {
@@ -567,7 +567,7 @@ export function makeTxRequest(seed = 1): TxRequest {
567
567
  */
568
568
  export function makePrivateCircuitPublicInputs(seed = 0): PrivateCircuitPublicInputs {
569
569
  return PrivateCircuitPublicInputs.from({
570
- includeByTimestamp: new IncludeByTimestamp(true, BigInt(seed + 0x31415)),
570
+ maxBlockNumber: new MaxBlockNumber(true, seed + 0x31415),
571
571
  callContext: makeCallContext(seed, { isStaticCall: true }),
572
572
  argsHash: fr(seed + 0x100),
573
573
  returnsHash: fr(seed + 0x200),
@@ -684,6 +684,7 @@ export function makeBaseOrMergeRollupPublicInputs(
684
684
  globalVariables: GlobalVariables | undefined = undefined,
685
685
  ): BaseOrMergeRollupPublicInputs {
686
686
  return new BaseOrMergeRollupPublicInputs(
687
+ RollupTypes.Base,
687
688
  1,
688
689
  makeBlockConstantData(seed + 0x200, globalVariables),
689
690
  makePartialStateReference(seed + 0x300),
@@ -832,6 +833,7 @@ export function makeEmptyBlockRootRollupInputs(
832
833
  return new EmptyBlockRootRollupInputs(
833
834
  makeBlockRootRollupData(seed + 0x1000),
834
835
  makeBlockConstantData(0x2500, globalVariables),
836
+ true,
835
837
  );
836
838
  }
837
839
 
package/src/tx/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export * from './block_header.js';
2
2
  export * from './call_context.js';
3
3
  export * from './global_variables.js';
4
- export * from './include_by_timestamp.js';
4
+ export * from './max_block_number.js';
5
5
  export * from './content_commitment.js';
6
6
  export * from './state_reference.js';
7
7
  export * from './partial_state_reference.js';
@@ -0,0 +1,81 @@
1
+ import { MAX_BLOCK_NUMBER_LENGTH } from '@aztec/constants';
2
+ import { Fr } from '@aztec/foundation/fields';
3
+ import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize';
4
+ import type { FieldsOf } from '@aztec/foundation/types';
5
+
6
+ import type { UInt32 } from '../types/index.js';
7
+
8
+ /**
9
+ * Maximum block number.
10
+ */
11
+ export class MaxBlockNumber {
12
+ constructor(
13
+ /**
14
+ * Whether a max block number was requested.
15
+ */
16
+ public isSome: boolean,
17
+ /**
18
+ * The requested max block number, if isSome is true.
19
+ */
20
+ public value: UInt32,
21
+ ) {}
22
+
23
+ /**
24
+ * Serialize as a buffer.
25
+ * @returns The buffer.
26
+ */
27
+ toBuffer() {
28
+ return serializeToBuffer(...MaxBlockNumber.getFields(this));
29
+ }
30
+
31
+ toFields(): Fr[] {
32
+ const fields = serializeToFields(...MaxBlockNumber.getFields(this));
33
+ if (fields.length !== MAX_BLOCK_NUMBER_LENGTH) {
34
+ throw new Error(
35
+ `Invalid number of fields for MaxBlockNumber. Expected ${MAX_BLOCK_NUMBER_LENGTH}, got ${fields.length}`,
36
+ );
37
+ }
38
+ return fields;
39
+ }
40
+
41
+ /**
42
+ * Deserializes MaxBlockNumber from a buffer or reader.
43
+ * @param buffer - Buffer to read from.
44
+ * @returns The MaxBlockNumber.
45
+ */
46
+ static fromBuffer(buffer: Buffer | BufferReader): MaxBlockNumber {
47
+ const reader = BufferReader.asReader(buffer);
48
+ return new MaxBlockNumber(reader.readBoolean(), reader.readNumber());
49
+ }
50
+
51
+ static fromFields(fields: Fr[] | FieldReader): MaxBlockNumber {
52
+ const reader = FieldReader.asReader(fields);
53
+ return new MaxBlockNumber(reader.readBoolean(), reader.readU32());
54
+ }
55
+
56
+ static empty() {
57
+ return new MaxBlockNumber(false, 0);
58
+ }
59
+
60
+ isEmpty(): boolean {
61
+ return !this.isSome && this.value === 0;
62
+ }
63
+
64
+ /**
65
+ * Create a new instance from a fields dictionary.
66
+ * @param fields - The dictionary.
67
+ * @returns A new instance.
68
+ */
69
+ static from(fields: FieldsOf<MaxBlockNumber>): MaxBlockNumber {
70
+ return new MaxBlockNumber(...MaxBlockNumber.getFields(fields));
71
+ }
72
+
73
+ /**
74
+ * Serialize into a field array. Low-level utility.
75
+ * @param fields - Object with fields.
76
+ * @returns The array.
77
+ */
78
+ static getFields(fields: FieldsOf<MaxBlockNumber>) {
79
+ return [fields.isSome, fields.value] as const;
80
+ }
81
+ }
@@ -2,7 +2,6 @@ import { Fr } from '@aztec/foundation/fields';
2
2
 
3
3
  import type { AztecAddress } from '../aztec-address/index.js';
4
4
 
5
- // The following identifier was copied over from `noir-projects/aztec-nr/aztec/src/messages/offchain_messages.nr`.
6
5
  // poseidon2hash("aztecnr_offchain_message")
7
6
  export const OFFCHAIN_MESSAGE_IDENTIFIER: Fr = new Fr(
8
7
  6023466688192654631553769360478808766602235351827869819420284624004071427516n,
@@ -11,7 +11,7 @@ export const TX_ERROR_DUPLICATE_NULLIFIER_IN_TX = 'Duplicate nullifier in tx';
11
11
  export const TX_ERROR_EXISTING_NULLIFIER = 'Existing nullifier';
12
12
 
13
13
  // Metadata
14
- export const TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP = 'Invalid expiration timestamp';
14
+ export const TX_ERROR_INVALID_MAX_BLOCK_NUMBER = 'Invalid max block number';
15
15
  export const TX_ERROR_INCORRECT_L1_CHAIN_ID = 'Incorrect L1 chain id';
16
16
  export const TX_ERROR_INCORRECT_ROLLUP_VERSION = 'Incorrect rollup version';
17
17
  export const TX_ERROR_INCORRECT_VK_TREE_ROOT = 'Incorrect protocol circuits tree root';
@@ -44,3 +44,12 @@ export enum CircuitType {
44
44
  STANDARD = 0,
45
45
  ULTRA = 1,
46
46
  }
47
+
48
+ /**
49
+ * Rollup types.
50
+ */
51
+ export enum RollupTypes {
52
+ Base = 0,
53
+ Merge = 1,
54
+ Root = 2,
55
+ }
@@ -9,7 +9,6 @@ import { bufferSchemaFor } from '@aztec/foundation/schemas';
9
9
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
10
10
  import { bufferToHex, hexToBuffer } from '@aztec/foundation/string';
11
11
 
12
- import { hashVK } from '../hash/index.js';
13
12
  import { CircuitType } from '../types/shared.js';
14
13
 
15
14
  /**
@@ -94,11 +93,6 @@ export class VerificationKeyAsFields {
94
93
  public hash: Fr,
95
94
  ) {}
96
95
 
97
- static async fromKey(key: Fr[]) {
98
- const hash = await hashVK(key);
99
- return new VerificationKeyAsFields(key, hash);
100
- }
101
-
102
96
  public get numPublicInputs() {
103
97
  return Number(this.key[CIRCUIT_PUBLIC_INPUTS_INDEX]);
104
98
  }
@@ -1,20 +0,0 @@
1
- import { BufferReader } from '@aztec/foundation/serialize';
2
- import type { FieldsOf } from '@aztec/foundation/types';
3
- import { EpochConstantData } from './epoch_constant_data.js';
4
- /**
5
- * Inputs of the padding block root rollup circuit.
6
- */
7
- export declare class PaddingBlockRootRollupInputs {
8
- readonly constants: EpochConstantData;
9
- constructor(constants: EpochConstantData);
10
- static from(fields: FieldsOf<PaddingBlockRootRollupInputs>): PaddingBlockRootRollupInputs;
11
- static getFields(fields: FieldsOf<PaddingBlockRootRollupInputs>): readonly [EpochConstantData];
12
- static fromBuffer(buffer: Buffer | BufferReader): PaddingBlockRootRollupInputs;
13
- toBuffer(): Buffer<ArrayBufferLike>;
14
- static fromString(str: string): PaddingBlockRootRollupInputs;
15
- toString(): `0x${string}`;
16
- /** Returns a buffer representation for JSON serialization. */
17
- toJSON(): Buffer<ArrayBufferLike>;
18
- static get schema(): import("zod").ZodType<PaddingBlockRootRollupInputs, any, string>;
19
- }
20
- //# sourceMappingURL=padding_block_root_rollup_inputs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"padding_block_root_rollup_inputs.d.ts","sourceRoot":"","sources":["../../src/rollup/padding_block_root_rollup_inputs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;GAEG;AACH,qBAAa,4BAA4B;aACX,SAAS,EAAE,iBAAiB;gBAA5B,SAAS,EAAE,iBAAiB;IAExD,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAAG,4BAA4B;IAIzF,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,4BAA4B,CAAC;IAI/D,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,4BAA4B;IAK9E,QAAQ;IAIR,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,QAAQ;IAIR,8DAA8D;IAC9D,MAAM;IAIN,MAAM,KAAK,MAAM,qEAEhB;CACF"}