From: Chris Duncan Date: Fri, 10 Jul 2026 17:29:15 +0000 (-0700) Subject: Update version. X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=c6d241aaebc59257ab7633106db4c6d49728c04b;p=nano-pow.git Update version. --- diff --git a/CHANGELOG.md b/CHANGELOG.md index f3c72bf..89d6dfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,115 +5,150 @@ SPDX-License-Identifier: GPL-3.0-or-later # Changelog -## v5.1.15 +## v5.2.0 ### Notable Changes -Fix cache corruption by deleting cached work if it fails validation. +#### Updated exports + +For those projects which import from a CDN link and targeted the +`dist/main.min.js` +file _directly_, the bundle is now named `dist/index.js`. The `work_generate` +and `work_validate` functions are now exported directly in addition to the +default `NanoPow` wrapper object. There is also a new export for NanoPow utility +functions at `dist/utils.index.js`. + +#### Improved seeding + +Each `work_generate` call uses a random seed to begin computation. Previously, +this seed was generated separately for each thread according to the API being +used. Now, seeds for all threads are randomly generated per generate-and-check +loop at the same time which reduces the number of expensive calls to +`crypto.getRandomValues()`. -Fix test webpage crashing on load in certain browsers. +#### Stricter input validation -Replace some slow operators with bitshifts. +Input parsing has been refactored to be more legible and reduce the supported +space of string values. Specifically, only `0x` hexadecimal inputs are allowed +now when passing strings; previously binary `0b` and octal `0o` strings were +also supported as input strings. Inputs can still be passed as bigint values +instead of strings. + +### Other Changes + +- Fix issue where WASM worker could erroneously respond to unrelated requests. +- Fix issue where WASM would produce invalid results for small blockhash values. +- Return cached work values immediately instead of being queued. +- WebGPU support improved with additional checks. +- Update the CLI server to respond to `HEAD` requests and return `Content-Type`, + respond to known unsupported HTTP methods with 405, and respond to all other + HTTP methods with 501. +- Test caching behavior when duplicate hash is encountered. +- Refactor testing web page to improve run execution. +- Improve WASM performance with better AssemblyScript config. +- Update dependencies and TypeScript configuration. +- Improve markdown format of this README. + +## v5.1.15 + +### Notable Changes + +- Fix cache corruption by deleting cached work if it fails validation. +- Fix test webpage crashing on load in certain browsers. +- Replace some slow operators with bitshifts. ## v5.1.14 ### Notable Changes -Update sub-dependency to resolve vulnerability notice. +- Update sub-dependency to resolve vulnerability notice. ## v5.1.13 ### Notable Changes -Test WebGL availability by additionally checking for immediate context loss. +- Test WebGL availability by additionally checking for immediate context loss. ## v5.1.12 ### Notable Changes -Fix invalid WebGL canvas due to iOS Safari regression. +- Fix invalid WebGL canvas due to iOS Safari regression. ## v5.1.11 ### Notable Changes -Pin build targets for compatibility on systems missing built-in base64 support. +- Pin build targets for compatibility on systems missing built-in base64 support. ## v5.1.10 ### Notable Changes -Update domain name references, including `git clone` URL. - -Apply automatic formatting of Markdown files. - -Update dependencies. +- Update domain name references, including `git clone` URL. +- Apply automatic formatting of Markdown files. +- Update dependencies. ## v5.1.9 ### Notable Changes -Fix CLI input parsing. - -Update dependencies. +- Fix CLI input parsing. +- Update dependencies. ## v5.1.8 ### Notable Changes -Update dependencies. +- Update dependencies. ## v5.1.7 ### Notable Changes -Eliminate self-references to allow esbuild to generate anonymous classes. +- Eliminate self-references to allow esbuild to generate anonymous classes. ## v5.1.6 ### Notable Changes -Export utility method to clear work cache. - -Update optional `puppeteer` dependency. +- Export utility method to clear work cache. +- Update optional `puppeteer` dependency. ## v5.1.5 ### Notable Changes -Specify backing buffer types where needed as required by new TypeScript built-in -type definitions. - -Remove `browser` field from `package.json` due to causing issues with Webpack -bundlers. - -Update dev dependencies. +- Specify backing buffer types where needed as required by new TypeScript built-in + type definitions. +- Remove `browser` field from `package.json` due to causing issues with Webpack + bundlers. +- Update dev dependencies. ## v5.1.4 ### Notable Changes -Adjust types for API support and fix optional options parameter types. +- Adjust types for API support and fix optional options parameter types. ## v5.1.3 ### Notable Changes -Fix types for optional properties of NanoPowOptions object. +- Fix types for optional properties of NanoPowOptions object. ## v5.1.2 ### Notable Changes -Untrack AssemblyScript build artifacts. - -Add missing license headers for REUSE compliance. +- Untrack AssemblyScript build artifacts. +- Add missing license headers for REUSE compliance. ## v5.1.1 ### Notable Changes -Fix test page CDN URL. +- Fix test page CDN URL. ## v5.1.0 @@ -141,50 +176,44 @@ ensure accuracy of results. ### Other Changes -Added utility functions for hex string validation. - -Expanded list of test blockhashes for longer testing. - -Consolidated npm scripts. +- Added utility functions for hex string validation. +- Expanded list of test blockhashes for longer testing. +- Consolidated npm scripts. ## v5.0.5 ### Notable Changes -Fixed missing required CSP directives in puppeteer browser instance for WASM -compilation and `blob:` Web Workers. - -Reverted reduced WASM iteration count since it seems to be a Firefox issue. +- Fixed missing required CSP directives in puppeteer browser instance for WASM + compilation and `blob:` Web Workers. +- Reverted reduced WASM iteration count since it seems to be a Firefox issue. ## v5.0.4 ### Notable Changes -Fix bug in WASM workers causing it to stop listening after first result. - -Reduce WASM module hash iterations to check results more often. +- Fix bug in WASM workers causing it to stop listening after first result. +- Reduce WASM module hash iterations to check results more often. ## v5.0.3 ### Notable Changes -Bump version due to npm publishing issue. +- Bump version due to npm publishing issue. ## v5.0.2 ### Notable Changes -Fix loop in CPU `work_generate` that would block the main thread. - -Remove additional logger statements from production builds. +- Fix loop in CPU `work_generate` that would block the main thread. +- Remove additional logger statements from production builds. ## v5.0.1 ### Notable Changes -Update scripts to work better with systemd services. - -Update test webpage import URLs. +- Update scripts to work better with systemd services. +- Update test webpage import URLs. ## v5.0.0 @@ -228,45 +257,35 @@ instructions on usage in the header. ### Other Changes -WebGL implementation now uses quadruple buffering to optimize for frame latency. - -New `Logger` and `Queue` classes improve logging and request handling. - -Fixed bug in IPC implementation which communicates between CLI and server. - -Server requests that throw an error will now return an error object to the user. - -Fixed issue with server puppeteer launching NanoPow before GPU was ready. - -Shaders now generated with scripts for more robust algorithm implementations. - -Improved configuration checks with NanoPowConfig class. - -Defer loading of APIs until requested. - -Improved type checking and removed unnecessary type exports. - -Reorganized project structure. +- WebGL implementation now uses quadruple buffering to optimize for frame latency. +- New `Logger` and `Queue` classes improve logging and request handling. +- Fixed bug in IPC implementation which communicates between CLI and server. +- Server requests that throw an error will now return an error object to the user. +- Fixed issue with server puppeteer launching NanoPow before GPU was ready. +- Shaders now generated with scripts for more robust algorithm implementations. +- Improved configuration checks with NanoPowConfig class. +- Defer loading of APIs until requested. +- Improved type checking and removed unnecessary type exports. +- Reorganized project structure. ## v4.1.9 ### Notable Changes -Test WebGL availability by additionally checking for immediate context loss. +- Test WebGL availability by additionally checking for immediate context loss. ## v4.1.8 ### Notable Changes -Pin published package versions from CDNs on testing page. - -Update domain name. +- Pin published package versions from CDNs on testing page. +- Update domain name. ## v4.1.7 ### Notable Changes -Update dependencies. +- Update dependencies. ## v4.1.6 @@ -282,29 +301,19 @@ This denial-of-service attack vector is now mitigated in NanoPow by restricting ### Other Changes -Refactor server to extract code into manageable helper functions, improve +- Refactor server to extract code into manageable helper functions, improve organization, and fix some minor issues. - -Merge shared code in GPU implementation work calls and extract it into modular +- Merge shared code in GPU implementation work calls and extract it into modular functions. - -Extract some basic shared code into utils file and bundle it. - -Simplify lib exports. - -Introduce new typings for server config and PoW results. - -Clean up CLI and fix some minor issues. - -Limit Node heap to improve CLI and server performance. - -Implement work queue to better manage inbound requests. - -Fix nonce check in compute shader. - -Fix test page benchmark results from not being sorted properly. - -Update server test script. +- Extract some basic shared code into utils file and bundle it. +- Simplify lib exports. +- Introduce new typings for server config and PoW results. +- Clean up CLI and fix some minor issues. +- Limit Node heap to improve CLI and server performance. +- Implement work queue to better manage inbound requests. +- Fix nonce check in compute shader. +- Fix test page benchmark results from not being sorted properly. +- Update server test script. ## v4.1.5 @@ -344,61 +353,49 @@ prior to actual work calls. ### Other Changes -Reduce workgroup size to 64 to improve portability between GPU vendors. - -Capture logging over IPC from server process spawned by CLI. - -Lower timeout duration when tool is busy. - -Allow difficulty of zero. - -Throw an error if work to be validated does not match the nonce returned by the -compute result. - -Add max HTTP header size limit to launch script to protect server process. - -Check more generate calls in test script, and reduce run size of benchmark. - -Tweak error messaging. +- Reduce workgroup size to 64 to improve portability between GPU vendors. +- Capture logging over IPC from server process spawned by CLI. +- Lower timeout duration when tool is busy. +- Allow difficulty of zero. +- Throw an error if work to be validated does not match the nonce returned by +the compute result. +- Add max HTTP header size limit to launch script to protect server process. +- Check more generate calls in test script, and reduce run size of benchmark. +- Tweak error messaging. ## v4.1.4 ### Notable Changes -Save server logs by day instead of by execution. - -Display server process ID on every log entry instead of just once when starting -server. - -Adjust log timestamp formatting. +- Save server logs by day instead of by execution. +- Display server process ID on every log entry instead of just once when +starting server. +- Adjust log timestamp formatting. ## v4.1.3 ### Notable Changes -Use SIGHUP to reload configuration values (except PORT which requires +- Use SIGHUP to reload configuration values (except PORT which requires relaunching the server). - -Refactor CLI to spawn the server as a child process so that it can be assigned a +- Refactor CLI to spawn the server as a child process so that it can be assigned a port from the operating system dynamically, avoiding port collisions with other processes and subsequent failure, and communicate it to the CLI using IPC. - -Fix fast exit failing to clean up resources by handling SIGINT and SIGTERM. +- Fix fast exit failing to clean up resources by handling SIGINT and SIGTERM. ## v4.1.2 ### Notable Changes -Load configuration from file (`$HOME/.nano-pow/config`) and use it to set +- Load configuration from file (`$HOME/.nano-pow/config`) and use it to set execution options if relevant environment variables are not present. ## v4.1.1 ### Notable Changes -Print server error if it does not launch, typically due to puppeteer issue. - -Improve reset process on errors and timeouts. +- Print server error if it does not launch, typically due to puppeteer issue. +- Improve reset process on errors and timeouts. ## v4.1.0 @@ -426,45 +423,36 @@ samples. ### Other Changes -Store seed and blockhash in fast shared workgroup memory. - -Fix documentation in inline help and manual page. - -Fix CLI default port collision with server default port. - -Change timestamp on server log files to something more user-friendly. - -Test concurrent curl requests to NanoPow server. - -Fix action listed in server response error message. - -Prevent unnecessary favicon load in puppeteer source and in test webpage. +- Store seed and blockhash in fast shared workgroup memory. +- Fix documentation in inline help and manual page. +- Fix CLI default port collision with server default port. +- Change timestamp on server log files to something more user-friendly. +- Test concurrent curl requests to NanoPow server. +- Fix action listed in server response error message. +- Prevent unnecessary favicon load in puppeteer source and in test webpage. ## v4.0.11 ### Notable Changes -Change default port to 5040 to reduce collisions with other projects which +- Change default port to 5040 to reduce collisions with other projects which commonly specify a default port of 3000. - -Improve formatting of environment variable documentation. +- Improve formatting of environment variable documentation. ## v4.0.10 ### Notable Changes -Complete conversion from `threshold` terminology and parameters to `difficulty` +- Complete conversion from `threshold` terminology and parameters to `difficulty` to align with official Nano node specifications. - -Update documentation. - -Remove deprecated functions from type definition file. +- Update documentation. +- Remove deprecated functions from type definition file. ## v4.0.9 ### Notable Changes -Fix missing crypto module used to compute source hash for CSP. +- Fix missing crypto module used to compute source hash for CSP. ## v4.0.8 @@ -488,72 +476,63 @@ The server now recognizes the following envars: ### Other Changes -Remove size getter from GL. - -Fix types and related imports. - -Add tests to server test script. - -Update package configuration files. +- Remove size getter from GL. +- Fix types and related imports. +- Add tests to server test script. +- Update package configuration files. ## v4.0.7 ### Notable Changes -Read NANO_POW_EFFORT from environment when starting server to set GPU demand. - -Ignore command line arguments when starting server and use environment variables instead. - -Fix default effort used by server to match the underlying implementation. - -Update README and manual for clarity, completeness, and accuracy. +- Read NANO_POW_EFFORT from environment when starting server to set GPU demand. +- Ignore command line arguments when starting server and use environment variables instead. +- Fix default effort used by server to match the underlying implementation. +- Update README and manual for clarity, completeness, and accuracy. ## v4.0.6 ### Notable Changes -Initialize upon first method execution instead of upon import in order to avoid +- Initialize upon first method execution instead of upon import in order to avoid conflicts with GPU. - -Fix file paths in server test. +- Fix file paths in server test. ## v4.0.5 ### Notable Changes -Use `npm prepare` script to ensure build artifacts are up-to-date before +- Use `npm prepare` script to ensure build artifacts are up-to-date before installing locally or publishing. ## v4.0.4 ### Notable Changes -Fix CLI file paths for older versions of Node that do not have +- Fix CLI file paths for older versions of Node that do not have `import.meta.dirname` available. ## v4.0.3 ### Notable Changes -Import `node:crypto` module for older versions of Node which require it to be +- Import `node:crypto` module for older versions of Node which require it to be specified explicitly. - -Fix warning in shell script when no arguments are present. - -Log IP address instead of static 'http://localhost' value from testing. +- Fix warning in shell script when no arguments are present. +- Log IP address instead of static value from testing. ## v4.0.2 ### Notable Changes -Fix server file paths for older versions of Node that do not have +- Fix server file paths for older versions of Node that do not have `import.meta.dirname` available. ## v4.0.1 ### Notable Changes -Update `nano-pow` command to call shell script which subsequently calls +- Update `nano-pow` command to call shell script which subsequently calls `server.js` if called with `nano-pow --server` or `cli.js` as usual if not. ## v4.0.0 @@ -581,30 +560,25 @@ new methods. Also note that while the original methods accepted a truncated #### Other Changes -Write basic test script to check server. - -Extract help text to separate documentation file. - -Fix Typescript types. +- Write basic test script to check server. +- Extract help text to separate documentation file. +- Fix Typescript types. ## v3.2.2 ### Notable Changes -Implement lazy initialization of both APIs. - -Parse CLI output with regular expression and try to print as JSON before falling +- Implement lazy initialization of both APIs. +- Parse CLI output with regular expression and try to print as JSON before falling back to text. - -Fix CLI statements that were causing issues with older versions of node. - -Fix getter type. +- Fix CLI statements that were causing issues with older versions of node. +- Fix getter type. ## v3.2.1 ### Notable Changes -Implement hash-based Content Security Policy (CSP) in CLI puppeteer page. +- Implement hash-based Content Security Policy (CSP) in CLI puppeteer page. ## v3.2.0 @@ -632,24 +606,19 @@ goes with which block. #### Other Changes -Indicate a more specific `threshold` by passing a full 16-character string to +- Indicate a more specific `threshold` by passing a full 16-character string to the new `work_` methods. - -Changed `NanoPowGl.size` property to return total pixel count. - -Add typings for request and response objects consumed by new `work_` methods. - -Add more tests for receive threshold edge cases. - -Improve build process. - -Expand documentation. +- Changed `NanoPowGl.size` property to return total pixel count. +- Add typings for request and response objects consumed by new `work_` methods. +- Add more tests for receive threshold edge cases. +- Improve build process. +- Expand documentation. ## v3.1.4 ### Notable Changes -#### Reorganize source directory structure. +#### Reorganize source directory structure As the project expands in scope, a better directory structure is necessary to keep files organized. Documentation and test files are now in top-level folders. @@ -697,28 +666,24 @@ nano-pow --json #### Other Changes -Updated CLI documentation for new input/output features. - -Refactored WebGL draw shader to align with WebGPU compute shader on BLAKE2b +- Updated CLI documentation for new input/output features. +- Refactored WebGL draw shader to align with WebGPU compute shader on BLAKE2b initialization. - -Rename file of test blockhashes since they are not seeds. - -Update README license section. +- Rename file of test blockhashes since they are not seeds. +- Update README license section. ## v3.1.2 ### Notable Changes -Made minor changes to CLI inline help and manual. - -Added file of blockhashes used in `test.html`. +- Made minor changes to CLI inline help and manual. +- Added file of blockhashes used in `test.html`. ## v3.1.1 ### Notable Changes -Fixed minor issues with CLI inline help and manual. +- Fixed minor issues with CLI inline help and manual. ## v3.1.0 @@ -767,33 +732,27 @@ documentation is available with `man nano-pow`. ### Other Changes -Fixed a bug in the compute shader where the final 64-bit addition missed a carry +- Fixed a bug in the compute shader where the final 64-bit addition missed a carry bit and resulted in a slightly different, though still valid, work value than expected, which only came to light when testing a custom max-value threshold (0xFFFFFFFF) well beyond Nano requirements. - -Fixed a bug in the final hash digest and subsequent threshold comparison which +- Fixed a bug in the final hash digest and subsequent threshold comparison which used the original blake2b_IV[0] value instead of the value modified by the parameter block. - -Fixed types.d.ts parameter definitions. - -Delayed canvas setup in WebGL implementation to allow for a cleaner +- Fixed types.d.ts parameter definitions. +- Delayed canvas setup in WebGL implementation to allow for a cleaner initialization. - -Added more comprehensive documentation of BLAKE2b configuration and +- Added more comprehensive documentation of BLAKE2b configuration and initialization in compute shader, for those who are interested in learning how it works. - -Add more logging when the debug option is used. - -Updated dependencies. +- Add more logging when the debug option is used. +- Updated dependencies. ## v3.0.1 ### Notable Changes -Implemented `esbuild` legal comment retention. +- Implemented `esbuild` legal comment retention. ## v3.0.0 @@ -817,40 +776,27 @@ benefit from the change, no regressions were observed. ### Other Changes -Simplify the WebGL pixel-coordinate-based nonce variation. - -Unroll WebGL main G mix function loop for improved performance. - -Add input to WebGL draw shader to better differentiate between search and +- Simplify the WebGL pixel-coordinate-based nonce variation. +- Unroll WebGL main G mix function loop for improved performance. +- Add input to WebGL draw shader to better differentiate between search and validate processes. - -Simplify WebGL vertex shader now that it is only required for drawing the +- Simplify WebGL vertex shader now that it is only required for drawing the fullscreen quad and not for pixel coordinates. - -Maintain WebGL canvas between draw calls, unless level-of-effort has changed, to +- Maintain WebGL canvas between draw calls, unless level-of-effort has changed, to reduce overhead of executing a search. - -Attempt to handle WebGL context loss, with improved reset function, by +- Attempt to handle WebGL context loss, with improved reset function, by reinitializing class. - -Reduce promise stack buildup when waiting for WebGL query result. - -Fix WebGL color buffer clearing by using correct API function. - -Improve nonce seed generation in both WebGL and WebGPU by switching from +- Reduce promise stack buildup when waiting for WebGL query result. +- Fix WebGL color buffer clearing by using correct API function. +- Improve nonce seed generation in both WebGL and WebGPU by switching from `crypto.getRandomValues()` to insecure `Math.random()` which is justified by the fact that NanoPow generates proof-of-work, not keys. - -Reduce garbage collection by reusing static variables. - -Add debug logging that obeys user-provided debug flag which is now stored as a +- Reduce garbage collection by reusing static variables. +- Add debug logging that obeys user-provided debug flag which is now stored as a static variable as well. - -Add Typescript typings for new WebGL types. - -Fix minor issues with test page. - -Add benchmark results table. +- Add Typescript typings for new WebGL types. +- Fix minor issues with test page. +- Add benchmark results table. ## v2.0.0 @@ -870,7 +816,7 @@ NanoPow.search(blockhash, { threshold: "fffffc00", effort: 16, debug: true }); ``` **This is a breaking change.** Integrations already using the optional threshold -parameter should update calls to pass { threshold: } instead. +parameter should update calls to pass `{ threshold: value }` instead. #### Align with reference implementation of BLAKE2b @@ -890,40 +836,36 @@ i.e. `vec2` instead of `u32`. This has several benefits: ### Other Changes -Expand the options available on the sample testing page. - -Fix a bug with the validate function where a valid but different nonce would be +- Expand the options available on the sample testing page. +- Fix a bug with the validate function where a valid but different nonce would be reported as a match to the input nonce. - -Fix a bug with the truncated average benchmark calculation. +- Fix a bug with the truncated average benchmark calculation. ## v1.2.4 ### Notable Changes -Fix duplicate code on testing page due to bad merge commit. - -Increase WebGPU dispatch size. +- Fix duplicate code on testing page due to bad merge commit. +- Increase WebGPU dispatch size. ## v1.2.3 ### Notable Changes -Add bespoke TypeScript definition file. - -Remove usage of package `imports` property and use regular relative paths. +- Add bespoke TypeScript definition file. +- Remove usage of package `imports` property and use regular relative paths. ## v1.2.2 ### Notable Changes -Compile to `dist/` instead of `build/`. +- Compile to `dist/` instead of `build/`. ## v1.2.1 ### Notable Changes -Rename bundle output file. +- Rename bundle output file. ## v1.2.0 @@ -941,9 +883,8 @@ desired. ### Other Changes -Clarify the README with better instructions. - -Provide additional context about test progress on the testing webpage. +- Clarify the README with better instructions. +- Provide additional context about test progress on the testing webpage. ## v1.1.0 @@ -956,16 +897,15 @@ Nano work threshold requirements. #### Other Changes -Fix packaging bugs to eliminate npm errors about imports and types. - -Fix repo cloning so that `git clone https://codecow.com/nano-pow.git` works as +- Fix packaging bugs to eliminate npm errors about imports and types. +- Fix repo cloning so that `git clone https://codecow.com/nano-pow.git` works as expected (thanks to u/the_azarian for helping track this down). ## v1.0.0 ### Notable Changes -#### NanoPow released! +#### NanoPow Initial Release Written in Javascript and WGSL, NanoPow leverages the cutting edge WebGPU API to achieve massively increased proof-of-work speed for supported devices directly @@ -978,4 +918,4 @@ in the browser! compute shaders. - Released under the GPLv3 license to promote user freedom and FOSS principles. -Full announcement: https://www.reddit.com/r/nanocurrency/comments/1hz841f/announcing_nanopow_local_proofofwork_at/ +Full announcement: