@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.
Files changed (169) hide show
  1. package/build/amd64-linux/bb +0 -0
  2. package/build/amd64-linux/nodejs_module.node +0 -0
  3. package/build/amd64-macos/bb +0 -0
  4. package/build/amd64-macos/nodejs_module.node +0 -0
  5. package/build/arm64-linux/bb +0 -0
  6. package/build/arm64-linux/nodejs_module.node +0 -0
  7. package/build/arm64-macos/bb +0 -0
  8. package/build/arm64-macos/nodejs_module.node +0 -0
  9. package/dest/browser/barretenberg/backend.d.ts +9 -23
  10. package/dest/browser/barretenberg/backend.d.ts.map +1 -1
  11. package/dest/browser/barretenberg/backend.js +24 -84
  12. package/dest/browser/barretenberg/index.d.ts +1 -3
  13. package/dest/browser/barretenberg/index.d.ts.map +1 -1
  14. package/dest/browser/barretenberg/index.js +15 -24
  15. package/dest/browser/{bigint-array/index.d.ts → barretenberg/testing/bigint-buffer.d.ts} +1 -1
  16. package/dest/browser/barretenberg/testing/bigint-buffer.d.ts.map +1 -0
  17. package/dest/browser/barretenberg/testing/bigint-buffer.js +37 -0
  18. package/dest/browser/barretenberg/testing/fields.d.ts +16 -0
  19. package/dest/browser/barretenberg/testing/fields.d.ts.map +1 -0
  20. package/dest/browser/barretenberg/testing/fields.js +48 -0
  21. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg-threads.js +1 -1
  22. package/dest/browser/barretenberg_wasm/fetch_code/browser/barretenberg.js +1 -1
  23. package/dest/browser/bb_backends/browser/platform.d.ts +4 -0
  24. package/dest/browser/bb_backends/browser/platform.d.ts.map +1 -0
  25. package/dest/browser/bb_backends/browser/platform.js +10 -0
  26. package/dest/browser/bb_backends/index.d.ts +8 -5
  27. package/dest/browser/bb_backends/index.d.ts.map +1 -1
  28. package/dest/browser/bb_backends/index.js +5 -5
  29. package/dest/browser/index.d.ts +1 -0
  30. package/dest/browser/index.d.ts.map +1 -1
  31. package/dest/browser/index.js +2 -1
  32. package/dest/node/barretenberg/backend.d.ts +9 -23
  33. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  34. package/dest/node/barretenberg/backend.js +24 -84
  35. package/dest/node/barretenberg/blake2s.test.js +2 -2
  36. package/dest/node/barretenberg/index.d.ts +1 -3
  37. package/dest/node/barretenberg/index.d.ts.map +1 -1
  38. package/dest/node/barretenberg/index.js +15 -24
  39. package/dest/node/barretenberg/pedersen.test.js +2 -2
  40. package/dest/node/barretenberg/poseidon.bench.test.js +27 -68
  41. package/dest/node/barretenberg/poseidon.test.js +2 -2
  42. package/dest/node/{bigint-array/index.d.ts → barretenberg/testing/bigint-buffer.d.ts} +1 -1
  43. package/dest/node/barretenberg/testing/bigint-buffer.d.ts.map +1 -0
  44. package/dest/node/barretenberg/testing/bigint-buffer.js +37 -0
  45. package/dest/node/barretenberg/testing/fields.d.ts +16 -0
  46. package/dest/node/barretenberg/testing/fields.d.ts.map +1 -0
  47. package/dest/node/barretenberg/testing/fields.js +48 -0
  48. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  49. package/dest/node/bb_backends/browser/platform.d.ts +4 -0
  50. package/dest/node/bb_backends/browser/platform.d.ts.map +1 -0
  51. package/dest/node/bb_backends/browser/platform.js +10 -0
  52. package/dest/node/bb_backends/index.d.ts +8 -5
  53. package/dest/node/bb_backends/index.d.ts.map +1 -1
  54. package/dest/node/bb_backends/index.js +5 -5
  55. package/dest/node/bb_backends/node/index.d.ts.map +1 -1
  56. package/dest/node/bb_backends/node/index.js +12 -4
  57. package/dest/node/bb_backends/node/native_shm.d.ts +2 -1
  58. package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -1
  59. package/dest/node/bb_backends/node/native_shm.js +50 -15
  60. package/dest/node/bb_backends/node/native_socket.d.ts +1 -1
  61. package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -1
  62. package/dest/node/bb_backends/node/native_socket.js +28 -19
  63. package/dest/node/index.d.ts +1 -0
  64. package/dest/node/index.d.ts.map +1 -1
  65. package/dest/node/index.js +2 -1
  66. package/dest/node-cjs/barretenberg/backend.d.ts +9 -23
  67. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  68. package/dest/node-cjs/barretenberg/backend.js +30 -90
  69. package/dest/node-cjs/barretenberg/blake2s.test.js +6 -6
  70. package/dest/node-cjs/barretenberg/index.d.ts +1 -3
  71. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  72. package/dest/node-cjs/barretenberg/index.js +15 -24
  73. package/dest/node-cjs/barretenberg/pedersen.test.js +9 -9
  74. package/dest/node-cjs/barretenberg/poseidon.bench.test.js +36 -77
  75. package/dest/node-cjs/barretenberg/poseidon.test.js +4 -4
  76. package/dest/node-cjs/{bigint-array/index.d.ts → barretenberg/testing/bigint-buffer.d.ts} +1 -1
  77. package/dest/node-cjs/barretenberg/testing/bigint-buffer.d.ts.map +1 -0
  78. package/dest/node-cjs/barretenberg/testing/bigint-buffer.js +43 -0
  79. package/dest/node-cjs/barretenberg/testing/fields.d.ts +16 -0
  80. package/dest/node-cjs/barretenberg/testing/fields.d.ts.map +1 -0
  81. package/dest/node-cjs/barretenberg/testing/fields.js +52 -0
  82. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  83. package/dest/node-cjs/bb_backends/browser/platform.d.ts +4 -0
  84. package/dest/node-cjs/bb_backends/browser/platform.d.ts.map +1 -0
  85. package/dest/node-cjs/bb_backends/browser/platform.js +15 -0
  86. package/dest/node-cjs/bb_backends/index.d.ts +8 -5
  87. package/dest/node-cjs/bb_backends/index.d.ts.map +1 -1
  88. package/dest/node-cjs/bb_backends/index.js +5 -5
  89. package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -1
  90. package/dest/node-cjs/bb_backends/node/index.js +12 -4
  91. package/dest/node-cjs/bb_backends/node/native_shm.d.ts +2 -1
  92. package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -1
  93. package/dest/node-cjs/bb_backends/node/native_shm.js +50 -15
  94. package/dest/node-cjs/bb_backends/node/native_socket.d.ts +1 -1
  95. package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -1
  96. package/dest/node-cjs/bb_backends/node/native_socket.js +28 -19
  97. package/dest/node-cjs/index.d.ts +1 -0
  98. package/dest/node-cjs/index.d.ts.map +1 -1
  99. package/dest/node-cjs/index.js +4 -2
  100. package/package.json +1 -1
  101. package/src/barretenberg/backend.ts +19 -97
  102. package/src/barretenberg/blake2s.test.ts +1 -1
  103. package/src/barretenberg/index.ts +14 -24
  104. package/src/barretenberg/pedersen.test.ts +1 -1
  105. package/src/barretenberg/poseidon.bench.test.ts +109 -156
  106. package/src/barretenberg/poseidon.test.ts +1 -1
  107. package/src/{types → barretenberg/testing}/fields.ts +12 -26
  108. package/src/bb_backends/browser/platform.ts +11 -0
  109. package/src/bb_backends/index.ts +8 -5
  110. package/src/bb_backends/node/index.ts +23 -3
  111. package/src/bb_backends/node/native_shm.ts +51 -14
  112. package/src/bb_backends/node/native_socket.ts +31 -17
  113. package/src/index.ts +2 -0
  114. package/dest/browser/bigint-array/index.d.ts.map +0 -1
  115. package/dest/browser/bigint-array/index.js +0 -37
  116. package/dest/browser/serialize/index.d.ts +0 -2
  117. package/dest/browser/serialize/index.d.ts.map +0 -1
  118. package/dest/browser/serialize/index.js +0 -2
  119. package/dest/browser/serialize/serialize.d.ts +0 -18
  120. package/dest/browser/serialize/serialize.d.ts.map +0 -1
  121. package/dest/browser/serialize/serialize.js +0 -72
  122. package/dest/browser/types/fields.d.ts +0 -23
  123. package/dest/browser/types/fields.d.ts.map +0 -1
  124. package/dest/browser/types/fields.js +0 -61
  125. package/dest/browser/types/index.d.ts +0 -3
  126. package/dest/browser/types/index.d.ts.map +0 -1
  127. package/dest/browser/types/index.js +0 -3
  128. package/dest/browser/types/point.d.ts +0 -18
  129. package/dest/browser/types/point.d.ts.map +0 -1
  130. package/dest/browser/types/point.js +0 -28
  131. package/dest/node/bigint-array/index.d.ts.map +0 -1
  132. package/dest/node/bigint-array/index.js +0 -37
  133. package/dest/node/serialize/index.d.ts +0 -2
  134. package/dest/node/serialize/index.d.ts.map +0 -1
  135. package/dest/node/serialize/index.js +0 -2
  136. package/dest/node/serialize/serialize.d.ts +0 -18
  137. package/dest/node/serialize/serialize.d.ts.map +0 -1
  138. package/dest/node/serialize/serialize.js +0 -72
  139. package/dest/node/types/fields.d.ts +0 -23
  140. package/dest/node/types/fields.d.ts.map +0 -1
  141. package/dest/node/types/fields.js +0 -61
  142. package/dest/node/types/index.d.ts +0 -3
  143. package/dest/node/types/index.d.ts.map +0 -1
  144. package/dest/node/types/index.js +0 -3
  145. package/dest/node/types/point.d.ts +0 -18
  146. package/dest/node/types/point.d.ts.map +0 -1
  147. package/dest/node/types/point.js +0 -28
  148. package/dest/node-cjs/bigint-array/index.d.ts.map +0 -1
  149. package/dest/node-cjs/bigint-array/index.js +0 -43
  150. package/dest/node-cjs/serialize/index.d.ts +0 -2
  151. package/dest/node-cjs/serialize/index.d.ts.map +0 -1
  152. package/dest/node-cjs/serialize/index.js +0 -5
  153. package/dest/node-cjs/serialize/serialize.d.ts +0 -18
  154. package/dest/node-cjs/serialize/serialize.d.ts.map +0 -1
  155. package/dest/node-cjs/serialize/serialize.js +0 -82
  156. package/dest/node-cjs/types/fields.d.ts +0 -23
  157. package/dest/node-cjs/types/fields.d.ts.map +0 -1
  158. package/dest/node-cjs/types/fields.js +0 -65
  159. package/dest/node-cjs/types/index.d.ts +0 -3
  160. package/dest/node-cjs/types/index.d.ts.map +0 -1
  161. package/dest/node-cjs/types/index.js +0 -6
  162. package/dest/node-cjs/types/point.d.ts +0 -18
  163. package/dest/node-cjs/types/point.d.ts.map +0 -1
  164. package/dest/node-cjs/types/point.js +0 -32
  165. package/src/serialize/index.ts +0 -1
  166. package/src/serialize/serialize.ts +0 -75
  167. package/src/types/index.ts +0 -2
  168. package/src/types/point.ts +0 -32
  169. /package/src/{bigint-array/index.ts → barretenberg/testing/bigint-buffer.ts} +0 -0
@@ -1,8 +1,7 @@
1
- import { BackendOptions, Barretenberg, CircuitOptions } from './index.js';
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
- protected api!: Barretenberg;
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
- protected api!: Barretenberg;
111
- protected acirUncompressedBytecode: Uint8Array;
86
+ private acirUncompressedBytecode: Uint8Array;
112
87
 
113
88
  constructor(
114
89
  acirBytecode: string,
115
- protected backendOptions: BackendOptions = { threads: 1 },
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: Buffer.from(this.acirUncompressedBytecode),
140
- verificationKey: Buffer.from([]), // Empty VK - lower performance.
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: Buffer.from(this.acirUncompressedBytecode),
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: Buffer.from(this.acirUncompressedBytecode),
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
- protected acirBuf: Uint8Array[],
264
- protected options: BackendOptions = { threads: 1 },
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] || Buffer.from([]);
293
- const vk = vksBuf[i] || Buffer.from([]);
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: Buffer.from(bytecode),
301
- verificationKey: Buffer.from(vk),
237
+ bytecode: bytecode,
238
+ verificationKey: vk,
302
239
  },
303
240
  });
304
241
 
305
242
  // Accumulate with witness
306
243
  this.api.chonkAccumulate({
307
- witness: Buffer.from(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: Buffer.from(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
- // Since this is a simple function, we can use feature detection to
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 Buffer !== 'undefined') {
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('No implementation found for base64 decoding.');
310
+ throw new Error('atob is not available. Node.js 18+ or browser required.');
389
311
  }
390
312
  }
@@ -1,5 +1,5 @@
1
1
  import { BackendType, Barretenberg, BarretenbergSync } from './index.js';
2
- import { Fr } from '../types/index.js';
2
+ import { Fr } from './testing/fields.js';
3
3
 
4
4
  describe('blake2s async', () => {
5
5
  let api: Barretenberg;
@@ -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. NativeSharedMemory (if bb binary available)
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
- return await createAsyncBackend(options.backend, options, logger);
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.NativeSharedMemory, options, logger);
51
+ return await createAsyncBackend(BackendType.NativeUnixSocket, options, logger);
48
52
  } catch (err: any) {
49
- logger(`Shared memory unavailable (${err.message}), falling back to other backends`);
50
- try {
51
- return await createAsyncBackend(BackendType.NativeUnixSocket, options, logger);
52
- } catch (err: any) {
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
- return await createAsyncBackend(BackendType.WasmWorker, options, logger);
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
  }
@@ -1,6 +1,6 @@
1
1
  import { BarretenbergSync } from './index.js';
2
2
  import { Timer } from '../benchmark/timer.js';
3
- import { Fr } from '../types/index.js';
3
+ import { Fr } from './testing/fields.js';
4
4
 
5
5
  describe('pedersen sync', () => {
6
6
  let api: BarretenbergSync;