@aztec/stdlib 0.77.0-testnet-ignition.30 → 0.77.1

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 (48) hide show
  1. package/dest/contract/interfaces/contract_instance_update.js +1 -1
  2. package/dest/contract/interfaces/node-info.js +2 -2
  3. package/dest/database-version/index.d.ts +2 -0
  4. package/dest/database-version/index.d.ts.map +1 -0
  5. package/dest/database-version/index.js +1 -0
  6. package/dest/database-version/version_manager.d.ts +99 -0
  7. package/dest/database-version/version_manager.d.ts.map +1 -0
  8. package/dest/database-version/version_manager.js +188 -0
  9. package/dest/errors/simulation_error.js +2 -2
  10. package/dest/hash/hash.d.ts +0 -2
  11. package/dest/hash/hash.d.ts.map +1 -1
  12. package/dest/hash/hash.js +0 -11
  13. package/dest/interfaces/world_state.js +3 -3
  14. package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts +2 -1
  15. package/dest/kernel/private_kernel_tail_circuit_public_inputs.d.ts.map +1 -1
  16. package/dest/kernel/private_kernel_tail_circuit_public_inputs.js +4 -1
  17. package/dest/logs/contract_class_log.d.ts +4 -0
  18. package/dest/logs/contract_class_log.d.ts.map +1 -1
  19. package/dest/logs/contract_class_log.js +30 -9
  20. package/dest/logs/private_log.d.ts +2 -0
  21. package/dest/logs/private_log.d.ts.map +1 -1
  22. package/dest/logs/private_log.js +9 -0
  23. package/dest/logs/public_log.d.ts +2 -0
  24. package/dest/logs/public_log.d.ts.map +1 -1
  25. package/dest/logs/public_log.js +10 -0
  26. package/dest/messaging/l2_to_l1_message.js +1 -1
  27. package/dest/tx/tx.d.ts.map +1 -1
  28. package/dest/tx/tx.js +4 -6
  29. package/dest/tx/tx_effect.d.ts.map +1 -1
  30. package/dest/tx/tx_effect.js +26 -10
  31. package/dest/tx/tx_receipt.js +1 -1
  32. package/package.json +8 -7
  33. package/src/contract/interfaces/contract_instance_update.ts +1 -1
  34. package/src/contract/interfaces/node-info.ts +2 -2
  35. package/src/database-version/README.md +63 -0
  36. package/src/database-version/index.ts +1 -0
  37. package/src/database-version/version_manager.ts +207 -0
  38. package/src/errors/simulation_error.ts +2 -2
  39. package/src/hash/hash.ts +0 -10
  40. package/src/interfaces/world_state.ts +3 -3
  41. package/src/kernel/private_kernel_tail_circuit_public_inputs.ts +5 -1
  42. package/src/logs/contract_class_log.ts +28 -9
  43. package/src/logs/private_log.ts +11 -0
  44. package/src/logs/public_log.ts +12 -0
  45. package/src/messaging/l2_to_l1_message.ts +1 -1
  46. package/src/tx/tx.ts +7 -7
  47. package/src/tx/tx_effect.ts +29 -9
  48. package/src/tx/tx_receipt.ts +1 -1
package/src/tx/tx.ts CHANGED
@@ -8,13 +8,11 @@ import type { FieldsOf } from '@aztec/foundation/types';
8
8
  import { z } from 'zod';
9
9
 
10
10
  import type { GasSettings } from '../gas/gas_settings.js';
11
- import { siloContractClassLog } from '../hash/hash.js';
12
11
  import type { GetPublicLogsResponse } from '../interfaces/get_logs_response.js';
13
12
  import type { L2LogsSource } from '../interfaces/l2_logs_source.js';
14
13
  import type { ScopedLogHash } from '../kernel/log_hash.js';
15
14
  import { PrivateKernelTailCircuitPublicInputs } from '../kernel/private_kernel_tail_circuit_public_inputs.js';
16
15
  import { ContractClassLog } from '../logs/contract_class_log.js';
17
- import { PrivateLog } from '../logs/private_log.js';
18
16
  import { Gossipable } from '../p2p/gossipable.js';
19
17
  import { TopicType, createTopicString } from '../p2p/topic_type.js';
20
18
  import { ClientIvcProof } from '../proofs/client_ivc_proof.js';
@@ -197,9 +195,11 @@ export class Tx extends Gossipable {
197
195
  const contractClassLogs = [];
198
196
  for (const log of this.contractClassLogs) {
199
197
  const hashedLog = await log.hash();
200
- const logHash = logHashes.find(hash => hash.value.equals(hashedLog));
198
+ const logHash = logHashes.find(
199
+ hash => hash.value.equals(hashedLog) && hash.contractAddress.equals(log.contractAddress),
200
+ );
201
201
  if (logHash) {
202
- contractClassLogs.push(silo ? await siloContractClassLog(log, logHash.contractAddress) : log);
202
+ contractClassLogs.push(silo ? await log.silo() : log);
203
203
  }
204
204
  }
205
205
  return contractClassLogs;
@@ -238,7 +238,7 @@ export class Tx extends Gossipable {
238
238
  nullifierCount: this.data.getNonEmptyNullifiers().length,
239
239
  privateLogCount: this.data.getNonEmptyPrivateLogs().length,
240
240
  classRegisteredCount: this.data.getNonEmptyContractClassLogsHashes().length,
241
- contractClassLogSize: this.data.getNonEmptyContractClassLogsLength(),
241
+ contractClassLogSize: this.data.getEmittedContractClassLogsLength(),
242
242
 
243
243
  proofSize: this.clientIvcProof.clientIvcProofBuffer.length,
244
244
  size: this.toBuffer().length,
@@ -272,8 +272,8 @@ export class Tx extends Gossipable {
272
272
  return (
273
273
  this.data.getNonEmptyNoteHashes().length * Fr.SIZE_IN_BYTES +
274
274
  this.data.getNonEmptyNullifiers().length * Fr.SIZE_IN_BYTES +
275
- this.data.getNonEmptyPrivateLogs().length * PrivateLog.SIZE_IN_BYTES +
276
- this.data.getNonEmptyContractClassLogsLength() * Fr.SIZE_IN_BYTES
275
+ this.data.getEmittedPrivateLogsLength() * Fr.SIZE_IN_BYTES +
276
+ this.data.getEmittedContractClassLogsLength() * Fr.SIZE_IN_BYTES
277
277
  );
278
278
  }
279
279
 
@@ -354,15 +354,26 @@ export class TxEffect {
354
354
  flattened.push(...this.publicDataWrites.map(w => [w.leafSlot, w.value]).flat());
355
355
  }
356
356
  if (this.privateLogs.length) {
357
- flattened.push(this.toPrefix(PRIVATE_LOGS_PREFIX, this.privateLogs.length * PRIVATE_LOG_SIZE_IN_FIELDS));
358
- flattened.push(...this.privateLogs.map(l => l.fields).flat());
357
+ const totalLogLen = this.privateLogs.reduce(
358
+ // +1 for length prefix
359
+ (total, log) => total + (log.getEmittedLength() == 0 ? 0 : log.getEmittedLength() + 1),
360
+ 0,
361
+ );
362
+ flattened.push(this.toPrefix(PRIVATE_LOGS_PREFIX, totalLogLen));
363
+ flattened.push(...this.privateLogs.flatMap(l => [new Fr(l.getEmittedLength()), ...l.getEmittedFields()]));
359
364
  }
360
365
  if (this.publicLogs.length) {
361
- flattened.push(this.toPrefix(PUBLIC_LOGS_PREFIX, this.publicLogs.length * PUBLIC_LOG_SIZE_IN_FIELDS));
362
- flattened.push(...this.publicLogs.map(l => l.toFields()).flat());
366
+ const totalLogLen = this.publicLogs.reduce(
367
+ // +1 for length prefix
368
+ (total, log) => total + (log.getEmittedLength() == 0 ? 0 : log.getEmittedLength() + 1),
369
+ 0,
370
+ );
371
+ flattened.push(this.toPrefix(PUBLIC_LOGS_PREFIX, totalLogLen));
372
+ flattened.push(...this.publicLogs.flatMap(l => [new Fr(l.getEmittedLength()), ...l.getEmittedFields()]));
363
373
  }
364
374
  if (this.contractClassLogs.length) {
365
375
  const totalLogLen = this.contractClassLogs.reduce(
376
+ // +2 for length prefix and contract address
366
377
  (total, log) => total + (log.getEmittedLength() == 0 ? 0 : log.getEmittedLength() + 2),
367
378
  0,
368
379
  );
@@ -435,19 +446,28 @@ export class TxEffect {
435
446
  break;
436
447
  }
437
448
  case PRIVATE_LOGS_PREFIX: {
438
- // TODO(Miranda): squash log 0s in a nested loop and add len prefix?
439
449
  ensureEmpty(effect.privateLogs);
440
450
  const flatPrivateLogs = reader.readFieldArray(length);
441
- for (let i = 0; i < length; i += PRIVATE_LOG_SIZE_IN_FIELDS) {
442
- effect.privateLogs.push(PrivateLog.fromFields(flatPrivateLogs.slice(i, i + PRIVATE_LOG_SIZE_IN_FIELDS)));
451
+ let i = 0;
452
+ while (i < length) {
453
+ const logLen = flatPrivateLogs[i++].toNumber();
454
+ const logFields = flatPrivateLogs.slice(i, (i += logLen));
455
+ effect.privateLogs.push(
456
+ PrivateLog.fromFields(logFields.concat(new Array(PRIVATE_LOG_SIZE_IN_FIELDS - logLen).fill(Fr.ZERO))),
457
+ );
443
458
  }
444
459
  break;
445
460
  }
446
461
  case PUBLIC_LOGS_PREFIX: {
447
462
  ensureEmpty(effect.publicLogs);
448
463
  const flatPublicLogs = reader.readFieldArray(length);
449
- for (let i = 0; i < length; i += PUBLIC_LOG_SIZE_IN_FIELDS) {
450
- effect.publicLogs.push(PublicLog.fromFields(flatPublicLogs.slice(i, i + PUBLIC_LOG_SIZE_IN_FIELDS)));
464
+ let i = 0;
465
+ while (i < length) {
466
+ const logLen = flatPublicLogs[i++].toNumber();
467
+ const logFields = flatPublicLogs.slice(i, (i += logLen));
468
+ effect.publicLogs.push(
469
+ PublicLog.fromFields(logFields.concat(new Array(PUBLIC_LOG_SIZE_IN_FIELDS - logLen).fill(Fr.ZERO))),
470
+ );
451
471
  }
452
472
  break;
453
473
  }
@@ -56,7 +56,7 @@ export class TxReceipt {
56
56
  status: z.nativeEnum(TxStatus),
57
57
  error: z.string(),
58
58
  blockHash: L2BlockHash.schema.optional(),
59
- blockNumber: z.number().optional(),
59
+ blockNumber: z.number().int().nonnegative().optional(),
60
60
  transactionFee: schemas.BigInt.optional(),
61
61
  debugInfo: DebugInfoSchema.optional(),
62
62
  })