From 8bd25e5de0a756bbc44695823bbb511eea303c8a Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Fri, 20 Jun 2025 23:17:08 -0700 Subject: [PATCH] Fix WASM in puppeteer. The puppeteer browser instance loads NanoPow with a script and includes CSP. While it specifically uses WebGPU for performance, it was discovered that WASM would not load due to missing required CSP directives, so they have been added. The reduced WASM iteration count has been reverted since it seems to be an issue with Firefox and not Chromium. Adjust logging. --- src/bin/server.ts | 2 +- src/lib/generate/wasm/asm/generate.ts | 2 +- src/lib/generate/wasm/index.ts | 2 +- src/lib/generate/webgl/index.ts | 2 -- src/utils/api-support/wasm.ts | 4 ++-- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/bin/server.ts b/src/bin/server.ts index c5c8193..a00ac4e 100755 --- a/src/bin/server.ts +++ b/src/bin/server.ts @@ -112,7 +112,7 @@ const enc = `sha256-${hash('sha256', src, 'base64')}` const body = ` - + ` diff --git a/src/lib/generate/wasm/asm/generate.ts b/src/lib/generate/wasm/asm/generate.ts index 463b22a..7c34492 100644 --- a/src/lib/generate/wasm/asm/generate.ts +++ b/src/lib/generate/wasm/asm/generate.ts @@ -153,7 +153,7 @@ console.log(`export function main (seed: u64, h0: u64, h1: u64, h2: u64, h3: u64 let r0: u64 = 0 let r1: u64 = 0 let result = v128.splat(0) - const iterations: u64 = 1 << 20 + const iterations: u64 = 1 << 24 for (let i: u64 = 0; i < iterations; i++) { m0 = i64x2(unchecked(seed + i), unchecked(seed + i + 1)) diff --git a/src/lib/generate/wasm/index.ts b/src/lib/generate/wasm/index.ts index d9d99e8..704d659 100644 --- a/src/lib/generate/wasm/index.ts +++ b/src/lib/generate/wasm/index.ts @@ -74,7 +74,7 @@ async function dispatch (): Promise { return new Promise(resolve => { const attempts = [] for (let i = 0; i < workers.length; i++) { - data.seed = bigintToHex((bigintRandom() & ~((1n << 20n) - 1n)), 16) + data.seed = bigintToHex((bigintRandom() & ~((1n << 24n) - 1n)), 16) attempts.push(new Promise((found, err) => { const w = workers[i] w.onerror = err diff --git a/src/lib/generate/webgl/index.ts b/src/lib/generate/webgl/index.ts index 288aca7..16594cf 100644 --- a/src/lib/generate/webgl/index.ts +++ b/src/lib/generate/webgl/index.ts @@ -432,10 +432,8 @@ export async function generate (hash: bigint, difficulty: bigint, effort: number draw(bigintRandom(), drawFbos[2], queries[2]) let drawIndex = 3 do { - LOG: logger.log(`drawing frame ${drawIndex}`) draw(bigintRandom(), drawFbos[drawIndex], queries[drawIndex]) drawIndex = (drawIndex + 1) % 4 - LOG: logger.log(`checking frame ${drawIndex}`) found = await check(queries[drawIndex]) } while (!found && !timeout) if (found) result = read(drawFbos[drawIndex]) diff --git a/src/utils/api-support/wasm.ts b/src/utils/api-support/wasm.ts index 8bff742..947976e 100644 --- a/src/utils/api-support/wasm.ts +++ b/src/utils/api-support/wasm.ts @@ -23,8 +23,8 @@ Object.defineProperty(wasm, 'isSupported', { const module = await WebAssembly.compile(wasmBuffer) const instance = await WebAssembly.instantiate(module) isWasmSupported = (instance instanceof WebAssembly.Instance) - } catch (err) { - console.warn('WASM is not supported in this environment.\n', err) + } catch (err: any) { + console.warn('WASM is not supported in this environment.\n', err.message ?? err) isWasmSupported = false } finally { delete this.isSupported -- 2.47.3