From: Chris Duncan Date: Sat, 23 May 2026 06:35:13 +0000 (-0700) Subject: Deprecate typed array construction wrapper. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=99111a94bbee03c2b86b99751789ee48adf37bdd;p=nano-pow.git Deprecate typed array construction wrapper. --- diff --git a/src/lib/generate/webgl/index.ts b/src/lib/generate/webgl/index.ts index ab7cbbf..7fa8192 100644 --- a/src/lib/generate/webgl/index.ts +++ b/src/lib/generate/webgl/index.ts @@ -2,7 +2,7 @@ //! SPDX-FileContributor: Ben Green //! SPDX-License-Identifier: GPL-3.0-or-later AND MIT -import { bigintAsUintNArray, bigintRandom, bigintToHex, Logger } from '#utils' +import { Bytes, Logger, bigintRandom, bigintToHex } from '#utils' import { WorkGenerateResponse } from 'nano-pow' import { downsampleSource, drawSource, quadSource } from './shaders' @@ -295,7 +295,7 @@ function init (hash: Uint32Array, difficulty: bigint): void { // Set up INPUT which must be 16 bytes per 32-bit value due to array alignment for (let i = 0; i < 8; i++) { - inputHashView.setUint32(i * 16, hash[i]) + inputHashView.setUint32(i * 16, hash[i], true) } inputDifficultyView.setBigUint64(0, difficulty, true) LOG: logger.log('INPUT', inputArray.buffer.slice(0)) @@ -426,7 +426,7 @@ export async function generate (hash: bigint, difficulty: bigint, effort: number if (isReady === false || effort !== drawEffort || isFirstRetry) { setup(effort) } - init(bigintAsUintNArray(hash, 32, 8), difficulty) + init(new Uint32Array(Bytes(hash, 32).buffer), difficulty) LOG: logger.log('drawing frame 0') draw(bigintRandom(), drawFbos[0], queries[0]) draw(bigintRandom(), drawFbos[1], queries[1]) diff --git a/src/lib/generate/webgpu/index.ts b/src/lib/generate/webgpu/index.ts index fbd2a79..16b7566 100644 --- a/src/lib/generate/webgpu/index.ts +++ b/src/lib/generate/webgpu/index.ts @@ -1,8 +1,8 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later +import { Bytes, Logger, Queue, bigintRandom, bigintToHex } from '#utils' import { WorkGenerateResponse } from 'nano-pow' -import { bigintAsUintNArray, bigintRandom, bigintToHex, Logger, Queue } from '#utils' import { default as NanoPowGpuComputeShader } from './shaders/compute.wgsl' type NanoPowDeviceStatus = 'Idle' | 'Starting' | 'Unsupported' | 'Ready' | 'Restoring' | 'Crashed' @@ -177,17 +177,17 @@ async function restore (): Promise { } } -async function init (hash: BigUint64Array, difficulty: bigint): Promise { +async function init (hash: Uint8Array, difficulty: bigint): Promise { LOG: logger.log('variables initializing') try { // Save hash data for normal usage and potential recovery efforts - hashData.set(hash) + hashData.set(new BigUint64Array(hash.buffer)) // Write data that will not change per dispatch to uniform buffer object // Note: u64 size is 8, but total alignment must be multiple of 16 inputData.fill(0n) for (let i = 0; i < 4; i++) { - inputDataView.setBigUint64(i * 8, hashData[i]) + inputDataView.setBigUint64(i * 8, hashData[i], true) } inputDataView.setBigUint64(32, difficulty, true) device.queue.writeBuffer(inputBuffers[0], 0, inputDataView) @@ -293,7 +293,7 @@ export async function generate (hash: bigint, difficulty: bigint, effort: number throw new Error('failed to start') } } - await q.add(init, bigintAsUintNArray(hash, 64, 4), difficulty) + await q.add(init, Bytes(hash, 32), difficulty) // Dispatch initial workgroups and set index await dispatch(0, bigintRandom(), effort) let dispatchIndex = 1 diff --git a/src/lib/index.ts b/src/lib/index.ts index 592fb30..2ec72c1 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -4,7 +4,7 @@ import { NanoPowConfig } from '#lib/config' import { NanoPowCpu, NanoPowWasm, NanoPowWebgl, NanoPowWebgpu } from '#lib/generate' import { NanoPowValidate } from '#lib/validate' -import { bigintFrom, Bytes, Cache, Logger, Queue } from '#utils' +import { Bytes, Cache, Logger, Queue, bigintFrom } from '#utils' import { WorkErrorResponse, WorkGenerateResponse, WorkValidateResponse } from 'nano-pow' const logger = new Logger() @@ -32,16 +32,16 @@ export async function generate (hash: unknown, options?: unknown): Promise { try { - const hashBytes = Bytes(hash, 32) - const workBytes = Bytes(work, 8) const { debug, difficulty } = await NanoPowConfig(options) - const result = await NanoPowValidate(workBytes, hashBytes, difficulty, debug) + const result = await NanoPowValidate(Bytes(work, 8), Bytes(hash, 32), difficulty, debug) return result } catch (e: any) { return { error: (typeof e === 'string' ? e : (e?.message ?? '')) } diff --git a/src/utils/bigint.ts b/src/utils/bigint.ts index 3360b88..962afd3 100644 --- a/src/utils/bigint.ts +++ b/src/utils/bigint.ts @@ -1,27 +1,6 @@ //! SPDX-FileCopyrightText: 2025 Chris Duncan //! SPDX-License-Identifier: GPL-3.0-or-later -export function bigintAsUintNArray (int: bigint, bits: number, length: number = 0) { - const UintTypedArray: { [key: number]: any } = { - 8: Uint8Array, - 16: Uint16Array, - 32: Uint32Array, - 64: BigUint64Array - } - if (![8, 16, 32, 64].includes(bits)) throw new Error('Invalid TypedArray UintN subclass') - if (int < 0n) int = ~(int - 1n) - length = Math.max(length, Math.ceil(bigintByteLength(int) / bits)) - const mask: bigint = (1n << BigInt(bits)) - 1n - const uintArray = new UintTypedArray[bits](length) - for (let i = length - 1; i >= 0; i--) { - bits === 64 - ? uintArray[i] = int & mask - : uintArray[i] = (Number(int & mask)) - int >>= BigInt(bits) - } - return uintArray -} - export function bigintBitLength (int: bigint): bigint { let bitLength = 1n while (int > 1n || int < -1n) { diff --git a/src/utils/bytes.ts b/src/utils/bytes.ts index cfc6d1c..93a90ab 100644 --- a/src/utils/bytes.ts +++ b/src/utils/bytes.ts @@ -33,7 +33,7 @@ export function Bytes (input: unknown, minLength: unknown = 1): Uint8Array