Enhancements in the Upcoming Boulton Release

A closer look at the changes to the node software, RPC, developer wallet and beta network

With the upcoming Boulton release right around the corner, let’s take a detailed look at each of the enhancements being introduced. As this is one of the largest releases to ever hit the Nano network, there is plenty to go through, including improvements to the node software, RPC, developer wallet and testing environment. These enhancements are subject to change before the official release and any changes will be noted upon release.

Node Enhancements

When bootstrapping, enables nodes to monitor the real-time network for blocks being confirmed. Because each account-chain is a blockchain, when a block is confirmed, all of the previous blocks on its account-chain are also accepted by the network. For more information on this enhancement, please refer to the lazy bootstrapping explainer.

Implement support for prioritizing blocks with higher work above those with lower work. This is the first change in a series to make Proof-of-Work ultimately dynamic based on network conditions and only implements processing priority on the server side.

Allows nodes to check on the confirmation of old blocks locally, instead of requesting confirmation from the network. Additionally, adds block cementing in nodes. If a rollback occurs, nodes will crash instead of replacing blocks in their ledger. (EDIT: Confirmation Height has been moved to V19)

Log vote processing time to record how many votes are coming in without the spam of logging every vote. Now counts the time spent voting instead of the individual amounts when there are more than 50 votes over 100 milliseconds.

Previously, reps would respond to new blocks with a vote by hash, but if you specifically asked for a confirmation request, they would return an old style vote containing the full block. With this addition, Representatives now respond with a hash vote.

When a node receives the same block multiple times, it now creates and assigns a unique identifier, resulting in the block being stored only once. Reduces memory usage.

Instead of default logging things related to UPnP, introduces a toggle which allows you to turn the option on/off. Defaults to off.

Payload traffic was previously only collected for the real-time network. With this change, statistics related to the bootstrapping network are now also recorded. Allows you to query how many bootstrapping packets have been processed by your node and how many megabytes of blocks have been used by the bootstrap network.

Users can now view the CPU utilization each thread is using, and how much time that thread has been runnable. The updated names correlate node activities to the current running thread and actively assist in finding issues or bottlenecks within the network.

Whenever a node tries to reach out to a host and fails because it is unreachable, statistics are now recorded.

Starts elections immediately instead of waiting for a threshold. As soon as a node receives a block, it begins to process votes, reducing latency.

Eliminates irrelevant timestamp spam and ensures no other logging comes between lines by logging vote tallies in a single block instead of on separate lines.

Decouples vote generation from quorum solicitation. Previously both were done in one large announce loop which on average would delay vote generation by 1/2 the announcement interval.

Now we announce votes as soon as a local decision is made, i.e. a block is inserted into the ledger.

Creates a new thread in the node that handles voting, separate from announcing and reduces the time from when a block enters a representative to when the votes are generated.

If there is an exception thrown by the packet processor thread, now displays information related to the crash.

When processing packets on the real-time network, you can now specify how many threads are used instead of using the same amount as I/O threads.

When an election has been active for a long period of time, will move to the previous block on an account-chain to check confirmation.

Verifies the correct database is being utilized with the correct node. If you have a beta network database and try to run it on a real-time network node, it will fail.

Add two counters for packets which are received by a node that is malformed or belong to a different network, such as the beta network.

Latest tag only points to the latest release, not release candidate. Introduces the latest-including-rc tag, which runs the most recent release or release candidate.

Extends debug_validate_blocks to also validate pending blocks in addition to confirmed blocks.

When receiving state blocks, groups signatures together and verifies them at together, resulting in faster verification.

In order to avoid a situation where too much memory is committed to the bulk_pull_account bootstrap operation, duplicates are now allowed to be sent if too much memory has been allocated.

When signing the same message twice, each signature will be different in order to prevent against side-channel attacks on CPUs.

Dedicates a full hash block to the key and random bytes to prevent side-channel attacks, as recommended in https://eprint.iacr.org/2017/985.pdf.

RPC Enhancements

New RPC for Node ID and Node ID delete. Allows for the deletion of a Node ID and generates a new one upon next connection.

If you use the RPC command version , responds with network protocol version.

When querying the RPC for a list of representatives, enables the option to return voting weight. Allows filtering by account.

Adds additional comprehensive filters to ensure removal of password, wallet, key, and seed for RPC logs.

The command now has the option to respond with the address, hash and amount of pending blocks to your account when enabled. The default is amount and hash.

Developer Wallet Enhancements

When using the wallet_import currently the wallet_id must already exist on the node. With this change, passing — force 1 will allow it to create the wallet using the specified wallet_id and then import the accounts into that wallet from the supplied backup file. When you import a wallet, you no longer have to create the wallet first.

Updates the GUI labeling to use NANO, Mnano, knano and nano instead of XRB, Mxrb, kxrb and xrb respectively in the developer wallet.

The developer wallet now remembers the base unit that was most recently selected.

Dark mode for macOS won’t be supported in QT until version 5.12 which is expected to be released in November. Until that time, this PR adds a patch to force the macOS client to use light mode and ignore the system setting of dark mode. References #1275

For the developer desktop wallet, disables voting and reduces the number of bootstrap connections to reduce the load on slow PCs.

Enhancements to the Testing Environment

Enhancement to the testing suite. Improves how timeouts are dealt it.

Hardcodes bootstrap weight into the beta network, just like the production network.