Changelog
This page displays a full list of all the changes during our release cycle from v2024.3-eclipse
onwards. Operators can find here the newest updates together with links to relevant documentation. The list is sorted so that the newest changes appear first.
Our documentation often refer to syntax annotated in <>
brackets. We use this expression for variables that are unique to each user (like path, local moniker, versions etcetra).
Any syntax in <>
brackets needs to be substituted with your correct name or version, without the <>
brackets. If you are unsure, please check our table of essential parameters and variables (opens in a new tab).
magura-drift
Second patch to v2024.13-magura
release version.
- Release binaries (opens in a new tab)
nym-node
version1.1.12
nym-node
Binary Name: nym-node
Build Timestamp: 2024-11-29T13:10:51.813092288Z
Build Version: 1.1.12
Commit SHA: 4a9a5579c40ad956163ea02e01d7b53aef2ac8ef
Commit Date: 2024-11-29T14:06:32.000000000+01:00
Commit Branch: HEAD
rustc Version: 1.83.0
rustc Channel: stable
cargo Profile: release
- This patch adds a peer storage manager to fix issues causing external clients to be blocked, ensuring they can successfully connect to different nodes.
v2024.13-magura-patched
- Release binaries (opens in a new tab)
nym-node
version1.1.11
nym-node
Binary Name: nym-node
Build Timestamp: 2024-11-22T14:30:48.067329245Z
Build Version: 1.1.11
Commit SHA: 01c7b2819ee3d328deccd303b4113ff415d7e276
Commit Date: 2024-11-22T10:50:59.000000000+01:00
Commit Branch: HEAD
rustc Version: 1.82.0
rustc Channel: stable
cargo Profile: release
After changes coming along with v2024.13-magura
(nym-node v1.1.10
), Nym Explorer is no longer picking all values correctly. Instead of fixing this outdated explorer, we are working on a new one, coming out soon.
Nym Harbourmaster (opens in a new tab) has cache of 90min, expect your values to be updated with delay. We are aware of some issues with Nym Harbourmaster and working hard to resolve them in the upcoming explorer v2. To check your routing values in real time, you can use nym-gateway-probe
.
Operators Updates & Tools
-
Updated
network_tunnel_manager.sh
(opens in a new tab) (moved to our monorepo) helps operators to configure their IP tables rules fornymtun
andwireguard
routing. -
Please re-run routing configuration steps (opens in a new tab) to update your routing settings.
-
We found out that some operators have a wrong value for wireguard IP. Follow these steps to ensure your value is set to
10.1.0.1
(default on new nodes):
1. Open your node config file:
nano $HOME/.nym/nym-nodes/<ID>/config/config.toml
# change <ID> for your local nym moniker for example:
# nano $HOME/.nym/nym-nodes/default-nym-node/config/config.toml
2. Control or change the value of wireguard private IP
- Scroll down to section starting with
[wireguard]
- Find line
private_ip
and ensure it's set to value10.1.0.1
- The section will look like this:
[wireguard]
# Specifies whether the wireguard service is enabled on this node.
enabled = true
# Socket address this node will use for binding its wireguard interface.
# default: `0.0.0.0:51822`
bind_address = '0.0.0.0:51822'
# Private IP address of the wireguard gateway.
# default: `10.1.0.1`
private_ip = '10.1.0.1'
3. Save, exit and restart the service
- If you used
nano
editor - pressctrl
+x
and confirm the changes - Run these commands to update the service with new values and restart your node process:
systemctl daemon-reload && service nym-node restart
-
New manual how to run
nym-node
as non-root -
Since
v2024.13-magura
, operators do not update their node version in the wallet. Manual upgrading steps has been updated accordingly. -
CLI tool
node_api_check.py
, helping operators to collect all API values about their nodes locally, is not up to date with the API changes introduced withv2024.13-magura
release version. Please treat it as unstable before we fix it.
Error Log
In case you encounter this error:
[ERROR] nym-node/src/node/mod.rs:628: the exit gateway subtask has failed with the following message: failed to start authenticator: internal wireguard error no private IP set for peer..
You can follow these steps to make a workaround:
1. Find the error
-
In the node logs, locate the ERROR message which says
the exit gateway subtask has failed with the following message: failed to start authenticator: internal wireguard error no private IP set for peer KN5GPvkC+p6G/SM4PD2Z3ObAtRGiDjHPRnQOPpbdUQk=
-
Copy the end part of that peer, later denoted as
<WG_PEER_STRING_END>
(in our exampleGiDjHPRnQOPpbdUQk=
) to use later in the sql commands
2. Fix the issue in sqlite3 db
Be careful when running commands within sqlite database.
- Navigate to the data directory:
cd $HOME/.nym/nym-nodes/<ID>/data
- Enter the database:
sqlite3 clients.sqlite
- Run these commands:
# Change with your unique <PEER_STRING_END>
select * from wireguard_peer where public_key like "%<WG_PEER_STRING_END>%"
# Make sure that only ONE line is returned and it contains the key
delete from wireguard_peer where public_key like "%<WG_PEER_STRING_END>%";
- Confirm that peer has been removed by running this again:
select * from wireguard_peer where public_key like "%<WG_PEER_STRING_END>%";
3. Exit and restart the service
Run .quit
and:
systemctl restart nym-node.service
v2024.13-magura
Magura release represents a bigger milestone in project Smoosh development where nym-node
is one binary able to perform any function in Nym Mixnet. This release is especially crucial for operators, please pay attention to the section Operators Updates & Tooling below.
- Release binaries (opens in a new tab)
- Release CHANGELOG.md (opens in a new tab)
nym-node
version1.1.10
nym-node
Binary Name: nym-node
Build Timestamp: 2024-11-18T17:02:50.947941194Z
Build Version: 1.1.10
Commit SHA: b49ef643df86f0c670672429812c632fbbaf6cf1
Commit Date: 2024-11-18T17:56:57.000000000+01:00
Commit Branch: HEAD
rustc Version: 1.82.0
rustc Channel: stable
cargo Profile: release
-
New wallet version 1.2.15 (opens in a new tab) is out! - allowing operators to migrate to
nym-node
in Mixnet smart contract.
Features
-
Directory Sevices v2.1 (opens in a new tab): Read section Directory Services v2.1: API & Mixnet Contract Changes below with detailed explanation or the PR notes (opens in a new tab)
-
Switch over the last set of jobs to arc runners (opens in a new tab): Switch over the remaining GH jobs using 16-core runners to self-hosted arc runners. Since we can't currently use Docker on the ubuntu-20.04 runners, remove the matrix notification steps
Confirm that the deployment workflows work through manual testing
- cd-docs
- publish-sdk-npm
-
V2 performance monitoring feature flag (opens in a new tab): Feature flag to use v2 network monitor results in rewarding
-
Add
utoipa
feature to nym-node (opens in a new tab):cargo build -p nym-node
was failing, since its depending onQueryParams
havingutoipa
traits derived -
Extract packet processing from mixnode-common (opens in a new tab): First step on a journey of making a strong interface around packet processing, and packet processing portability. This one only moves stuff around, so it should be safe to just blindly merge.
-
expose authenticator address along other address in node-details (opens in a new tab): Expose authenticator address along ip packet router and network requester for easier parsing
-
Feature/contract state tools (opens in a new tab): Introduced/reimplemented old tools for importing cosmwasm contract states given a kv dump file. This makes it significantly easier to plan and test complex state migrations on actual chains where we risk timing out on expensive operations.
-
Add env feature to clap and make clap parameters available as env variables (opens in a new tab)
-
Product Data
First step in gateway usage data collection (opens in a new tab): This PR is the first step towards collecting data on gateway usage. It builds up on an old code for what was then nym-connect. It exposes unique users count and connection time histogram on themetrics/sessions
endpoint of the self-described API on entry-gateways. For the time being, data is collected by probing theActiveClientStore
every minute and extracting data from this. Data is stored internally and exposed on the next day, i.e. UTC day $d$ exposes data from day $d-1$. Thestatistics
(opens in a new tab) module will evolve as we add collection for product data and censorship resistance study. The collection will also eventually switch from probing to event-based for more accurate data. -
importer-cli
to correctly handle mixnet/vesting import (opens in a new tab) -
Import
nym-vpn-api
crates (opens in a new tab): Keep these crates in a separate workspace for now. The idea is to add them to the main workspace in time, but this appears to might require some changes to how sqlite is used. Alternatively these issues might go away once we upgrade sqlite in the main workspace. Also we intend to rename some of these to something likenym-credential-facade
, and the wasm lib should be incorporated in one of the existing crates incommon
. -
Product Data
Add session type based on ecash ticket received (opens in a new tab): Fire anEcashTicket
event for theGatewayStatisticsCollector
, when an Ecash ticket is being accepted. This allows to mark an active session as being a mixnet session or a vpn session. It also changes the format of the related self-described data, to accommodate that new session type. -
feature: require reporting using nym-node binary for rewarded set selection (opens in a new tab)
-
Re-enable vested delegation migration (opens in a new tab): supersedes #4956 (opens in a new tab) by removing the contract migration code as it's already been run on mainnet.
-
Resolve beta clippy issues in contracts (opens in a new tab)
-
Enable global ecash routes even if api is not a signer (opens in a new tab)
-
Rename
nym-vpn-api
tonym-credential-proxy
(opens in a new tab) -
Make accepting t&c a hard requirement for rewarded set selection (opens in a new tab)
-
chore: update itertools in compact ecash (opens in a new tab): supersedes #4916 (opens in a new tab)
-
Adjusted ticket sizes to the agreed amounts (opens in a new tab)
-
Added
get_all_described_nodes
to NymApiClient and adjusted return (opens in a new tab) -
feature: use axum_client_ip for attempting to extract source ip (opens in a new tab): improves source ip logging by extracting relevant header when nym-api is run behind a proxy
-
Added hacky routes to return nymnodes alongside legacy nodes (opens in a new tab)
-
Use unstable explorer client (opens in a new tab): Clean up stale testruns & better logging:
- use new
/unstable
endpoints on explorer for backwards compatibility - log gw identity key
- better agent testrun logging
- log responses on server side
- change response code for agents
- update sqlx data
- fix agent - probe gw bug
- use new
-
chore: deprecated old nym-api client methods and replaced them when possible (opens in a new tab): this is to that the next time those methods are used outside the monorepo, the relevant calls flag up the CI via clippy
-
Fix gateway decreasing bandwidth (opens in a new tab): Make sure to update the storage after each decrease with the new values. Also set the storage values to 0 on restart for existing peers, as kernel peers can't have those values set to 0
-
Add more translations from v2 to v3 authenticator (opens in a new tab)
-
Graceful agent 1.1.5 (opens in a new tab): API improvements:
- agent exits gracefully when no testrun available
- agent reads content of server's error message in case of 503
- API doesn't log every error (to avoid log spam)
- update network probe within NS agent image: CI rebuild (opens in a new tab) of NS agent will pick up updated network probe
-
Feature/force refresh node (opens in a new tab): currently if nodes update their role from say mixnode to entry-gateway, it might take quite a while for
nym-api
to pick up the change and thus they might be losing performance. With this change, the node will be force refreshed on its startup -
nym-credential-proxy-requests
: reqwest use rustls-tls (opens in a new tab) -
change: dont select mixnodes bonded with vested tokens into the rewarded set (opens in a new tab)
-
Respond to auth messages with same version (opens in a new tab)
Bugfix
-
Fix critical issues SI84 and SI85 from Cure53 (opens in a new tab): This pull request fixes the following issues:
- NYM-01-009 WP5: BLS12-381 EC signature bypasses in Coconut library (Critical)
- NYM-01-014 WP5: Partial signature bypass in offline eCash (Critical)
-
bugfix: correctly paginate through 'search_tx' endpoint (opens in a new tab): when
results.append(&mut res.txs);
was called,res.txs
was always empty thus it was impossible to return more than page size number of results -
Bugfix/rewarder post pruning adjustments (opens in a new tab): this PR introduces/fixes the following:
- dedicated commands to request specific blocks for processing
- decreased websocket failure timeout
- ensuring we do actually have sufficient number of blocks to process rewarding for given epoch
- additional error logging
-
bugfix: fix expected return type on /v1/gateways endpoint (opens in a new tab)
-
Bugfix/additional directory fixes (opens in a new tab): This branch introduces additional fixes to the new directory services
-
Fix critical issues SI86 and SI87 from Cure53 (opens in a new tab): This pull request fixes the following issues:
- Faulty aggregation to invalid offline eCash signatures
- Signature forgery of Pointcheval-Sanders schema
-
bugfix: client memory leak (opens in a new tab): This fixes memory leaks in all the clients. however, they were most prominent in
nym-api
during network monitoring due to the sheer amount of packets being pushed -
bugfix: directory v2.1
get_all_avg_gateway_reliability_in_interval
query (opens in a new tab): fixes query for avg gateway performance (no idea why it makes a difference, but it does...) -
bugfix: missing #[serde(default)] for announce port (opens in a new tab)
-
bugfix: verifying signed information of legacy nodes (opens in a new tab)
-
bugfix: fixed backwards incompatibility for /gateways/described endpoint (opens in a new tab)
-
bugfix: make sure to use correct highest node id when assigning role (opens in a new tab)
-
bugfix: use old name for 'epoch_role' in SkimmedNode (opens in a new tab)
-
bugfix: use human readable roles for annotations (opens in a new tab)
-
bugfix: make gateways insert themselves into [local] topology (opens in a new tab)
-
bugfix: use bonded nym-nodes for determining initial network monitor … (opens in a new tab)
-
bugfix: make sure nym-nodes are also tested by network monitor (opens in a new tab)
-
bugfix: don't assign exit gateways to standby set (opens in a new tab)
-
bugfix: restore default http port for nym-api (opens in a new tab): when it was run under 'rocket' server the port used was 8000. let's restore that value
-
bugfix: supersede 'cb13be27f8f61d9ae74d924e85d2e6787895eb14' by using… (opens in a new tab)
-
bugfix: adjust runtime storage migration (opens in a new tab): remove the panic during migration as the gateway count can actually be different if some of them have already migrated to nym-nodes before the code has been run
-
bugfix/feature: added NymApiClient method to get all skimmed nodes (opens in a new tab)
-
bugfix: use corrext axum extractors for ecash route arguments (opens in a new tab)
-
bugfix: additional checks inside credential proxy (opens in a new tab)
-
bugfix: [wallet] displaying delegations for native nymnodes (opens in a new tab)
-
bugfix: preserve as much as possible of the rewarded set during migration (opens in a new tab)
-
bugifx: assign 'node_id' when converting from 'GatewayDetails' to 'TestNode' (opens in a new tab)
Operators Updates & Tooling
Every operator has to make sure that their nodes self-described endpoint works, otherwise the node will be un-routable and thus won't get any rewards!
-
New technical documentation: All Nym documentation starts from a new entry page nymtech.net/docs (opens in a new tab). To run locally or propose collaboration, start in our repository (opens in a new tab)
-
New Tokenomics chapter with Mixnet Rewards page
-
Nym Harbourmaster (opens in a new tab) had a new tab
NODE SEARCH
where operators can easily search nodes by identity keys and owner accounts and get all public information listed. -
Simplified bonding and Mixnet smart contract migration
-
Nodes bonded with vesting tokens are not allowed to join rewarded set (opens in a new tab) - read more on Nym operators forum (opens in a new tab)
Wallet changes
New wallet version 1.2.15 (opens in a new tab) is out!
-
This version of wallet allows and prompts operators to migrate their gateway or mixnode to a
nym-node
in the Mixnet smart contract - an important step in project smoosh. To do so follow these steps:
1. Download the wallet from the release page (opens in a new tab)
2. Verify the binary and extract it if needed
- Download
hashes.json
(opens in a new tab) - Open it with your text editor or print it's content with
cat hashes.json
- Run
sha256sum <WALLET_BINARY>
for examplesha256sum ./nym-wallet_1.2.15_amd64.AppImage
- If your have to extract it (like
.tar.gz
) do it
3. Open the wallet and sign in
4. Migrate!
- Go to Bonding and you will be prompted with such message:
- In case you for some reason didn't see the prompt or you closed it - you can click in the upper right corner of the same window on this button:
- Confirm the transaction
5. Welcome to new episode of nym-node
!
- Older versions will not allow bonding new nodes!
Selection & Rewarding
- Config score is introduced: In the current version the nodes selection to the active set has a new parameter (which multiplies the existing formula) -
config_score
. Config score looks if the node binary isnym-node
(not legacynym-mixnode
ornym-gateway
) AND if Terms & Conditions are accepted. Config score has binary values of either 0 or 1, with a following logic:
Run nym-node binary | T&C's accepted | config_score |
---|---|---|
True | False | 0 |
False | True | 0 |
False | False | 0 |
True | True | 1 |
- The active set selection formula is then:
CONFIG_SCORE * STAKE_SATURATION * PERFORMANCE ^ 20
- Currently in Native rewarding, the rewards are split equally across the rewarded set of nodes (opens in a new tab) (which now = active set and it's size is 240 nodes) for both Mixnet mode and dVPN mode. Every node being assigned 1 / 240 work factor (hence naive rewarding).
Directory Services v2.1: API & Mixnet Contract Changes
Magura release brings breaking changes on API (opens in a new tab) logic of Nym. New APIs will only communicate with nym-node
from this release and newer. Also old version of APIs won't be able to communicate with the new version of nym-node
. We are also moving towards completely removing Nym Explorer API, which now has been only used to report nodes location.
Any new bonded node will provide only the bare minimum information: host, identity key and optionally custom port of its HTTP api - we highly recommend to set that one up to 8080
. Everything else will be discovered via the self-described API for maximum flexibility. This also includes the sphinx key, meaning if the API is not exposed, the node will be unable to route any traffic. Furthermore, this allows to arbitrary change of nym-node
from mixnode into a gateway modes (and vice versa) without losing any delegations.
The contract changes also mean any node functionality can get rewards. Rather than just with assigned mixing roles, gateways now also added into the pool. However, to be eligible for gateway rewarding, one must migrate into a nym-node
on a smart contract level (or bond a new node).
API High Level Changes
New/Added
- All new routes that return multiple nodes/entries/etc now wrap their responses to expect pagination. Currently, however, full data is returned for each of the endpoints since the pagination hasn't been implemented yet. But once we add it, it won't be a breaking API change.
Removed
rocket
support has been completely removed. All routes are now always served viaaxum
Changed
- Getting anything to do with all nodes (including gateways) requires knowing their
node_id
. For legacy gateway endpoints, we have a helper method that translates identity key to thenode_id
- Rewarded set is no longer populated with just mixnodes. Instead
nym-node
s are assigned to eligible roles (based on stake and performance) in the following order:- entry gateways
- exit gateways
- mixnodes
- standby
- A lot of legacy routes got deprecated. while technically they still "work" and return data, they only return data for legacy
nym-mixnode
andnym-gateway
. What it means is that as operators are migrating their nodes (in the smart contract), those endpoints will start running dry. - Since layers are only assigned during rewarded set assignment, for the purposes of network monitor (v1) and legacy mixnode routes, layerless nodes are put on random layers during annotation
- All legacy gateway queries now also include additional field in their respones:
node_id
that indicate the id pre-assigned during contract migration - Nym Node performance is a bit odd. When network monitors (v1 and v2) were made, there was no concept of a Nym Node. The solution taken is checking whther there is any mixnode performance for node with a given id, if so - return it. Otherwise we grab the equivalent gateway performance. In the future it should probably be averaged or maybe split into explicit mixing or gateway routing performance metrics.
nym-api
Changes
- Root route
/
now redirects to/swagger
nym-node
Routes
/v1/nym-nodes/annotation/<NODE_ID>
- get annotation about particularnym-node
, as gathered by thisnym-api
. Currently this just includes last 24h performance metric and the current node role/v1/nym-nodes/bonded
- get bond information about Nym Nodes, as present in the mixnet contract/v1/nym-nodes/described
- get described information about Nym Nodes, as present on their self-described API/v1/nym-nodes/historical-performance/<NODE_ID>
- return historical performance of thisnym-node
on the provided date/v1/nym-nodes/performance-history/<NODE_ID>
- return performance history of thisnym-node
(as a 0 - 1 float)/v1/nym-nodes/uptime-history/<NODE_ID>
- return current uptime of thisnym-node
(as a 0 - 100 u8); added for compatibility with existing APIs using that data format/v1/nym-nodes/performance/<NODE_ID>
- return current performance of thisnym-node
/v1/unstable/nym-nodes/noise
- returns basic information needed for the noise protocol between nodes/v1/unstable/nym-nodes/skimmed/active
- returns all: Nym Nodes and legacy mixnodes and legacy gateways, that are currently in the active set, unlessno-legacy
parameter is used/v1/unstable/nym-nodes/skimmed/mixnodes/active
- returns all: Nym Nodes and legacy mixnodes, that are currently in the active set, unlessno-legacy
parameter is used/v1/unstable/nym-nodes/skimmed/mixnodes/all
- returns all: Nym Nodes and legacy mixnodes, that are currently bonded and support mixing role, unlessno-legacy
parameter is used/v1/unstable/nym-nodes/skimmed/entry-gateways/active
- returns all: Nym Nodes and legacy gateways, that are currently in the active set and are assigned the entry role, unlessno-legacy
parameter is used/v1/unstable/nym-nodes/skimmed/exit-gateways/active
- returns all: Nym Nodes and legacy gateways, that are currently in the active set and are assigned the exit role, unlessno-legacy
parameter is used/v1/unstable/nym-nodes/skimmed/entry-gateways/all
- returns all: Nym Nodes and legacy gateways, that are currently bonded and support entry gateway role, unlessno-legacy
parameter is used/v1/unstable/nym-nodes/skimmed/exit-gateways/all
- returns all: Nym Nodes and legacy gateways, that are currently bonded and support exit gateway role, unlessno-legacy
parameter is used
Deprecated (will be removed eventually, so please migrate away from their usage)
Some endpoints got purposely deprecated without any equivalent reimplemented since they do not belong on nym-api
. This includes for example /stake-saturation
(which can be obtained directly from the contract instead) or /inclusion-probability
(for this run your own Monte Carlo simulation).
-
contract-cache
routes - all of the below got deprecated as they will only return legacynym-mixnode
andnym-gateway
data:/v1/gateways
/v1/gateways/blacklisted
/v1/mixnodes
/v1/mixnodes/active
- just to restate the obvious, it will only return a small SUBSET of the active set that since it will ignore active Nym Nodes/v1/mixnodes/active/detailed
/v1/mixnodes/blacklisted
/v1/mixnodes/detailed
/v1/mixnodes/rewarded
/v1/mixnodes/rewarded/detailed
-
status
routes - all of the below got deprecated as they will only return legacynym-mixnode
andnym-gateway
data:/v1/status/gateway/<ID_KEY>/report
/v1/status/gateway/<ID_KEY>/history
/v1/status/gateway/<ID_KEY>/core-status-count
/v1/status/gateway/<ID_KEY>/avg_uptime
/v1/status/gateways/detailed
/v1/status/gateways/detailed-unfiltered
/v1/status/mixnode/<MIX_ID>/report
/v1/status/mixnode/<MIX_ID>/history
/v1/status/mixnode/<MIX_ID>/core-status-count
/v1/status/mixnode/<MIX_ID>/avg_uptime
/v1/status/mixnodes/detailed
/v1/status/mixnodes/detailed-unfiltered
/v1/status/mixnode/<MIX_ID>/status
/v1/status/mixnode/<MIX_ID>/reward-estimation
/v1/status/mixnode/<MIX_ID>/compute-reward-estimation
/v1/status/mixnode/<MIX_ID>/stake-saturation
/v1/status/mixnode/<MIX_ID>/inclusion-probability
/v1/status/mixnodes/inclusion_probability
/v1/status/mixnodes/rewarded/detailed
/v1/status/mixnodes/active/detailed
-
nym-node
routes - all of the below got deprecated as they will only return legacynym-mixnode
andnym-gateway
data:/v1/gateways/described
/v1/mixnodes/described
-
Unstable Nym Nodes Routes
:/v1/unstable/nym-nodes/mixnodes/skimmed
- due to inconsistency in behaviour (i.e. active vs all) it is now redirected to/v1/unstable/nym-nodes/mixnodes/skimmed/active
and unwraps the pagination/v1/unstable/nym-nodes/gateways/skimmed
- due to inconsistency in behaviour (i.e. active vs all) it is now redirected to/v1/unstable/nym-nodes/entry-gateways/skimmed/all
and unwraps the pagination
Unstable Nym Nodes Routes
:/v1/unstable/nym-nodes/skimmed
- now works withexit
parameter/v1/unstable/nym-nodes/skimmed
- introducedno-legacy
flag to ignore legacynym-mixnode
andnym-gateway
(where applicable)/v1/unstable/nym-nodes/skimmed
- will now return all nodes if no query parameter is provided
Mixnet Contract
Every operator has to make sure that their nodes self-described endpoint works, otherwise the node will be un-routable and thus won't get any rewards!
High Level Changes
New/Added
- All new nodes are now bonded as Nym Nodes, even when using old
BondMixnode
orBondGateway
messages (messages are getting translated) - Operators only announce nodes identity key (
<ID_KEY>
), host and port to the directory. Everything else is discovered via self-described endpoint - All Nym Nodes in the rewarded set are eligible for rewards and staking. Even if they serve one of the gateway roles. Legacy gateways can't be staked on nor get rewards.
- All nodes, including legacy mixnodes and legacy gateways, are now uniquely identified by a monotonically increasing
node_id
- All legacy gateways are preassigned
node_id
during the contract migration
Removed
🔥 all concepts of node families got purged, removed, deleted, thrown into the abyss. they simply no longer exist and the world is all better for it.
Changed
- Bunch of types got changed/renamed with some fields being added/removed/deprecated. It's be quite a lot of work to list them all here, but whenever possible and feasible, they should be cross-compatible (but not always).
- Rewarded set is no longer just a "number". Instead it has an explicit number of all
nym-node
modes: mixnodes, entry and exit gateways as well as standby nodes - Rewarding is now based on two parameters: performance and work factor as opposed to performance and "is active" flag. However, in practice, during this transitional period, it is assumed that the work factor will be equivalent to what would have been calculated using the old "is active" flag
Transaction Messages Changes
BondNymNode
- self-explanatoryUnbondNymNode
- self-explanatoryUpdateNodeConfig
- works asUpdateMixnodeConfig
; it lets you change your announced host or http api portMigrateMixnode
- migrate your existing legacy mixnode into a Nym NodeMigrateGateway
- migrate your exsting legacy gasteway into a Nym Node. enables staking and rewardingAssignRoles
- an additional step for epoch transition transactions. think of it as a replacement forAdvanceCurrentEpoch
. it assigns nodes to particular roles for the given epoch
- As mentioned, all family-related things got killed off, so the following no longer exist:
CreateFamily
,JoinFamily
,LeaveFamily
,KickFamilyMember
,CreateFamilyOnBehalf
,JoinFamilyOnBehalf
,LeaveFamilyOnBehalf
,KickFamilyMemberOnBehalf
UpdateActiveSetSize
- the rewarded/active set are now based on the role distributionAssignNodeLayer
- we're no longer explicitly assigning roles to all mixnodes, instead they get assigned mixing rolesAdvanceCurrentEpoch
- the logic for advancing the epoch/assigning active set has changed so this message was removed
v2024.12.1-aero
- patch
- Release binaries (opens in a new tab)
nym-node
patch only, no other binaries
nym-node
Binary Name: nym-node
Build Timestamp: 2024-11-07T08:45:13.162565620Z
Build Version: 1.1.9-1
Commit SHA: ccdee808303ffcfa8ed77176d3f629512045febb
Commit Date: 2024-11-06T16:31:30.000000000+01:00
Commit Branch: HEAD
rustc Version: 1.82.0
rustc Channel: stable
cargo Profile: release
Changes
- Fixed timeout connectivity issues with authenticator
- Amended network allowance cap
v2024.12-aero
- Release binaries (opens in a new tab)
- Release CHANGELOG.md (opens in a new tab)
nym-node
version1.1.9
nym-node
Binary Name: nym-node
Build Timestamp: 2024-10-17T08:57:52.525093253Z
Build Version: 1.1.9
Commit SHA: d75c7eaaaf3bb7350720cf9c7657ce3f7ee6ec2e
Commit Date: 2024-10-17T08:51:39.000000000+02:00
Commit Branch: HEAD
rustc Version: 1.81.0
rustc Channel: stable
cargo Profile: release
Features
-
Rust sdk stream abstraction (opens in a new tab): Starting to move this from being standalone binaries (as seen here (opens in a new tab)) into the sdk. EDIT this has sort of expanded a bit to include a few things:
- simple example
- example doc to
src/tcp_proxy.rs
- simple echo server in
tools/
- multithread example
- example to sdk for using different network
- go ffi for proxies
-
Build(deps): bump
toml
from0.5.11
to0.8.14
(opens in a new tab):toml
(opens in a new tab) version update
- Ensured that the
cargo.toml
is legible in various places; tested it onnym-node
,nym-api
andnymvisor
. - Ensured that updating the cargo.toml file and restarting the given binary continues to behave as normal.
-
Use
serde
from workspace (opens in a new tab): cargo autoinherit forserde
- cargo autoinherit forbs58
andvergen
incosmwasm-smart-contracts
-
Gateway database modifications for different modes (opens in a new tab): As gateway clients will not be solely from the mixnet, we need to split the table that handles shared keys from the client ids that are referenced from other tables. That way, the bandwidth table can be shared between different client types (entry mixnet, entry gateway, exit gateway), using the same
client_id
referencing. -
Remove the push trigger for
ci-nym-wallet-rust
(opens in a new tab) -
Chore: remove queued migration for adding explicit admin (opens in a new tab)
-
Allow clients to send stateless gateway requests without prior registration (opens in a new tab): in order to make changes to the registration/authentication procedure we needed a way of extracting protocol information before undergoing the handshake.
-
Feature/updated gateway registration (opens in a new tab): This PR introduces support for aes256-gcm-siv shared keys between clients and gateways.
- Those changes should be fully backwards compatible. if they're not, there's a bug.
- For the following combinations I inited the client, ran the client, stopped the client, and ran the client again:
- Fresh client on new binary && gateway on old binary
- Fresh client on old binary && gateway on new binary
- Fresh client on new binary && gateway new binary
- Existing old client on old binary & new gateway
-
Entry wireguard tickets (opens in a new tab): Note: The behaviour of the nodes and vpn client (as a test) has not changed, it still works as it used to. Obtaining ticketbooks also is unchanged
-
Update
nym-vpn
metapackage and replacenymvpn-x
withnym-vpn-app
(opens in a new tab): Change dependency fromnymvpn-x
tonym-vpn-app
to reflect the new package name of the tauri client -
Remove clippy github PR annotations (opens in a new tab): It eats up CI resources and time to run the clippy annotation checks that likely no one uses anyway. We keep the clippy checks of course.
-
Update cargo deny (opens in a new tab): Update to use latest
cargo-deny
. Here are the steps done:- Regenerate
deny.toml
- Backport old settings to
deny.toml
- Explicitly allow GPL-3 only on our own specific crates
- Update
deny.toml
for latest changes - Fix
cargo-deny
warnings for duplicate crates - Update
cargo-deny-action
to v2
- Regenerate
-
Data Observatory stub (opens in a new tab): You need Postgres up for
sqlx
compile-time checked queries to work
./pg_up.sh
- Play with the database:
docker exec -it nym-data-observatory-pg /bin/bash
psql -U youruser -d yourdb
-
Proxy ffi (opens in a new tab): Updates Go & CPP FFI with the proxy code from #4743 (opens in a new tab)
-
Bump
http-api-client
default timeout to 30 sec (opens in a new tab) -
Check both version and type in message header (opens in a new tab)
-
nym-node
: don't use bloomfilters for double spending checks (opens in a new tab): this PR disables gateways polling for double spending bloomfilters and alsonym-apis
from providing this data.
Bugfix
-
Fix
apt install
inci-build-upload-binaries.yml
(opens in a new tab) -
Fix missing duplication of modified tables (opens in a new tab)
-
Fix nymvpn.com url in mainnet defaults (opens in a new tab): The old URL (nympvn.net) works since it is redirected to nymvpn.com, but the extra round-trip adds latency to all the API calls the vpn client does. So this PR should help speed things up, in particular when these API calls happen across the mixnet.
-
Replace unreachable macro with an error return (opens in a new tab)
Operators Guide, Tooling & Updates
Documentation Updates
- Update FAQ sphinx size (opens in a new tab): This PR upgrades url to our code base sphinx creation from an outdated branch to develop.
Fast & Furious - WireGuard edition
Nym team started another round of load and speed testing. This time the tests are limited to Wireguard mode Gateways - to find out any weak spots for needed improvement. The load testing is happening directly on mainnet as it simulates a real user traffic which the network components must be able to handle in order.
Over past week we ran a total of three tests, with 450 clients at most. We've managed to push around 300 GB in total. Around 50% of requests failed. Over the course of those three tests, we did about 5000 requests, and bandwidth per client varies between 50Mb/s and 150Mb/s.
We already caught two bugs and fixed (opens in a new tab) it in this release.
The faster the operators upgrade to this latest release (opens in a new tab), the better. A that will allow us to do more precise testing through the nodes without the registry bug, leading to more precise specs for nym-node
.
Here are the aims of these tests:
- Understanding of the wireguard network behavior under full load
- How many client users can all entry gateways and exit gateways handle simultaneously?
- How much sustained IP traffic can a subset of mainnet nodes sustain?
- Needed improvements of Nym Node binaries to improve the throughput on mainnet
- Measurement of required machine specs
- Releasing a new spec requirements
- Raw data record
- Increase quality of Nym Nodes
Meanwhile we started to research pricing of stronger servers with unlimited bandwidth and higher (and stable) port speed, to arrive to a better understanding of needed rewards and grants to bootstrap the network before NymVPN launch.
More info about testing and tools for performance monitoring can be found in this chapter.
We would like to call out to operators to join the efforts and reach out to us if they know of solid ISPs who offer reliable dedicated services for good price or may even be interested in partnership.
Delegation Program
In October we again proceeded with our Delegation Program. 22 nodes didn't meet the program rules and got their delegation removed and 25 nodes from the que received delegation. Below is a complete list.
Delegated:
Ce6kcPckNfQsga2z645VFQYadtoTjqXrS1YXMTtNNv98
2XSCWy1vAoJRaYBJXx4KWwjU1cfoS2wNBXVQZvi8Jtdr
Bu4sUGjJqkje4vSncTH2KgrnojmfESdaYwamC6DbpJGZ
7TWEw9qQxsc8w4WhPAX6zjZ8vuNBdtP21zUVN8K26RkD
HejyqervmGTCEwi1JbRBXV5My463336huBn8ZgSpuhc3
CXcCVGiamYSwgVwaxW3mEkXkZh1sKY2TXnWjjTjxDxzA
FScLfnKUPv9wSef3R4N2pQ9ft7DiwdivLW1i65Dqfc9L
2vuZZJjyYN27fvDbhyqeGosewGWaRh6iVsFtqbJoYAR7
B9QiBsSAx7MRcTpYMs1fu9AFJurAZTPWMispHZXPbaVW
E3e2a9kXZjQXsKAfvmCf2WqwmVkiGR2LbjCwoadZgEJt
Dk4fCLM7idHPqfsUucLQtSMtYaYCLhi4T7vwvw88jG3P
9xZUp4sYWUNJesWy3MPVjh5kTorNqj3RxcFgBmYjV1xV
HK9QxPpdJfNtNpLJZHTN5M113jeBbFzTkMtPt9eouimx
ECkzyHfoiNGKyDTtbbH5HDCWa8KMGh92mtGbGHLZ3Y9n
9jQQV9vQ2mFFXywwVhACCKefjUFpyBoCU6KXNfjAEi45
6QguhCfnDPKJe8bQXg9myuPB89yYFk6R77vMhLTbipK7
4hAJJQhLTFve8FZGd28ksjavbch8STMax2rytzKmDPCV
EZLFq5HGXFKRpxu78nVjf7kuuUaKPLAbezR6mXbZrP6y
FtAAA5GMxY1Ge9wKYDrQgaSfJEUp4XvBLptBwy3GU8ap
tUiLPjz5nkPn5ZJT5ZXLPGDcZ3caQsfkMAp1epoAuSQ
4ScsM6AVowhKTMWaH98NLntKDwbu2ZMEycUk4mZiZppG
Hb34PTth6CeFziPAAEUMEjJFHWJg1dDex5QxUXKNqRBE
9ek1PMvLhpbwZe7kTMyCVY5VNqrdSPPoruFPQtbxnZyf
Undelegated due to the use of an outdated binary:
9UHXFYuMLhuugndt8xCFRydmDPFyEEUHYc72tNANEtHp
5Y86A7fUX3LYVDDeoujtAiZFudYcHJq6gw8nsp71wN7U
HYWjn6yL8y7TBPFL9bTgDm6tHgyoEQupgJuBhLLoA5EY
4JCpbdhiQFKWwhrbkNDbwcwBGZnvU4WQrF2vqQLfmZvW
2f7JaYmmrMQQMczLX32ogfP7PBHeyPKbAVNjjEsExZVd
9TW55JrsFhsMoe3Tf8LBR4bPSCX86VXyvioMmCw9tWB
AyN34XqUi5XxgjmivWG2z6TftkqAFjVV5C9zCbx8Fvp5
skNS4zNsKdbbUR9wFTJoPdmReW4NdrDEpp8512TNG4f
DztUnMKM545sdipgqhCsPNhK3YVmBbS2fp9HZgM5Jpw9
GnLmx1s7g9nH3uLRhGpaXTbQEhCSKB6YenBQWQhthSx9
GoJjAkH5hpcPYeW7JDUVfHdqgcufjwdhY2PLwBGJV3Ar
EdHVMTXpLiBbvCUnEoSPQ86pBNY1h9HtL34Q7cpNPWCy
Undelegated due to increased operation costs or profit margin:
Erw9AQ4UJCgCiAWisUWbFk9Yedm8qvW4YQqmJRrBrE5p
BVDVtmNbZRgPKU81uBkrgfj5TnhtZqQcPAwxD48jcfMd
36nmH3kawhAsNA6sxFva2HgTnQHQDbcrRefvWWbmhHvY
2831fyXRAJ88x1Pd5aW7utw7WH1XkHZEfoWhLk2foLxJ
AMDS4cib433iRstwP9mWnZ4zPqb6hm6uPF7PpvhSkpYC
DE9eEeVsuiKeVfwebg5HYsebqRUvxd7LWsT9hQUtVrTQ
FAKhiQ8nW5sAWAxks1WB8u1MAWsapToCSE3KmF9LuGRQ
Undelegated due to being blacklisted for extensive period
sjL9n9ymxfWWwkQJxXdsMkdwamXfh3AJ3vCe7rJ8RrT
E2HAJrHnk56QZDUCkcjc4i4pVEqtyuPYL5bNFYtweQuL
4PytR3tmodsvqGTKdY47yie8kmrkARQdb5Ht3Ro3ChH4
v2024.11-wedel
- Release binaries (opens in a new tab)
- Release CHANGELOG.md (opens in a new tab)
nym-node
version1.1.8
Binary Name: nym-node
Build Timestamp: 2024-09-27T11:02:37.073944654Z
Build Version: 1.1.8
Commit SHA: c3ec970a377adb25d57be5428551fada2ec55128
Commit Date: 2024-09-26T08:24:53.000000000+02:00
Commit Branch: master
rustc Version: 1.80.1
rustc Channel: stable
cargo Profile: release
Features
-
New Network Monitor (opens in a new tab): Monitors the Nym network by sending itself packages across the mixnet. Network monitor is running two tokio tasks, one manages mixnet clients and another manages monitoring itself. Monitor is designed to be driven externally, via an
HTTP api
. This means that it does not do any monitoring unless driven by something likelocust
(opens in a new tab). This allows us to tailor the load externally, potentially distributing it across multiple monitors. Includes a dockerised setup for automatically spinning up monitor and driving it with locust.- Note: NNM is not deployed on mainnet yet!
-
Add get_mixnodes_described to validator_client (opens in a new tab)
-
Remove deprecated mark_as_success and use new disarm (opens in a new tab): Update function name to keep terminology consistent with tokio
CancellationToken DropGuard
. -
Update peer refresh value (opens in a new tab):
lso
expose the value by moving it to wireguard types, and separate the refresh time to the database sync time, so that more probable and needed actions happen faster (refresh) and more improbable ones don't overload the system (peer suspended or stale)
- Noted that the constants
DEFAULT_PEER_TIMEOUT
andDEFAULT_PEER_TIMEOUT_CHECK
have been moved tocommon/wireguard-types/src/lib.rs
and are now being used across modules for consistency - Observed that the
peer_controller.rs
now separates the in-memory updates from the storage sync operations to reduce system load - Identified that in-memory updates of peer bandwidth usage happen every
DEFAULT_PEER_TIMEOUT_CHECK
(every 5 seconds), while storage updates occur every 5 *DEFAULT_PEER_TIMEOUT_CHECK
(every 25 seconds)
Checked System Load and Performance:
-
Monitored system resource usage (CPU, memory, I/O) during the test to assess the impact of the changes
-
Confirmed that the separation of in-memory updates and storage syncs resulted in reduced system load, particularly I/O operations, compared to previous versions where storage updates occurred more frequently
-
Ensured that the system remained responsive and no performance bottlenecks were introduced
-
Efficiency Improvement: The separation of in-memory updates and storage syncs effectively reduced unnecessary database writes, improving system efficiency without compromising data accuracy
-
Remove duplicate stat count for retransmissions (opens in a new tab)
-
Make gateway latency check generic (opens in a new tab): Replace concrete gateway type with trait in latency check, so we can make use of it in the vpn client.
- Initialised new
nym-client
with the--latency-based-selection
flag and ensured it still works as normal.
-
Avoid race on ip and registration structures (opens in a new tab): To avoid a state where the ip is being cleared out before the registration is also cleared out, couple the two structures under the same lock, since they are anyway very inter-dependent.
-
- Checked out the release/2024.10-wedel branch containing the fix for the race condition on IP and registration structures
- Deployed the on a controlled test environment to prevent interference
-
Monitored Logs:
- Enabled debug logging to capture all events
- Monitored logs in real-time to observe the handling of concurrent registration requests
- Checked for any error messages, warnings, or indications of race conditions
-
Verified Client Responses:
- Ensured that all clients received appropriate responses:
- Successful registration with assigned IP and registration data
- Appropriate error messages if no IPs were available or if other issues occurred
- Confirmed that no clients were left in an inconsistent state (e.g., assigned an IP but not fully registered)
-
Validated Normal Operation:
- Conducted standard registration processes with individual clients to confirm that regular functionality is unaffected via
nym-vpn-cli
- Ensured that authenticated clients could communicate over the network as expected
- Conducted standard registration processes with individual clients to confirm that regular functionality is unaffected via
-
Enable dependabot version upgrades for root rust workspace (opens in a new tab)
-
Fix clippy for
unwrap_or_default
(opens in a new tab): Fix nightly build for beta toolchain (opens in a new tab) -
Update dependabot (opens in a new tab): Bump max number of dependabot rust PRs to 10. Add readme entry to workspace package.
-
Run
cargo-autoinherit
for a few new crates (opens in a new tab): Run cargo-autoinherit for a few new crates - Sort crates list. -
Add
axum
server tonym-api
(opens in a new tab): Summary PR to add axum functionality behind a feature flagaxum
, alongside rocket. -
Expose wireguard details on self described endpoint (opens in a new tab)
Wireguard details are now visible at the nym-node endpoint /api/v1/gateway/client-interfaces
as well as on the nym-api self-described endpoint /api/v1/gateways/described
, above the existing data displaying mixnet_websocket information.
An example of what will be shown is:
"wireguard": {
"port": 51822,
"public_key": "<some public key here>"
}
- Revamped ticketbook serialisation and exposed additional cli methods (opens in a new tab):
wip
branch that includes changes needed forvpn-api
alongside additionalecash utils
Checked the following commands:
show-ticket-books # which displays the information about all ticketbooks associated to the client
import-ticket-book # which imports a normal ticketbook to the client alongside `--full` flag
On the cli, the following were added: import-coin-index-signatures
, import-expiration-date-signatures
and import-master-verification-key
.
-
Run cargo autoinherit following last weeks dependabot updates (opens in a new tab)
-
Create nym-repo-setup debian package and nym-vpn meta package (opens in a new tab): Create nym-repo-setup debian package that sets up the nymtech debian repo on the system it's installed on. It does 2 things:
- Copy the keyring to
/usr/share/keyrings/nymtech.gpg
- Copy the repo spec to
/etc/apt/sources.list.d/nymtech.list
- Also create a meta package
nym-vpn
which only purpose is to depend on the daemon and UI.
- Copy the keyring to
- Install with
sudo dpkg -i ./nym-repo-setup.deb
- Once it's installed, it should be possible to install the vpn client with
sudo apt install nym-vpnc
- To remove the repo, use
sudo apt remove nym-repo-setup
NOTE: removing the repo will not remove any installed nym-vpn packages
-
Downloaded the
nym-repo-setup.deb
package to a Debian-based test system -
Installed the repository setup package using the command:
sudo dpkg -i ./nym-repo-setup.deb
- Verified that the GPG keyring was copied to
/usr/share/keyrings/nymtech.gpg
:
ls -l /usr/share/keyrings/nymtech.gpg
- Checked that the repository specification was added to
/etc/apt/sources.list.d/nymtech.list
:
cat /etc/apt/sources.list.d/nymtech.list
- Updated the package list:
sudo apt update
- Installed the VPN client meta-package:
sudo apt install nym-vpnc
-
Confirmed that the
nym-vpnc
package and its dependencies (daemon and UI) were installed successfully -
Tested the VPN client to ensure it operates as expected
-
Removed the repository setup package:
sudo apt remove nym-repo-setup
-
Verified that the repository specification file
/etc/apt/sources.list.d/nymtech.list
was removed -
Ensured that the installed
nym-vpnc
packages remained installed and functional after removing the repo setup package
-
Use ecash credential type for bandwidth value (opens in a new tab)
-
Start switching over jobs to arc-ubuntu-20.04 (opens in a new tab)
ci-binary-config-checker
- ci-build-upload-binaries
- ci-build
- ci-cargo-deny
- ci-contracts-schema
- ci-contracts-upload-binaries
- ci-contracts
- ci-docs
- ci-nym-wallet-rust
- ci-sdk-wasm
-
Move credential verification into common crate (opens in a new tab)
-
Remove
golang
workaround inci-sdk-wasm
(opens in a new tab) -
Disable push trigger and add missing paths in
ci-build
(opens in a new tab) -
chore: removed completed queued mixnet migration (opens in a new tab)
Bugfix
-
Fix test failure in ipr request size (opens in a new tab): Nightly build started failing due to a unit test using
now()
, changing the serialized size. Fixed to use a fixed date. -
Fix clippy for nym-wallet and latest rustc (opens in a new tab)
-
Allow updating globally stored signatures (opens in a new tab)
-
Bugfix/ticketbook false double spending (opens in a new tab)
Tested running a client in mixnet mode, with a standard ticketbook, as well as a client using an imported ticketbook. The double spending bug is no longer an issue, bandwidth is consumed properly, and upon consumption of one ticket another ticket is properly obtained.
Operators Guide, Tooling & Updates
-
WSS setup guide updates (opens in a new tab): Operators setting up WSS and reverse proxy on Gateways have now cleaner and simpler guide to configure their VPS.
-
Updat hostname instruction for WSS (opens in a new tab): Adding a hostname instruction for clarity
nym-node
patch from release/2024.10-caramello
Binary Name: nym-node
Build Timestamp: 2024-09-16T15:00:41.019107021Z
Build Version: 1.1.7
Commit SHA: 65c8982cab0ff3a1154966e7d61956cb42a065fc
Commit Date: 2024-09-16T15:59:34.000000000+02:00
Commit Branch: HEAD
rustc Version: 1.81.0
rustc Channel: stable
cargo Profile: release
This patch fixes v202410-caramello
release bug where one of the used dependencies - DefGuard
(opens in a new tab), was failing.
Updating to this patched version and running nym-node --mode exit-gateway
with --wireguard-enabled true
should result in a smooth node start without the defguard_wireguard
error, occuring to some operators before:
/home/ubuntu/.cargo/registry/src/index.crates.io-6f17d22bba15001f/defguard_wireguard_rs-0.4.2/src/netlink.rs:155: Serialized netlink packet (23240 bytes) larger than maximum size 12288: NetlinkMessage.
This release is a patch only, there are no additional features, everything else stays the same like in the latest release v202410-caramello
.
v2024.10-caramello
- Release binaries (opens in a new tab)
- Release CHANGELOG.md (opens in a new tab)
nym-node
version1.1.7
- Backport 4844 and 4845 (#4857 (opens in a new tab))
- Bugfix/client registration vol2 (#4856 (opens in a new tab))
- Remove wireguard feature flag and pass runtime enabled flag (#4839 (opens in a new tab))
- Eliminate cancel unsafe sig awaiting (#4834 (opens in a new tab))
- added explicit updateable admin to the mixnet contract (#4822 (opens in a new tab))
- using legacy signing payload in CLI and verifying both variants in contract (#4821 (opens in a new tab))
- adding ecash contract address (#4819 (opens in a new tab))
- Check profit margin of node before defaulting to hardcoded value (#4802 (opens in a new tab))
- Sync last_seen_bandwidth immediately (#4774 (opens in a new tab))
- Feature/additional ecash nym cli utils (#4773 (opens in a new tab))
- Better storage error logging (#4772 (opens in a new tab))
- bugfix: make sure DKG parses data out of events if logs are empty (#4764 (opens in a new tab))
- Fix clippy on rustc beta toolchain (#4746 (opens in a new tab))
- Fix clippy for beta toolchain (#4742 (opens in a new tab))
- Disable testnet-manager on non-unix (#4741 (opens in a new tab))
- Don't set NYM_VPN_API to default (#4740 (opens in a new tab))
- Update publish-nym-binaries.yml (#4739 (opens in a new tab))
- Update ci-build-upload-binaries.yml (#4738 (opens in a new tab))
- Add NYM_VPN_API to network config (#4736 (opens in a new tab))
- Re-export RecipientFormattingError in nym sdk (#4735 (opens in a new tab))
- Persist wireguard peers (#4732 (opens in a new tab))
- Fix tokio error in 1.39 (#4730 (opens in a new tab))
- Feature/vesting purge plus ranged cost params (#4716 (opens in a new tab))
- Fix (some) feature unification build failures (#4681 (opens in a new tab))
- Feature Compact Ecash : The One PR (#4623 (opens in a new tab))
Features
Scenario 1: Bandwidth Decreasing Continuously
- Started the client and noted the initial bandwidth (e.g., 1GB).
- Used the client and tracked bandwidth usage over time (e.g., decrease by 100MB every hour).
- Restarted the client after some usage.
- Verified the bandwidth continued from the last recorded value, not reset.
The bandwidth continued decreasing without resetting upon restart. Logs and reports correctly reflected the decreasing bandwidth.
Scenario 2: Bandwidth Reset Next Day
- Used the client normally until the end of the day.
- Suspended some clients and kept others active.
- Checked bandwidth at midnight.
- Verified that bandwidth reset to 1GB for both suspended and active clients.
Bandwidth reset to 1GB for all clients at midnight. Logs and reports correctly showed the reset.
Scenario 3: Bandwidth Reset at a Different Time (e.g., Midday)
- Configured the system to reset bandwidth at midday.
- Used the client and monitored bandwidth until midday.
- Kept the client connected during the reset time.
- Verified that bandwidth reset to 1GB live at midday.
Bandwidth reset to 1GB at midday while the client was connected. Logs and reports correctly reflected the reset.
Scenario 4: Stale Check for 3 Days
- Kept a client inactive for 3 days.
- Verified removal from the peer list after 3 days.
- Reconnected the client after 3 days and checked for a new private IP.
- Restarted a client within 3 days and verified it retained the same private IP.
The client was removed from the peer list after 3 days of inactivity. Upon re-connection after 3 days, the client received a new private IP. The client retained the same private IP when restarted within 3 days.
-
Feature/merge back (opens in a new tab): Merge back from the release branch the changes that fix the
nym-node
upgrades -
Removed mixnode/gateway config migration code and disabled cli without explicit flag (opens in a new tab): Commands for archived / legacy binaries
nym-gateway
andnym-mixnode
won't do anything without explicit--force-run
to bypass the deprecation. The next step, in say a month or so, is to completely remove allcli
related things.
- Verify that the
nym-gateway
binary andnym-mixnode
binary commands return the error message stating to update to nym-node - Check that when adding the
--force-run
flag, it still allows the command to be run (aside frominit
which has been removed) and the message stating to update to nym-node is a warning now - Check
nym-node
is not affected - Reviewed the changes in the PR
- Handle clients with different versions in IPR (opens in a new tab): Allow the IPR to handle clients connecting both using
v6
andv7
, independently. The motivation is that we want to be able to roll out a API version change gradually for VPN clients without breaking backwards compatibility. The main feature on the newv7
format that is not yet used, is that it adds signatures for connect/disconnect.
Run the same command (using same gateways deployed from this PR) on different versions of the nym-vpn-cli
.
Example:
sudo -E ./nym-vpn-cli -c ../qa.env run --entry-gateway-id $entry_gateway --exit-gateway-id $exit_gateway --enable-two-hop
sudo -E ./nym-vpn-cli -c ../qa.env run --entry-gateway-id $entry_gateway --exit-gateway-id $exit_gateway --enable-two-hop
-
Remove wireguard feature flag and pass runtime enabled flag (opens in a new tab)
-
Added explicit updateable admin to the mixnet contract (opens in a new tab)
-
Using legacy signing payload in CLI and verifying both variants in contract (opens in a new tab)
-
Check profit margin of node before defaulting to hardcoded value (opens in a new tab)
-
Update publish-nym-binaries.yml (opens in a new tab): Adds wireguard to builds
-
Update ci-build-upload-binaries.yml (opens in a new tab): Adds wireguard for ci-builds
-
Re-export RecipientFormattingError in nym sdk (opens in a new tab)
-
Feature/vesting purge plus ranged cost params (opens in a new tab): Combines #4715 (opens in a new tab) and #4711 (opens in a new tab) into one.
- Disables all non-essential operations on the vesting contract => you can no longer bond mixnodes/make delegations/etc. (you can still, however, withdraw your vested tokens and so on)
- Introduces admin-controlled minimum (and maximum) profit margin and interval operating costs.
- both contracts have to be migrated at the same time. ideally within the same transaction
- mixnet contract migration is not allowed (and will fail) if there are any pending actions involving vesting tokens, like delegating, increasing pledge, etc
-
Bump braces from
3.0.2
to3.0.3
in/nym-wallet/webdriver
(opens in a new tab): Bumps braces (opens in a new tab) from3.0.2
to3.0.3
.
Bugfix
- Building all binaries is ok
- Running
cargo fmt
returns no issues
Tested updating an old nym-node
version and ensuring it did not throw any errors.
-
Fix tokio error in
1.39
(opens in a new tab):- Bump tokio to
1.39.2
, skipping the issue with1.39.1
- Bump tokio to
-
Fix (some) feature unification build failures (opens in a new tab): Running a script in the root workspace that builds each crate independently
#!/bin/bash
packages=$(cargo metadata --format-version 1 --no-deps | jq -r '.packages[].name')
# Loop through each package and build
for package in $packages; do
echo "Building $package"
cargo clean
cargo check -p "$package"
if [ $? -ne 0 ]; then
echo "Build failed for $package. Stopping."
exit 1
fi
done
-
bugfix: make sure DKG parses data out of events if logs are empty (opens in a new tab): This will be the case on post
0.50
chains -
Fix clippy on rustc beta toolchain (opens in a new tab): Fix clippy warnings for rust beta toolchain
-
Fix clippy for beta toolchain (opens in a new tab): Fix beta toolchain clippy by removing unused module
- Add
nym-
prefix toserde-common
crate - Remove ignored
default-features = false
attribute for workspace dependency
- Add
Crypto
Operators Guide, Tooling & Updates
-
More explicit setup for
nym-node
with a new option explanation, including syntax examples -
Wireguard builds from source together with
nym-node
, no need to specify with a feature flag anymore -
Wireguard peers stay connected for longer time, re-connections are also faster
-
Profit margin and operating cost values are set to the values agreed by operators off-chain vote, the values can be changed in the future through Nym Operators governance process (opens in a new tab)
Minimum profit margin = 20%
Maximum profit margin = 50%
Minimum operating cost = 0 NYM
Maximum operating cost = 1000 NYM
-
Nym Harbourmater (opens in a new tab) has several new functionalities:
- Version counting graph for Gateways and Mixnodes
- Several new columns with larger nodes performance and settings overview.
- Top routing score now includes:
- Wireguard registration and complete handshake test, to configure see tasklist below
- DNS resolution check, to configure see tasklist below
- Wireguard perfomance bigger than 0.75, to configure see tasklist below
-
New Nym Wallet (opens in a new tab) is out!
- Vesting contract functionalities have been purged, users can only remove tokens from vesting
- Migrating from
mixnode
orgateway
smart contracts to a new unifyingnym-node
smart contract will be available soon using Nym desktop wallet, just like you are used to for bonding and node settings. After this migration allnym-nodes
will be able to receive delegation and rewards. We will share a step by step guide once this migration will be deployed. No action needed now.
-
Nym API Check CLI is upgraded according to the latest API endpoints, output is cleaner and more concise.
Operators Tasks
The steps below are highly recommended for all operators and mandatory for everyone who is a part of Nym Delegation or Grant program. Deadline is Friday, September 20th, 2024.
Every nym-node
should be upgraded to the latest version! Operators can test using Sandbox env during the pre-release period, then upgrade on mainnet. During the upgrade, please follow the points below before you restart the node:
nym-node
- Make sure to fill in basic description info, into the file located at
.nym/nym-nodes/<ID>/data/description.toml
(all nodes) - Configure wireguard routing with new
network_tunnel_manager.sh
(opens in a new tab) following these steps (Gateways only for the time being) - Enable Wireguard with
--wireguard-enabled true
flag included in your run command (Gateways only for the time being)- Note: On some VPS this setup may not be enough to get the correct results as some ISPs have their own security groups setup below the individual VPS. In that case a ticket to ISP will have to be issued to open the needed settings. We are working on a template for such ticket.
- Setup reverse proxy and WSS on
nym-node
(Gateways only for the time being) - Don't forget to restart your node - or (preferably using systemd automation) reload daemon and restart the service
- Optional: Use
nym-gateway-probe
and NymVPN CLI (opens in a new tab) to test your own Gateway - Optional: Run the script below to measure ping speed of your Gateway and share your results in Nym Operators channel (opens in a new tab)
We made a script for pinging nymtech.net from your GWs. Can you please install it and then share the result together with your Gateway ID:
- Get the script onto your machine (soon on github for curl or wget):
# paste all this block as one command
cat <<'EOL' > ping_with_curl_average_for_wg_check.sh
#!/bin/bash
ping_with_curl_average_for_wg_check() {
total_connect_time=0
total_total_time=0
iterations=5
timeout=2
for ((i=1; i<=iterations; i++)); do
echo "ping attempt $i..."
echo "curling nymtech.net to check ping response times"
times=$(curl -I https://nymtech.net --max-time $timeout \
-w "time_connect=%{time_connect}\ntime_total=%{time_total}" -o /dev/null -s)
time_connect=$(echo "$times" | grep "time_connect" | cut -d"=" -f2)
time_total=$(echo "$times" | grep "time_total" | cut -d"=" -f2)
total_connect_time=$(echo "$total_connect_time + $time_connect" | bc)
total_total_time=$(echo "$total_total_time + $time_total" | bc)
echo "time to connect: $time_connect s"
echo "total time: $time_total s"
done
average_connect_time=$(echo "scale=3; $total_connect_time / $iterations" | bc)
average_total_time=$(echo "scale=3; $total_total_time / $iterations" | bc)
echo "-----------------------------------"
echo "average time to connect: $average_connect_time s"
echo "average total time: $average_total_time s"
}
ping_with_curl_average_for_wg_check
EOL
- Make executable:
chmod +x ping_with_curl_average_for_wg_check.sh
- In case you don't have
bc
, install it:
sudo apt install bc
- Run:
./ping_with_curl_average_for_wg_check.sh
- Share results and ID key in Nym Operators channel (opens in a new tab)
THANK YOU!
validators
- Validators need to update and prepare for ecash implementation.
Known Bugs & Undone features
- New
nym-nodes
without a performance 24h history above 50% don't show routing properly onnym-gateway-probe
, on Nym Harbourmaster the page may appear blank - we are working on a fix. - Wireguard works on IPv4 only for the time being, we are working on IPv6 implementation.
- Harbourmaster Role column shows
nym-node --mode exit-gateway
asEntryGateway
, we are working to fix it. - In rare occassions Harbourmaster shows only "panda" without the "smiley" badge even for nodes, which have T&C's accepted. We are working to fix it.
- Sometimes
nym-node
running with--wireguard-enabled true
gives this error on restart:Serialized netlink packet .. larger than maximum size ..
/home/ubuntu/.cargo/registry/src/index.crates.io-6f17d22bba15001f/defguard_wireguard_rs-0.4.2/src/netlink.rs:155: Serialized netlink packet (23240 bytes) larger than maximum size 12288: NetlinkMessage.
From what we found out it seems that one of our dependencies - DefGuard
- is failing (opens in a new tab). Based on the reading on their fix, it seems that when node operators try to re-create a wireguard interface with too many previous peers (like on Gateway restart, with restoring from storage), there's an overflow. So their fix is to just add them one by one. To be sure that bumping the dependency version fixes the problem there's still two things we'd need to check - and your feedback would help us a lot:
- Did operators only encounter this error after a
nym-node
(Gateway) restart? - Reprouce this error ourselves and see if it actually fixes our problem.
Please share your experience with us to help faster fix of this issue.
v2024.9-topdeck
- Release binaries (opens in a new tab)
- Release CHANGELOG.md (opens in a new tab)
nym-node
version1.1.6
- chore: fix 1.80 lint issues (#4731 (opens in a new tab))
- Handle clients with different versions in IPR (#4723 (opens in a new tab))
- Add 1GB/day/user bandwidth cap (#4717 (opens in a new tab))
- Feature/merge back (#4710 (opens in a new tab))
- removed mixnode/gateway config migration code and disabled cli without explicit flag (#4706 (opens in a new tab))
Features
- Removed
nym-mixnode
andnym-gateway
config migration code and disabled CLI without explicit flag (opens in a new tab): Gateway and Mixnode commands now won't do anything without explicit--force-run
to bypass the deprecation, instead it will tell an operator to run anym-node
. The next step, in say a month or so, is to completely remove allcli
related things.
- Verify that the
nym-gateway
binary andnym-mixnode
binary commands return the_error message_
stating to update tonym-node
- Check that when adding the
--force-run
flag, it still allows the command to be run (aside frominit
which has been removed) and the message stating to update tonym-node
is a_warning_
now - Check
nym-node
is not affected - Review the changes in the PR
Scenario 1: Bandwidth Decreasing Continuously'
- Start the client and noted the initial bandwidth (e.g., 1GB).
- Us the client and track bandwidth usage over time (e.g., decrease by 100MB every hour).
- Restart the client after some usage.
- Verify the bandwidth continued from the last recorded value, not reset.
Notes: The bandwidth continued decreasing without resetting upon restart. Logs and reports correctly reflected the decreasing bandwidth.
Scenario 2: Bandwidth Reset Next Day'
- Use the client normally until the end of the day.
- Suspend some clients and kept others active.
- Check bandwidth at midnight.
- Verify that bandwidth reset to 1GB for both suspended and active clients.
Notes: Bandwidth reset to 1GB for all clients at midnight. Logs and reports correctly showed the reset.
Scenario 3: Bandwidth Reset at a Different Time (e.g., Midday)'
- Configure the system to reset bandwidth at midday.
- Use the client and monitored bandwidth until midday.
- Keep the client connected during the reset time.
- Verify that bandwidth reset to 1GB live at midday.
Notes: Bandwidth reset to 1GB at midday while the client was connected. Logs and reports correctly reflected the reset.
- Handle clients with different versions in IPR (opens in a new tab): Allow the IPR to handle clients connecting both using
v6
andv7
, independently. The motivation is that we want to be able to roll out an API version change gradually for NymVPN clients without breaking backwards compatibility. The main feature on the newv7
format that is not yet used, is that it adds signatures for connect/disconnect.
Run the same command (using same gateways deployed from this PR) on different versions of the nym-vpn-cli
.
Example:
sudo -E ./nym-vpn-cli -c ../qa.env run --entry-gateway-id $entry_gateway --exit-gateway-id $exit_gateway --enable-two-hop
sudo -E ./nym-vpn-cli -c ../qa.env run --entry-gateway-id $entry_gateway --exit-gateway-id $exit_gateway --enable-two-hop
Bugfix
-
Feature/merge back (opens in a new tab): Merge back from the release branch the changes that fix the
nym-node
upgrades. -
Fix version
1.x.x
not having template correspondent initially (opens in a new tab): This should fix the problem of config deserialisation when operators upgrade nodes and skip over multiple versions.
- Tested updating an old nym-node version and ensuring it did not throw any errors.
- Building all binaries is ok
- Running
cargo fmt
returns no issues
Operators Guide updates
- WireGuard tunnel configuration guide for
nym-node
(currently Gateways functionalities). For simplicity we made a detailed step by step guide to upgrade an existingnym-node
to the latest version and configure your VPS routing for WireGuard. Open by clicking on the example block below.
Prerequisites
-
Nym Node Version: You must be running the
2024.9-topdeck
release branch, which operates asnym-node
version1.1.6
. You can find the release here: Nym 2024.9-topdeck Release (opens in a new tab). -
Important: Before proceeding, make sure to back up your current
nym-node
configuration to avoid any potential data loss or issues. -
Download Nym Node:
-
You can download the
nym-node
binary directly using the following command:
curl -L https://github.com/nymtech/nym/releases/download/nym-binaries-v2024.9-topdeck/nym-node -o nym-node && chmod u+x nym-node
Step 1: Update UFW Firewall Rules
- Warning: Enabling the firewall with UFW without allowing SSH port 22 first will lead to losing access over SSH. Make sure port 22 is allowed before proceeding with any UFW configurations.
Run the following as root or with sudo
prefix:
- Check the current status of UFW (Uncomplicated Firewall):
ufw status
- Ensure that the following ports are allowed on your machine before adding the WireGuard port:
ufw allow 22/tcp # SSH - you're in control of these ports
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw allow 1789/tcp # Nym specific
ufw allow 1790/tcp # Nym specific
ufw allow 8080/tcp # Nym specific - nym-node-api
ufw allow 9000/tcp # Nym Specific - clients port
ufw allow 9001/tcp # Nym specific - wss port
ufw allow 51822/udp # WireGuard
- Confirm that the UFW rules have been updated:
ufw status
Step 2: Download and Prepare the Network Tunnel Manager Script
- Download the
network_tunnel_manager.sh
(opens in a new tab) script:
curl -L -o network_tunnel_manager.sh https://github.com/nymtech/nym/blob/develop/scripts/network_tunnel_manager.sh
- Make the script executable:
chmod u+x network_tunnel_manager.sh
- Apply the WireGuard IPTables rules:
./network_tunnel_manager.sh apply_iptables_rules_wg
Step 3: Update the Nym Node Service File
- Modify your
nym-node
service file to enable WireGuard. Open the file (usually located at/etc/systemd/system/nym-node.service
) and update the[Service]
section as follows:
[Service]
User=<YOUR_USER_NAME>
Type=simple
#Environment=RUST_LOG=debug
# CAHNGE PATH IF YOU DON'T RUN IT FROM ROOT HOME DIRECTORY
ExecStart=/root/nym-node run --mode exit-gateway --id <YOUR_NODE_LOCAL_ID> --accept-operator-terms-and-conditions --wireguard-enabled true
Restart=on-failure
RestartSec=30
StartLimitInterval=350
StartLimitBurst=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
# ADD OR TWEAK ANY CUSTOM SETTINGS
- Reload the systemd daemon to apply the changes:
systemctl daemon-reload
- Restart the
nym-node service
:
systemctl restart nym-node.service
- Optionally, you can check if the node is running correctly by monitoring the service logs:
journalctl -u nym-node.service -f -n 100
Step 4: Run the Network Tunnel Manager Script
Finally, run the following command to initiate our favorite routing test - run the joke through the WireGuard tunnel:
./network_tunnel_manager.sh joke_through_wg_tunnel
- Note: Wireguard will return only IPv4 joke, not IPv6. WG IPv6 is under development. Running IPR joke through the mixnet with
./network_tunnel_manager.sh joke_through_the_mixnet
should work with both IPv4 and IPv6!
- Change
--wireguard-enabled
flag totrue
: With a proper routing configurationnym-nodes
running as Gateways can now enable WG. See the example below:
For Exit Gateway:
./nym-node run --id <ID> --mode exit-gateway --public-ips "$(curl -4 https://ifconfig.me)" --hostname <HOSTNAME> --http-bind-address 0.0.0.0:8080 --mixnet-bind-address 0.0.0.0:1789 --location <LOCATION> --accept-operator-terms-and-conditions --wireguard-enabled true
# wireguard can be enabled from version 1.1.6 onwards
For Entry Gateway:
./nym-node run --id <ID> --mode entry-gateway --public-ips "$(curl -4 https://ifconfig.me)" --hostname <HOSTNAME> --http-bind-address 0.0.0.0:8080 --mixnet-bind-address 0.0.0.0:1789 --accept-operator-terms-and-conditions --wireguard-enabled true
# wireguard can be enabled from version 1.1.6 onwards
- Update Nym exit policy (opens in a new tab): Based on the survey, AMA and following discussions we added several ports to Nym exit policy. The ports voted upon in the forum governance (opens in a new tab) have not been added yet due to the concerns raised. These ports were unrestricted:
22 # SSH
123 # NTP
445 # SMB file share Windows
465 # URD for SSM
587 # SMTP
853 # DNS over TLS
1433 # databases
1521 # databases
2049 # NFS
3074 # Xbox Live
3306 # databases
5000-5005 # RTP / VoIP
5432 # databases
6543 # databases
8080 # HTTP Proxies
8767 # TeamSpeak
8883 # Secure MQ Telemetry Transport - MQTT over SSL
9053 # Tari
9339 # gaming
9443 # alternative HTTPS
9735 # Lightning
25565 # Minecraft
27000-27050 # Steam and game servers
60000-61000 # MOSH
-
Create a NymConnect archive page (opens in a new tab), PR #4750 (opens in a new tab): Archive deprecated NymConnect for backward compatibility, show PEApps examples for both NC and maintained
nym-socks5-client
. -
Fix broken URLs and correct redirection. PRs: #4745 (opens in a new tab), #4752 (opens in a new tab) #4755 (opens in a new tab), #4737 (opens in a new tab)
- Use deadlinkchecker.com (opens in a new tab) to go over
nymtech.net
and correct all docs URLs - Go over search engines and old medium articles and check that all dead URLs re-directing correctly
- Clarify syntax on
nym-nodes
ports on VPS setup page (opens in a new tab), PR #4734 (opens in a new tab): Make crystal clear that the addresses and ports in operatorsconfig.toml
must be opened usingufw
(opens in a new tab) and set up as in the example below:
[host]
public_ips = [
'<PUBLIC_IP>'
]
[mixnet]
bind_address = '0.0.0.0:1789'
[http]
bind_address = '0.0.0.0:8080'
[mixnode]
[mixnode.verloc]
bind_address = '0.0.0.0:1790'
[entry_gateway]
bind_address = '0.0.0.0:9000'
Tooling
-
Nym Harbourmaster (opens in a new tab) has now several new functionalities:
- Tab for Mixnodes
- Tab with Charts
- New columns with: Moniker (node description), DP delegatee, Accepted T&Cs - also part of a new category 🐼😀
-
Nym has a new Token page (opens in a new tab)
v2024.8-wispa
- Release binaries (opens in a new tab)
- Release CHANGELOG.md (opens in a new tab)
nym-node
version1.1.5
- add event parsing to support cosmos_sdk to 0.50 (#4697 (opens in a new tab))
- Fix NR config compatibility (#4690 (opens in a new tab))
- Remove UserAgent constructor since it's weakly typed (#4689 (opens in a new tab))
- [bugfix]: Node_api_check CLI looked over roles on blacklisted nodes (#4687 (opens in a new tab))
- Add mixnodes to self describing api cache (#4684 (opens in a new tab))
- Move and whole bump of crates to workspace and upgrade some (#4680 (opens in a new tab))
- Remove code that refers to removed nym-network-statistics (#4679 (opens in a new tab))
- Remove nym-network-statistics (#4678 (opens in a new tab))
- Create UserAgent that can be passed from the binary to the nym api client (#4677 (opens in a new tab))
- Add authenticator (#4667 (opens in a new tab))
Features
- Default construct NodeRole (opens in a new tab): To preserve compatibility with newer clients interacting with older
nym-api
- Reviewed the changes in the
nym-api-requests/src/models.rs
file. - Verified that the
NymNodeDescription
struct includes the newrole
field with a default value set bydefault_node_role
. - Checked the implementation of the
default_node_role
function to ensure it returnsNodeRole::Inactive
. - Ran the updated code in the sandbox environment.
- Monitored the sandbox environment for any issues or errors related to the changes.
Notes (if any):
The test was successful. No issues were flagged during the testing in the sandbox environment. The new default value for NodeRole
ensures backward compatibility without causing disruptions.
- [Default construct NodeRole for backwards compatibility (apply #4721 (opens in a new tab) on develop)](https://github.com/nymtech/nym/pull/4722 (opens in a new tab))
- Add upgrades to
nym-node
forauthenticator
changes (opens in a new tab)
- Reviewed the changes in the
gateway/src/error.rs
andgateway/src/node/mod.rs
files. - Verified the new error enum
AuthenticatorStartupFailure
was added toGatewayError
. - Confirmed the implementation of the
StartedAuthenticator
struct and its usage in thestart_authenticator
function. - Ran the updated code in the canary environment.
- Monitored the canary environment for any issues or errors related to the changes.
- Reviewed the changes in
common/client-libs/validator-client/src/nyxd/cosmwasm_client/client_traits/signing_client.rs
,logs.rs
,types.rs
, andnym-api/src/coconut/tests/mod.rs
files. - Verified the addition of event parsing in the relevant functions and structs.
- Ensured that the
find_attribute
function correctly parses event attributes. - Ran the updated code in the sandbox environment.
- Broadcasted transactions on the sandbox network to test the changes.
- Monitored the sandbox network for any malformed responses or errors after the test chain upgrade.
- Send bandwidth status messages when connecting (opens in a new tab): When connecting to the gateway we get received the available bandwidth left. Emit a status messages for this, for consumption by the application layer.
- Reviewed the changes in
common/bandwidth-controller/src/event.rs
,common/bandwidth-controller/src/lib.rs
, andcommon/client-libs/gateway-client/src/client.rs
files. - Verified the implementation of
BandwidthStatusMessage
enum for emitting status messages. - Ensured
GatewayClient
is updated to send bandwidth status messages when connecting. - Deployed the updated code on the canary environment.
- Connected to the gateway and checked for the emission of bandwidth status messages.
- Verified that the messages were correctly parsed and consumed by the application layer.
- Ran the VPN client to observe the parsed events.
- Fix NR config compatibility (opens in a new tab): Recently we deleted the old statistics service provider. This fixes some issues where old configs didn't work with the latest changes.
- Make NR able to read config with old keys in
- Remove deleted config keys from NR template
- Reviewed the changes in the
service-providers/network-requester/src/config/mod.rs
andservice-providers/network-requester/src/config/template.rs
files. - Ensured
NetworkRequester
config is able to read old keys for compatibility. - Removed old and deleted config keys from the
NetworkRequester
template. - Compiled the project to verify no issues or warnings appeared.
- Ran all tests to ensure that the changes did not affect the functionality.
- Validated that no leftover code from the old statistics service provider caused any issues.
- Reviewed the changes in
common/http-api-client/src/user_agent.rs
file. - Verified the removal of the
UserAgent
constructor and ensured that all instances ofUserAgent::new
are updated accordingly. - Checked the implementation of
UserAgent
struct usingBinaryBuildInformation
andBinaryBuildInformationOwned
. - Deployed the updated code across different environments (QA, sandbox, and canary).
- Ran tests to ensure that the
UserAgent
struct functions correctly without the constructor.
- Add mixnodes to self describing api cache (opens in a new tab):
- Abstracts getting the self describing info a bit
- Adds mixnodes to the cache refresher as well
- Adds
role
field to theNodeDescription
struct, to be able to distinguish between mixnodes and gateways - Switched to using
NodeStatusCache
instead ofContractCache
Called the new /mixnodes/described
endpoint as well as the existing /gateways/described
endpoint and verified that the data returned for each was correct based on the settings that different nodes have when they are setup.
For gateway endpoint, the “role” for now does not differentiate between entry and exit gateways, this will be implemented in the future.
- Move and whole bump of crates to workspace and upgrade some (opens in a new tab):
- Fix cargo warning for
default_features
- Move dirs 4.0 to workspace
- Use workspace
base64
dep - Move
rand_chacha
andx25519-dalek
to workspace - Use workspace
ed25519-dalek
dep - Move
itertools
to workspace deps and upgrade - Move a few partial deps to workspace while preserving versions
- Fix cargo warning for
- Reviewed the changes to move and upgrade crates to the workspace.
- Verified the updated dependencies:
- Moved
dirs
to version 4.0 in the workspace. - Updated the
base64
dependency to use the workspace version. - Moved
rand_chacha
andx25519-dalek
to the workspace. - Updated
ed25519-dalek
to use the workspace version. - Moved and upgraded
itertools
in the workspace. - Moved other partial dependencies to the workspace while preserving their versions.
- Moved
- Ensured the
Cargo.toml
files across the project reflect these changes correctly. - Compiled the entire project to check for any issues or warnings.
- Verified that all tests pass successfully after the changes.
- Remove
nym-network-statistics
(opens in a new tab): Removenym-network-statistics
service provider that is no longer used.
- Reviewed the project to identify all references to
nym-network-statistics
. - Removed all code and dependencies associated with
nym-network-statistics
. - Ensured that no references to
nym-network-statistics
remain in the codebase, including comments, imports, and configuration files. - Compiled the project to check for any issues or warnings.
- Ran all tests to ensure the removal did not affect the functionality of the project.
- Remove code that refers to removed
nym-network-statistics
(opens in a new tab): Follow up to #4678 (opens in a new tab) where all code interacting with it is removed.
- Reviewed the project to identify all references to
nym-network-statistics
. - Removed all code and dependencies associated with
nym-network-statistics
. - Ensured that no references to
nym-network-statistics
remain in the codebase, including comments, imports, and configuration files. - Compiled the project to check for any issues or warnings.
- Ran all tests to ensure the removal did not affect the functionality of the project.
- Create
UserAgent
that can be passed from the binary to thenym-api
client (opens in a new tab):- Support setting
UserAgent
for the validator client - Support setting
UserAgent
in the SDKMixnetClient
- Set
UserAgent
when getting the list of gateways and topology innym-client
nym-socks5-client
- Standalone
ip-packet-router
- Support setting
Used the nym-vpn-cli to test this, and we can visibly see the UserAgent
, no issues with the comments mentioned above.
Example of the user agent sent:
nym-client/1.1.36/x86_64-unknown-linux-gnu/e18bb70
Connected with no problems
Bugfix
Node_api_check.py
CLI looked over roles on blacklisted nodes (opens in a new tab): Removing/correcting this redundant function which results in unwanted error print, will resolve in the program not looking up theroles
endpoint for blacklisted GWs, instead just ignores the role description and still return all other endpoints.
Operators Guide updates
- Create a guide to backup and restore
nym-node
(opens in a new tab), PR #4720 (opens in a new tab) - Add manual IPv6 ifup/down network configuration (opens in a new tab), PR #4651 (opens in a new tab)
- Extend ISP list (opens in a new tab)
- Add SSL cert bot block to WSS setup (opens in a new tab), PR here (opens in a new tab): WSS setup fully works!
- Correct
HTTP API port
in bonding page (opens in a new tab) , PR #4707 (opens in a new tab): ChangeHTTP API port
to8080
on everynym-node
by openingconfig.toml
and making sure that your binding addresses and ports are as in the block below. Then go to desktop wallet and open the box calledShow advanced options
and make sure all your ports are set correctly (usually this means to changeHTTP api port
to8080
formixnode
mode).