@aztec/bb.js 0.80.0 → 0.81.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.
- package/dest/browser/barretenberg/backend.d.ts.map +1 -1
- package/dest/browser/barretenberg-threads.js +1 -1
- package/dest/browser/barretenberg.js +1 -1
- package/dest/browser/index.js +20 -28
- package/dest/browser/proof/index.d.ts +1 -1
- package/dest/browser/proof/index.d.ts.map +1 -1
- package/dest/node/barretenberg/backend.d.ts.map +1 -1
- package/dest/node/barretenberg/backend.js +25 -24
- package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node/proof/index.d.ts +1 -1
- package/dest/node/proof/index.d.ts.map +1 -1
- package/dest/node/proof/index.js +7 -12
- package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg/backend.js +25 -24
- package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node-cjs/proof/index.d.ts +1 -1
- package/dest/node-cjs/proof/index.d.ts.map +1 -1
- package/dest/node-cjs/proof/index.js +7 -12
- package/package.json +1 -1
- package/src/barretenberg/backend.ts +29 -29
- package/src/proof/index.ts +9 -13
|
@@ -4,21 +4,16 @@ exports.flattenFieldsAsArray = exports.deflattenFields = exports.reconstructUltr
|
|
|
4
4
|
// Buffers are prepended with their size. The size takes 4 bytes.
|
|
5
5
|
const serializedBufferSize = 4;
|
|
6
6
|
const fieldByteSize = 32;
|
|
7
|
-
|
|
8
|
-
const publicInputsOffsetBytes = publicInputOffset * fieldByteSize;
|
|
9
|
-
function splitHonkProof(proofWithPublicInputs) {
|
|
10
|
-
const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(4));
|
|
11
|
-
const numPublicInputs = Number(proofAsStrings[1]);
|
|
7
|
+
function splitHonkProof(proofWithPublicInputs, numPublicInputs) {
|
|
12
8
|
// Account for the serialized buffer size at start
|
|
13
|
-
const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize;
|
|
14
9
|
// Get the part before and after the public inputs
|
|
15
|
-
const proofStart = proofWithPublicInputs.slice(0,
|
|
10
|
+
const proofStart = proofWithPublicInputs.slice(0, serializedBufferSize);
|
|
16
11
|
const publicInputsSplitIndex = numPublicInputs * fieldByteSize;
|
|
17
|
-
const proofEnd = proofWithPublicInputs.slice(
|
|
12
|
+
const proofEnd = proofWithPublicInputs.slice(serializedBufferSize + publicInputsSplitIndex);
|
|
18
13
|
// Construct the proof without the public inputs
|
|
19
14
|
const proof = new Uint8Array([...proofStart, ...proofEnd]);
|
|
20
15
|
// Fetch the number of public inputs out of the proof string
|
|
21
|
-
const publicInputs = proofWithPublicInputs.slice(
|
|
16
|
+
const publicInputs = proofWithPublicInputs.slice(serializedBufferSize, serializedBufferSize + publicInputsSplitIndex);
|
|
22
17
|
return {
|
|
23
18
|
proof,
|
|
24
19
|
publicInputs,
|
|
@@ -26,8 +21,8 @@ function splitHonkProof(proofWithPublicInputs) {
|
|
|
26
21
|
}
|
|
27
22
|
exports.splitHonkProof = splitHonkProof;
|
|
28
23
|
function reconstructHonkProof(publicInputs, proof) {
|
|
29
|
-
const proofStart = proof.slice(0,
|
|
30
|
-
const proofEnd = proof.slice(
|
|
24
|
+
const proofStart = proof.slice(0, serializedBufferSize);
|
|
25
|
+
const proofEnd = proof.slice(serializedBufferSize);
|
|
31
26
|
// Concatenate publicInputs and proof
|
|
32
27
|
const proofWithPublicInputs = Uint8Array.from([...proofStart, ...publicInputs, ...proofEnd]);
|
|
33
28
|
return proofWithPublicInputs;
|
|
@@ -90,4 +85,4 @@ function hexToUint8Array(hex) {
|
|
|
90
85
|
}
|
|
91
86
|
return u8;
|
|
92
87
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvb2YvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBc0JBLGlFQUFpRTtBQUNqRSxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFFekIsU0FBZ0IsY0FBYyxDQUM1QixxQkFBaUMsRUFDakMsZUFBdUI7SUFFdkIsa0RBQWtEO0lBQ2xELGtEQUFrRDtJQUNsRCxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDeEUsTUFBTSxzQkFBc0IsR0FBRyxlQUFlLEdBQUcsYUFBYSxDQUFDO0lBQy9ELE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzVGLGdEQUFnRDtJQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUUzRCw0REFBNEQ7SUFDNUQsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixHQUFHLHNCQUFzQixDQUFDLENBQUM7SUFFdEgsT0FBTztRQUNMLEtBQUs7UUFDTCxZQUFZO0tBQ2IsQ0FBQztBQUNKLENBQUM7QUFuQkQsd0NBbUJDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsWUFBd0IsRUFBRSxLQUFpQjtJQUM5RSxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUVuRCxxQ0FBcUM7SUFDckMsTUFBTSxxQkFBcUIsR0FB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
|
package/package.json
CHANGED
|
@@ -157,8 +157,6 @@ export class UltraPlonkBackend {
|
|
|
157
157
|
// Buffers are prepended with their size. The size takes 4 bytes.
|
|
158
158
|
const serializedBufferSize = 4;
|
|
159
159
|
const fieldByteSize = 32;
|
|
160
|
-
const publicInputOffset = 3;
|
|
161
|
-
const publicInputsOffsetBytes = publicInputOffset * fieldByteSize;
|
|
162
160
|
|
|
163
161
|
/**
|
|
164
162
|
* Options for the UltraHonkBackend.
|
|
@@ -213,24 +211,31 @@ export class UltraHonkBackend {
|
|
|
213
211
|
gunzip(compressedWitness),
|
|
214
212
|
);
|
|
215
213
|
|
|
216
|
-
|
|
214
|
+
// Write VK to get the number of public inputs
|
|
215
|
+
const writeVKUltraHonk = options?.keccak
|
|
216
|
+
? this.api.acirWriteVkUltraKeccakHonk.bind(this.api)
|
|
217
|
+
: this.api.acirWriteVkUltraHonk.bind(this.api);
|
|
218
|
+
|
|
219
|
+
const vk = await writeVKUltraHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive);
|
|
220
|
+
const vkAsFields = await this.api.acirVkAsFieldsUltraHonk(new RawBuffer(vk));
|
|
221
|
+
|
|
222
|
+
// Item at index 1 in VK is the number of public inputs
|
|
223
|
+
const numPublicInputs = Number(vkAsFields[1].toString());
|
|
217
224
|
|
|
218
|
-
const numPublicInputs = Number(proofAsStrings[1]);
|
|
219
225
|
|
|
220
226
|
// Account for the serialized buffer size at start
|
|
221
|
-
const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize;
|
|
222
227
|
// Get the part before and after the public inputs
|
|
223
|
-
const proofStart = proofWithPublicInputs.slice(0,
|
|
228
|
+
const proofStart = proofWithPublicInputs.slice(0, serializedBufferSize);
|
|
224
229
|
const publicInputsSplitIndex = numPublicInputs * fieldByteSize;
|
|
225
|
-
const proofEnd = proofWithPublicInputs.slice(
|
|
230
|
+
const proofEnd = proofWithPublicInputs.slice(serializedBufferSize + publicInputsSplitIndex);
|
|
226
231
|
|
|
227
232
|
// Construct the proof without the public inputs
|
|
228
233
|
const proof = new Uint8Array([...proofStart, ...proofEnd]);
|
|
229
234
|
|
|
230
235
|
// Fetch the number of public inputs out of the proof string
|
|
231
236
|
const publicInputsConcatenated = proofWithPublicInputs.slice(
|
|
232
|
-
|
|
233
|
-
|
|
237
|
+
serializedBufferSize,
|
|
238
|
+
serializedBufferSize + publicInputsSplitIndex,
|
|
234
239
|
);
|
|
235
240
|
const publicInputs = deflattenFields(publicInputsConcatenated);
|
|
236
241
|
|
|
@@ -252,40 +257,35 @@ export class UltraHonkBackend {
|
|
|
252
257
|
this.circuitOptions.recursive,
|
|
253
258
|
gunzip(compressedWitness),
|
|
254
259
|
);
|
|
260
|
+
// Write VK to get the number of public inputs
|
|
261
|
+
const writeVKUltraHonk = options?.keccak
|
|
262
|
+
? this.api.acirWriteVkUltraKeccakHonk.bind(this.api)
|
|
263
|
+
: this.api.acirWriteVkUltraHonk.bind(this.api);
|
|
264
|
+
|
|
265
|
+
const vk = await writeVKUltraHonk(this.acirUncompressedBytecode, this.circuitOptions.recursive);
|
|
266
|
+
const vkAsFields = await this.api.acirVkAsFieldsUltraHonk(new RawBuffer(vk));
|
|
255
267
|
|
|
256
268
|
// proofWithPublicInputs starts with a four-byte size
|
|
257
269
|
const numSerdeHeaderBytes = 4;
|
|
258
270
|
// some public inputs are handled specially
|
|
259
271
|
const numKZGAccumulatorFieldElements = 16;
|
|
260
|
-
|
|
261
|
-
const numProofPreambleElements = 3;
|
|
262
|
-
const publicInputsSizeIndex = 1;
|
|
272
|
+
const publicInputsSizeIndex = 1; // index into VK for numPublicInputs
|
|
263
273
|
|
|
264
|
-
|
|
265
|
-
const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(numSerdeHeaderBytes));
|
|
266
|
-
const numPublicInputs = Number(proofAsStrings[publicInputsSizeIndex]) - numKZGAccumulatorFieldElements;
|
|
267
|
-
|
|
268
|
-
// Account for the serialized buffer size at start
|
|
269
|
-
const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize;
|
|
270
|
-
const publicInputsSplitIndex = numPublicInputs * fieldByteSize;
|
|
274
|
+
const numPublicInputs = Number(vkAsFields[publicInputsSizeIndex].toString()) - numKZGAccumulatorFieldElements;
|
|
271
275
|
|
|
272
276
|
// Construct the proof without the public inputs
|
|
273
277
|
const numPublicInputsBytes = numPublicInputs * fieldByteSize;
|
|
274
|
-
const numHeaderPlusPreambleBytes = numSerdeHeaderBytes + numProofPreambleElements * fieldByteSize;
|
|
275
278
|
const proofNoPIs = new Uint8Array(proofWithPublicInputs.length - numPublicInputsBytes);
|
|
276
279
|
// copy the elements before the public inputs
|
|
277
|
-
proofNoPIs.set(proofWithPublicInputs.subarray(0,
|
|
280
|
+
proofNoPIs.set(proofWithPublicInputs.subarray(0, numSerdeHeaderBytes), 0);
|
|
278
281
|
// copy the elements after the public inputs
|
|
279
|
-
proofNoPIs.set(
|
|
280
|
-
proofWithPublicInputs.subarray(numHeaderPlusPreambleBytes + numPublicInputsBytes),
|
|
281
|
-
numHeaderPlusPreambleBytes,
|
|
282
|
-
);
|
|
282
|
+
proofNoPIs.set(proofWithPublicInputs.subarray(numSerdeHeaderBytes + numPublicInputsBytes), numSerdeHeaderBytes);
|
|
283
283
|
const proof: string[] = deflattenFields(proofNoPIs.slice(numSerdeHeaderBytes));
|
|
284
284
|
|
|
285
285
|
// Fetch the number of public inputs out of the proof string
|
|
286
286
|
const publicInputsConcatenated = proofWithPublicInputs.slice(
|
|
287
|
-
|
|
288
|
-
|
|
287
|
+
serializedBufferSize,
|
|
288
|
+
serializedBufferSize + numPublicInputsBytes,
|
|
289
289
|
);
|
|
290
290
|
const publicInputs = deflattenFields(publicInputsConcatenated);
|
|
291
291
|
|
|
@@ -386,8 +386,8 @@ export class AztecClientBackend {
|
|
|
386
386
|
await this.instantiate();
|
|
387
387
|
const proofAndVk = await this.api.acirProveAztecClient(this.acirMsgpack, witnessMsgpack);
|
|
388
388
|
const [proof, vk] = proofAndVk;
|
|
389
|
-
if (!await this.verify(proof, vk)) {
|
|
390
|
-
throw new AztecClientBackendError(
|
|
389
|
+
if (!(await this.verify(proof, vk))) {
|
|
390
|
+
throw new AztecClientBackendError('Failed to verify the private (ClientIVC) transaction proof!');
|
|
391
391
|
}
|
|
392
392
|
return proofAndVk;
|
|
393
393
|
}
|
package/src/proof/index.ts
CHANGED
|
@@ -23,25 +23,21 @@ export type ProofDataForRecursion = {
|
|
|
23
23
|
// Buffers are prepended with their size. The size takes 4 bytes.
|
|
24
24
|
const serializedBufferSize = 4;
|
|
25
25
|
const fieldByteSize = 32;
|
|
26
|
-
const publicInputOffset = 3;
|
|
27
|
-
const publicInputsOffsetBytes = publicInputOffset * fieldByteSize;
|
|
28
|
-
|
|
29
|
-
export function splitHonkProof(proofWithPublicInputs: Uint8Array): { publicInputs: Uint8Array; proof: Uint8Array } {
|
|
30
|
-
const proofAsStrings = deflattenFields(proofWithPublicInputs.slice(4));
|
|
31
|
-
|
|
32
|
-
const numPublicInputs = Number(proofAsStrings[1]);
|
|
33
26
|
|
|
27
|
+
export function splitHonkProof(
|
|
28
|
+
proofWithPublicInputs: Uint8Array,
|
|
29
|
+
numPublicInputs: number,
|
|
30
|
+
): { publicInputs: Uint8Array; proof: Uint8Array } {
|
|
34
31
|
// Account for the serialized buffer size at start
|
|
35
|
-
const publicInputsOffset = publicInputsOffsetBytes + serializedBufferSize;
|
|
36
32
|
// Get the part before and after the public inputs
|
|
37
|
-
const proofStart = proofWithPublicInputs.slice(0,
|
|
33
|
+
const proofStart = proofWithPublicInputs.slice(0, serializedBufferSize);
|
|
38
34
|
const publicInputsSplitIndex = numPublicInputs * fieldByteSize;
|
|
39
|
-
const proofEnd = proofWithPublicInputs.slice(
|
|
35
|
+
const proofEnd = proofWithPublicInputs.slice(serializedBufferSize + publicInputsSplitIndex);
|
|
40
36
|
// Construct the proof without the public inputs
|
|
41
37
|
const proof = new Uint8Array([...proofStart, ...proofEnd]);
|
|
42
38
|
|
|
43
39
|
// Fetch the number of public inputs out of the proof string
|
|
44
|
-
const publicInputs = proofWithPublicInputs.slice(
|
|
40
|
+
const publicInputs = proofWithPublicInputs.slice(serializedBufferSize, serializedBufferSize + publicInputsSplitIndex);
|
|
45
41
|
|
|
46
42
|
return {
|
|
47
43
|
proof,
|
|
@@ -50,8 +46,8 @@ export function splitHonkProof(proofWithPublicInputs: Uint8Array): { publicInput
|
|
|
50
46
|
}
|
|
51
47
|
|
|
52
48
|
export function reconstructHonkProof(publicInputs: Uint8Array, proof: Uint8Array): Uint8Array {
|
|
53
|
-
const proofStart = proof.slice(0,
|
|
54
|
-
const proofEnd = proof.slice(
|
|
49
|
+
const proofStart = proof.slice(0, serializedBufferSize);
|
|
50
|
+
const proofEnd = proof.slice(serializedBufferSize);
|
|
55
51
|
|
|
56
52
|
// Concatenate publicInputs and proof
|
|
57
53
|
const proofWithPublicInputs = Uint8Array.from([...proofStart, ...publicInputs, ...proofEnd]);
|