Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: limit wallet base node peer outbound connections (#6307)
Description --- Added functionality to limit the number of base node peer connections that a wallet can have, based on a config setting. The furtherest nodes will be disconnected, but nodes on the allow list (e.g. connected base node) will be ignored. Request to a newly connected base node for SAF messages will also be limited to the closest connections only. Motivation and Context --- Wallets do not need to be as aggressive in establishing and keeping many connections compared to a base node. How Has This Been Tested? --- System-level testing on `nextnet` Some results for a fresh wallet are below with using these settings: ```rust [wallet.p2p.dht] # The maximum number of peer nodes that a message has to be closer to, to be considered a neighbour. Default: 8 num_neighbouring_nodes = 5 # Number of random peers to include. Default: 4 num_random_nodes = 1 # Connections above the configured number of neighbouring nodes (minimum of 1) will be removed (default: false) minimize_connections = true # The interval to update the neighbouring and random pools, if necessary. Default: 2 minutes connectivity.update_interval = 300 # 2 * 60 # The minimum desired ratio of TCPv4 to Tor connections. TCPv4 addresses have some significant cost to create, # making sybil attacks costly. This setting does not guarantee this ratio is maintained. # Currently, it only emits a warning if the ratio is below this setting. Default: 0.1 (10%) connectivity.minimum_desired_tcpv4_node_ratio = 0.0 # A threshold for the minimum number of peers this node should ideally be aware of. If below this threshold a # more "aggressive" strategy is employed. Default: 50 network_discovery.min_desired_peers = 16 ``` ```rust 2024-05-09 16:59:18.051376500 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 1, Handles: 1 2024-05-09 16:59:23.846098200 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 2, Handles: 2 2024-05-09 16:59:25.141738700 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 2, Handles: 2 2024-05-09 16:59:26.526939300 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 2, Handles: 2 2024-05-09 16:59:31.890309600 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 3, Handles: 3 2024-05-09 16:59:34.875531400 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 4, Handles: 4 2024-05-09 16:59:40.211479200 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 5, Handles: 5 2024-05-09 16:59:51.798007000 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 5, Handles: 5 2024-05-09 17:00:06.424634900 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 5, Handles: 5 2024-05-09 17:00:15.098731700 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 5, Handles: 5 2024-05-09 17:01:34.202148100 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 6, Handles: 6 2024-05-09 17:01:48.869645800 [comms::connectivity::manager] DEBUG minimize_connections: Filtered peers: 10, Handles: 11 2024-05-09 17:01:48.869650900 [comms::connectivity::manager] DEBUG minimize_connections: Disconnecting 'b93ca6de3f1cabbd3a40581224' because the node is not among the 6 closest peers 2024-05-09 17:01:48.869876100 [comms::connectivity::manager] DEBUG minimize_connections: Disconnecting 'b12bdf00bfb5d3c32c235fd2cb' because the node is not among the 6 closest peers 2024-05-09 17:01:48.870090800 [comms::connectivity::manager] DEBUG minimize_connections: Disconnecting '305cd9f487aa9e58f884f534c4' because the node is not among the 6 closest peers 2024-05-09 17:01:48.870431900 [comms::connectivity::manager] DEBUG minimize_connections: Disconnecting '54e1ea3aa6646c75f3247aeab1' because the node is not among the 6 closest peers 2024-05-09 17:04:48.868549100 [comms::connectivity::manager] DEBUG minimize_connections: Filtered peers: 6, Handles: 7 2024-05-09 17:07:48.870620800 [comms::connectivity::manager] DEBUG minimize_connections: Filtered peers: 6, Handles: 7 2024-05-09 17:10:48.883504000 [comms::connectivity::manager] DEBUG minimize_connections: Filtered peers: 6, Handles: 7 2024-05-09 17:13:48.885640800 [comms::connectivity::manager] DEBUG minimize_connections: Filtered peers: 6, Handles: 7 2024-05-09 17:16:48.895746200 [comms::connectivity::manager] DEBUG minimize_connections: Filtered peers: 6, Handles: 7 2024-05-09 17:19:48.909768500 [comms::connectivity::manager] DEBUG minimize_connections: Filtered peers: 6, Handles: 7 2024-05-09 17:20:13.246169600 [comms::dht::connectivity] DEBUG minimize_connections: Filtered peers: 6, Handles: 6 2024-05-09 17:22:48.910592100 [comms::connectivity::manager] DEBUG minimize_connections: Filtered peers: 7, Handles: 8 2024-05-09 17:22:48.910598000 [comms::connectivity::manager] DEBUG minimize_connections: Disconnecting 'e9f94287e9893c4934f89edce7' because the node is not among the 6 closest peers 2024-05-09 17:25:48.919283400 [comms::connectivity::manager] DEBUG minimize_connections: Filtered peers: 6, Handles: 7 ``` ```rust 2024-05-09 16:59:13.888003200 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 4/5 (0 connected), random pool: 1/1 (0 connected, last refreshed 900ns ago), active DHT connections: 0/6 2024-05-09 17:00:35.789826900 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (4 connected), random pool: 1/1 (0 connected, last refreshed 78s ago), active DHT connections: 5/6 2024-05-09 17:00:35.789851700 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (4 connected), random pool: 1/1 (0 connected, last refreshed 78s ago), active DHT connections: 5/6 2024-05-09 17:02:42.134128800 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (0 connected, last refreshed 59s ago), active DHT connections: 6/6 2024-05-09 17:02:42.134163900 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (0 connected, last refreshed 59s ago), active DHT connections: 6/6 2024-05-09 17:03:11.289312400 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (0 connected, last refreshed 88s ago), active DHT connections: 6/6 2024-05-09 17:03:11.289348400 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (0 connected, last refreshed 88s ago), active DHT connections: 6/6 2024-05-09 17:03:15.884240000 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 93s ago), active DHT connections: 6/6 2024-05-09 17:03:15.884288100 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 93s ago), active DHT connections: 6/6 2024-05-09 17:03:17.350056500 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 94s ago), active DHT connections: 6/6 2024-05-09 17:03:17.350087200 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 94s ago), active DHT connections: 6/6 2024-05-09 17:03:21.324948500 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 98s ago), active DHT connections: 6/6 2024-05-09 17:03:21.324980600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 98s ago), active DHT connections: 6/6 2024-05-09 17:03:36.180570200 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 113s ago), active DHT connections: 6/6 2024-05-09 17:03:36.180604500 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 5/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 113s ago), active DHT connections: 6/6 2024-05-09 17:03:47.654100000 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 4/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 124s ago), active DHT connections: 6/6 2024-05-09 17:03:47.654120200 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 4/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 124s ago), active DHT connections: 6/6 2024-05-09 17:04:13.887169600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 4/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 151s ago), active DHT connections: 6/6 2024-05-09 17:04:14.062651100 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 3/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 151s ago), active DHT connections: 6/6 2024-05-09 17:04:14.062669400 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 3/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 151s ago), active DHT connections: 6/6 2024-05-09 17:04:17.893635900 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 2/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 155s ago), active DHT connections: 6/6 2024-05-09 17:04:17.893652200 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 2/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 155s ago), active DHT connections: 6/6 2024-05-09 17:04:59.589188600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 1/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 196s ago), active DHT connections: 6/6 2024-05-09 17:04:59.589202800 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 1/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 196s ago), active DHT connections: 6/6 2024-05-09 17:05:00.693970600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 0/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 197s ago), active DHT connections: 6/6 2024-05-09 17:05:00.693978600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 0/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 197s ago), active DHT connections: 6/6 2024-05-09 17:09:13.888616000 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 0/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 451s ago), active DHT connections: 6/6 2024-05-09 17:14:13.888027100 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 0/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 751s ago), active DHT connections: 6/6 2024-05-09 17:19:13.887787200 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 0/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 1051s ago), active DHT connections: 6/6 2024-05-09 17:24:13.885459600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 0/5 (0 connected), random pool: 1/1 (1 connected, last refreshed 1351s ago), active DHT connections: 6/6 ``` In contrast to the wallet, these results for a fresh base node during the same period: ```rust 2024-05-09 16:58:48.018109100 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (0 connected, last refreshed 11µs ago), active DHT connections: 0/12 2024-05-09 17:00:06.125021800 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (7 connected), random pool: 4/4 (3 connected, last refreshed 65s ago), active DHT connections: 11/12 2024-05-09 17:00:06.125044000 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (7 connected), random pool: 4/4 (3 connected, last refreshed 65s ago), active DHT connections: 11/12 2024-05-09 17:00:35.062813300 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (1 connected, last refreshed 10s ago), active DHT connections: 10/12 2024-05-09 17:00:35.062849200 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (1 connected, last refreshed 10s ago), active DHT connections: 10/12 2024-05-09 17:00:38.762475500 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (1 connected, last refreshed 14s ago), active DHT connections: 10/12 2024-05-09 17:00:38.762518300 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (1 connected, last refreshed 14s ago), active DHT connections: 10/12 2024-05-09 17:00:48.026914700 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (1 connected, last refreshed 23s ago), active DHT connections: 12/12 2024-05-09 17:01:26.772288600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (2 connected), random pool: 4/4 (4 connected, last refreshed 62s ago), active DHT connections: 17/12 2024-05-09 17:01:26.772317900 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (2 connected), random pool: 4/4 (4 connected, last refreshed 62s ago), active DHT connections: 17/12 2024-05-09 17:02:48.023292100 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (4 connected, last refreshed 143s ago), active DHT connections: 18/12 2024-05-09 17:04:48.025758700 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (4 connected, last refreshed 263s ago), active DHT connections: 18/12 2024-05-09 17:06:48.023565000 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (4 connected, last refreshed 383s ago), active DHT connections: 18/12 2024-05-09 17:08:48.023885600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (4 connected, last refreshed 503s ago), active DHT connections: 18/12 2024-05-09 17:10:48.026087000 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (4 connected, last refreshed 623s ago), active DHT connections: 18/12 2024-05-09 17:12:48.025937800 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (4 connected, last refreshed 743s ago), active DHT connections: 18/12 2024-05-09 17:14:48.022341700 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (3 connected, last refreshed 863s ago), active DHT connections: 19/12 2024-05-09 17:16:48.016408600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (3 connected, last refreshed 983s ago), active DHT connections: 19/12 2024-05-09 17:18:48.021984800 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (3 connected, last refreshed 1103s ago), active DHT connections: 19/12 2024-05-09 17:20:48.018004600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (3 connected, last refreshed 1223s ago), active DHT connections: 20/12 2024-05-09 17:20:52.757274600 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (3 connected, last refreshed 1228s ago), active DHT connections: 20/12 2024-05-09 17:20:52.757311800 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (3 connected, last refreshed 1228s ago), active DHT connections: 20/12 2024-05-09 17:22:48.022367900 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (3 connected, last refreshed 1343s ago), active DHT connections: 21/12 2024-05-09 17:24:48.026643700 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (3 connected, last refreshed 1463s ago), active DHT connections: 22/12 2024-05-09 17:26:48.025649400 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (3 connected, last refreshed 1583s ago), active DHT connections: 22/12 2024-05-09 17:28:48.015161100 [comms::dht::connectivity] DEBUG DHT connectivity status: neighbour pool: 8/8 (0 connected), random pool: 4/4 (3 connected, last refreshed 1703s ago), active DHT connections: 22/12 ``` What process can a PR reviewer use to test or verify this change? --- - Code review - System-level testing on `nextnet` <!-- Checklist --> <!-- 1. Is the title of your PR in the form that would make nice release notes? The title, excluding the conventional commit tag, will be included exactly as is in the CHANGELOG, so please think about it carefully. --> Breaking Changes --- - [x] None - [ ] Requires data directory on base node to be deleted - [ ] Requires hard fork - [ ] Other - Please specify <!-- Does this include a breaking change? If so, include this line as a footer --> <!-- BREAKING CHANGE: Description what the user should do, e.g. delete a database, resync the chain -->
- Loading branch information