From d37447b8b362893599f35095d75793964a8d8856 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Thu, 24 Jul 2025 14:42:52 -0700 Subject: [PATCH] v0.1.0 --- CHANGELOG.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 5 ++--- package.json | 2 +- 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..bd24914 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,51 @@ + + +## v0.1.0 + +### Notable Changes + +#### Secure by default + +Previously, `libnemo` wallets and accounts had their own lock/unlock mechanisms +which were unwieldy and could get out of sync. Now, the private keys of accounts +derived from wallets are encrypted immediately and stored in an IndexedDB +database instead of session storage, enabling secure persistent access. Accounts +can now sign blocks directly as long as their wallet is unlocked so that the +private key is inaccessible under normal conditions. A new optional `export` +method allows the private key to be backed up if the implementing application +decides to utilize it. Encryption, decryption, and signing all executes in Web +Workers, further isolating the keys from the main thread and any remote access. + +#### PoW built in + +Proof-of-work required to publish blocks is now provided by the `nano-pow` +package. This enables fast PoW using the best available browser GPU technology +and frees up `libnemo` to focus on wallet, account, and block interactions. More +information on `nano-pow` can be found [here](https://npmjs.com/nano-pow). + +#### Persistent rolodex + +Known contacts and their addresses are stored in a Rolodex object in `libnemo`. +Now, that same functionality is stored in IndexedDB instead of simple object +variables, enabling contact management across browser sessions. + +#### BLAKE2b included + +The dependency on the `blake2b` package has been forked, converted to +TypeScript, updated to use 64-bit integers natively, refactored for legibility, +and integrated directly into `libnemo`. + +#### Develop with NodeJS + +Some browser APIs used by `libnemo` are not available in NodeJS, specifically +Web Workers and IndexedDB. Leveraging `esbuild` features, a simple polyfill now +enables Node worker threads in place of Web Workers. A new dev dependency on +`fake-indexeddb` enables the IndexedDB features required for data storage in the +Node environment. The Node-specific output is distributed as a separate bundle. + +#### Testing, testing + +Even more tests have been implemented to rigorously check functionality. diff --git a/package-lock.json b/package-lock.json index 062e907..bbe2428 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,14 @@ { "name": "libnemo", - "version": "0.0.21", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "libnemo", - "version": "0.0.21", + "version": "0.1.0", "license": "(GPL-3.0-or-later AND MIT AND ISC)", "dependencies": { - "buffer": "6.0.3", "nano-pow": "^5.1.4" }, "devDependencies": { diff --git a/package.json b/package.json index a721c83..ddc841b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "libnemo", - "version": "0.0.21", + "version": "0.1.0", "description": "Asynchronous, non-blocking Nano cryptocurrency integration toolkit.", "keywords": [ "nemo", -- 2.47.3