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]
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]
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 {
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')
}
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'
}
}