]> git.codecow.com Git - nano-pow.git/commitdiff
Use typed array for blake validate results.
authorChris Duncan <chris@codecow.com>
Sat, 23 May 2026 06:00:14 +0000 (23:00 -0700)
committerChris Duncan <chris@codecow.com>
Sat, 23 May 2026 06:00:14 +0000 (23:00 -0700)
src/lib/validate/index.ts

index 5b31053d418ccb646c6ebf1ff8da28dfa1e075ff..198ca6e417c038029eef4239495ac47f531d1a1f 100644 (file)
@@ -35,10 +35,10 @@ const blake2b_sigma: readonly (readonly number[])[] = Object.freeze([
 const blake2b_param = 0x01010008n
 
 // Initialize CPU
-const v: BigUint64Array = new BigUint64Array(16)
-const m: BigUint64Array = new BigUint64Array(16)
+const v: BigUint64Array<ArrayBuffer> = new BigUint64Array(16)
+const m: BigUint64Array<ArrayBuffer> = new BigUint64Array(16)
 const mView: DataView = new DataView(m.buffer)
-let result: bigint = 0n
+const result: BigUint64Array<ArrayBuffer> = new BigUint64Array(1)
 
 function G (a: number, b: number, c: number, d: number, x: number, y: number): void {
        v[a] += v[b] + m[x]
@@ -69,7 +69,7 @@ function ROUND (i: number): void {
 
 function init (seed: BigUint64Array, hash: BigUint64Array): void {
        // Reset buffers before each calculation
-       result = 0n
+       result[0] = 0n
        for (let i = 0; i < 8; i++) {
                v[i] = blake2b_IV[i]
                v[i + 8] = blake2b_IV[i]
@@ -90,7 +90,7 @@ function blake2b (work: Uint8Array, hash: Uint8Array): void {
        for (let i = 0; i < 12; i++) {
                ROUND(i)
        }
-       result = (blake2b_IV[0] ^ 0x01010008n ^ v[0] ^ v[8])
+       result[0] = (blake2b_IV[0] ^ 0x01010008n ^ v[0] ^ v[8])
 }
 
 function log (work: Uint8Array<ArrayBuffer>, hash: Uint8Array<ArrayBuffer>, difficulty: bigint): void {
@@ -98,7 +98,7 @@ function log (work: Uint8Array<ArrayBuffer>, hash: Uint8Array<ArrayBuffer>, diff
        LOG: logger.log('NanoPow CPU work_validate', 'work', BytesToHex(work.buffer))
        LOG: logger.log('NanoPow CPU work_validate', 'hash', BytesToHex(hash.buffer))
        LOG: logger.log('NanoPow CPU work_validate', 'difficulty', difficulty.toString(16).padStart(16, '0'))
-       LOG: logger.log('NanoPow CPU work_validate', 'result', result.toString(16).padStart(16, '0'))
+       LOG: logger.log('NanoPow CPU work_validate', 'result', BytesToHex(result.buffer, 16))
        LOG: logger.groupEnd('NanoPow CPU work_validate')
 }
 
@@ -109,10 +109,10 @@ function validate (work: Uint8Array<ArrayBuffer>, hash: Uint8Array<ArrayBuffer>,
        return {
                hash: BytesToHex(hash.buffer, 64),
                work: BytesToHex(work.buffer, 16),
-               difficulty: result.toString(16).padStart(16, '0'),
-               valid: (result >= difficulty) ? '1' : '0',
-               valid_all: (result >= SEND) ? '1' : '0',
-               valid_receive: (result >= RECEIVE) ? '1' : '0'
+               difficulty: BytesToHex(result.buffer, 16),
+               valid: (result[0] >= difficulty) ? '1' : '0',
+               valid_all: (result[0] >= SEND) ? '1' : '0',
+               valid_receive: (result[0] >= RECEIVE) ? '1' : '0'
        }
 }