@aztec/bb.js 3.0.0-nightly.20251115 → 3.0.0-nightly.20251118

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 (149) 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/index.d.ts +8 -5
  24. package/dest/browser/bb_backends/index.d.ts.map +1 -1
  25. package/dest/browser/bb_backends/index.js +5 -5
  26. package/dest/node/barretenberg/backend.d.ts +9 -23
  27. package/dest/node/barretenberg/backend.d.ts.map +1 -1
  28. package/dest/node/barretenberg/backend.js +24 -84
  29. package/dest/node/barretenberg/blake2s.test.js +2 -2
  30. package/dest/node/barretenberg/index.d.ts +1 -3
  31. package/dest/node/barretenberg/index.d.ts.map +1 -1
  32. package/dest/node/barretenberg/index.js +15 -24
  33. package/dest/node/barretenberg/pedersen.test.js +2 -2
  34. package/dest/node/barretenberg/poseidon.bench.test.js +27 -68
  35. package/dest/node/barretenberg/poseidon.test.js +2 -2
  36. package/dest/node/{bigint-array/index.d.ts → barretenberg/testing/bigint-buffer.d.ts} +1 -1
  37. package/dest/node/barretenberg/testing/bigint-buffer.d.ts.map +1 -0
  38. package/dest/node/barretenberg/testing/bigint-buffer.js +37 -0
  39. package/dest/node/barretenberg/testing/fields.d.ts +16 -0
  40. package/dest/node/barretenberg/testing/fields.d.ts.map +1 -0
  41. package/dest/node/barretenberg/testing/fields.js +48 -0
  42. package/dest/node/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  43. package/dest/node/bb_backends/index.d.ts +8 -5
  44. package/dest/node/bb_backends/index.d.ts.map +1 -1
  45. package/dest/node/bb_backends/index.js +5 -5
  46. package/dest/node/bb_backends/node/index.d.ts.map +1 -1
  47. package/dest/node/bb_backends/node/index.js +12 -4
  48. package/dest/node/bb_backends/node/native_shm.d.ts +2 -1
  49. package/dest/node/bb_backends/node/native_shm.d.ts.map +1 -1
  50. package/dest/node/bb_backends/node/native_shm.js +50 -15
  51. package/dest/node/bb_backends/node/native_socket.d.ts +1 -1
  52. package/dest/node/bb_backends/node/native_socket.d.ts.map +1 -1
  53. package/dest/node/bb_backends/node/native_socket.js +28 -19
  54. package/dest/node-cjs/barretenberg/backend.d.ts +9 -23
  55. package/dest/node-cjs/barretenberg/backend.d.ts.map +1 -1
  56. package/dest/node-cjs/barretenberg/backend.js +30 -90
  57. package/dest/node-cjs/barretenberg/blake2s.test.js +6 -6
  58. package/dest/node-cjs/barretenberg/index.d.ts +1 -3
  59. package/dest/node-cjs/barretenberg/index.d.ts.map +1 -1
  60. package/dest/node-cjs/barretenberg/index.js +15 -24
  61. package/dest/node-cjs/barretenberg/pedersen.test.js +9 -9
  62. package/dest/node-cjs/barretenberg/poseidon.bench.test.js +36 -77
  63. package/dest/node-cjs/barretenberg/poseidon.test.js +4 -4
  64. package/dest/node-cjs/{bigint-array/index.d.ts → barretenberg/testing/bigint-buffer.d.ts} +1 -1
  65. package/dest/node-cjs/barretenberg/testing/bigint-buffer.d.ts.map +1 -0
  66. package/dest/node-cjs/barretenberg/testing/bigint-buffer.js +43 -0
  67. package/dest/node-cjs/barretenberg/testing/fields.d.ts +16 -0
  68. package/dest/node-cjs/barretenberg/testing/fields.d.ts.map +1 -0
  69. package/dest/node-cjs/barretenberg/testing/fields.js +52 -0
  70. package/dest/node-cjs/barretenberg_wasm/barretenberg-threads.wasm.gz +0 -0
  71. package/dest/node-cjs/bb_backends/index.d.ts +8 -5
  72. package/dest/node-cjs/bb_backends/index.d.ts.map +1 -1
  73. package/dest/node-cjs/bb_backends/index.js +5 -5
  74. package/dest/node-cjs/bb_backends/node/index.d.ts.map +1 -1
  75. package/dest/node-cjs/bb_backends/node/index.js +12 -4
  76. package/dest/node-cjs/bb_backends/node/native_shm.d.ts +2 -1
  77. package/dest/node-cjs/bb_backends/node/native_shm.d.ts.map +1 -1
  78. package/dest/node-cjs/bb_backends/node/native_shm.js +50 -15
  79. package/dest/node-cjs/bb_backends/node/native_socket.d.ts +1 -1
  80. package/dest/node-cjs/bb_backends/node/native_socket.d.ts.map +1 -1
  81. package/dest/node-cjs/bb_backends/node/native_socket.js +28 -19
  82. package/package.json +1 -1
  83. package/src/barretenberg/backend.ts +19 -97
  84. package/src/barretenberg/blake2s.test.ts +1 -1
  85. package/src/barretenberg/index.ts +14 -24
  86. package/src/barretenberg/pedersen.test.ts +1 -1
  87. package/src/barretenberg/poseidon.bench.test.ts +109 -156
  88. package/src/barretenberg/poseidon.test.ts +1 -1
  89. package/src/{types → barretenberg/testing}/fields.ts +12 -26
  90. package/src/bb_backends/index.ts +8 -5
  91. package/src/bb_backends/node/index.ts +23 -3
  92. package/src/bb_backends/node/native_shm.ts +51 -14
  93. package/src/bb_backends/node/native_socket.ts +31 -17
  94. package/dest/browser/bigint-array/index.d.ts.map +0 -1
  95. package/dest/browser/bigint-array/index.js +0 -37
  96. package/dest/browser/serialize/index.d.ts +0 -2
  97. package/dest/browser/serialize/index.d.ts.map +0 -1
  98. package/dest/browser/serialize/index.js +0 -2
  99. package/dest/browser/serialize/serialize.d.ts +0 -18
  100. package/dest/browser/serialize/serialize.d.ts.map +0 -1
  101. package/dest/browser/serialize/serialize.js +0 -72
  102. package/dest/browser/types/fields.d.ts +0 -23
  103. package/dest/browser/types/fields.d.ts.map +0 -1
  104. package/dest/browser/types/fields.js +0 -61
  105. package/dest/browser/types/index.d.ts +0 -3
  106. package/dest/browser/types/index.d.ts.map +0 -1
  107. package/dest/browser/types/index.js +0 -3
  108. package/dest/browser/types/point.d.ts +0 -18
  109. package/dest/browser/types/point.d.ts.map +0 -1
  110. package/dest/browser/types/point.js +0 -28
  111. package/dest/node/bigint-array/index.d.ts.map +0 -1
  112. package/dest/node/bigint-array/index.js +0 -37
  113. package/dest/node/serialize/index.d.ts +0 -2
  114. package/dest/node/serialize/index.d.ts.map +0 -1
  115. package/dest/node/serialize/index.js +0 -2
  116. package/dest/node/serialize/serialize.d.ts +0 -18
  117. package/dest/node/serialize/serialize.d.ts.map +0 -1
  118. package/dest/node/serialize/serialize.js +0 -72
  119. package/dest/node/types/fields.d.ts +0 -23
  120. package/dest/node/types/fields.d.ts.map +0 -1
  121. package/dest/node/types/fields.js +0 -61
  122. package/dest/node/types/index.d.ts +0 -3
  123. package/dest/node/types/index.d.ts.map +0 -1
  124. package/dest/node/types/index.js +0 -3
  125. package/dest/node/types/point.d.ts +0 -18
  126. package/dest/node/types/point.d.ts.map +0 -1
  127. package/dest/node/types/point.js +0 -28
  128. package/dest/node-cjs/bigint-array/index.d.ts.map +0 -1
  129. package/dest/node-cjs/bigint-array/index.js +0 -43
  130. package/dest/node-cjs/serialize/index.d.ts +0 -2
  131. package/dest/node-cjs/serialize/index.d.ts.map +0 -1
  132. package/dest/node-cjs/serialize/index.js +0 -5
  133. package/dest/node-cjs/serialize/serialize.d.ts +0 -18
  134. package/dest/node-cjs/serialize/serialize.d.ts.map +0 -1
  135. package/dest/node-cjs/serialize/serialize.js +0 -82
  136. package/dest/node-cjs/types/fields.d.ts +0 -23
  137. package/dest/node-cjs/types/fields.d.ts.map +0 -1
  138. package/dest/node-cjs/types/fields.js +0 -65
  139. package/dest/node-cjs/types/index.d.ts +0 -3
  140. package/dest/node-cjs/types/index.d.ts.map +0 -1
  141. package/dest/node-cjs/types/index.js +0 -6
  142. package/dest/node-cjs/types/point.d.ts +0 -18
  143. package/dest/node-cjs/types/point.d.ts.map +0 -1
  144. package/dest/node-cjs/types/point.js +0 -32
  145. package/src/serialize/index.ts +0 -1
  146. package/src/serialize/serialize.ts +0 -75
  147. package/src/types/index.ts +0 -2
  148. package/src/types/point.ts +0 -32
  149. /package/src/{bigint-array/index.ts → barretenberg/testing/bigint-buffer.ts} +0 -0
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BarretenbergNativeShmSyncBackend = void 0;
4
4
  const module_1 = require("module");
5
5
  const child_process_1 = require("child_process");
6
+ const fs_1 = require("fs");
6
7
  const platform_js_1 = require("./platform.js");
7
8
  // Import the NAPI module
8
9
  // The addon is built to the nodejs_module directory
@@ -31,9 +32,10 @@ catch (err) {
31
32
  * - Handled internally by IpcClient (no manual length prefixes needed)
32
33
  */
33
34
  class BarretenbergNativeShmSyncBackend {
34
- constructor(process, client) {
35
+ constructor(process, client, logFd) {
35
36
  this.process = process;
36
37
  this.client = client;
38
+ this.logFd = logFd;
37
39
  }
38
40
  /**
39
41
  * Create and initialize a shared memory backend.
@@ -41,7 +43,7 @@ class BarretenbergNativeShmSyncBackend {
41
43
  * @param threads Optional number of threads
42
44
  * @param maxClients Optional maximum concurrent clients (default: 1)
43
45
  */
44
- static async new(bbBinaryPath, threads, maxClients) {
46
+ static async new(bbBinaryPath, threads, maxClients, logger) {
45
47
  if (!addon || !addon.MsgpackClient) {
46
48
  throw new Error('Shared memory NAPI not available.');
47
49
  }
@@ -49,20 +51,37 @@ class BarretenbergNativeShmSyncBackend {
49
51
  const shmName = `bb-${process.pid}-${Date.now()}`;
50
52
  // Default maxClients to 1 if not specified
51
53
  const clientCount = maxClients ?? 1;
52
- // Set HARDWARE_CONCURRENCY if threads specified
53
- const env = threads !== undefined ? { ...process.env, HARDWARE_CONCURRENCY: threads.toString() } : process.env;
54
+ // If threads not set use 1 thread. We're not expected to do long lived work on sync backends.
55
+ const hwc = threads ? threads.toString() : '1';
56
+ const env = { ...process.env, HARDWARE_CONCURRENCY: '1' };
57
+ // Set up file logging if logger is provided.
58
+ // Direct file redirection bypasses Node event loop - logs are written even if process hangs.
59
+ let logFd;
60
+ let logPath;
61
+ if (logger) {
62
+ logPath = `/tmp/${shmName}.log`;
63
+ logFd = (0, fs_1.openSync)(logPath, 'w');
64
+ logger(`BB process logs redirected to: ${logPath}`);
65
+ }
54
66
  // Spawn bb process with shared memory mode
55
- const args = [bbBinaryPath, 'msgpack', 'run', '--input', `${shmName}.shm`, '--max-clients', clientCount.toString()];
56
- const bbProcess = (0, child_process_1.spawn)((0, platform_js_1.findPackageRoot)() + '/scripts/kill_wrapper.sh', args, {
57
- stdio: ['ignore', 'ignore', 'ignore'],
67
+ const args = [
68
+ 'msgpack',
69
+ 'run',
70
+ '--input',
71
+ `${shmName}.shm`,
72
+ '--max-clients',
73
+ clientCount.toString(),
74
+ '--request-ring-size',
75
+ `${1024 * 1024 * 2}`,
76
+ ];
77
+ const bbProcess = (0, child_process_1.spawn)(bbBinaryPath, args, {
78
+ stdio: ['ignore', logFd ?? 'ignore', logFd ?? 'ignore'],
58
79
  env,
59
80
  });
60
- // Disconnect from event loop so process can exit. The kill wrapper will reap bb once parent (node) dies.
81
+ // Disconnect from event loop so process can exit without waiting for bb
82
+ // The bb process has parent death monitoring (prctl on Linux, kqueue on macOS)
83
+ // so it will automatically exit when Node.js exits
61
84
  bbProcess.unref();
62
- // Capture stderr for error diagnostics
63
- // bbProcess.stderr?.on('data', (data: Buffer) => {
64
- // stderrOutput += data.toString();
65
- // });
66
85
  // Track if process has exited
67
86
  let processExited = false;
68
87
  let exitError = null;
@@ -114,13 +133,21 @@ class BarretenbergNativeShmSyncBackend {
114
133
  if (!client) {
115
134
  throw new Error('Failed to create client connection');
116
135
  }
117
- return new BarretenbergNativeShmSyncBackend(bbProcess, client);
136
+ return new BarretenbergNativeShmSyncBackend(bbProcess, client, logFd);
118
137
  }
119
138
  finally {
120
- // If we failed to connect, ensure the process is killed
139
+ // If we failed to connect, ensure the process is killed and log file closed
121
140
  // kill() returns false if process already exited, but doesn't throw
122
141
  if (!client) {
123
142
  bbProcess.kill('SIGKILL');
143
+ if (logFd !== undefined) {
144
+ try {
145
+ (0, fs_1.closeSync)(logFd);
146
+ }
147
+ catch (e) {
148
+ // Ignore errors during cleanup
149
+ }
150
+ }
124
151
  }
125
152
  }
126
153
  }
@@ -142,6 +169,14 @@ class BarretenbergNativeShmSyncBackend {
142
169
  // Ignore errors during cleanup
143
170
  }
144
171
  }
172
+ if (this.logFd !== undefined) {
173
+ try {
174
+ (0, fs_1.closeSync)(this.logFd);
175
+ }
176
+ catch (e) {
177
+ // Ignore errors during cleanup
178
+ }
179
+ }
145
180
  }
146
181
  destroy() {
147
182
  this.cleanup();
@@ -151,4 +186,4 @@ class BarretenbergNativeShmSyncBackend {
151
186
  }
152
187
  }
153
188
  exports.BarretenbergNativeShmSyncBackend = BarretenbergNativeShmSyncBackend;
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX3NobS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iYl9iYWNrZW5kcy9ub2RlL25hdGl2ZV9zaG0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXVDO0FBQ3ZDLGlEQUFvRDtBQUVwRCwrQ0FBZ0U7QUFFaEUseUJBQXlCO0FBQ3pCLG9EQUFvRDtBQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFBLDRCQUFjLEdBQUUsQ0FBQztBQUNuQyxtRkFBbUY7QUFDbkYsSUFBSSxLQUFLLEdBQVEsSUFBSSxDQUFDO0FBQ3RCLElBQUksQ0FBQztJQUNILElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxNQUFNLE9BQU8sR0FBRyxJQUFBLHNCQUFhLEVBQUMsSUFBQSw2QkFBZSxHQUFHLENBQUMsQ0FBQztRQUNsRCxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7QUFDSCxDQUFDO0FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNiLHVDQUF1QztJQUN2QyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLGdDQUFnQztJQUkzQyxZQUFvQixPQUFxQixFQUFFLE1BQVc7UUFDcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQ2QsWUFBb0IsRUFDcEIsT0FBZ0IsRUFDaEIsVUFBbUI7UUFFbkIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxNQUFNLE9BQU8sR0FBRyxNQUFN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
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX3NobS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iYl9iYWNrZW5kcy9ub2RlL25hdGl2ZV9zaG0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQXVDO0FBQ3ZDLGlEQUFvRDtBQUNwRCwyQkFBeUM7QUFFekMsK0NBQWdFO0FBR2hFLHlCQUF5QjtBQUN6QixvREFBb0Q7QUFDcEQsTUFBTSxTQUFTLEdBQUcsSUFBQSw0QkFBYyxHQUFFLENBQUM7QUFDbkMsbUZBQW1GO0FBQ25GLElBQUksS0FBSyxHQUFRLElBQUksQ0FBQztBQUN0QixJQUFJLENBQUM7SUFDSCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsTUFBTSxPQUFPLEdBQUcsSUFBQSxzQkFBYSxFQUFDLElBQUEsNkJBQWUsR0FBRyxDQUFDLENBQUM7UUFDbEQsS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQztBQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYix1Q0FBdUM7SUFDdkMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBYSxnQ0FBZ0M7SUFLM0MsWUFBb0IsT0FBcUIsRUFBRSxNQUFXLEVBQUUsS0FBYztRQUNwRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDZCxZQUFvQixFQUNwQixPQUFnQixFQUNoQixVQUFtQixFQUNuQixNQUE4QjtRQUU5QixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFL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
@@ -24,7 +24,7 @@ export declare class BarretenbergNativeSocketAsyncBackend implements IMsgpackBac
24
24
  private responseLength;
25
25
  private responseBuffer;
26
26
  private responseBytesRead;
27
- constructor(bbBinaryPath: string, threads?: number);
27
+ constructor(bbBinaryPath: string, threads?: number, logger?: (msg: string) => void);
28
28
  private waitForSocketAndConnect;
29
29
  private handleData;
30
30
  call(inputBuffer: Uint8Array): Promise<Uint8Array>;
@@ -1 +1 @@
1
- {"version":3,"file":"native_socket.d.ts","sourceRoot":"","sources":["../../../../src/bb_backends/node/native_socket.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAGvD;;;;;;;;;;;GAWG;AACH,qBAAa,oCAAqC,YAAW,oBAAoB;IAC/E,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,iBAAiB,CAA+B;IAIxD,OAAO,CAAC,gBAAgB,CAGhB;IAGR,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,iBAAiB,CAAa;gBAE1B,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;YA4FpC,uBAAuB;IAiErC,OAAO,CAAC,UAAU;IA8CZ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAqBxD,OAAO,CAAC,OAAO;IAiCT,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAY/B"}
1
+ {"version":3,"file":"native_socket.d.ts","sourceRoot":"","sources":["../../../../src/bb_backends/node/native_socket.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAIvD;;;;;;;;;;;GAWG;AACH,qBAAa,oCAAqC,YAAW,oBAAoB;IAC/E,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,iBAAiB,CAA+B;IAIxD,OAAO,CAAC,gBAAgB,CAGhB;IAGR,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,iBAAiB,CAAa;gBAE1B,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;YAsGpE,uBAAuB;IAiErC,OAAO,CAAC,UAAU;IAmDZ,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IA0BxD,OAAO,CAAC,OAAO;IAiCT,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
@@ -7,7 +7,7 @@ const net = tslib_1.__importStar(require("net"));
7
7
  const fs = tslib_1.__importStar(require("fs"));
8
8
  const os = tslib_1.__importStar(require("os"));
9
9
  const path = tslib_1.__importStar(require("path"));
10
- const platform_js_1 = require("./platform.js");
10
+ const readline_1 = tslib_1.__importDefault(require("readline"));
11
11
  /**
12
12
  * Asynchronous native backend that communicates with bb binary via Unix Domain Socket.
13
13
  * Uses event-based I/O with a state machine to handle partial reads.
@@ -21,7 +21,7 @@ const platform_js_1 = require("./platform.js");
21
21
  * - Response: 4-byte little-endian length + msgpack buffer
22
22
  */
23
23
  class BarretenbergNativeSocketAsyncBackend {
24
- constructor(bbBinaryPath, threads) {
24
+ constructor(bbBinaryPath, threads, logger) {
25
25
  this.socket = null;
26
26
  this.connectionTimeout = null;
27
27
  // Queue of pending callbacks for pipelined requests
@@ -46,16 +46,24 @@ class BarretenbergNativeSocketAsyncBackend {
46
46
  connectionResolve = resolve;
47
47
  connectionReject = reject;
48
48
  });
49
- // Set HARDWARE_CONCURRENCY if threads specified
50
- const env = threads !== undefined ? { ...process.env, HARDWARE_CONCURRENCY: threads.toString() } : process.env;
49
+ // If threads not set use num cpu cores, max 32.
50
+ const hwc = threads ? threads.toString() : Math.min(32, os.cpus.length).toString();
51
+ const env = { ...process.env, HARDWARE_CONCURRENCY: '1' };
51
52
  // Spawn bb process - it will create the socket server
52
- const args = [bbBinaryPath, 'msgpack', 'run', '--input', this.socketPath];
53
- this.process = (0, child_process_1.spawn)((0, platform_js_1.findPackageRoot)() + '/scripts/kill_wrapper.sh', args, {
54
- stdio: ['ignore', 'ignore', 'ignore'],
53
+ const args = ['msgpack', 'run', '--input', this.socketPath];
54
+ this.process = (0, child_process_1.spawn)(bbBinaryPath, args, {
55
+ stdio: ['ignore', logger ? 'pipe' : 'ignore', logger ? 'pipe' : 'ignore'],
55
56
  env,
56
57
  });
57
- // Disconnect from event loop so process can exit. The kill wrapper will reap bb once parent (node) dies.
58
+ // Disconnect from event loop so process can exit without waiting for bb
59
+ // The bb process has parent death monitoring (prctl on Linux, kqueue on macOS)
60
+ // so it will automatically exit when Node.js exits
58
61
  this.process.unref();
62
+ if (logger) {
63
+ logger("Logger attached to bb process. DON'T FORGET TO DESTROY THE BACKEND to allow Node.js to exit.");
64
+ readline_1.default.createInterface({ input: this.process.stdout }).on('line', logger);
65
+ readline_1.default.createInterface({ input: this.process.stderr }).on('line', logger);
66
+ }
59
67
  this.process.on('error', err => {
60
68
  if (connectionReject) {
61
69
  connectionReject(new Error(`Native backend process error: ${err.message}`));
@@ -134,7 +142,7 @@ class BarretenbergNativeSocketAsyncBackend {
134
142
  this.socket.setNoDelay(true);
135
143
  // Set up event handlers
136
144
  this.socket.once('connect', () => {
137
- this.socket.unref();
145
+ // Socket starts referenced - will be unreferenced when no callbacks pending
138
146
  // Clear connection timeout on successful connection
139
147
  if (this.connectionTimeout) {
140
148
  clearTimeout(this.connectionTimeout);
@@ -201,6 +209,10 @@ class BarretenbergNativeSocketAsyncBackend {
201
209
  // This shouldn't happen - response without a pending request
202
210
  console.warn('Received response but no pending callback');
203
211
  }
212
+ // If no more pending callbacks, unref socket to allow process to exit
213
+ if (this.pendingCallbacks.length === 0 && this.socket) {
214
+ this.socket.unref();
215
+ }
204
216
  // Reset state for next message
205
217
  this.readingLength = true;
206
218
  this.lengthBytesRead = 0;
@@ -218,6 +230,10 @@ class BarretenbergNativeSocketAsyncBackend {
218
230
  throw new Error('Socket not connected');
219
231
  }
220
232
  return new Promise((resolve, reject) => {
233
+ // If this is the first pending callback, ref the socket to keep event loop alive
234
+ if (this.pendingCallbacks.length === 0) {
235
+ this.socket.ref();
236
+ }
221
237
  // Enqueue this promise's callbacks (FIFO order)
222
238
  this.pendingCallbacks.push({ resolve, reject });
223
239
  // Write request: 4-byte little-endian length + msgpack data
@@ -258,17 +274,10 @@ class BarretenbergNativeSocketAsyncBackend {
258
274
  // Don't try to unlink socket - bb owns it and will clean it up
259
275
  }
260
276
  async destroy() {
261
- // Cleanup first (closes socket, unrefs everything)
262
277
  this.cleanup();
263
- // Send SIGTERM for graceful shutdown
264
- // Process is unref'd so won't block event loop - just kill and return
265
- try {
266
- this.process.kill('SIGTERM');
267
- }
268
- catch (e) {
269
- // Already dead
270
- }
278
+ this.process.kill('SIGTERM');
279
+ this.process.removeAllListeners();
271
280
  }
272
281
  }
273
282
  exports.BarretenbergNativeSocketAsyncBackend = BarretenbergNativeSocketAsyncBackend;
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX3NvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iYl9iYWNrZW5kcy9ub2RlL25hdGl2ZV9zb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlEQUFvRDtBQUNwRCxpREFBMkI7QUFDM0IsK0NBQXlCO0FBQ3pCLCtDQUF5QjtBQUN6QixtREFBNkI7QUFFN0IsK0NBQWdEO0FBRWhEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSxvQ0FBb0M7SUFzQi9DLFlBQVksWUFBb0IsRUFBRSxPQUFnQjtRQXBCMUMsV0FBTSxHQUFzQixJQUFJLENBQUM7UUFHakMsc0JBQWlCLEdBQTBCLElBQUksQ0FBQztRQUV4RCxvREFBb0Q7UUFDcEQsNEVBQTRFO1FBQ3BFLHFCQUFnQixHQUduQixFQUFFLENBQUM7UUFFUixzQ0FBc0M7UUFDOUIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsaUJBQVksR0FBVyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLG9CQUFlLEdBQVcsQ0FBQyxDQUFDO1FBQzVCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQyxzQkFBaUIsR0FBVyxDQUFDLENBQUM7UUFHcEMsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakYsMkVBQTJFO1FBQzNFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxpQkFBaUIs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
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlX3NvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iYl9iYWNrZW5kcy9ub2RlL25hdGl2ZV9zb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlEQUFvRDtBQUNwRCxpREFBMkI7QUFDM0IsK0NBQXlCO0FBQ3pCLCtDQUF5QjtBQUN6QixtREFBNkI7QUFHN0IsZ0VBQWdDO0FBRWhDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSxvQ0FBb0M7SUFzQi9DLFlBQVksWUFBb0IsRUFBRSxPQUFnQixFQUFFLE1BQThCO1FBcEIxRSxXQUFNLEdBQXNCLElBQUksQ0FBQztRQUdqQyxzQkFBaUIsR0FBMEIsSUFBSSxDQUFDO1FBRXhELG9EQUFvRDtRQUNwRCw0RUFBNEU7UUFDcEUscUJBQWdCLEdBR25CLEVBQUUsQ0FBQztRQUVSLHNDQUFzQztRQUM5QixrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixpQkFBWSxHQUFXLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFDNUIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQ3JDLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUdwQyxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVqRiwyRUFBMkU7UUFDM0UsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ25DLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxJ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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aztec/bb.js",
3
3
  "packageManager": "yarn@4.5.2",
4
- "version": "3.0.0-nightly.20251115",
4
+ "version": "3.0.0-nightly.20251118",
5
5
  "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/barretenberg/ts",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -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;