## 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
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
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
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
difficult to test against, issues could occur and should be reported to
<bug-libnemo@codecow.com>.
-#### 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
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.
## 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
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
```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
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
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
## 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,
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
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
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
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,
## 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
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 -
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
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
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
`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.