@aztec/bb.js 3.0.0-nightly.20251115 → 3.0.0-nightly.20251119
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/build/amd64-linux/bb +0 -0
- package/build/amd64-linux/nodejs_module.node +0 -0
- package/build/amd64-macos/bb +0 -0
- package/build/amd64-macos/nodejs_module.node +0 -0
- package/build/arm64-linux/bb +0 -0
- package/build/arm64-linux/nodejs_module.node +0 -0
- package/build/arm64-macos/bb +0 -0
- package/build/arm64-macos/nodejs_module.node +0 -0
- package/dest/browser/barretenberg/backend.d.ts +9 -23
- package/dest/browser/barretenberg/backend.d.ts.map +1 -1
- package/dest/browser/barretenberg/backend.js +24 -84
- package/dest/browser/barretenberg/index.d.ts +1 -3
- package/dest/browser/barretenberg/index.d.ts.map +1 -1
- package/dest/browser/barretenberg/index.js +15 -24
- package/dest/browser/{bigint-array/index.d.ts → barretenberg/testing/bigint-buffer.d.ts} +1 -1
- package/dest/browser/barretenberg/testing/bigint-buffer.d.ts.map +1 -0
- package/dest/browser/barretenberg/testing/bigint-buffer.js +37 -0
- package/dest/browser/barretenberg/testing/fields.d.ts +16 -0
- package/dest/browser/barretenberg/testing/fields.d.ts.map +1 -0
- package/dest/browser/barretenberg/testing/fields.js +48 -0
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +1 -1
- package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +1 -1
- package/dest/browser/bb_backends/browser/platform.d.ts +4 -0
- package/dest/browser/bb_backends/browser/platform.d.ts.map +1 -0
- package/dest/browser/bb_backends/browser/platform.js +10 -0
- package/dest/browser/bb_backends/index.d.ts +8 -5
- package/dest/browser/bb_backends/index.d.ts.map +1 -1
- package/dest/browser/bb_backends/index.js +5 -5
- package/dest/browser/index.d.ts +1 -0
- package/dest/browser/index.d.ts.map +1 -1
- package/dest/browser/index.js +2 -1
- package/dest/node/barretenberg/backend.d.ts +9 -23
- package/dest/node/barretenberg/backend.d.ts.map +1 -1
- package/dest/node/barretenberg/backend.js +24 -84
- package/dest/node/barretenberg/blake2s.test.js +2 -2
- package/dest/node/barretenberg/index.d.ts +1 -3
- package/dest/node/barretenberg/index.d.ts.map +1 -1
- package/dest/node/barretenberg/index.js +15 -24
- package/dest/node/barretenberg/pedersen.test.js +2 -2
- package/dest/node/barretenberg/poseidon.bench.test.js +27 -68
- package/dest/node/barretenberg/poseidon.test.js +2 -2
- package/dest/node/{bigint-array/index.d.ts → barretenberg/testing/bigint-buffer.d.ts} +1 -1
- package/dest/node/barretenberg/testing/bigint-buffer.d.ts.map +1 -0
- package/dest/node/barretenberg/testing/bigint-buffer.js +37 -0
- package/dest/node/barretenberg/testing/fields.d.ts +16 -0
- package/dest/node/barretenberg/testing/fields.d.ts.map +1 -0
- package/dest/node/barretenberg/testing/fields.js +48 -0
- package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node/bb_backends/browser/platform.d.ts +4 -0
- package/dest/node/bb_backends/browser/platform.d.ts.map +1 -0
- package/dest/node/bb_backends/browser/platform.js +10 -0
- package/dest/node/bb_backends/index.d.ts +8 -5
- package/dest/node/bb_backends/index.d.ts.map +1 -1
- package/dest/node/bb_backends/index.js +5 -5
- package/dest/node/bb_backends/node/index.d.ts.map +1 -1
- package/dest/node/bb_backends/node/index.js +12 -4
- package/dest/node/bb_backends/node/native_shm.d.ts +2 -1
- package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -1
- package/dest/node/bb_backends/node/native_shm.js +50 -15
- package/dest/node/bb_backends/node/native_socket.d.ts +1 -1
- package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -1
- package/dest/node/bb_backends/node/native_socket.js +28 -19
- package/dest/node/index.d.ts +1 -0
- package/dest/node/index.d.ts.map +1 -1
- package/dest/node/index.js +2 -1
- package/dest/node-cjs/barretenberg/backend.d.ts +9 -23
- package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg/backend.js +30 -90
- package/dest/node-cjs/barretenberg/blake2s.test.js +6 -6
- package/dest/node-cjs/barretenberg/index.d.ts +1 -3
- package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
- package/dest/node-cjs/barretenberg/index.js +15 -24
- package/dest/node-cjs/barretenberg/pedersen.test.js +9 -9
- package/dest/node-cjs/barretenberg/poseidon.bench.test.js +36 -77
- package/dest/node-cjs/barretenberg/poseidon.test.js +4 -4
- package/dest/node-cjs/{bigint-array/index.d.ts → barretenberg/testing/bigint-buffer.d.ts} +1 -1
- package/dest/node-cjs/barretenberg/testing/bigint-buffer.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/testing/bigint-buffer.js +43 -0
- package/dest/node-cjs/barretenberg/testing/fields.d.ts +16 -0
- package/dest/node-cjs/barretenberg/testing/fields.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/testing/fields.js +52 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
- package/dest/node-cjs/bb_backends/browser/platform.d.ts +4 -0
- package/dest/node-cjs/bb_backends/browser/platform.d.ts.map +1 -0
- package/dest/node-cjs/bb_backends/browser/platform.js +15 -0
- package/dest/node-cjs/bb_backends/index.d.ts +8 -5
- package/dest/node-cjs/bb_backends/index.d.ts.map +1 -1
- package/dest/node-cjs/bb_backends/index.js +5 -5
- package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -1
- package/dest/node-cjs/bb_backends/node/index.js +12 -4
- package/dest/node-cjs/bb_backends/node/native_shm.d.ts +2 -1
- package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -1
- package/dest/node-cjs/bb_backends/node/native_shm.js +50 -15
- package/dest/node-cjs/bb_backends/node/native_socket.d.ts +1 -1
- package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -1
- package/dest/node-cjs/bb_backends/node/native_socket.js +28 -19
- package/dest/node-cjs/index.d.ts +1 -0
- package/dest/node-cjs/index.d.ts.map +1 -1
- package/dest/node-cjs/index.js +4 -2
- package/package.json +1 -1
- package/src/barretenberg/backend.ts +19 -97
- package/src/barretenberg/blake2s.test.ts +1 -1
- package/src/barretenberg/index.ts +14 -24
- package/src/barretenberg/pedersen.test.ts +1 -1
- package/src/barretenberg/poseidon.bench.test.ts +109 -156
- package/src/barretenberg/poseidon.test.ts +1 -1
- package/src/{types → barretenberg/testing}/fields.ts +12 -26
- package/src/bb_backends/browser/platform.ts +11 -0
- package/src/bb_backends/index.ts +8 -5
- package/src/bb_backends/node/index.ts +23 -3
- package/src/bb_backends/node/native_shm.ts +51 -14
- package/src/bb_backends/node/native_socket.ts +31 -17
- package/src/index.ts +2 -0
- package/dest/browser/bigint-array/index.d.ts.map +0 -1
- package/dest/browser/bigint-array/index.js +0 -37
- package/dest/browser/serialize/index.d.ts +0 -2
- package/dest/browser/serialize/index.d.ts.map +0 -1
- package/dest/browser/serialize/index.js +0 -2
- package/dest/browser/serialize/serialize.d.ts +0 -18
- package/dest/browser/serialize/serialize.d.ts.map +0 -1
- package/dest/browser/serialize/serialize.js +0 -72
- package/dest/browser/types/fields.d.ts +0 -23
- package/dest/browser/types/fields.d.ts.map +0 -1
- package/dest/browser/types/fields.js +0 -61
- package/dest/browser/types/index.d.ts +0 -3
- package/dest/browser/types/index.d.ts.map +0 -1
- package/dest/browser/types/index.js +0 -3
- package/dest/browser/types/point.d.ts +0 -18
- package/dest/browser/types/point.d.ts.map +0 -1
- package/dest/browser/types/point.js +0 -28
- package/dest/node/bigint-array/index.d.ts.map +0 -1
- package/dest/node/bigint-array/index.js +0 -37
- package/dest/node/serialize/index.d.ts +0 -2
- package/dest/node/serialize/index.d.ts.map +0 -1
- package/dest/node/serialize/index.js +0 -2
- package/dest/node/serialize/serialize.d.ts +0 -18
- package/dest/node/serialize/serialize.d.ts.map +0 -1
- package/dest/node/serialize/serialize.js +0 -72
- package/dest/node/types/fields.d.ts +0 -23
- package/dest/node/types/fields.d.ts.map +0 -1
- package/dest/node/types/fields.js +0 -61
- package/dest/node/types/index.d.ts +0 -3
- package/dest/node/types/index.d.ts.map +0 -1
- package/dest/node/types/index.js +0 -3
- package/dest/node/types/point.d.ts +0 -18
- package/dest/node/types/point.d.ts.map +0 -1
- package/dest/node/types/point.js +0 -28
- package/dest/node-cjs/bigint-array/index.d.ts.map +0 -1
- package/dest/node-cjs/bigint-array/index.js +0 -43
- package/dest/node-cjs/serialize/index.d.ts +0 -2
- package/dest/node-cjs/serialize/index.d.ts.map +0 -1
- package/dest/node-cjs/serialize/index.js +0 -5
- package/dest/node-cjs/serialize/serialize.d.ts +0 -18
- package/dest/node-cjs/serialize/serialize.d.ts.map +0 -1
- package/dest/node-cjs/serialize/serialize.js +0 -82
- package/dest/node-cjs/types/fields.d.ts +0 -23
- package/dest/node-cjs/types/fields.d.ts.map +0 -1
- package/dest/node-cjs/types/fields.js +0 -65
- package/dest/node-cjs/types/index.d.ts +0 -3
- package/dest/node-cjs/types/index.d.ts.map +0 -1
- package/dest/node-cjs/types/index.js +0 -6
- package/dest/node-cjs/types/point.d.ts +0 -18
- package/dest/node-cjs/types/point.d.ts.map +0 -1
- package/dest/node-cjs/types/point.js +0 -32
- package/src/serialize/index.ts +0 -1
- package/src/serialize/serialize.ts +0 -75
- package/src/types/index.ts +0 -2
- package/src/types/point.ts +0 -32
- /package/src/{bigint-array/index.ts → barretenberg/testing/bigint-buffer.ts} +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Barretenberg } from './index.js';
|
|
2
2
|
import { ProofData, uint8ArrayToHex, hexToUint8Array } from '../proof/index.js';
|
|
3
3
|
import { fromChonkProof, toChonkProof } from '../cbind/generated/api_types.js';
|
|
4
4
|
import { ungzip } from 'pako';
|
|
5
|
-
import { Buffer } from 'buffer';
|
|
6
5
|
import { Decoder, Encoder } from 'msgpackr';
|
|
7
6
|
|
|
8
7
|
export class AztecClientBackendError extends Error {
|
|
@@ -58,29 +57,12 @@ function getProofSettingsFromOptions(options?: UltraHonkBackendOptions): {
|
|
|
58
57
|
}
|
|
59
58
|
|
|
60
59
|
export class UltraHonkVerifierBackend {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
constructor(
|
|
64
|
-
protected backendOptions: BackendOptions = { threads: 1 },
|
|
65
|
-
protected circuitOptions: CircuitOptions = { recursive: false },
|
|
66
|
-
) {}
|
|
67
|
-
/** @ignore */
|
|
68
|
-
private async instantiate(): Promise<void> {
|
|
69
|
-
if (!this.api) {
|
|
70
|
-
const api = await Barretenberg.new(this.backendOptions);
|
|
71
|
-
const honkRecursion = true;
|
|
72
|
-
await api.initSRSForCircuitSize(0);
|
|
73
|
-
|
|
74
|
-
this.api = api;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
60
|
+
constructor(private api: Barretenberg) {}
|
|
77
61
|
|
|
78
62
|
async verifyProof(
|
|
79
63
|
proofData: ProofData & { verificationKey: Uint8Array },
|
|
80
64
|
options?: UltraHonkBackendOptions,
|
|
81
65
|
): Promise<boolean> {
|
|
82
|
-
await this.instantiate();
|
|
83
|
-
|
|
84
66
|
const proofFrs: Uint8Array[] = [];
|
|
85
67
|
for (let i = 0; i < proofData.proof.length; i += 32) {
|
|
86
68
|
proofFrs.push(proofData.proof.slice(i, i + 32));
|
|
@@ -93,12 +75,6 @@ export class UltraHonkVerifierBackend {
|
|
|
93
75
|
});
|
|
94
76
|
return verified;
|
|
95
77
|
}
|
|
96
|
-
destroy(): Promise<void> {
|
|
97
|
-
if (!this.api) {
|
|
98
|
-
return Promise.resolve();
|
|
99
|
-
}
|
|
100
|
-
return this.api.destroy();
|
|
101
|
-
}
|
|
102
78
|
}
|
|
103
79
|
|
|
104
80
|
export class UltraHonkBackend {
|
|
@@ -107,37 +83,23 @@ export class UltraHonkBackend {
|
|
|
107
83
|
// These are initialized asynchronously in the `init` function,
|
|
108
84
|
// constructors cannot be asynchronous which is why we do this.
|
|
109
85
|
|
|
110
|
-
|
|
111
|
-
protected acirUncompressedBytecode: Uint8Array;
|
|
86
|
+
private acirUncompressedBytecode: Uint8Array;
|
|
112
87
|
|
|
113
88
|
constructor(
|
|
114
89
|
acirBytecode: string,
|
|
115
|
-
|
|
116
|
-
protected circuitOptions: CircuitOptions = { recursive: false },
|
|
90
|
+
private api: Barretenberg,
|
|
117
91
|
) {
|
|
118
92
|
this.acirUncompressedBytecode = acirToUint8Array(acirBytecode);
|
|
119
93
|
}
|
|
120
|
-
/** @ignore */
|
|
121
|
-
private async instantiate(): Promise<void> {
|
|
122
|
-
if (!this.api) {
|
|
123
|
-
const api = await Barretenberg.new(this.backendOptions);
|
|
124
|
-
const honkRecursion = true;
|
|
125
|
-
await api.acirInitSRS(this.acirUncompressedBytecode, this.circuitOptions.recursive, honkRecursion);
|
|
126
|
-
|
|
127
|
-
this.api = api;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
94
|
|
|
131
95
|
async generateProof(compressedWitness: Uint8Array, options?: UltraHonkBackendOptions): Promise<ProofData> {
|
|
132
|
-
await this.instantiate();
|
|
133
|
-
|
|
134
96
|
const witness = ungzip(compressedWitness);
|
|
135
97
|
const { proof, publicInputs } = await this.api.circuitProve({
|
|
136
98
|
witness,
|
|
137
99
|
circuit: {
|
|
138
100
|
name: 'circuit',
|
|
139
|
-
bytecode:
|
|
140
|
-
verificationKey:
|
|
101
|
+
bytecode: this.acirUncompressedBytecode,
|
|
102
|
+
verificationKey: new Uint8Array(0), // Empty VK - lower performance.
|
|
141
103
|
},
|
|
142
104
|
settings: getProofSettingsFromOptions(options),
|
|
143
105
|
});
|
|
@@ -153,8 +115,6 @@ export class UltraHonkBackend {
|
|
|
153
115
|
}
|
|
154
116
|
|
|
155
117
|
async verifyProof(proofData: ProofData, options?: UltraHonkBackendOptions): Promise<boolean> {
|
|
156
|
-
await this.instantiate();
|
|
157
|
-
|
|
158
118
|
const proofFrs: Uint8Array[] = [];
|
|
159
119
|
for (let i = 0; i < proofData.proof.length; i += 32) {
|
|
160
120
|
proofFrs.push(proofData.proof.slice(i, i + 32));
|
|
@@ -177,12 +137,10 @@ export class UltraHonkBackend {
|
|
|
177
137
|
}
|
|
178
138
|
|
|
179
139
|
async getVerificationKey(options?: UltraHonkBackendOptions): Promise<Uint8Array> {
|
|
180
|
-
await this.instantiate();
|
|
181
|
-
|
|
182
140
|
const vkResult = await this.api.circuitComputeVk({
|
|
183
141
|
circuit: {
|
|
184
142
|
name: 'circuit',
|
|
185
|
-
bytecode:
|
|
143
|
+
bytecode: this.acirUncompressedBytecode,
|
|
186
144
|
},
|
|
187
145
|
settings: getProofSettingsFromOptions(options),
|
|
188
146
|
});
|
|
@@ -191,7 +149,6 @@ export class UltraHonkBackend {
|
|
|
191
149
|
|
|
192
150
|
/** @description Returns a solidity verifier */
|
|
193
151
|
async getSolidityVerifier(vk: Uint8Array, options?: UltraHonkBackendOptions): Promise<string> {
|
|
194
|
-
await this.instantiate();
|
|
195
152
|
const result = await this.api.circuitWriteSolidityVerifier({
|
|
196
153
|
verificationKey: vk,
|
|
197
154
|
settings: getProofSettingsFromOptions(options),
|
|
@@ -206,7 +163,6 @@ export class UltraHonkBackend {
|
|
|
206
163
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
207
164
|
_numOfPublicInputs: number,
|
|
208
165
|
): Promise<{ proofAsFields: string[]; vkAsFields: string[]; vkHash: string }> {
|
|
209
|
-
await this.instantiate();
|
|
210
166
|
// TODO(https://github.com/noir-lang/noir/issues/5661): This needs to be updated to handle recursive aggregation.
|
|
211
167
|
// There is still a proofAsFields method but we could consider getting rid of it as the proof itself
|
|
212
168
|
// is a list of field elements.
|
|
@@ -220,7 +176,7 @@ export class UltraHonkBackend {
|
|
|
220
176
|
const vkResult = await this.api.circuitComputeVk({
|
|
221
177
|
circuit: {
|
|
222
178
|
name: 'circuit',
|
|
223
|
-
bytecode:
|
|
179
|
+
bytecode: this.acirUncompressedBytecode,
|
|
224
180
|
},
|
|
225
181
|
settings: getProofSettingsFromOptions({}),
|
|
226
182
|
});
|
|
@@ -242,13 +198,6 @@ export class UltraHonkBackend {
|
|
|
242
198
|
vkHash: uint8ArrayToHex(vkResult.hash),
|
|
243
199
|
};
|
|
244
200
|
}
|
|
245
|
-
|
|
246
|
-
async destroy(): Promise<void> {
|
|
247
|
-
if (!this.api) {
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
await this.api.destroy();
|
|
251
|
-
}
|
|
252
201
|
}
|
|
253
202
|
|
|
254
203
|
export class AztecClientBackend {
|
|
@@ -257,22 +206,11 @@ export class AztecClientBackend {
|
|
|
257
206
|
// These are initialized asynchronously in the `init` function,
|
|
258
207
|
// constructors cannot be asynchronous which is why we do this.
|
|
259
208
|
|
|
260
|
-
protected api!: Barretenberg;
|
|
261
|
-
|
|
262
209
|
constructor(
|
|
263
|
-
|
|
264
|
-
|
|
210
|
+
private acirBuf: Uint8Array[],
|
|
211
|
+
private api: Barretenberg,
|
|
265
212
|
) {}
|
|
266
213
|
|
|
267
|
-
/** @ignore */
|
|
268
|
-
private async instantiate(): Promise<void> {
|
|
269
|
-
if (!this.api) {
|
|
270
|
-
const api = await Barretenberg.new(this.options);
|
|
271
|
-
await api.initSRSChonk();
|
|
272
|
-
this.api = api;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
214
|
async prove(witnessBuf: Uint8Array[], vksBuf: Uint8Array[] = []): Promise<[Uint8Array[], Uint8Array, Uint8Array]> {
|
|
277
215
|
if (vksBuf.length !== 0 && this.acirBuf.length !== witnessBuf.length) {
|
|
278
216
|
throw new AztecClientBackendError('Witness and bytecodes must have the same stack depth!');
|
|
@@ -281,7 +219,6 @@ export class AztecClientBackend {
|
|
|
281
219
|
// NOTE: we allow 0 as an explicit 'I have no VKs'. This is a deprecated feature.
|
|
282
220
|
throw new AztecClientBackendError('Witness and VKs must have the same stack depth!');
|
|
283
221
|
}
|
|
284
|
-
await this.instantiate();
|
|
285
222
|
|
|
286
223
|
// Queue IVC start with the number of circuits
|
|
287
224
|
this.api.chonkStart({ numCircuits: this.acirBuf.length });
|
|
@@ -289,22 +226,22 @@ export class AztecClientBackend {
|
|
|
289
226
|
// Queue load and accumulate for each circuit
|
|
290
227
|
for (let i = 0; i < this.acirBuf.length; i++) {
|
|
291
228
|
const bytecode = this.acirBuf[i];
|
|
292
|
-
const witness = witnessBuf[i] ||
|
|
293
|
-
const vk = vksBuf[i] ||
|
|
229
|
+
const witness = witnessBuf[i] || new Uint8Array(0);
|
|
230
|
+
const vk = vksBuf[i] || new Uint8Array(0);
|
|
294
231
|
const functionName = `unknown_wasm_${i}`;
|
|
295
232
|
|
|
296
233
|
// Load the circuit
|
|
297
234
|
this.api.chonkLoad({
|
|
298
235
|
circuit: {
|
|
299
236
|
name: functionName,
|
|
300
|
-
bytecode:
|
|
301
|
-
verificationKey:
|
|
237
|
+
bytecode: bytecode,
|
|
238
|
+
verificationKey: vk,
|
|
302
239
|
},
|
|
303
240
|
});
|
|
304
241
|
|
|
305
242
|
// Accumulate with witness
|
|
306
243
|
this.api.chonkAccumulate({
|
|
307
|
-
witness
|
|
244
|
+
witness,
|
|
308
245
|
});
|
|
309
246
|
}
|
|
310
247
|
|
|
@@ -336,16 +273,14 @@ export class AztecClientBackend {
|
|
|
336
273
|
}
|
|
337
274
|
|
|
338
275
|
async verify(proof: Uint8Array, vk: Uint8Array): Promise<boolean> {
|
|
339
|
-
await this.instantiate();
|
|
340
276
|
const result = await this.api.chonkVerify({
|
|
341
277
|
proof: toChonkProof(new Decoder({ useRecords: false }).decode(proof)),
|
|
342
|
-
vk
|
|
278
|
+
vk,
|
|
343
279
|
});
|
|
344
280
|
return result.valid;
|
|
345
281
|
}
|
|
346
282
|
|
|
347
283
|
async gates(): Promise<number[]> {
|
|
348
|
-
await this.instantiate();
|
|
349
284
|
const circuitSizes: number[] = [];
|
|
350
285
|
for (const buf of this.acirBuf) {
|
|
351
286
|
const gates = await this.api.chonkStats({
|
|
@@ -359,13 +294,6 @@ export class AztecClientBackend {
|
|
|
359
294
|
}
|
|
360
295
|
return circuitSizes;
|
|
361
296
|
}
|
|
362
|
-
|
|
363
|
-
async destroy(): Promise<void> {
|
|
364
|
-
if (!this.api) {
|
|
365
|
-
return;
|
|
366
|
-
}
|
|
367
|
-
await this.api.destroy();
|
|
368
|
-
}
|
|
369
297
|
}
|
|
370
298
|
|
|
371
299
|
// Converts bytecode from a base64 string to a Uint8Array
|
|
@@ -374,17 +302,11 @@ function acirToUint8Array(base64EncodedBytecode: string): Uint8Array {
|
|
|
374
302
|
return ungzip(compressedByteCode);
|
|
375
303
|
}
|
|
376
304
|
|
|
377
|
-
//
|
|
378
|
-
// see if we are in the nodeJs environment or the browser environment.
|
|
305
|
+
// Base64 decode using atob (works in both browser and Node.js 18+)
|
|
379
306
|
function base64Decode(input: string): Uint8Array {
|
|
380
|
-
if (typeof
|
|
381
|
-
// Node.js environment
|
|
382
|
-
const b = Buffer.from(input, 'base64');
|
|
383
|
-
return new Uint8Array(b.buffer, b.byteOffset, b.byteLength);
|
|
384
|
-
} else if (typeof atob === 'function') {
|
|
385
|
-
// Browser environment
|
|
307
|
+
if (typeof atob === 'function') {
|
|
386
308
|
return Uint8Array.from(atob(input), c => c.charCodeAt(0));
|
|
387
309
|
} else {
|
|
388
|
-
throw new Error('
|
|
310
|
+
throw new Error('atob is not available. Node.js 18+ or browser required.');
|
|
389
311
|
}
|
|
390
312
|
}
|
|
@@ -31,7 +31,7 @@ export class Barretenberg extends AsyncApi {
|
|
|
31
31
|
*
|
|
32
32
|
* If options.backend is set: uses that specific backend (throws if unavailable)
|
|
33
33
|
* If options.backend is unset: tries backends in order with fallback:
|
|
34
|
-
* 1.
|
|
34
|
+
* 1. NativeUnixSocket (if bb binary available)
|
|
35
35
|
* 2. WasmWorker (in browser) or Wasm (in Node.js)
|
|
36
36
|
*/
|
|
37
37
|
static async new(options: BackendOptions = {}) {
|
|
@@ -39,35 +39,30 @@ export class Barretenberg extends AsyncApi {
|
|
|
39
39
|
|
|
40
40
|
if (options.backend) {
|
|
41
41
|
// Explicit backend required - no fallback
|
|
42
|
-
|
|
42
|
+
const backend = await createAsyncBackend(options.backend, options, logger);
|
|
43
|
+
if (options.backend === BackendType.Wasm || options.backend === BackendType.WasmWorker) {
|
|
44
|
+
await backend.initSRSChonk();
|
|
45
|
+
}
|
|
46
|
+
return backend;
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
if (typeof window === 'undefined') {
|
|
46
50
|
try {
|
|
47
|
-
return await createAsyncBackend(BackendType.
|
|
51
|
+
return await createAsyncBackend(BackendType.NativeUnixSocket, options, logger);
|
|
48
52
|
} catch (err: any) {
|
|
49
|
-
logger(`
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
logger(`Unix socket unavailable (${err.message}), falling back to WASM`);
|
|
54
|
-
return await createAsyncBackend(BackendType.Wasm, options, logger);
|
|
55
|
-
}
|
|
53
|
+
logger(`Unix socket unavailable (${err.message}), falling back to WASM`);
|
|
54
|
+
const backend = await createAsyncBackend(BackendType.Wasm, options, logger);
|
|
55
|
+
await backend.initSRSChonk();
|
|
56
|
+
return backend;
|
|
56
57
|
}
|
|
57
58
|
} else {
|
|
58
59
|
logger(`In browser, using WASM over worker backend.`);
|
|
59
|
-
|
|
60
|
+
const backend = await createAsyncBackend(BackendType.WasmWorker, options, logger);
|
|
61
|
+
await backend.initSRSChonk();
|
|
62
|
+
return backend;
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
|
|
63
|
-
async initSRSForCircuitSize(circuitSize: number): Promise<void> {
|
|
64
|
-
const minSRSSize = 2 ** 9; // 2**9 is the dyadic size for the SmallSubgroupIPA MSM.
|
|
65
|
-
const crs = await Crs.new(Math.max(circuitSize, minSRSSize) + 1, this.options.crsPath, this.options.logger);
|
|
66
|
-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1129): Do slab allocator initialization?
|
|
67
|
-
// await this.commonInitSlabAllocator(circuitSize);
|
|
68
|
-
await this.srsInitSrs({ pointsBuf: crs.getG1Data(), numPoints: crs.numPoints, g2Point: crs.getG2Data() });
|
|
69
|
-
}
|
|
70
|
-
|
|
71
66
|
async initSRSChonk(srsSize = this.getDefaultSrsSize()): Promise<void> {
|
|
72
67
|
// crsPath can be undefined
|
|
73
68
|
const crs = await Crs.new(srsSize + 1, this.options.crsPath, this.options.logger);
|
|
@@ -106,11 +101,6 @@ export class Barretenberg extends AsyncApi {
|
|
|
106
101
|
return [response.numGates, response.numGatesDyadic];
|
|
107
102
|
}
|
|
108
103
|
|
|
109
|
-
async acirInitSRS(bytecode: Uint8Array, recursive: boolean, honkRecursion: boolean): Promise<void> {
|
|
110
|
-
const [_, subgroupSize] = await this.acirGetCircuitSizes(bytecode, recursive, honkRecursion);
|
|
111
|
-
return this.initSRSForCircuitSize(subgroupSize);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
104
|
async destroy() {
|
|
115
105
|
return super.destroy();
|
|
116
106
|
}
|