nano-pow 5.0.1 → 5.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/main.min.js +32 -26
  2. package/package.json +2 -1
package/dist/main.min.js CHANGED
@@ -433,8 +433,6 @@ function blake2b(work, hash) {
433
433
  result = blake2b_IV[0] ^ 0x01010008n ^ v[0] ^ v[8];
434
434
  }
435
435
  function log(work, hash, difficulty) {
436
- logger.groupStart("NanoPow CPU work_validate");
437
- logger.groupEnd("NanoPow CPU work_validate");
438
436
  }
439
437
  function validate(work, hash, difficulty, debug) {
440
438
  logger.isEnabled = debug;
@@ -453,16 +451,32 @@ function validate(work, hash, difficulty, debug) {
453
451
  // src/lib/generate/cpu/index.ts
454
452
  //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
455
453
  //! SPDX-License-Identifier: GPL-3.0-or-later
456
- function generate(hash, difficulty, debug) {
457
- let result2;
458
- do {
459
- result2 = validate(bigintRandom(), hash, difficulty, debug);
460
- } while (result2.valid !== "1");
461
- return {
462
- hash: result2.hash,
463
- work: result2.work,
464
- difficulty: result2.difficulty
465
- };
454
+ var logger2 = new Logger();
455
+ async function generate(hash, difficulty, debug) {
456
+ logger2.isEnabled = debug;
457
+ return new Promise((resolve, reject) => {
458
+ const check3 = () => {
459
+ try {
460
+ let result2 = validate(bigintRandom(), hash, difficulty, false);
461
+ for (let i = 0; i < 32768; i++) {
462
+ result2 = validate(bigintRandom(), hash, difficulty, false);
463
+ if (result2.valid === "1") break;
464
+ }
465
+ if (result2.valid === "1") {
466
+ resolve({
467
+ hash: result2.hash,
468
+ work: result2.work,
469
+ difficulty: result2.difficulty
470
+ });
471
+ } else {
472
+ requestAnimationFrame(check3);
473
+ }
474
+ } catch (err) {
475
+ reject(err);
476
+ }
477
+ };
478
+ check3();
479
+ });
466
480
  }
467
481
 
468
482
  // src/lib/generate/wasm/asm/build/compute.wasm
@@ -546,7 +560,7 @@ var NanoPowWasmWorker = `
546
560
  // src/lib/generate/wasm/index.ts
547
561
  //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
548
562
  //! SPDX-License-Identifier: GPL-3.0-or-later
549
- var logger2 = new Logger();
563
+ var logger3 = new Logger();
550
564
  var isReady = false;
551
565
  var data = {};
552
566
  var v2 = new BigUint64Array(16);
@@ -655,8 +669,7 @@ async function workersStopped() {
655
669
  });
656
670
  }
657
671
  async function generate2(hash, difficulty, effort, debug) {
658
- logger2.isEnabled = debug;
659
- logger2.groupStart("NanoPow WASM work_generate");
672
+ logger3.isEnabled = debug;
660
673
  if (isReady === false) setup();
661
674
  await init2(hash, difficulty, effort);
662
675
  let work = 0n;
@@ -671,7 +684,6 @@ async function generate2(hash, difficulty, effort, debug) {
671
684
  } else {
672
685
  reset();
673
686
  }
674
- logger2.groupEnd("NanoPow WASM work_generate");
675
687
  }
676
688
  return {
677
689
  hash: bigintToHex(hash, 64),
@@ -726,7 +738,7 @@ layout(location=0)in vec4 position;void main(){gl_Position=position;}`;
726
738
  //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
727
739
  //! SPDX-FileContributor: Ben Green <ben@latenightsketches.com>
728
740
  //! SPDX-License-Identifier: GPL-3.0-or-later AND MIT
729
- var logger3 = new Logger();
741
+ var logger4 = new Logger();
730
742
  var positions = new Float32Array([
731
743
  -1,
732
744
  -1,
@@ -763,7 +775,6 @@ var isReady2 = false;
763
775
  var drawEffort = 16;
764
776
  var raf = 0;
765
777
  function createCanvas(size) {
766
- logger3.groupStart("NanoPow WebGL createCanvas");
767
778
  if (canvas == null) {
768
779
  canvas = new OffscreenCanvas(0, 0);
769
780
  canvas.addEventListener("webglcontextlost", (ev) => {
@@ -795,7 +806,6 @@ function createCanvas(size) {
795
806
  size = Math.floor(Math.min(gl.drawingBufferHeight, gl.drawingBufferWidth) / 256) * 256;
796
807
  canvas.height = canvas.width = size;
797
808
  }
798
- logger3.groupEnd("NanoPow WebGL createCanvas");
799
809
  }
800
810
  function compile() {
801
811
  try {
@@ -1021,12 +1031,11 @@ function read(drawFbo) {
1021
1031
  throw new Error("Query reported result but nonce value not found");
1022
1032
  }
1023
1033
  async function generate3(hash, difficulty, effort, debug) {
1024
- logger3.isEnabled = debug;
1034
+ logger4.isEnabled = debug;
1025
1035
  let timeout = false;
1026
1036
  const kill = setTimeout(() => {
1027
1037
  timeout = true;
1028
1038
  }, 6e4);
1029
- logger3.groupStart("NanoPow WebGL work_generate");
1030
1039
  let found = false;
1031
1040
  let result2 = {};
1032
1041
  let isFirstRetry = false;
@@ -1060,7 +1069,6 @@ async function generate3(hash, difficulty, effort, debug) {
1060
1069
  clearTimeout(kill);
1061
1070
  cancelAnimationFrame(raf);
1062
1071
  raf = 0;
1063
- logger3.groupEnd("NanoPow WebGL work_generate");
1064
1072
  if (!found) throw new Error(timeout ? "timed out" : "work not found for unknown reason");
1065
1073
  }
1066
1074
  return {
@@ -1078,7 +1086,7 @@ struct INPUT{hash:array<vec4<u32>,2>,difficulty:vec2<u32>,seed:vec2<u32>};@group
1078
1086
  // src/lib/generate/webgpu/index.ts
1079
1087
  //! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
1080
1088
  //! SPDX-License-Identifier: GPL-3.0-or-later
1081
- var logger4 = new Logger();
1089
+ var logger5 = new Logger();
1082
1090
  var q = new Queue();
1083
1091
  var hashData = new BigUint64Array(4);
1084
1092
  var bufferReset = new BigUint64Array(4);
@@ -1282,13 +1290,12 @@ function read2(dispatchIndex) {
1282
1290
  }
1283
1291
  }
1284
1292
  async function generate4(hash, difficulty, effort, debug) {
1285
- logger4.isEnabled = debug;
1293
+ logger5.isEnabled = debug;
1286
1294
  let timeout = false;
1287
1295
  const kill = setTimeout(() => {
1288
1296
  timeout = true;
1289
1297
  throw new Error("timed out");
1290
1298
  }, 6e4);
1291
- logger4.groupStart("NanoPow WebGPU work_generate");
1292
1299
  let found = false;
1293
1300
  let result2 = {};
1294
1301
  let isFirstRetry = false;
@@ -1325,7 +1332,6 @@ async function generate4(hash, difficulty, effort, debug) {
1325
1332
  } while (isFirstRetry);
1326
1333
  } finally {
1327
1334
  clearTimeout(kill);
1328
- logger4.groupEnd("NanoPow WebGPU work_generate");
1329
1335
  if (!found && timeout) throw new Error("timed out");
1330
1336
  }
1331
1337
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nano-pow",
3
- "version": "5.0.1",
3
+ "version": "5.0.3",
4
4
  "description": "Proof-of-work generation and validation with WebGPU/WebGL/WASM for Nano cryptocurrency.",
5
5
  "keywords": [
6
6
  "nemo",
@@ -50,6 +50,7 @@
50
50
  "asgenerate": "cd src/lib/generate/wasm/asm && rm -rf build && tsc && node build/generate.js > build/index.ts && cp tsconfig.json* build",
51
51
  "benchmark": "npm run build && ./dist/bin/nano-pow.sh --benchmark 10 --debug",
52
52
  "build": "rm -rf {dist,types} && tsc && npm run generate && asc src/lib/generate/wasm/asm/build/index.ts && node esbuild.mjs && cp -p src/bin/nano-pow.sh dist/bin",
53
+ "build:dev": "NODE_ENV=development npm run build",
53
54
  "generate": "npm run asgenerate && npm run glgenerate && npm run gpugenerate",
54
55
  "glgenerate": "cd src/lib/generate/webgl/shaders && rm -rf build && tsc && node build/generate.js > build/draw.frag && cp tsconfig.json* build",
55
56
  "gpugenerate": "cd src/lib/generate/webgpu/shaders && rm -rf build && tsc && node build/generate.js > build/compute.wgsl && cp tsconfig.json* build",