Skip to content

Commit 2aa165d

Browse files
qwahzipwojcikdev
andauthored
V28 Nano-Docs Update (#717)
* Create release-v28-0.md Add basic v28 release page * Update node-releases.md Adding v28 to current/active release documentation * Create release-details-v29-0.md Creating v29 release details stub * Update release-details-v28-0.md * Update mkdocs.yml Adding V28 navigation links * Update main.html Adding V28.0 announcement banner * Update current-build-links-main.md Adding V28 links * Update current-build-links-test.md Adding V28 test links * Update release-details-v27-0.md Adding V27.0 release date * Update release-details-v27-1.md Adding V27.1 release date * Update spam-work-and-prioritization.md Adding V28 spam resistance improvements to the table * Update release-v28-0.md Adding V28 release info to mirror the official blog post. * Update release-v28-0.md Updated known issues, added information for RPC changes * Update rpc-protocol.md w/ deprecation note for old conversion RPCs Adding additional deprecation note for old conversion RPCs * Update release-v28-0.md Add link to alternative unit conversion RPCs * Update release-v28-0.md Adding additional RPC changes & major updates (vote rebroadcast improvements & the fork_cache addition) * Update rpc-protocol.md Adding v28 RPC update info: - include_linked_account parameter was added to the account_history, block_info, and blocks_info - bootstrap_reset - bootstrap_priorities * Update spam-work-and-prioritization.md Adding vote rebroadcaster filtering * Update toml-config-commands.md w/ --update_config * Update release-v28-0.md w/ config changes section * Update release-v28-0.md Fixing broken snippet link * Update release-v28-0.md (reorder sections) Reordering sections * Update release-v28-0.md w/ CLI doc link for toml configs Adding additional detail links for the config change section * Update release-v28-0.md --------- Co-authored-by: Piotr Wójcik <3044353+pwojcikdev@users.noreply.github.com>
1 parent a436493 commit 2aa165d

13 files changed

Lines changed: 210 additions & 25 deletions

docs/commands/rpc-protocol.md

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ If the `count` limit results in stopping before the end of the account chain, th
126126
**Optional parameters:**
127127

128128
- `raw` (bool): if set to `true` instead of the default `false`, instead of outputting a simplified send or receive explanation of blocks (intended for wallets), output all parameters of the block itself as seen in block_create or other APIs returning blocks. It still includes the "account" and "amount" properties you'd see without this option. State/universal blocks in the raw history will also have a `subtype` field indicating their equivalent "old" block. Unfortunately, the "account" parameter for open blocks is the account of the source block, not the account of the open block, to preserve similarity with the non-raw history.
129-
- `head` (64 hexadecimal digits string, 256 bit): instead of using the latest block for a specified account, use this block as the head of the account instead. Useful for pagination.
129+
- `head` (64 hexadecimal digits string, 256 bit): instead of using the latest block for a specified account, use this block as the head of the account instead. Useful for pagination.
130+
- `include_linked_account` (bool): _version 28.0+._ When set to `true`, the response will include a new field `linked_account`, which returns the linked account associated with the block (or "0" if no linked account exists/was found e.g. due to pruning).
130131
- `offset` (decimal integer): skips a number of blocks starting from `head` (if given). Not often used. _Available since version 11.0_
131132
- `reverse` (bool): if set to `true` instead of the default `false`, the response starts from `head` (if given, otherwise the first block of the account), and lists blocks up to the frontier (limited by "count"). **Note**: the field `previous` in the response changes to `next`. _Available since version 19.0_
132133
- `account_filter` (array of public addresses): results will be filtered to only show sends/receives connected to the provided account(s). _Available since version 19.0_. **Note:** In v19.0, this option does not handle receive blocks; fixed in v20.0.
@@ -894,6 +895,13 @@ Note: The `Balance` in contents is a uint128. However, it will be a hex-encoded
894895
_version 19.0+_
895896
Default "false". If "true", "contents" will contain a JSON subtree instead of a JSON string.
896897

898+
899+
**Optional `include_linked_account`**
900+
901+
_version 28.0+_
902+
(bool): When set to `true`, the response will include a new field `linked_account`, which returns the linked account associated with the block (or "0" if no linked account exists/was found e.g. due to pruning).
903+
904+
897905
---
898906

899907
### blocks
@@ -978,6 +986,11 @@ Using the optional `json_block` is recommended since v19.0.
978986
}
979987
}
980988
```
989+
**Optional `include_linked_account`**
990+
991+
_version 28.0+_
992+
(bool): When set to `true`, the response will include a new field `linked_account`, which returns the linked account associated with the block (or "0" if no linked account exists/was found e.g. due to pruning).
993+
981994
**Optional "pending", "source"**
982995

983996
_pending, source: version 9.0+_
@@ -1173,6 +1186,32 @@ String, empty by default. Set specific ID for new bootstrap attempt for better t
11731186

11741187
---
11751188

1189+
### bootstrap_priorities
1190+
_version 28.0+_
1191+
Dumps info about priority and blocking sets to aid in debugging any potential problems
1192+
1193+
**Request:**
1194+
```json
1195+
{
1196+
"action": "bootstrap_priorities"
1197+
}
1198+
```
1199+
1200+
---
1201+
1202+
### bootstrap_reset
1203+
_version 28.0+_
1204+
Resets ascending bootstrap state - both priority and blocking sets are cleared.
1205+
1206+
**Request:**
1207+
```json
1208+
{
1209+
"action": "bootstrap_reset"
1210+
}
1211+
```
1212+
1213+
---
1214+
11761215
### bootstrap_status
11771216
_version 17.0+_
11781217

@@ -1417,7 +1456,7 @@ If the block is unknown on the node, the following error will be returned:
14171456

14181457
### confirmation_info
14191458
_version 16.0+_
1420-
Returns info about an unconfirmed active election by **root**. Including announcements count, last winner (initially local ledger block), total tally of voted representatives, concurrent blocks with tally & block contents for each. Using the optional `json_block` is recommended since v19.0.
1459+
Returns info about an unconfirmed active election by **root**. Including announcements count, last winner (initially local ledger block), total tally of voted representatives, concurrent blocks with tally & block contents for each. Using the optional `json_block` is recommended since v19.0. Updated in v28.0 to include a list of representatives_final (representatives that have voted with final votes).
14211460

14221461
!!! note
14231462
The roots provided are two parts and differ between the first account block and subsequent blocks:
@@ -4602,6 +4641,9 @@ Deprecated in V24.0+. Replaced by [accounts_receivable](#accounts_receivable)
46024641
---
46034642

46044643
### krai_from_raw
4644+
4645+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4646+
46054647
Divide a raw amount down by the krai ratio.
46064648

46074649
**Request:**
@@ -4621,6 +4663,9 @@ Divide a raw amount down by the krai ratio.
46214663
---
46224664

46234665
### krai_to_raw
4666+
4667+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4668+
46244669
Multiply an krai amount by the krai ratio.
46254670

46264671
**Request:**
@@ -4640,6 +4685,9 @@ Multiply an krai amount by the krai ratio.
46404685
---
46414686

46424687
### mrai_from_raw
4688+
4689+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4690+
46434691
Divide a raw amount down by the Mrai ratio.
46444692

46454693
**Request:**
@@ -4659,6 +4707,9 @@ Divide a raw amount down by the Mrai ratio.
46594707
---
46604708

46614709
### mrai_to_raw
4710+
4711+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4712+
46624713
Multiply an Mrai amount by the Mrai ratio.
46634714

46644715
**Request:**
@@ -4678,6 +4729,9 @@ Multiply an Mrai amount by the Mrai ratio.
46784729
---
46794730

46804731
### rai_from_raw
4732+
4733+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4734+
46814735
Divide a raw amount down by the rai ratio.
46824736

46834737
**Request:**
@@ -4697,6 +4751,9 @@ Divide a raw amount down by the rai ratio.
46974751
---
46984752

46994753
### rai_to_raw
4754+
4755+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4756+
47004757
Multiply an rai amount by the rai ratio.
47014758

47024759
**Request:**

docs/protocol-design/spam-work-and-prioritization.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Below is a list of some of Nano's key spam mitigation features.
2121
| [Balance tiers (buckets)](https://github.com/nanocurrency/nano-node/pull/3208) | As of V27, there are 63 balance tiers (buckets) that nodes rotate through in a round-robin manner. Spamming a single bucket (e.g. Ӿ0.0001) has minimal impact on accounts in other buckets (e.g. Ӿ1, Ӿ5, etc). See [prioritization details](#prioritization-details) below. | V22+ |
2222
| [Bootstrap limits](https://github.com/nanocurrency/nano-node/pull/4158) | Configurable ascended bootstrapper limits via requests_limit, database_requests_limit, pull_count, timeout, [bootstrap_bandwidth_limit](https://github.com/nanocurrency/nano-node/blob/develop/nano/node/nodeconfig.hpp#L129-L130), [bootstrap_connections_max](https://github.com/nanocurrency/nano-node/blob/develop/nano/node/nodeconfig.hpp#L100-L101), etc. Default outbound bootstrap traffic limit is 5MB/s. Default max incoming bootstrap connections count is 64 (lower values save IOPs & bandwidth). | V25+ |
2323
| [Bounded active election buckets](https://github.com/nanocurrency/nano-node/pull/4626) | Limits election bucket size and allows for dynamically dropping and scheduling higher priority elections. Buckets can be configured to opportunistically use more available space if AEC is underutilized. | V27+ |
24+
| [Bounded block backlog](https://github.com/nanocurrency/nano-node/pull/4787) | Implements limits on unconfirmed transaction storage and processing, which helps ensure consistent confirmation rates during high network load and prevents resource exhaustion attacks. | V28+ |
2425
| [Bounded unchecked memory table](https://github.com/nanocurrency/nano-node/pull/3835) | Add a memory container for unchecked blocks once the initial bootstrap threshold is reached, with blocks pruned in FIFO order. Limited to two items per dependency. | V23.3+ |
2526
| [Fair queueing](https://github.com/nanocurrency/nano-node/pull/4476) | Each peer (node) & each component (e.g. [block processor](https://github.com/nanocurrency/nano-node/pull/4476), [vote processor](https://github.com/nanocurrency/nano-node/pull/4536), [bootstrap server](https://github.com/nanocurrency/nano-node/pull/4584), [request aggregator](https://github.com/nanocurrency/nano-node/pull/4598), etc) gets its own small queue with a configurable size & priority. Nodes process these queues in a (weighted) round robin manner. This ensures that even when network is under stress, data coming from well-behaved peers is ingested quickly. | V27+ |
2627
| [Final vote replies](https://github.com/nanocurrency/nano-node/pull/4648) | For blocks that are marked as final or confirmed, nodes will only respond with final votes (not non-final votes). This signficantly reduces network (specifically voting) traffic. | V27+ |
@@ -35,7 +36,11 @@ Below is a list of some of Nano's key spam mitigation features.
3536
| [Prevent requeuing of blocks with invalid signatures](https://github.com/nanocurrency/nano-node/pull/4130) | Requeueing of blocks with invalid signatures during lazy bootstrapping is not needed, since an invalid signature will always be invalid and doesn't need to be bootstrapped again. | V25+ |
3637
| [Proof-of-Work](https://github.com/nanocurrency/nano-node/blob/develop/nano/lib/work.cpp) | Each Nano transaction requires a small Proof-of-Work. | All
3738
| [Rep crawler overhaul](https://github.com/nanocurrency/nano-node/pull/4449#issuecomment-1968919321) | Consistently find representatives, even when vote requests are unreliable | V27+ |
39+
| [Traffic Shaping](https://github.com/nanocurrency/nano-node/pull/4786) | Enables more equal distribution of network resources among peers & proactively manages network traffic to help prevent congestion. | V28+ |
3840
| [Vote by hash](https://github.com/nanocurrency/nano-node/pull/1025) | Instead of voting with a full block (256 bytes), representatives vote with block hashes (32 bytes), and batch these hashes. As of V27, nodes can vote for up to [255 hashes](https://github.com/nanocurrency/nano-node/pull/4683) in a single vote. | V15+ |
41+
| [Vote Distribution Optimization](https://github.com/nanocurrency/nano-node/pull/4766) | Separate vote flooding patterns for PRs and non-PRs, to ensure votes are distributed more efficiently. | V28+ |
42+
| [Vote Filtering](https://github.com/nanocurrency/nano-node/pull/4735) | Filters out vote duplicates early on during packet processing. | V28+ |
43+
| [Vote Rebroadcaster Filtering](https://github.com/nanocurrency/nano-node/pull/4849) | An index that tracks and filters vote rebroadcasts. Includes: tracking the top 100 reps by weight, per-rep history of recent votes & block hashes, deduplicating by vote hash, minimum time interval between rebroadcasts of the same hash from the same rep. | V28+ |
3944
| [(Future) Additional improvements](https://github.com/nanocurrency/nano-node/issues/4262) | See list of potential future improvements that have been noted for additional research. | Future |
4045

4146
## Work algorithm details

docs/releases/node-releases.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Updates to the Nano protocol are done through major node releases, occurring app
1111
## Current Release
1212
The following release is the latest and only release actively supported by the Nano Foundation. This release and the [Active Releases](#active-releases) below represent the only node versions that will participate on the main network. More details can be found on the [Current Release Notes page](/releases/current-release-notes).
1313

14-
--8<-- "release-details-v27-1.md"
14+
--8<-- "release-details-v28-0.md"
1515

1616
**Builds and Commands**
1717

@@ -22,7 +22,7 @@ The following release is the latest and only release actively supported by the N
2222
## Next Planned Release
2323
The following release is currently under development. Details about potential features to be included can be found in the [Nano Roadmap GitHub Project](https://github.com/orgs/nanocurrency/projects/27).
2424

25-
--8<-- "release-details-v28-0.md"
25+
--8<-- "release-details-v29-0.md"
2626

2727
--8<-- "setup-beta-test-testing.md"
2828

@@ -31,6 +31,10 @@ The following release is currently under development. Details about potential fe
3131
## Active Releases
3232
The following releases can still actively participate on the network by peering with other nodes of the same versions. Any nodes running versions earlier than these will no longer peer with the latest and fall out of sync with the network.
3333

34+
--8<-- "release-details-v28-0.md"
35+
36+
---
37+
3438
--8<-- "release-details-v27-1.md"
3539

3640
---

docs/releases/release-v28-0.md

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
title: Release notes - V28.0 nano node
2+
description: Details of the V28.0 nano node release.
3+
4+
# V28.0
5+
6+
--8<-- "release-details-v28-0.md"
7+
8+
---
9+
10+
## Major updates
11+
12+
### Bounded Block Backlog
13+
14+
The Bounded Block Backlog (BBB) adds a maximum limit for unconfirmed transactions (currently 100,000), helping prevent resource exhaustion attacks & ensuring more consistent confirmation rates during high network load.
15+
16+
### Traffic Shaping
17+
18+
Traffic shaping complements the fair queuing system implemented in V27, by managing outbound network traffic more intelligently. This helps ensure more equal distribution of bandwidth between peers, reduces network congestion, & helps maintain performance during peak network usage.
19+
20+
### RocksDB Optimizations
21+
22+
Nano's RocksDB implementation has been updated to V9.7.2, and the default configuration settings have been updated to match current best practices. Additionally, a range of improvements related to memory usage, thread handling, & lock management have been included, improving stability and performance for nodes using the RocksDB database backend.
23+
24+
### Vote Generation Improvements
25+
26+
The vote generation system has been redesigned to be more resource-efficient, reducing CPU usage, improving priority vote processing, & bundling votes more intelligently.
27+
28+
### Vote Filter Implementation
29+
30+
A new vote filter implements sophisticated deduplication and relevancy checks, eliminating redudant votes, reducing bandwidth usage, lowering memory usage, & reducing overall network load.
31+
32+
### Vote Rebroadcasting Overhaul
33+
34+
The vote_rebroadcaster component was overhauled, making vote rebroadcasting smarter & more efficient. Previously we used a simple queue with a naive filter which rebroadcasted all processed votes. Since a vote can contain up to 255 hashes and the same vote can be processed multiple times depending on the exact timing of election activation, this introduced a rather significant inefficiency where we could rebroadcast the same vote multiple times, wasting bandwidth. The vote rebroadcaster overhaul significantly improves this by improving tracking & filtering of vote rebroadcasts.
35+
36+
### Bootstrap & Database Optimizations
37+
38+
Bulk frontier scanning has been added to the ascending bootstrapper, processing up to 1,000 accounts simultaneously. I/O overhead has also been reduced through smart caching and optimised database queries. Additionally, a new `fork_cache` & block bootstrapping improvements were added, speeding up fork resolution during certain bootstrap scenarios.
39+
40+
### Legacy Code Removal
41+
42+
The legacy bootstrapper has been completely removed, simplifying the codebase & improving code maintability.
43+
44+
### Bug fixes
45+
46+
Several bugs were fixed, including race conditions, missing notifications, & dependency issues.
47+
48+
---
49+
50+
## Upgrade notices
51+
52+
### RPC changes
53+
54+
#### Bootstrap RPCs
55+
56+
The following bootstrap related RPC commands have been extended, modified, or added:
57+
58+
* `bootstrap_status`: previously this returned the status of legacy bootstrap; modified to return the status of ascending bootstrap
59+
* `bootstrap_reset`: resets ascending bootstrap state, both priority and blocking sets are cleared
60+
* `bootstrap_priorities`: dumps info about priority and blocking sets to aid in debugging any potential problems
61+
62+
Please note that the above bootstrap RPC commands are internal/diagnostic RPCs, & may not be stable.
63+
64+
#### Confirmation_info RPC
65+
66+
This is a backwards compatible change that updated the `confirmation_info` RPC call to include a list of `representatives_final` (representatives that have voted with final votes). Thanks to MajorChump for submitting this PR!
67+
68+
#### Ratio & Conversion related RPCs
69+
70+
Xrb_ratio has been removed and replaced with nano_ratio:
71+
72+
| Existing name | ratio | Value | New name |
73+
|---------------|-------|-------|----------|
74+
| Gxrb_ratio | 10^33 | 1000 nano | Knano_ratio |
75+
| Mxrb_ratio | 10^30 | 1 nano | nano_ratio |
76+
| kxrb_ratio | 10^27 | 0.001 nano | __removed__ |
77+
| xrb_ratio | 10^24 | 0.000001 | __removed__ |
78+
79+
The following deprecated RPC endpoints for conversion have been removed:
80+
* `krai_from_raw`
81+
* `krai_to_raw`
82+
* `mrai_from_raw`
83+
* `mrai_to_raw`
84+
* `rai_from_raw`
85+
* `rai_to_raw`
86+
87+
For alternatives, see [Unit Conversion RPCs](../commands/rpc-protocol.md#unit-conversion-rpcs)
88+
89+
#### Other RPC Changes
90+
91+
An optional `include_linked_account` parameter was added to the `account_history`, `block_info`, and `blocks_info` RPC endpoints. When enabled, the response will include a new field `linked_account`, which returns the linked account associated with the block (or "0" if no linked account exists/was found e.g. due to pruning). Thanks to Exxenoz for submitting this PR!
92+
93+
### Config changes
94+
95+
While the previous toml for database backend configuration is still supported for now, it is being replaced by `database_backend = "lmdb"` or `database_backend = "rocksdb"` under `[node]`.
96+
97+
Consider reviewing and updating your configuration files with the `--update_config` or `--generate_config` CLI parameters. Review the [toml config quick reference](../snippets/toml-config-commands.md), or the [CLI documentation](../commands/command-line-interface.md#nano_node-commands) for additional details.
98+
99+
### Known Issues
100+
101+
Bootstrapping from scratch with pruning enabled causes the node to crash. As a potential workaround, node operators may be able to bootstrap with pruning disabled, and then enable pruning after bootstrapping is complete. A higher max_pruning_depth may also reduce the frequency of crashes. Pruning is considered experimental, so use it at your own risk - pruning is not currently recommended for important production services.
102+
103+
---
104+
105+
## Official V28 Blog Post
106+
See [here](https://nano.org/en/blog/v27-denarius-preview--eb8bceac) for the official V28 blog post.
107+
108+
---
109+
110+
## V28 GitHub Milestone
111+
See [here](https://github.com/nanocurrency/nano-node/milestone/34?closed=1) for the V28 GitHub milestone.
112+
113+
---
114+
115+
--8<-- "current-build-links-main.md"

0 commit comments

Comments
 (0)