You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/commands/rpc-protocol.md
+59-2Lines changed: 59 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -126,7 +126,8 @@ If the `count` limit results in stopping before the end of the account chain, th
126
126
**Optional parameters:**
127
127
128
128
-`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).
130
131
-`offset` (decimal integer): skips a number of blocks starting from `head` (if given). Not often used. _Available since version 11.0_
131
132
-`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_
132
133
-`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
894
895
_version 19.0+_
895
896
Default "false". If "true", "contents" will contain a JSON subtree instead of a JSON string.
896
897
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
+
897
905
---
898
906
899
907
### blocks
@@ -978,6 +986,11 @@ Using the optional `json_block` is recommended since v19.0.
978
986
}
979
987
}
980
988
```
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
+
981
994
**Optional "pending", "source"**
982
995
983
996
_pending, source: version 9.0+_
@@ -1173,6 +1186,32 @@ String, empty by default. Set specific ID for new bootstrap attempt for better t
1173
1186
1174
1187
---
1175
1188
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
+
1176
1215
### bootstrap_status
1177
1216
_version 17.0+_
1178
1217
@@ -1417,7 +1456,7 @@ If the block is unknown on the node, the following error will be returned:
1417
1456
1418
1457
### confirmation_info
1419
1458
_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).
1421
1460
1422
1461
!!! note
1423
1462
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)
4602
4641
---
4603
4642
4604
4643
### krai_from_raw
4644
+
4645
+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4646
+
4605
4647
Divide a raw amount down by the krai ratio.
4606
4648
4607
4649
**Request:**
@@ -4621,6 +4663,9 @@ Divide a raw amount down by the krai ratio.
4621
4663
---
4622
4664
4623
4665
### krai_to_raw
4666
+
4667
+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4668
+
4624
4669
Multiply an krai amount by the krai ratio.
4625
4670
4626
4671
**Request:**
@@ -4640,6 +4685,9 @@ Multiply an krai amount by the krai ratio.
4640
4685
---
4641
4686
4642
4687
### mrai_from_raw
4688
+
4689
+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4690
+
4643
4691
Divide a raw amount down by the Mrai ratio.
4644
4692
4645
4693
**Request:**
@@ -4659,6 +4707,9 @@ Divide a raw amount down by the Mrai ratio.
4659
4707
---
4660
4708
4661
4709
### mrai_to_raw
4710
+
4711
+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4712
+
4662
4713
Multiply an Mrai amount by the Mrai ratio.
4663
4714
4664
4715
**Request:**
@@ -4678,6 +4729,9 @@ Multiply an Mrai amount by the Mrai ratio.
4678
4729
---
4679
4730
4680
4731
### rai_from_raw
4732
+
4733
+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
4734
+
4681
4735
Divide a raw amount down by the rai ratio.
4682
4736
4683
4737
**Request:**
@@ -4697,6 +4751,9 @@ Divide a raw amount down by the rai ratio.
4697
4751
---
4698
4752
4699
4753
### rai_to_raw
4754
+
4755
+
Deprecated in V28.0+. For alternatives, see [Unit Conversion RPCs](#unit-conversion-rpcs)
Copy file name to clipboardExpand all lines: docs/protocol-design/spam-work-and-prioritization.md
+5Lines changed: 5 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,6 +21,7 @@ Below is a list of some of Nano's key spam mitigation features.
21
21
|[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+ |
22
22
|[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+ |
23
23
|[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+ |
24
25
|[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+ |
25
26
|[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+ |
26
27
|[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.
35
36
|[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+ |
36
37
| [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
37
38
|[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+ |
38
40
|[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+ |
39
44
|[(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 |
Copy file name to clipboardExpand all lines: docs/releases/node-releases.md
+6-2Lines changed: 6 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@ Updates to the Nano protocol are done through major node releases, occurring app
11
11
## Current Release
12
12
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).
13
13
14
-
--8<-- "release-details-v27-1.md"
14
+
--8<-- "release-details-v28-0.md"
15
15
16
16
**Builds and Commands**
17
17
@@ -22,7 +22,7 @@ The following release is the latest and only release actively supported by the N
22
22
## Next Planned Release
23
23
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).
24
24
25
-
--8<-- "release-details-v28-0.md"
25
+
--8<-- "release-details-v29-0.md"
26
26
27
27
--8<-- "setup-beta-test-testing.md"
28
28
@@ -31,6 +31,10 @@ The following release is currently under development. Details about potential fe
31
31
## Active Releases
32
32
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.
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.
0 commit comments