UNPKG

nano-pow

Version:

Proof-of-work generation and validation with WebGPU/WebGL for Nano cryptocurrency.

185 lines (171 loc) 5.96 kB
// SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev> // SPDX-License-Identifier: GPL-3.0-or-later declare global { interface Window { NanoPow: typeof NanoPow } } declare const NanoPow: typeof NanoPowGl | typeof NanoPowGpu | null /** * Nano proof-of-work using WebGL 2.0. */ export declare class NanoPowGl { #private /** * Constructs canvas, gets WebGL context, initializes buffers, and compiles * shaders. */ static init (): Promise<void> /** * On WebGL context loss, attempts to clear all program variables and then * reinitialize them by calling `init()`. */ static reset (): void /** * Finds a nonce that satisfies the Nano proof-of-work requirements. * * @param {string} hash - Hexadecimal hash of previous block, or public key for new accounts * @param {NanoPowOptions} options - Options used to configure search execution */ static work_generate (hash: string, options?: NanoPowOptions): Promise<WorkGenerateResponse> /** * Validates that a nonce satisfies Nano proof-of-work requirements. * * @param {string} work - Hexadecimal proof-of-work value to validate * @param {string} hash - Hexadecimal hash of previous block, or public key for new accounts * @param {NanoPowOptions} options - Options used to configure search execution */ static work_validate (work: string, hash: string, options?: NanoPowOptions): Promise<WorkValidateResponse> } /** * Nano proof-of-work using WebGPU. */ export declare class NanoPowGpu { #private static init (): Promise<void> static reset (): void /** * Finds a nonce that satisfies the Nano proof-of-work requirements. * * @param {string} hash - Hexadecimal hash of previous block, or public key for new accounts * @param {NanoPowOptions} options - Used to configure search execution */ static work_generate (hash: string, options?: NanoPowOptions): Promise<WorkGenerateResponse> /** * Validates that a nonce satisfies Nano proof-of-work requirements. * * @param {string} work - Hexadecimal proof-of-work value to validate * @param {string} hash - Hexadecimal hash of previous block, or public key for new accounts * @param {NanoPowOptions} options - Options used to configure search execution */ static work_validate (work: string, hash: string, options?: NanoPowOptions): Promise<WorkValidateResponse> } /** * Used to configure NanoPow. * * @param {boolean} [debug=false] - Enables additional debug logging to the console. Default: false * @param {number} [effort=0x8] - Multiplier for dispatching work search. Larger values are not necessarily better since they can quickly overwhelm the GPU. Ignored when validating. Default: 0x8 * @param {bigint|string} [difficulty=0xfffffff800000000] - Minimum value result of `BLAKE2b(nonce||blockhash)`. Default: 0xFFFFFFF800000000 */ export type NanoPowOptions = { debug?: boolean effort?: number difficulty?: bigint | string } export type NanoPowResult = { found: boolean work: bigint difficulty: bigint } /** * Used to create WebGL framebuffer objects. * * @param {WebGLTexture} texture - Defines storage size * @param {WebGLFramebuffer} framebuffer - Holds texture data * @param {size} size - 2D lengths of texture */ export type FBO = { texture: WebGLTexture framebuffer: WebGLFramebuffer size: { x: number y: number } } /** * Used to define NanoPow server configuration. * * @param {boolean} DEBUG - Enables additional log output * @param {number} EFFORT - Defines dispatch size per compute pass * @param {number} PORT - TCP port on which to listen for requests */ export type NanoPowServerConfig = { [key: string]: boolean | number DEBUG: boolean EFFORT: number PORT: number } export declare const NanoPowGlDownsampleShader: string export declare const NanoPowGlDrawShader: string export declare const NanoPowGlVertexShader: string export declare const NanoPowGpuComputeShader: any /** * Used by work server for inbound requests to `work_generate`. * * @param {string} action - Method to call * @param {string} hash - Block hash used to generate work * @param {string} [difficulty=FFFFFFF800000000] - Minimum threshold for a nonce to be valid */ type WorkGenerateRequest = { [key: string]: string | undefined action: 'work_generate' hash: string difficulty?: string } /** * Used by work server for outbound responses to `work_generate`. * * @param {string} hash - Block hash used to generate or validate work * @param {string} work - Valid proof-of-work nonce generated for input hash * @param {string} difficulty - BLAKE2b hash result which was compared to specified minimum threshold */ type WorkGenerateResponse = { [key: string]: string hash: string work: string difficulty: string } /** * Used by work server for inbound requests to `work_validate`. * * @param {string} action - Method to call * @param {string} hash - Block hash used to validate work * @param {string} work - Existing nonce to check against hash * @param {string} [difficulty=FFFFFFF800000000] - Minimum threshold for a nonce to be valid */ type WorkValidateRequest = { [key: string]: string | undefined action: 'work_validate' hash: string work: string difficulty?: string } /** * Used by work server for outbound responses to `work_validate`. * * @param {string} hash - Hash from validate request * @param {string} work - Nonce from validate request * @param {string} difficulty - BLAKE2b hash result which is compared to specified minimum threshold * @param {string} [valid] - Excluded if optional difficulty was not included in the request. 1 for true if nonce is valid for requested difficulty, else 0 for false * @param {string} valid_all - 1 for true if nonce is valid for send blocks, else 0 for false * @param {string} valid_receive - 1 for true if nonce is valid for receive blocks, else 0 for false */ type WorkValidateResponse = { [key: string]: string | undefined hash: string work: string difficulty: string valid?: '0' | '1' valid_all: '0' | '1' valid_receive: '0' | '1' }