@aztec/stdlib 4.3.0-nightly.20260419 → 4.3.0-nightly.20260421
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.
- package/dest/abi/encoder.d.ts +1 -1
- package/dest/abi/encoder.d.ts.map +1 -1
- package/dest/abi/encoder.js +32 -6
- package/dest/hash/hash.d.ts +10 -1
- package/dest/hash/hash.d.ts.map +1 -1
- package/dest/hash/hash.js +14 -0
- package/package.json +9 -9
- package/src/abi/encoder.ts +42 -6
- package/src/hash/hash.ts +12 -0
package/dest/abi/encoder.d.ts
CHANGED
|
@@ -13,4 +13,4 @@ export declare function encodeArguments(abi: FunctionAbi, args: any[]): Fr[];
|
|
|
13
13
|
* @returns The size of the arguments.
|
|
14
14
|
*/
|
|
15
15
|
export declare function countArgumentsSize(abi: FunctionAbi): number;
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2Rlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FiaS9lbmNvZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBVyxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFpVHJEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGVBQWUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsUUFFNUQ7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxXQUFXLFVBRWxEIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../src/abi/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../src/abi/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,UAAU,CAAC;AAiTrD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,QAE5D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,UAElD"}
|
package/dest/abi/encoder.js
CHANGED
|
@@ -91,13 +91,24 @@ import { isAddressStruct, isBoundedVecStruct, isFunctionSelectorStruct, isOption
|
|
|
91
91
|
this.flattened.push(new Fr(arg ? 1n : 0n));
|
|
92
92
|
break;
|
|
93
93
|
case 'array':
|
|
94
|
+
if (!Array.isArray(arg)) {
|
|
95
|
+
throw new Error(`Expected array for '${name ?? 'unnamed'}' but received ${typeof arg}`);
|
|
96
|
+
}
|
|
97
|
+
if (arg.length !== abiType.length) {
|
|
98
|
+
throw new Error(`Expected array of length ${abiType.length} for '${name ?? 'unnamed'}' but received length ${arg.length}`);
|
|
99
|
+
}
|
|
94
100
|
for(let i = 0; i < abiType.length; i += 1){
|
|
95
101
|
this.encodeArgument(abiType.type, arg[i], `${name}[${i}]`);
|
|
96
102
|
}
|
|
97
103
|
break;
|
|
98
104
|
case 'string':
|
|
105
|
+
if (typeof arg !== 'string') {
|
|
106
|
+
throw new Error(`Expected string for '${name ?? 'unnamed'}' but received ${typeof arg}`);
|
|
107
|
+
}
|
|
108
|
+
if (arg.length > abiType.length) {
|
|
109
|
+
throw new Error(`Expected string of max length ${abiType.length} for '${name ?? 'unnamed'}' but received length ${arg.length}`);
|
|
110
|
+
}
|
|
99
111
|
for(let i = 0; i < abiType.length; i += 1){
|
|
100
|
-
// If the string is shorter than the defined length, pad it with 0s.
|
|
101
112
|
const toInsert = i < arg.length ? BigInt(arg.charCodeAt(i)) : 0n;
|
|
102
113
|
this.flattened.push(new Fr(toInsert));
|
|
103
114
|
}
|
|
@@ -152,12 +163,24 @@ import { isAddressStruct, isBoundedVecStruct, isFunctionSelectorStruct, isOption
|
|
|
152
163
|
case 'integer':
|
|
153
164
|
{
|
|
154
165
|
const value = BigInt(arg);
|
|
155
|
-
if (abiType.sign === '
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
166
|
+
if (abiType.sign === 'unsigned') {
|
|
167
|
+
const maxValue = (1n << BigInt(abiType.width)) - 1n;
|
|
168
|
+
if (value < 0n || value > maxValue) {
|
|
169
|
+
throw new Error(`Value ${value} does not fit in u${abiType.width} for '${name ?? 'unnamed'}' (valid range: 0 to ${maxValue})`);
|
|
170
|
+
}
|
|
160
171
|
this.flattened.push(new Fr(value));
|
|
172
|
+
} else {
|
|
173
|
+
const minValue = -(1n << BigInt(abiType.width - 1));
|
|
174
|
+
const maxValue = (1n << BigInt(abiType.width - 1)) - 1n;
|
|
175
|
+
if (value < minValue || value > maxValue) {
|
|
176
|
+
throw new Error(`Value ${value} does not fit in i${abiType.width} for '${name ?? 'unnamed'}' (valid range: ${minValue} to ${maxValue})`);
|
|
177
|
+
}
|
|
178
|
+
if (value < 0n) {
|
|
179
|
+
const twosComplement = value + (1n << BigInt(abiType.width));
|
|
180
|
+
this.flattened.push(new Fr(twosComplement));
|
|
181
|
+
} else {
|
|
182
|
+
this.flattened.push(new Fr(value));
|
|
183
|
+
}
|
|
161
184
|
}
|
|
162
185
|
break;
|
|
163
186
|
}
|
|
@@ -169,6 +192,9 @@ import { isAddressStruct, isBoundedVecStruct, isFunctionSelectorStruct, isOption
|
|
|
169
192
|
* Encodes all the arguments for the given function ABI.
|
|
170
193
|
* @returns The encoded arguments.
|
|
171
194
|
*/ encode() {
|
|
195
|
+
if (this.args.length !== this.abi.parameters.length) {
|
|
196
|
+
throw new Error(`Function '${this.abi.name}' expects ${this.abi.parameters.length} argument(s) but received ${this.args.length}`);
|
|
197
|
+
}
|
|
172
198
|
for(let i = 0; i < this.abi.parameters.length; i += 1){
|
|
173
199
|
const parameterAbi = this.abi.parameters[i];
|
|
174
200
|
this.encodeArgument(parameterAbi.type, this.args[i], parameterAbi.name);
|
package/dest/hash/hash.d.ts
CHANGED
|
@@ -63,6 +63,15 @@ export declare function computeSiloedPublicInitializationNullifier(contract: Azt
|
|
|
63
63
|
export declare function computeProtocolNullifier(txRequestHash: Fr): Promise<Fr>;
|
|
64
64
|
/** Domain-separates a raw log tag with the given domain separator. */
|
|
65
65
|
export declare function computeLogTag(rawTag: number | bigint | boolean | Fr | Buffer, domSep: DomainSeparator): Promise<Fr>;
|
|
66
|
+
/**
|
|
67
|
+
* Computes the commitment of a private event from its preimage.
|
|
68
|
+
* @param randomness - Random value emitted alongside the event to prevent preimage brute-forcing.
|
|
69
|
+
* @param eventSelector - Event selector as an Fr.
|
|
70
|
+
* @param content - Serialized event content.
|
|
71
|
+
*
|
|
72
|
+
* @dev Must match the implementation in aztec-nr/aztec/src/event/event_interface.nr > compute_private_serialized_event_commitment
|
|
73
|
+
*/
|
|
74
|
+
export declare function computePrivateEventCommitment(randomness: Fr, eventSelector: Fr, content: Fr[]): Promise<Fr>;
|
|
66
75
|
export declare function computeSiloedPrivateLogFirstField(contract: AztecAddress, field: Fr): Promise<Fr>;
|
|
67
76
|
/**
|
|
68
77
|
* Computes a public data tree value ready for insertion.
|
|
@@ -111,4 +120,4 @@ export declare function computeL2ToL1MessageHash({ l2Sender, l1Recipient, conten
|
|
|
111
120
|
rollupVersion: Fr;
|
|
112
121
|
chainId: Fr;
|
|
113
122
|
}): Fr;
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhc2gvaGFzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFvQyxNQUFNLGtCQUFrQixDQUFDO0FBR3JGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQ7Ozs7R0FJRztBQUNILHdCQUFzQixNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FHM0Q7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFnQixvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUUxRjtBQUVEOzs7Ozs7R0FNRztBQUNILHdCQUFnQixZQUFZLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FFOUU7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFnQixxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUVwRjtBQUVEOzs7Ozs7R0FNRztBQUNILHdCQUFnQixhQUFhLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FFckY7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFzQiwyQ0FBMkMsQ0FDL0QsUUFBUSxFQUFFLFlBQVksRUFDdEIsa0JBQWtCLEVBQUUsRUFBRSxHQUNyQixPQUFPLENBQUMsRUFBRSxDQUFDLENBTWI7QUFFRDs7Ozs7O0dBTUc7QUFDSCx3QkFBc0IsMENBQTBDLENBQUMsUUFBUSxFQUFFLFlBQVksR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBR3BHO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLHdCQUF3QixDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUV2RTtBQUVELHNFQUFzRTtBQUN0RSx3QkFBZ0IsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUVuSDtBQUVEOzs7Ozs7O0dBT0c7QUFDSCx3QkFBZ0IsNkJBQTZCLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBRTNHO0FBRUQsd0JBQWdCLGlDQUFpQyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBRWhHO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBZ0IsMEJBQTBCLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBRXhEO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBRXpHO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBZ0Isa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FNMUQ7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBRS9EO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBZ0IsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBRXpEO0FBRUQsd0JBQXNCLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxlQU10RztBQUVEOzs7R0FHRztBQUNILHdCQUFnQix3QkFBd0IsQ0FBQyxFQUN2QyxRQUFRLEVBQ1IsV0FBVyxFQUNYLE9BQU8sRUFDUCxhQUFhLEVBQ2IsT0FBTyxFQUNSLEVBQUU7SUFDRCxRQUFRLEVBQUUsWUFBWSxDQUFDO0lBQ3ZCLFdBQVcsRUFBRSxVQUFVLENBQUM7SUFDeEIsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNaLGFBQWEsRUFBRSxFQUFFLENBQUM7SUFDbEIsT0FBTyxFQUFFLEVBQUUsQ0FBQztDQUNiLE1BRUEifQ==
|
package/dest/hash/hash.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/hash/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAoC,MAAM,kBAAkB,CAAC;AAGrF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAG3D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAE1F;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAE9E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAEpF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAErF;AAED;;;;;GAKG;AACH,wBAAsB,2CAA2C,CAC/D,QAAQ,EAAE,YAAY,EACtB,kBAAkB,EAAE,EAAE,GACrB,OAAO,CAAC,EAAE,CAAC,CAMb;AAED;;;;;;GAMG;AACH,wBAAsB,0CAA0C,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC,CAGpG;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAEvE;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,EAAE,CAAC,CAEnH;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAEhG;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAEzG;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAEzD;AAED,wBAAsB,6BAA6B,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,eAMtG;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,WAAW,EACX,OAAO,EACP,aAAa,EACb,OAAO,EACR,EAAE;IACD,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,UAAU,CAAC;IACxB,OAAO,EAAE,EAAE,CAAC;IACZ,aAAa,EAAE,EAAE,CAAC;IAClB,OAAO,EAAE,EAAE,CAAC;CACb,MAEA"}
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/hash/hash.ts"],"names":[],"mappings":"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"}
|
package/dest/hash/hash.js
CHANGED
|
@@ -95,6 +95,20 @@ import { AztecAddress } from '../aztec-address/index.js';
|
|
|
95
95
|
new Fr(rawTag)
|
|
96
96
|
], domSep);
|
|
97
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Computes the commitment of a private event from its preimage.
|
|
100
|
+
* @param randomness - Random value emitted alongside the event to prevent preimage brute-forcing.
|
|
101
|
+
* @param eventSelector - Event selector as an Fr.
|
|
102
|
+
* @param content - Serialized event content.
|
|
103
|
+
*
|
|
104
|
+
* @dev Must match the implementation in aztec-nr/aztec/src/event/event_interface.nr > compute_private_serialized_event_commitment
|
|
105
|
+
*/ export function computePrivateEventCommitment(randomness, eventSelector, content) {
|
|
106
|
+
return poseidon2HashWithSeparator([
|
|
107
|
+
randomness,
|
|
108
|
+
eventSelector,
|
|
109
|
+
...content
|
|
110
|
+
], DomainSeparator.EVENT_COMMITMENT);
|
|
111
|
+
}
|
|
98
112
|
export function computeSiloedPrivateLogFirstField(contract, field) {
|
|
99
113
|
return poseidon2HashWithSeparator([
|
|
100
114
|
contract,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/stdlib",
|
|
3
|
-
"version": "4.3.0-nightly.
|
|
3
|
+
"version": "4.3.0-nightly.20260421",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"inherits": [
|
|
6
6
|
"../package.common.json",
|
|
@@ -90,14 +90,14 @@
|
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
92
|
"@aws-sdk/client-s3": "^3.892.0",
|
|
93
|
-
"@aztec/bb.js": "4.3.0-nightly.
|
|
94
|
-
"@aztec/blob-lib": "4.3.0-nightly.
|
|
95
|
-
"@aztec/constants": "4.3.0-nightly.
|
|
96
|
-
"@aztec/ethereum": "4.3.0-nightly.
|
|
97
|
-
"@aztec/foundation": "4.3.0-nightly.
|
|
98
|
-
"@aztec/l1-artifacts": "4.3.0-nightly.
|
|
99
|
-
"@aztec/noir-noirc_abi": "4.3.0-nightly.
|
|
100
|
-
"@aztec/validator-ha-signer": "4.3.0-nightly.
|
|
93
|
+
"@aztec/bb.js": "4.3.0-nightly.20260421",
|
|
94
|
+
"@aztec/blob-lib": "4.3.0-nightly.20260421",
|
|
95
|
+
"@aztec/constants": "4.3.0-nightly.20260421",
|
|
96
|
+
"@aztec/ethereum": "4.3.0-nightly.20260421",
|
|
97
|
+
"@aztec/foundation": "4.3.0-nightly.20260421",
|
|
98
|
+
"@aztec/l1-artifacts": "4.3.0-nightly.20260421",
|
|
99
|
+
"@aztec/noir-noirc_abi": "4.3.0-nightly.20260421",
|
|
100
|
+
"@aztec/validator-ha-signer": "4.3.0-nightly.20260421",
|
|
101
101
|
"@google-cloud/storage": "^7.15.0",
|
|
102
102
|
"axios": "^1.13.5",
|
|
103
103
|
"json-stringify-deterministic": "1.0.12",
|
package/src/abi/encoder.ts
CHANGED
|
@@ -106,13 +106,28 @@ class ArgumentEncoder {
|
|
|
106
106
|
this.flattened.push(new Fr(arg ? 1n : 0n));
|
|
107
107
|
break;
|
|
108
108
|
case 'array':
|
|
109
|
+
if (!Array.isArray(arg)) {
|
|
110
|
+
throw new Error(`Expected array for '${name ?? 'unnamed'}' but received ${typeof arg}`);
|
|
111
|
+
}
|
|
112
|
+
if (arg.length !== abiType.length) {
|
|
113
|
+
throw new Error(
|
|
114
|
+
`Expected array of length ${abiType.length} for '${name ?? 'unnamed'}' but received length ${arg.length}`,
|
|
115
|
+
);
|
|
116
|
+
}
|
|
109
117
|
for (let i = 0; i < abiType.length; i += 1) {
|
|
110
118
|
this.encodeArgument(abiType.type, arg[i], `${name}[${i}]`);
|
|
111
119
|
}
|
|
112
120
|
break;
|
|
113
121
|
case 'string':
|
|
122
|
+
if (typeof arg !== 'string') {
|
|
123
|
+
throw new Error(`Expected string for '${name ?? 'unnamed'}' but received ${typeof arg}`);
|
|
124
|
+
}
|
|
125
|
+
if (arg.length > abiType.length) {
|
|
126
|
+
throw new Error(
|
|
127
|
+
`Expected string of max length ${abiType.length} for '${name ?? 'unnamed'}' but received length ${arg.length}`,
|
|
128
|
+
);
|
|
129
|
+
}
|
|
114
130
|
for (let i = 0; i < abiType.length; i += 1) {
|
|
115
|
-
// If the string is shorter than the defined length, pad it with 0s.
|
|
116
131
|
const toInsert = i < arg.length ? BigInt((arg as string).charCodeAt(i)) : 0n;
|
|
117
132
|
this.flattened.push(new Fr(toInsert));
|
|
118
133
|
}
|
|
@@ -157,12 +172,28 @@ class ArgumentEncoder {
|
|
|
157
172
|
}
|
|
158
173
|
case 'integer': {
|
|
159
174
|
const value = BigInt(arg);
|
|
160
|
-
if (abiType.sign === '
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
175
|
+
if (abiType.sign === 'unsigned') {
|
|
176
|
+
const maxValue = (1n << BigInt(abiType.width)) - 1n;
|
|
177
|
+
if (value < 0n || value > maxValue) {
|
|
178
|
+
throw new Error(
|
|
179
|
+
`Value ${value} does not fit in u${abiType.width} for '${name ?? 'unnamed'}' (valid range: 0 to ${maxValue})`,
|
|
180
|
+
);
|
|
181
|
+
}
|
|
165
182
|
this.flattened.push(new Fr(value));
|
|
183
|
+
} else {
|
|
184
|
+
const minValue = -(1n << BigInt(abiType.width - 1));
|
|
185
|
+
const maxValue = (1n << BigInt(abiType.width - 1)) - 1n;
|
|
186
|
+
if (value < minValue || value > maxValue) {
|
|
187
|
+
throw new Error(
|
|
188
|
+
`Value ${value} does not fit in i${abiType.width} for '${name ?? 'unnamed'}' (valid range: ${minValue} to ${maxValue})`,
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
if (value < 0n) {
|
|
192
|
+
const twosComplement = value + (1n << BigInt(abiType.width));
|
|
193
|
+
this.flattened.push(new Fr(twosComplement));
|
|
194
|
+
} else {
|
|
195
|
+
this.flattened.push(new Fr(value));
|
|
196
|
+
}
|
|
166
197
|
}
|
|
167
198
|
break;
|
|
168
199
|
}
|
|
@@ -176,6 +207,11 @@ class ArgumentEncoder {
|
|
|
176
207
|
* @returns The encoded arguments.
|
|
177
208
|
*/
|
|
178
209
|
public encode() {
|
|
210
|
+
if (this.args.length !== this.abi.parameters.length) {
|
|
211
|
+
throw new Error(
|
|
212
|
+
`Function '${this.abi.name}' expects ${this.abi.parameters.length} argument(s) but received ${this.args.length}`,
|
|
213
|
+
);
|
|
214
|
+
}
|
|
179
215
|
for (let i = 0; i < this.abi.parameters.length; i += 1) {
|
|
180
216
|
const parameterAbi = this.abi.parameters[i];
|
|
181
217
|
this.encodeArgument(parameterAbi.type, this.args[i], parameterAbi.name);
|
package/src/hash/hash.ts
CHANGED
|
@@ -103,6 +103,18 @@ export function computeLogTag(rawTag: number | bigint | boolean | Fr | Buffer, d
|
|
|
103
103
|
return poseidon2HashWithSeparator([new Fr(rawTag)], domSep);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Computes the commitment of a private event from its preimage.
|
|
108
|
+
* @param randomness - Random value emitted alongside the event to prevent preimage brute-forcing.
|
|
109
|
+
* @param eventSelector - Event selector as an Fr.
|
|
110
|
+
* @param content - Serialized event content.
|
|
111
|
+
*
|
|
112
|
+
* @dev Must match the implementation in aztec-nr/aztec/src/event/event_interface.nr > compute_private_serialized_event_commitment
|
|
113
|
+
*/
|
|
114
|
+
export function computePrivateEventCommitment(randomness: Fr, eventSelector: Fr, content: Fr[]): Promise<Fr> {
|
|
115
|
+
return poseidon2HashWithSeparator([randomness, eventSelector, ...content], DomainSeparator.EVENT_COMMITMENT);
|
|
116
|
+
}
|
|
117
|
+
|
|
106
118
|
export function computeSiloedPrivateLogFirstField(contract: AztecAddress, field: Fr): Promise<Fr> {
|
|
107
119
|
return poseidon2HashWithSeparator([contract, field], DomainSeparator.PRIVATE_LOG_FIRST_FIELD);
|
|
108
120
|
}
|