nano-pow 5.0.0 → 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.
- package/dist/bin/nano-pow.sh +1 -1
- package/dist/main.min.js +32 -26
- package/docs/nano-pow.service +4 -7
- package/package.json +3 -2
package/dist/bin/nano-pow.sh
CHANGED
|
@@ -10,7 +10,7 @@ NANO_POW_LOGS="$NANO_POW_HOME"/logs;
|
|
|
10
10
|
mkdir -p "$NANO_POW_LOGS";
|
|
11
11
|
if [ "$1" = '--server' ]; then
|
|
12
12
|
shift;
|
|
13
|
-
|
|
13
|
+
npm start >> "$NANO_POW_LOGS"/nano-pow-server-$(date -I).log 2>&1 &
|
|
14
14
|
sleep 1;
|
|
15
15
|
if [ "$(ps | grep $(cat $NANO_POW_HOME/server.pid))" = '' ]; then
|
|
16
16
|
cat $(ls -td "$NANO_POW_LOGS"/* | head -n1);
|
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
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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/docs/nano-pow.service
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
## Example systemd service unit file to start the nano-pow server at login.
|
|
5
5
|
## Run `systemctl --user edit --force --full nano-pow.service`
|
|
6
|
-
## Copy contents below into editor,
|
|
6
|
+
## Copy contents below into editor, modify WorkingDirectory as needed, and save.
|
|
7
7
|
## Run `systemctl --user enable nano-pow --now` to start it now and at boot.
|
|
8
8
|
|
|
9
9
|
[Unit]
|
|
@@ -11,15 +11,12 @@ Description=NanoPow Server
|
|
|
11
11
|
|
|
12
12
|
[Service]
|
|
13
13
|
# Must point at install path, often in `npm_config_prefix` directory:
|
|
14
|
-
|
|
14
|
+
WorkingDirectory=%h/.local/lib/node_modules/nano-pow
|
|
15
15
|
|
|
16
|
-
Type=
|
|
17
|
-
|
|
16
|
+
Type=simple
|
|
17
|
+
ExecStart=/usr/bin/npm start
|
|
18
18
|
EnvironmentFile=-%h/.nano-pow/config
|
|
19
19
|
PassEnvironment=NANO_POW_DEBUG NANO_POW_EFFORT NANO_POW_PORT
|
|
20
|
-
PIDFile=%h/.nano-pow/server.pid
|
|
21
|
-
StandardOutput=journal+console
|
|
22
|
-
StandardError=journal+console
|
|
23
20
|
|
|
24
21
|
[Install]
|
|
25
22
|
WantedBy=default.target
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nano-pow",
|
|
3
|
-
"version": "5.0.
|
|
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,12 +50,13 @@
|
|
|
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",
|
|
56
57
|
"prepare": "npm run build",
|
|
57
58
|
"score": "npm run build && ./dist/bin/nano-pow.sh --effort 4 --benchmark 100 --score 100",
|
|
58
|
-
"start": "./dist/bin/
|
|
59
|
+
"start": "node --max-http-header-size=1024 --max-old-space-size=256 ./dist/bin/server.js",
|
|
59
60
|
"test": "npm run build && ./test/script.sh"
|
|
60
61
|
},
|
|
61
62
|
"devDependencies": {
|