@aztec/stdlib 0.77.0 → 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.
@@ -100,7 +100,8 @@ export declare class PrivateKernelTailCircuitPublicInputs {
100
100
  getNonEmptyNullifiers(): Fr[];
101
101
  getNonEmptyPrivateLogs(): import("../logs/private_log.js").PrivateLog[];
102
102
  getNonEmptyContractClassLogsHashes(): import("./log_hash.js").ScopedLogHash[];
103
- getNonEmptyContractClassLogsLength(): number;
103
+ getEmittedContractClassLogsLength(): number;
104
+ getEmittedPrivateLogsLength(): number;
104
105
  static fromBuffer(buffer: Buffer | BufferReader): PrivateKernelTailCircuitPublicInputs;
105
106
  toBuffer(): Buffer;
106
107
  static empty(): PrivateKernelTailCircuitPublicInputs;
@@ -1 +1 @@
1
- {"version":3,"file":"private_kernel_tail_circuit_public_inputs.d.ts","sourceRoot":"","sources":["../../src/kernel/private_kernel_tail_circuit_public_inputs.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,wCAAwC,EAAE,MAAM,qDAAqD,CAAC;AAC/G,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,wCAAwC,EAAE,MAAM,qDAAqD,CAAC;AAC/G,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,qBAAa,uCAAuC;IAEhD;;OAEG;IACI,4BAA4B,EAAE,8BAA8B;IACnE;;OAEG;IACI,yBAAyB,EAAE,8BAA8B;IAChE;;OAEG;IACI,yBAAyB,EAAE,iBAAiB;;IAXnD;;OAEG;IACI,4BAA4B,EAAE,8BAA8B;IACnE;;OAEG;IACI,yBAAyB,EAAE,8BAA8B;IAChE;;OAEG;IACI,yBAAyB,EAAE,iBAAiB;IAGrD,OAAO;IAQP,IAAI,UAAU,YAEb;IAED,IAAI,aAAa,YAEhB;IAED,IAAI,aAAa,YAEhB;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,uCAAuC;IASzF,QAAQ;IAQR,MAAM,CAAC,KAAK;CAOb;AAED,qBAAa,uCAAuC;IAC/B,GAAG,EAAE,8BAA8B;gBAAnC,GAAG,EAAE,8BAA8B;IAEtD,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,uCAAuC;IAKzF,OAAO;IAIP,QAAQ;IAIR,MAAM,CAAC,KAAK;CAGb;AAED,qBAAa,oCAAoC;IAE7C;;OAEG;IACI,SAAS,EAAE,cAAc;IACzB,wBAAwB,EAAE,wBAAwB;IACzD;;;OAGG;IACI,OAAO,EAAE,GAAG;IACnB;;OAEG;IACI,QAAQ,EAAE,YAAY;IAEtB,SAAS,CAAC;IACV,SAAS,CAAC;;IAhBjB;;OAEG;IACI,SAAS,EAAE,cAAc,EACzB,wBAAwB,EAAE,wBAAwB;IACzD;;;OAGG;IACI,OAAO,EAAE,GAAG;IACnB;;OAEG;IACI,QAAQ,EAAE,YAAY,EAEtB,SAAS,CAAC,qDAAyC,EACnD,SAAS,CAAC,qDAAyC;IAY5D,MAAM,KAAK,MAAM,6EAEhB;IAED,MAAM;IAIN,OAAO;IAUP,0CAA0C;IAe1C,0CAA0C;IAmB1C,0BAA0B;IAQ1B,uCAAuC;IAIvC,oCAAoC;IAIpC,4BAA4B;IAI5B,kCAAkC;IAMlC,+BAA+B;IAI/B,4BAA4B;IAK5B,qBAAqB;IAUrB,qBAAqB;IAUrB,sBAAsB;IAUtB,kCAAkC;IAUlC,kCAAkC;IAIlC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,oCAAoC;IAatF,QAAQ;IAYR,MAAM,CAAC,KAAK;IAWZ;;;;OAIG;IACH,MAAM,CAAC,kBAAkB;CAY1B"}
1
+ {"version":3,"file":"private_kernel_tail_circuit_public_inputs.d.ts","sourceRoot":"","sources":["../../src/kernel/private_kernel_tail_circuit_public_inputs.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,wCAAwC,EAAE,MAAM,qDAAqD,CAAC;AAC/G,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,wCAAwC,EAAE,MAAM,qDAAqD,CAAC;AAC/G,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,qBAAa,uCAAuC;IAEhD;;OAEG;IACI,4BAA4B,EAAE,8BAA8B;IACnE;;OAEG;IACI,yBAAyB,EAAE,8BAA8B;IAChE;;OAEG;IACI,yBAAyB,EAAE,iBAAiB;;IAXnD;;OAEG;IACI,4BAA4B,EAAE,8BAA8B;IACnE;;OAEG;IACI,yBAAyB,EAAE,8BAA8B;IAChE;;OAEG;IACI,yBAAyB,EAAE,iBAAiB;IAGrD,OAAO;IAQP,IAAI,UAAU,YAEb;IAED,IAAI,aAAa,YAEhB;IAED,IAAI,aAAa,YAEhB;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,uCAAuC;IASzF,QAAQ;IAQR,MAAM,CAAC,KAAK;CAOb;AAED,qBAAa,uCAAuC;IAC/B,GAAG,EAAE,8BAA8B;gBAAnC,GAAG,EAAE,8BAA8B;IAEtD,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,uCAAuC;IAKzF,OAAO;IAIP,QAAQ;IAIR,MAAM,CAAC,KAAK;CAGb;AAED,qBAAa,oCAAoC;IAE7C;;OAEG;IACI,SAAS,EAAE,cAAc;IACzB,wBAAwB,EAAE,wBAAwB;IACzD;;;OAGG;IACI,OAAO,EAAE,GAAG;IACnB;;OAEG;IACI,QAAQ,EAAE,YAAY;IAEtB,SAAS,CAAC;IACV,SAAS,CAAC;;IAhBjB;;OAEG;IACI,SAAS,EAAE,cAAc,EACzB,wBAAwB,EAAE,wBAAwB;IACzD;;;OAGG;IACI,OAAO,EAAE,GAAG;IACnB;;OAEG;IACI,QAAQ,EAAE,YAAY,EAEtB,SAAS,CAAC,qDAAyC,EACnD,SAAS,CAAC,qDAAyC;IAY5D,MAAM,KAAK,MAAM,6EAEhB;IAED,MAAM;IAIN,OAAO;IAUP,0CAA0C;IAe1C,0CAA0C;IAmB1C,0BAA0B;IAQ1B,uCAAuC;IAIvC,oCAAoC;IAIpC,4BAA4B;IAI5B,kCAAkC;IAMlC,+BAA+B;IAI/B,4BAA4B;IAK5B,qBAAqB;IAUrB,qBAAqB;IAUrB,sBAAsB;IAUtB,kCAAkC;IAUlC,iCAAiC;IAIjC,2BAA2B;IAI3B,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,oCAAoC;IAatF,QAAQ;IAYR,MAAM,CAAC,KAAK;IAWZ;;;;OAIG;IACH,MAAM,CAAC,kBAAkB;CAY1B"}
@@ -156,9 +156,12 @@ export class PrivateKernelTailCircuitPublicInputs {
156
156
  const contractClassLogsHashes = this.forPublic ? mergeAccumulatedData(this.forPublic.nonRevertibleAccumulatedData.contractClassLogsHashes, this.forPublic.revertibleAccumulatedData.contractClassLogsHashes) : this.forRollup.end.contractClassLogsHashes;
157
157
  return contractClassLogsHashes.filter((h)=>!h.isEmpty());
158
158
  }
159
- getNonEmptyContractClassLogsLength() {
159
+ getEmittedContractClassLogsLength() {
160
160
  return this.getNonEmptyContractClassLogsHashes().reduce((total, log)=>total + log.logHash.length, 0);
161
161
  }
162
+ getEmittedPrivateLogsLength() {
163
+ return this.getNonEmptyPrivateLogs().reduce((total, log)=>total + log.getEmittedLength(), 0);
164
+ }
162
165
  static fromBuffer(buffer) {
163
166
  const reader = BufferReader.asReader(buffer);
164
167
  const isForPublic = reader.readBoolean();
@@ -1 +1 @@
1
- {"version":3,"file":"contract_class_log.d.ts","sourceRoot":"","sources":["../../src/logs/contract_class_log.ts"],"names":[],"mappings":";;;AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AAE3F,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,qBAAa,gBAAgB;IAOR,eAAe,EAAE,YAAY;IAAS,MAAM,EAAE,EAAE,EAAE;IANrE,MAAM,CAAC,aAAa,SAAwD;IAErE,kBAAkB,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;gBAIxB,eAAe,EAAE,YAAY,EAAS,MAAM,EAAE,EAAE,EAAE;IAQrE,QAAQ,IAAI,EAAE,EAAE;IAIhB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW;IAU5C,OAAO;IAIP,MAAM,CAAC,KAAK;IAIZ,QAAQ,IAAI,MAAM;IAIlB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAW/C,KAAK;WAIQ,MAAM;IAWnB,gBAAgB;IAMhB,gBAAgB;IAWhB,qBAAqB,CAAC,KAAK,EAAE,EAAE;IAI/B,UAAU;IAQJ,IAAI;IAUJ,IAAI;IAIV,MAAM,KAAK,MAAM;;;;;;;;;;;;OAOhB;IAED,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;CAK3B"}
1
+ {"version":3,"file":"contract_class_log.d.ts","sourceRoot":"","sources":["../../src/logs/contract_class_log.ts"],"names":[],"mappings":";;;AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AAE3F,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,qBAAa,gBAAgB;IAOR,eAAe,EAAE,YAAY;IAAS,MAAM,EAAE,EAAE,EAAE;IANrE,MAAM,CAAC,aAAa,SAAwD;IAErE,kBAAkB,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;gBAIxB,eAAe,EAAE,YAAY,EAAS,MAAM,EAAE,EAAE,EAAE;IAQrE,QAAQ,IAAI,EAAE,EAAE;IAIhB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW;IAU5C,OAAO;IAIP,MAAM,CAAC,KAAK;IAIZ,QAAQ,IAAI,MAAM;IAIlB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAW/C,KAAK;WAIQ,MAAM;IAWnB,gBAAgB;IAOhB,gBAAgB;IAKhB,qBAAqB,CAAC,KAAK,EAAE,EAAE;IAI/B,UAAU;IAQJ,IAAI;IAUJ,IAAI;IAIV,MAAM,KAAK,MAAM;;;;;;;;;;;;OAOhB;IAED,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;CAK3B"}
@@ -73,18 +73,13 @@ export class ContractClassLog {
73
73
  }
74
74
  getEmittedLength() {
75
75
  // This assumes that we cut trailing zeroes from the end of the log. In ts, these will always be added back.
76
- // Does not include address and length prefix.
76
+ // Does not include address or length prefix.
77
+ // Note: Unlike public logs, address is not included here because it is not included in the log itself.
77
78
  return this.getEmittedFields().length;
78
79
  }
79
80
  getEmittedFields() {
80
- let lastZeroIndex = 0;
81
- for(let i = this.fields.length - 1; i >= 0; i--){
82
- if (!this.fields[i].isZero() && lastZeroIndex == 0) {
83
- lastZeroIndex = i + 1;
84
- break;
85
- }
86
- }
87
- return this.fields.slice(0, lastZeroIndex);
81
+ const lastNonZeroIndex = this.fields.findLastIndex((f)=>!f.isZero());
82
+ return this.fields.slice(0, lastNonZeroIndex + 1);
88
83
  }
89
84
  setUnsiloedFirstField(field) {
90
85
  this.unsiloedFirstField = field;
@@ -17,6 +17,8 @@ export declare class PrivateLog {
17
17
  toBuffer(): Buffer;
18
18
  static fromBuffer(buffer: Buffer | BufferReader): PrivateLog;
19
19
  static random(): PrivateLog;
20
+ getEmittedLength(): number;
21
+ getEmittedFields(): Fr[];
20
22
  static get schema(): z.ZodEffects<z.ZodObject<{
21
23
  fields: z.ZodArray<z.ZodType<Fr, any, string>, "many">;
22
24
  }, "strip", z.ZodTypeAny, {
@@ -1 +1 @@
1
- {"version":3,"file":"private_log.d.ts","sourceRoot":"","sources":["../../src/logs/private_log.ts"],"names":[],"mappings":";;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,KAAK,EAAqB,MAAM,6BAA6B,CAAC;AAEvG,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qBAAa,UAAU;IAGF,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,0BAA0B,CAAC;IAFvE,MAAM,CAAC,aAAa,SAAiD;gBAElD,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,0BAA0B,CAAC;IAEvE,QAAQ,IAAI,EAAE,EAAE;IAIhB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW;IAK5C,OAAO;IAIP,MAAM,CAAC,KAAK;IAIZ,QAAQ,IAAI,MAAM;IAIlB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAK/C,MAAM,CAAC,MAAM;IAIb,MAAM,KAAK,MAAM;;;;;;;;OAMhB;IAED,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;CAK3B"}
1
+ {"version":3,"file":"private_log.d.ts","sourceRoot":"","sources":["../../src/logs/private_log.ts"],"names":[],"mappings":";;;AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,KAAK,EAAqB,MAAM,6BAA6B,CAAC;AAEvG,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qBAAa,UAAU;IAGF,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,0BAA0B,CAAC;IAFvE,MAAM,CAAC,aAAa,SAAiD;gBAElD,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,0BAA0B,CAAC;IAEvE,QAAQ,IAAI,EAAE,EAAE;IAIhB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW;IAK5C,OAAO;IAIP,MAAM,CAAC,KAAK;IAIZ,QAAQ,IAAI,MAAM;IAIlB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAK/C,MAAM,CAAC,MAAM;IAIb,gBAAgB;IAMhB,gBAAgB;IAKhB,MAAM,KAAK,MAAM;;;;;;;;OAMhB;IAED,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;CAK3B"}
@@ -34,6 +34,15 @@ export class PrivateLog {
34
34
  static random() {
35
35
  return new PrivateLog(makeTuple(PRIVATE_LOG_SIZE_IN_FIELDS, Fr.random));
36
36
  }
37
+ getEmittedLength() {
38
+ // This assumes that we cut trailing zeroes from the end of the log. In ts, these will always be added back.
39
+ // Does not include length prefix.
40
+ return this.getEmittedFields().length;
41
+ }
42
+ getEmittedFields() {
43
+ const lastNonZeroIndex = this.fields.findLastIndex((f)=>!f.isZero());
44
+ return this.fields.slice(0, lastNonZeroIndex + 1);
45
+ }
37
46
  static get schema() {
38
47
  return z.object({
39
48
  fields: z.array(schemas.Fr)
@@ -21,6 +21,8 @@ export declare class PublicLog {
21
21
  toBuffer(): Buffer;
22
22
  static fromBuffer(buffer: Buffer | BufferReader): PublicLog;
23
23
  static random(): Promise<PublicLog>;
24
+ getEmittedLength(): number;
25
+ getEmittedFields(): Fr[];
24
26
  equals(other: this): boolean;
25
27
  toHumanReadable(): string;
26
28
  static get schema(): ZodFor<PublicLog>;
@@ -1 +1 @@
1
- {"version":3,"file":"public_log.d.ts","sourceRoot":"","sources":["../../src/logs/public_log.ts"],"names":[],"mappings":";;;AAAA,OAAO,EAAE,8BAA8B,EAA6B,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,KAAK,QAAQ,EAAa,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,KAAK,KAAK,EAGX,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,qBAAa,SAAS;IAGD,eAAe,EAAE,YAAY;IAAS,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,8BAA8B,CAAC;IAF9G,MAAM,CAAC,aAAa,SAAgD;gBAEjD,eAAe,EAAE,YAAY,EAAS,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,8BAA8B,CAAC;IAE9G,QAAQ,IAAI,EAAE,EAAE;IAIhB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC;IAI5C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW;IAK5C,OAAO;IAIP,MAAM,CAAC,KAAK;IAIZ,QAAQ,IAAI,MAAM;IAIlB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;WAKlC,MAAM;IAInB,MAAM,CAAC,KAAK,EAAE,IAAI;IAOlB,eAAe,IAAI,MAAM;IAIzB,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,CAOrC;IAED,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;CAM3B"}
1
+ {"version":3,"file":"public_log.d.ts","sourceRoot":"","sources":["../../src/logs/public_log.ts"],"names":[],"mappings":";;;AAAA,OAAO,EAAE,8BAA8B,EAA6B,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,KAAK,QAAQ,EAAa,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,KAAK,KAAK,EAGX,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,qBAAa,SAAS;IAGD,eAAe,EAAE,YAAY;IAAS,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,8BAA8B,CAAC;IAF9G,MAAM,CAAC,aAAa,SAAgD;gBAEjD,eAAe,EAAE,YAAY,EAAS,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,8BAA8B,CAAC;IAE9G,QAAQ,IAAI,EAAE,EAAE;IAIhB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC;IAI5C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW;IAK5C,OAAO;IAIP,MAAM,CAAC,KAAK;IAIZ,QAAQ,IAAI,MAAM;IAIlB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;WAKlC,MAAM;IAInB,gBAAgB;IAMhB,gBAAgB;IAMhB,MAAM,CAAC,KAAK,EAAE,IAAI;IAOlB,eAAe,IAAI,MAAM;IAIzB,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,CAOrC;IAED,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;CAM3B"}
@@ -43,6 +43,16 @@ export class PublicLog {
43
43
  static async random() {
44
44
  return new PublicLog(await AztecAddress.random(), makeTuple(PUBLIC_LOG_DATA_SIZE_IN_FIELDS, Fr.random));
45
45
  }
46
+ getEmittedLength() {
47
+ // This assumes that we cut trailing zeroes from the end of the log. In ts, these will always be added back.
48
+ // Does not include length prefix.
49
+ return this.getEmittedFields().length;
50
+ }
51
+ getEmittedFields() {
52
+ const fields = this.toFields();
53
+ const lastNonZeroIndex = fields.findLastIndex((f)=>!f.isZero());
54
+ return fields.slice(0, lastNonZeroIndex + 1);
55
+ }
46
56
  equals(other) {
47
57
  return this.contractAddress.equals(other.contractAddress) && this.log.reduce((acc, field, i)=>acc && field.equals(other.log[i]), true);
48
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../src/tx/tx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../src/tx/tx.ts"],"names":[],"mappings":"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"}
package/dest/tx/tx.js CHANGED
@@ -5,7 +5,6 @@ import { BufferReader, serializeArrayOfBufferableToVector, serializeToBuffer } f
5
5
  import { z } from 'zod';
6
6
  import { PrivateKernelTailCircuitPublicInputs } from '../kernel/private_kernel_tail_circuit_public_inputs.js';
7
7
  import { ContractClassLog } from '../logs/contract_class_log.js';
8
- import { PrivateLog } from '../logs/private_log.js';
9
8
  import { Gossipable } from '../p2p/gossipable.js';
10
9
  import { TopicType, createTopicString } from '../p2p/topic_type.js';
11
10
  import { ClientIvcProof } from '../proofs/client_ivc_proof.js';
@@ -166,7 +165,7 @@ import { TxHash } from './tx_hash.js';
166
165
  nullifierCount: this.data.getNonEmptyNullifiers().length,
167
166
  privateLogCount: this.data.getNonEmptyPrivateLogs().length,
168
167
  classRegisteredCount: this.data.getNonEmptyContractClassLogsHashes().length,
169
- contractClassLogSize: this.data.getNonEmptyContractClassLogsLength(),
168
+ contractClassLogSize: this.data.getEmittedContractClassLogsLength(),
170
169
  proofSize: this.clientIvcProof.clientIvcProofBuffer.length,
171
170
  size: this.toBuffer().length,
172
171
  feePaymentMethod: // needsSetup? then we pay through a fee payment contract
@@ -182,7 +181,7 @@ import { TxHash } from './tx_hash.js';
182
181
  * Estimates the tx size based on its private effects. Note that the actual size of the tx
183
182
  * after processing will probably be larger, as public execution would generate more data.
184
183
  */ getEstimatedPrivateTxEffectsSize() {
185
- return this.data.getNonEmptyNoteHashes().length * Fr.SIZE_IN_BYTES + this.data.getNonEmptyNullifiers().length * Fr.SIZE_IN_BYTES + this.data.getNonEmptyPrivateLogs().length * PrivateLog.SIZE_IN_BYTES + this.data.getNonEmptyContractClassLogsLength() * Fr.SIZE_IN_BYTES;
184
+ return this.data.getNonEmptyNoteHashes().length * Fr.SIZE_IN_BYTES + this.data.getNonEmptyNullifiers().length * Fr.SIZE_IN_BYTES + this.data.getEmittedPrivateLogsLength() * Fr.SIZE_IN_BYTES + this.data.getEmittedContractClassLogsLength() * Fr.SIZE_IN_BYTES;
186
185
  }
187
186
  /**
188
187
  * Convenience function to get a hash out of a tx or a tx-like.
@@ -1 +1 @@
1
- {"version":3,"file":"tx_effect.d.ts","sourceRoot":"","sources":["../../src/tx/tx_effect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tx_effect.d.ts","sourceRoot":"","sources":["../../src/tx/tx_effect.ts"],"names":[],"mappings":"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"}
@@ -270,15 +270,26 @@ export class TxEffect {
270
270
  ]).flat());
271
271
  }
272
272
  if (this.privateLogs.length) {
273
- flattened.push(this.toPrefix(PRIVATE_LOGS_PREFIX, this.privateLogs.length * PRIVATE_LOG_SIZE_IN_FIELDS));
274
- flattened.push(...this.privateLogs.map((l)=>l.fields).flat());
273
+ const totalLogLen = this.privateLogs.reduce(// +1 for length prefix
274
+ (total, log)=>total + (log.getEmittedLength() == 0 ? 0 : log.getEmittedLength() + 1), 0);
275
+ flattened.push(this.toPrefix(PRIVATE_LOGS_PREFIX, totalLogLen));
276
+ flattened.push(...this.privateLogs.flatMap((l)=>[
277
+ new Fr(l.getEmittedLength()),
278
+ ...l.getEmittedFields()
279
+ ]));
275
280
  }
276
281
  if (this.publicLogs.length) {
277
- flattened.push(this.toPrefix(PUBLIC_LOGS_PREFIX, this.publicLogs.length * PUBLIC_LOG_SIZE_IN_FIELDS));
278
- flattened.push(...this.publicLogs.map((l)=>l.toFields()).flat());
282
+ const totalLogLen = this.publicLogs.reduce(// +1 for length prefix
283
+ (total, log)=>total + (log.getEmittedLength() == 0 ? 0 : log.getEmittedLength() + 1), 0);
284
+ flattened.push(this.toPrefix(PUBLIC_LOGS_PREFIX, totalLogLen));
285
+ flattened.push(...this.publicLogs.flatMap((l)=>[
286
+ new Fr(l.getEmittedLength()),
287
+ ...l.getEmittedFields()
288
+ ]));
279
289
  }
280
290
  if (this.contractClassLogs.length) {
281
- const totalLogLen = this.contractClassLogs.reduce((total, log)=>total + (log.getEmittedLength() == 0 ? 0 : log.getEmittedLength() + 2), 0);
291
+ const totalLogLen = this.contractClassLogs.reduce(// +2 for length prefix and contract address
292
+ (total, log)=>total + (log.getEmittedLength() == 0 ? 0 : log.getEmittedLength() + 2), 0);
282
293
  flattened.push(this.toPrefix(CONTRACT_CLASS_LOGS_PREFIX, totalLogLen));
283
294
  flattened.push(...this.contractClassLogs.flatMap((l)=>[
284
295
  new Fr(l.getEmittedLength()),
@@ -347,11 +358,13 @@ export class TxEffect {
347
358
  }
348
359
  case PRIVATE_LOGS_PREFIX:
349
360
  {
350
- // TODO(Miranda): squash log 0s in a nested loop and add len prefix?
351
361
  ensureEmpty(effect.privateLogs);
352
362
  const flatPrivateLogs = reader.readFieldArray(length);
353
- for(let i = 0; i < length; i += PRIVATE_LOG_SIZE_IN_FIELDS){
354
- effect.privateLogs.push(PrivateLog.fromFields(flatPrivateLogs.slice(i, i + PRIVATE_LOG_SIZE_IN_FIELDS)));
363
+ let i = 0;
364
+ while(i < length){
365
+ const logLen = flatPrivateLogs[i++].toNumber();
366
+ const logFields = flatPrivateLogs.slice(i, i += logLen);
367
+ effect.privateLogs.push(PrivateLog.fromFields(logFields.concat(new Array(PRIVATE_LOG_SIZE_IN_FIELDS - logLen).fill(Fr.ZERO))));
355
368
  }
356
369
  break;
357
370
  }
@@ -359,8 +372,11 @@ export class TxEffect {
359
372
  {
360
373
  ensureEmpty(effect.publicLogs);
361
374
  const flatPublicLogs = reader.readFieldArray(length);
362
- for(let i = 0; i < length; i += PUBLIC_LOG_SIZE_IN_FIELDS){
363
- effect.publicLogs.push(PublicLog.fromFields(flatPublicLogs.slice(i, i + PUBLIC_LOG_SIZE_IN_FIELDS)));
375
+ let i = 0;
376
+ while(i < length){
377
+ const logLen = flatPublicLogs[i++].toNumber();
378
+ const logFields = flatPublicLogs.slice(i, i += logLen);
379
+ effect.publicLogs.push(PublicLog.fromFields(logFields.concat(new Array(PUBLIC_LOG_SIZE_IN_FIELDS - logLen).fill(Fr.ZERO))));
364
380
  }
365
381
  break;
366
382
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/stdlib",
3
- "version": "0.77.0",
3
+ "version": "0.77.1",
4
4
  "type": "module",
5
5
  "inherits": [
6
6
  "../package.common.json",
@@ -66,11 +66,11 @@
66
66
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
67
67
  },
68
68
  "dependencies": {
69
- "@aztec/bb.js": "0.77.0",
70
- "@aztec/blob-lib": "0.77.0",
71
- "@aztec/constants": "0.77.0",
72
- "@aztec/ethereum": "0.77.0",
73
- "@aztec/foundation": "0.77.0",
69
+ "@aztec/bb.js": "0.77.1",
70
+ "@aztec/blob-lib": "0.77.1",
71
+ "@aztec/constants": "0.77.1",
72
+ "@aztec/ethereum": "0.77.1",
73
+ "@aztec/foundation": "0.77.1",
74
74
  "lodash.chunk": "^4.2.0",
75
75
  "lodash.isequal": "^4.5.0",
76
76
  "lodash.omit": "^4.5.0",
@@ -253,10 +253,14 @@ export class PrivateKernelTailCircuitPublicInputs {
253
253
  return contractClassLogsHashes.filter(h => !h.isEmpty());
254
254
  }
255
255
 
256
- getNonEmptyContractClassLogsLength() {
256
+ getEmittedContractClassLogsLength() {
257
257
  return this.getNonEmptyContractClassLogsHashes().reduce((total, log) => total + log.logHash.length, 0);
258
258
  }
259
259
 
260
+ getEmittedPrivateLogsLength() {
261
+ return this.getNonEmptyPrivateLogs().reduce((total, log) => total + log.getEmittedLength(), 0);
262
+ }
263
+
260
264
  static fromBuffer(buffer: Buffer | BufferReader): PrivateKernelTailCircuitPublicInputs {
261
265
  const reader = BufferReader.asReader(buffer);
262
266
  const isForPublic = reader.readBoolean();
@@ -78,19 +78,14 @@ export class ContractClassLog {
78
78
 
79
79
  getEmittedLength() {
80
80
  // This assumes that we cut trailing zeroes from the end of the log. In ts, these will always be added back.
81
- // Does not include address and length prefix.
81
+ // Does not include address or length prefix.
82
+ // Note: Unlike public logs, address is not included here because it is not included in the log itself.
82
83
  return this.getEmittedFields().length;
83
84
  }
84
85
 
85
86
  getEmittedFields() {
86
- let lastZeroIndex = 0;
87
- for (let i = this.fields.length - 1; i >= 0; i--) {
88
- if (!this.fields[i].isZero() && lastZeroIndex == 0) {
89
- lastZeroIndex = i + 1;
90
- break;
91
- }
92
- }
93
- return this.fields.slice(0, lastZeroIndex);
87
+ const lastNonZeroIndex = this.fields.findLastIndex(f => !f.isZero());
88
+ return this.fields.slice(0, lastNonZeroIndex + 1);
94
89
  }
95
90
 
96
91
  setUnsiloedFirstField(field: Fr) {
@@ -42,6 +42,17 @@ export class PrivateLog {
42
42
  return new PrivateLog(makeTuple(PRIVATE_LOG_SIZE_IN_FIELDS, Fr.random));
43
43
  }
44
44
 
45
+ getEmittedLength() {
46
+ // This assumes that we cut trailing zeroes from the end of the log. In ts, these will always be added back.
47
+ // Does not include length prefix.
48
+ return this.getEmittedFields().length;
49
+ }
50
+
51
+ getEmittedFields() {
52
+ const lastNonZeroIndex = this.fields.findLastIndex(f => !f.isZero());
53
+ return this.fields.slice(0, lastNonZeroIndex + 1);
54
+ }
55
+
45
56
  static get schema() {
46
57
  return z
47
58
  .object({
@@ -54,6 +54,18 @@ export class PublicLog {
54
54
  return new PublicLog(await AztecAddress.random(), makeTuple(PUBLIC_LOG_DATA_SIZE_IN_FIELDS, Fr.random));
55
55
  }
56
56
 
57
+ getEmittedLength() {
58
+ // This assumes that we cut trailing zeroes from the end of the log. In ts, these will always be added back.
59
+ // Does not include length prefix.
60
+ return this.getEmittedFields().length;
61
+ }
62
+
63
+ getEmittedFields() {
64
+ const fields = this.toFields();
65
+ const lastNonZeroIndex = fields.findLastIndex(f => !f.isZero());
66
+ return fields.slice(0, lastNonZeroIndex + 1);
67
+ }
68
+
57
69
  equals(other: this) {
58
70
  return (
59
71
  this.contractAddress.equals(other.contractAddress) &&
package/src/tx/tx.ts CHANGED
@@ -13,7 +13,6 @@ import type { L2LogsSource } from '../interfaces/l2_logs_source.js';
13
13
  import type { ScopedLogHash } from '../kernel/log_hash.js';
14
14
  import { PrivateKernelTailCircuitPublicInputs } from '../kernel/private_kernel_tail_circuit_public_inputs.js';
15
15
  import { ContractClassLog } from '../logs/contract_class_log.js';
16
- import { PrivateLog } from '../logs/private_log.js';
17
16
  import { Gossipable } from '../p2p/gossipable.js';
18
17
  import { TopicType, createTopicString } from '../p2p/topic_type.js';
19
18
  import { ClientIvcProof } from '../proofs/client_ivc_proof.js';
@@ -239,7 +238,7 @@ export class Tx extends Gossipable {
239
238
  nullifierCount: this.data.getNonEmptyNullifiers().length,
240
239
  privateLogCount: this.data.getNonEmptyPrivateLogs().length,
241
240
  classRegisteredCount: this.data.getNonEmptyContractClassLogsHashes().length,
242
- contractClassLogSize: this.data.getNonEmptyContractClassLogsLength(),
241
+ contractClassLogSize: this.data.getEmittedContractClassLogsLength(),
243
242
 
244
243
  proofSize: this.clientIvcProof.clientIvcProofBuffer.length,
245
244
  size: this.toBuffer().length,
@@ -273,8 +272,8 @@ export class Tx extends Gossipable {
273
272
  return (
274
273
  this.data.getNonEmptyNoteHashes().length * Fr.SIZE_IN_BYTES +
275
274
  this.data.getNonEmptyNullifiers().length * Fr.SIZE_IN_BYTES +
276
- this.data.getNonEmptyPrivateLogs().length * PrivateLog.SIZE_IN_BYTES +
277
- this.data.getNonEmptyContractClassLogsLength() * Fr.SIZE_IN_BYTES
275
+ this.data.getEmittedPrivateLogsLength() * Fr.SIZE_IN_BYTES +
276
+ this.data.getEmittedContractClassLogsLength() * Fr.SIZE_IN_BYTES
278
277
  );
279
278
  }
280
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
  }