From 089d96775ca566571b2541e47fa23fc7f69c977c Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Sun, 26 Apr 2026 14:32:52 -0700 Subject: [PATCH] Reformat changelog. --- CHANGELOG.md | 298 ++++++++++++++++++--------------------------------- 1 file changed, 105 insertions(+), 193 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a01c40..2ea210a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,15 +7,11 @@ SPDX-License-Identifier: GPL-3.0-or-later ## v0.12.1 -### Notable Changes - -Fixed signing blocks from an Exodus wallet. +- Fixed signing blocks from an Exodus wallet. ## v0.12.0 -### Notable Changes - -#### Sign arbitrary data directly +### Sign arbitrary data directly Previously, the process that `libnemo` followed in order to sign arbitrary data, represented as one or more strings, was to first hash them all using BLAKE2b and @@ -27,7 +23,7 @@ Now, the input data is treated as UTF-8 strings and encoded to bytes using the browser built-in `TextEncoder` class, and then it is passed directly to `nano25519` for signing without hashing. -#### Refactored Account class +### Refactored Account class Now that public keys can be derived extremely quickly using `nano25519`, there is no need to require async loading to Account objects. The constructor is now @@ -53,7 +49,7 @@ The `index` property has been removed from the `Account` class because it is intrinsic to wallets, not accounts. `Wallet` objects still keep track of their accounts by index as before. -#### Generate PoW when transmitting Block +### Generate PoW when transmitting Block The transmission of a block to the Nano network implies that the block is fully populated with the necessary data to be processed. One common stumbling block @@ -67,16 +63,14 @@ already a step that is subject to lag from network conditions, ensuring that the block is not rejected for missing `work` should hopefully improve the dev experience. -### Other Changes +### Other changes in v0.12.0 -Fixed key byte argument being zeroed by `Tools.sign()`, leaving the key handling -to the responsibility of the consumer. +- Fixed key byte argument being zeroed by `Tools.sign()`, leaving the key + handling to the responsibility of the consumer. ## v0.11.0 -### Notable Changes - -#### NEW! Exodus wallet support +### NEW! Exodus wallet support Exodus wallet uses a non-standard derivation path for Nano accounts, and the derivation path in their documentation is not entirely accurate which has led to @@ -88,7 +82,7 @@ supports a new Wallet type of "Exodus". Since this is a feature that is difficult to test against, issues could occur and should be reported to . -#### Improved vault worker +### Improved vault worker The previous version of the Web Worker for wallet vaults was constructed using complex stringification of worker code as well as dependencies. This limited @@ -98,45 +92,33 @@ using esbuild. Consequently, bespoke implementations of Ed25519 andd secp256k1 have been deprecated in favor of packages `nano25519` and `@noble/secp256k1` respectively. -### Other Changes - -Nonces of 16 bytes can now be signed by Ledger devices. +### Other changes in v.0.11.0 -Vault worker and host now exchange domain and ID info to prevent cross-talk with -other active workers. - -Build targets dropped back to ES2022 and Node 22 to improve compatibility. - -IIFE build removed. - -Dependencies and distribution file names updated. +- Nonces of 16 bytes can now be signed by Ledger devices. +- Vault worker and host now exchange domain and ID info to prevent cross-talk + with other active workers. +- Build targets dropped back to ES2022 and Node 22 to improve compatibility. +- IIFE build removed. +- Dependencies and distribution file names updated. ## v0.10.5 -### Notable Changes - -Update domain name. +- Update domain name. ## v0.10.4 -### Notable Changes - -Deprecate NamedData type which is redundant with the built-in Record type. - -Insert Ledger wallets to database with zero-length buffers for encryption data -instead of `undefined`. - -Improve performance by eliminating some object property lookups. +- Deprecate NamedData type which is redundant with the built-in Record type. +- Insert Ledger wallets to database with zero-length buffers for encryption data + instead of `undefined`. +- Improve performance by eliminating some object property lookups. ## v0.10.3 -### Notable Changes - -Updated dependencies. +- Updated dependencies. ## v0.10.2 -### Notable Changes +### Ledger status events An event detailing the current Ledger status is now emitted when the status is changed. @@ -162,17 +144,12 @@ myWallet.addEventListener("unlocked", () => { ## v0.10.1 -### Notable Changes - -Fixed restore of Ledger wallet from IndexedDB. - -Updated dependencies. +- Fixed restore of Ledger wallet from IndexedDB. +- Updated dependencies. ## v0.10.0 -### Notable Changes - -#### Ledger libraries now required dependency +### Ledger libraries now required dependency Reliable access to Ledger hardware wallets is becoming more of a critical issue for nano holders, so the Ledger tools are now baked into `libnemo` instead of @@ -180,32 +157,22 @@ hovering around as optional dependencies. The `Ledger` class itself is also now exported for consumer usage, although the majority of functions can and should be executed via a `Wallet`. -### Other Changes +### Other changes in v.0.10.0 -Remove self-references from various classes so `esbuild` does not need to rename -them when bundling. - -Pinned `esbuild` targets to specific ES versions. - -Copy all emitted `types` instead of consolidating into one massive file. - -Fix `buffer` polyfill injection. - -Add and fix JSDoc documentation. - -Remove `Vault` static instance tracker. - -Fixed calls to `Account` map methods. - -`Tools` is its own class instead of a collection of functions. - -Updated tests. +- Remove self-references from various classes so `esbuild` does not need to + rename them when bundling. +- Pinned `esbuild` targets to specific ES versions. +- Copy all emitted `types` instead of consolidating into one massive file. +- Fix `buffer` polyfill injection. +- Add and fix JSDoc documentation. +- Remove `Vault` static instance tracker. +- Fixed calls to `Account` map methods. +- `Tools` is its own class instead of a collection of functions. +- Updated tests. ## v0.9.0 -### Notable Changes - -#### Ledger connection configuration +### Ledger connection configuration Ledger hardware wallets can connect over HID or USB transport protocols; the former is generally recommended by the company themselves, especially now @@ -217,30 +184,23 @@ explicitly. For example: ```javascript const myLedger = await Wallet.create("Ledger"); -await myLedger.config({ connection: "ble" }); // other options are 'hid' or 'usb' +await myLedger.config({ connection: "ble" }); // other options: 'hid', 'usb' ``` -### Other Changes - -Build process file hierarchy reorganized. - -Fixed test of verify method for Ledger wallets. +### Other changes in v0.9.0 -Fixed missing constants when building unminified bundle. - -Fixed test not cleaning up wallet workers properly. +- Build process file hierarchy reorganized. +- Fixed test of verify method for Ledger wallets. +- Fixed missing constants when building unminified bundle. +- Fixed test not cleaning up wallet workers properly. ## v0.8.1 -### Notable Changes - -Fix restored wallets with undefined type. +- Fix restored wallets with undefined type. ## v0.8.0 -### Notable Changes - -#### Configure wallet timeout +### Configure wallet timeout Previously, the default timeout period before a wallet autolocked itself was set to two minutes. Now, a new method `wallet.config()` accepts a configuration @@ -248,30 +208,25 @@ object consisting of currently one property `timeout` indicating the timeout period in seconds between 10 and 600 (10 minutes). If left unconfigured, the default is still two minutes. -#### Check for lock status +### Check for lock status A new property `wallet.isLocked` indicates if the wallet's Vault is in a locked state. -### Other Changes +### Other changes in v0.8.0 -Vault timer includes a simple interval ticker to keep the worker from sleeping. - -Developer build now includes sourcemaps for easier debugging. - -Some new tests have been added and some existing ones fixed. +- Vault timer includes a simple interval ticker to keep the worker from + sleeping. +- Developer build now includes sourcemaps for easier debugging. +- Some new tests have been added and some existing ones fixed. ## v0.7.1 -### Notable Changes - -Fix restored wallets with undefined type. +- Fix restored wallets with undefined type. ## v0.7.0 -### Notable Changes - -#### Wallet accounts use Map +### Wallet accounts use Map Since `libnemo` allows any arbitrary account index within the valid index range to be derived from a wallet, iterating arrays can be catastrophically slow. A @@ -279,26 +234,20 @@ custom class with a custom iterator implementation was used previously, but to take advantage of engine performance optimizations geared towards built-ins, it now uses the Map class instead. -### Other Changes +### Other changes in v0.7.0 -Accounts implement toJSON() method to stringify all relevant properties. - -Tests are type checked, and the custom assert implementation in tests uses type -guards to inform subsequent code. - -README and package description updated. +- Accounts implement toJSON() method to stringify all relevant properties. +- Tests are type checked, and the custom assert implementation in tests uses + type guards to inform subsequent code. +- README and package description updated. ## v0.6.1 -### Notable Changes - -Fix restored wallets with undefined type. +- Fix restored wallets with undefined type. ## v0.6.0 -### Notable Changes - -#### Minification support +### Minification support Due to how the `Vault` worker was constructed, the build system could not take advantage of all minification features without breaking how variable names and @@ -309,34 +258,24 @@ frameworks like Angular to bundle `libnemo` without further breakage. ## v0.5.4 -### Notable Changes - -Fix restored wallets with undefined type. +- Fix restored wallets with undefined type. ## v0.5.3 -### Notable Changes - -Fix type comparison to undefined when restoring Wallets from database. +- Fix type comparison to undefined when restoring Wallets from database. ## v0.5.2 -### Notable Changes - -Remove async-await from new Vault functionality in favor of Promise chaining -(see [v0.4.0](#v040) for details). +- Remove async-await from new Vault functionality in favor of Promise chaining + (see [v0.4.0](#v040) for details). ## v0.5.1 -### Notable Changes - -Fix type definitions for unit denomination `convert()` function overloads. +- Fix type definitions for unit denomination `convert()` function overloads. ## v0.5.0 -### Notable Changes - -#### Sign arbitrary data with Wallet +### Sign arbitrary data with Wallet The ability to "log in with Nano" is gaining traction, and while the `sign()` function from `Tools` allows signing arbitrary string data using a private key, @@ -349,49 +288,38 @@ future update could enable signing full-length messages without hashing them. Also note that the Nano app for Ledger wallets still have a bug which prevents them from signing nonces. -#### Implement missing password update method +### Implement missing password update method The `Vault` class for wallet secrets supports an `update` action to re-encrypt them using a new password if the wallet is unlocked. However, the `Wallet` class itself did not have a method to make this request to its vault. This has now been implemented. -### Other Changes - -The `convert()` tool now supports denomination output as a float in addition to -string and bigint. - -Some functions extracted to separate files to improve organization. +### Other changes in v0.5.0 -Type definitions updated. - -Tests added or updated to accomodate new features. +- The `convert()` tool now supports denomination output as a float in addition + to string and bigint. +- Some functions extracted to separate files to improve organization. +- Type definitions updated. +- Tests added or updated to accomodate new features. ## v0.4.3 -### Notable Changes - -Fix restored wallets with undefined type. +- Fix restored wallets with undefined type. ## v0.4.2 -### Notable Changes - -Fix type comparison to undefined when restoring Wallets from database. +- Fix type comparison to undefined when restoring Wallets from database. ## v0.4.1 -### Notable Changes - -Redefine Vault worker class members as instance properties instead of static -properties and initialize the worker with `new` instead of an `init()` method -which allows it to privatize its properties again. +- Redefine Vault worker class members as instance properties instead of static + properties and initialize the worker with `new` instead of an `init()` method + which allows it to privatize its properties again. ## v0.4.0 -### Notable Changes - -#### Vault abandons async-await +### Vault abandons async-await Bundlers try to optimize code based on features supported by the target browser environment as well as work around shortcomings or bugs. Sometimes this results @@ -404,44 +332,34 @@ private members that were being hoisted outside the class scope (and thus being lost when loading the worker) are now initialized in a static method so that they keep their place in the class as designed. -#### BLAKE2b outputs bytes only +### BLAKE2b outputs bytes only This change is intended purely to simplify the structure of the BLAKE2b hashing implementation. The `digest()` method no longer accepts any parameters and will always output bytes; hex string is no longer an output option, and the bytes should be converted if necessary. -### Other Changes +### Other changes in v0.4.0 -Fixed some erroneous JSdoc comment documentation. +- Fixed some erroneous JSdoc comment documentation. ## v0.3.3 -### Notable Changes - -Fix restored wallets with undefined type. +- Fix restored wallets with undefined type. ## v0.3.2 -### Notable Changes - -Fix type comparison to undefined when restoring Wallets from database. +- Fix type comparison to undefined when restoring Wallets from database. ## v0.3.1 -### Notable Changes - -Include IIFE build in distribution. - -Remove an unused CryptoKey usage type. - -Adjust how Vault is stringified and loaded into web worker. +- Include IIFE build in distribution. +- Remove an unused CryptoKey usage type. +- Adjust how Vault is stringified and loaded into web worker. ## v0.3.0 -### Notable Changes - -#### Reorganization +### Reorganization It is easy to get lost when scrolling through code in monolithic long files, and it is also equally easy to get lost in too many layers of project file @@ -449,12 +367,12 @@ hierarchy. This update aims to find a balance between the two and has separated key behavior into smaller modules while resisting a deeply-nested directory structure. Basically, this update moved files around. -#### `import` methods are now `load` methods +### `import` methods are now `load` methods To avoid confusion with the `import` JavaScript keyword, `import()` methods like `Wallet.import()` and `Account.import()` have been renamed to `load()`. -#### Expanded account info +### Expanded account info The `wallet.refresh()` method now uses batch endpoints to fetch basic account data like balance, frontier, and representative. The `account.refresh()` method @@ -464,7 +382,7 @@ viewing multiple accounts and basic data should be presented to the end user, and the account method should be called when viewing an individual account or creating and processing transactions. -#### Ledger aligned with other wallet types +### Ledger aligned with other wallet types The various functions of the Ledger wallet have been abstracted away under the hood of the overarching `Wallet` class. Account derivation, secret verification, @@ -473,15 +391,11 @@ wallet is `libnemo` as its 'BIP-44' and 'BLAKE2b' counterparts. ## v0.2.1 -### Notable Changes - -Fixes issue with wallet Safe blocking `update` requests. +- Fixes issue with wallet Safe blocking `update` requests. ## v0.2.0 -### Notable Changes - -#### Wallet merge +### Wallet merge Wallets have been merged into a single class for simplicity's sake. Now, the `create()` and `import()` static methods have a `type` parameter to indicate the @@ -490,7 +404,7 @@ Ledger wallets are still supported and extend the base Wallet class for its additional implementation details, but the API is largely shared between the two. -#### Wallet security +### Wallet security Security has been improved by removing wallet secrets from the main thread entirely. All sensitive actions - seed generation, account derivation, signing - @@ -501,22 +415,20 @@ self-destructs and can only be accessed by the wallet itself and its isolated worker environment. The wallet is unlocked with a password as usual and will now automatically relock after 5 minutes. -#### Account handling +### Account handling Accounts can still be imported via private keys, but only the public keys are retained. Signing should happen using a Wallet or by passing a key directly to a block. -### Other Changes +### Other changes in v0.2.0 -Pretty much every other component has been refactored or improved to accomodate the new -wallet system. +- Pretty much every other component has been refactored or improved to + accomodate the new wallet system. ## v0.1.0 -### Notable Changes - -#### Secure by default +### 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 @@ -528,7 +440,7 @@ 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 +### 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 @@ -536,19 +448,19 @@ and frees up `libnemo` to focus on wallet, account, and block interactions. More information on `nano-pow` can be found at its [npm package page](https://npmjs.com/nano-pow). -#### Persistent rolodex +### 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 +### 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 +### 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 @@ -556,6 +468,6 @@ 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 +### Testing, testing Even more tests have been implemented to rigorously check functionality. -- 2.47.3