Changelog
This page displays a full list of all the changes during our release cycle from v2024.3-eclipse
onward. Operators can find here the newest updates together with links to relevant documentation. The list is sorted so that the newest changes appear first.
Note: Any information published on this page was up to date at the time of writing. We do not maintain changelog retrospectively.
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).
v2025.2-hu
- Release Binaries (opens in a new tab)
nym-node
version1.4.0
nym-node
Binary Name: nym-node
Build Timestamp: 2025-02-04T09:35:42.399220545Z
Build Version: 1.4.0
Commit SHA: 4c2bf3642e8eec0d55c7753e14429d73ac2d0e99
Commit Date: 2025-02-04T10:29:48.000000000+01:00
Commit Branch: HEAD
rustc Version: 1.84.1
rustc Channel: stable
cargo Profile: release
Operators Updates & Tools
From nym-node v1.3.0
operators can technically choose multiple functionalities for their nym-node
binary (flagged as --mode
).
However, the clients are yet to be developed to be able to make a proper selection for multi-mode nodes!
WE ASK OPERATORS TO ASSIGN ONLY ONE FUNCTIONALITY TO --mode
OPTION PER NODE. PLEASE SELECT ONE MODE ARGUMENT OUT OF: mixnode
or entry-gateway
or exit-gateway
!
-
Updated maintenance guides to backup, restore and move a node, containing a new and important commands to backup and restore
clients.sqlite
database. -
New explanation of
nym-node
functionalities describing how Gateways get selected in Mixnet mode and Wireguard mode.
Wireguard nodes route data directly to the open internet. Therefore it exposes IP of operators server (VPS) to abuse complains. Before you decide to run a node with active wireguard routing, please read our Community Counsel pages containing more information and some legal content.
Wireguard mode has no exit policy right now - we are working on the implementation.
Legal support
We have been notified that a handful of nodes have been taken down by abuse reports. We created new pages with legal suggestions and email templates. Here are some useful points on legal support:
- Here is the first version of a response template tailored for Nym operators.
Dear <ISP>:
Thank you for forwarding me the notice you received from <COPYRIGHT_CLAIMANT> regarding <CONTENT>. I would like to assure you that I am not hosting the claimed infringing materials, and I believe that the notice is likely based upon misunderstandings about the law and about some of the software I run. I believe that the Digital Millennium Copyright Act's ("DMCA") safe harbor provisions likely protect you from liability arising from this complaint.
As you know, the DMCA creates four "safe harbors" for service providers (such as ISPs) to protect them from copyright liability for the acts of their users, when the service provider fulfill certain requirements. (See 17 U.S.C. 512). The requirements to meet the DMCA safe harbor provisions vary depending on the type of safe harbor claimed.
You may be familiar with the "notice and takedown" requirements of section 512(c) of the DMCA, which require a service provider respond to expeditiously to remove, or disable access to, the material that is claimed to be infringing or to be the subject of infringing activity. However, we believe that the more appropriate safe harbor provision is under section 512(a), which applies when the service provider merely acts as a conduit. In such case, there are different and less burdensome eligibility requirements, as the D.C. Circuit Court of Appeals held in RIAA v. Verizon (see https://scholar.google.com/scholar_case?case=15815830240179540527) and the Eighth Circuit Court of Appeals confirmed in RIAA v. Charter (see https://scholar.google.com/scholar_case?case=11547531128234336420).
Under DMCA 512(a), service providers like you are typically protected from damages for copyright infringement claims if you also maintain "a policy that provides for termination in appropriate circumstances of subscribers and account holders of the service provider's system or network who are repeat infringers." If you have and implement such a policy, and you otherwise qualify for the safe harbor, you should be free from fear of copyright damages.
In this case, the copyright notice you received was likely triggered by a program I run called Nym. Nym is a network software that helps users to enhance their privacy, security, and safety online.
The program does not host any content. Rather, it is part of a network of nodes on the Internet that simply pass packets among themselves before sending them to their destinations, just as any Internet intermediary does. The difference is that Nym tunnels the connections such that no intermediary can learn both the source and destination of the packets, giving users protection from nefarious snooping on network traffic. The result is that, unlike most other Internet traffic, the final IP address that the recipient receives is not the IP address of the sender. Nym protects users against hazards such as harassment, spam, and identity theft.
Nym aims to improve on technology developed by Panoramix by building a decentralized authentication and payment protocol. It will enable developers to build their own sustainable privacy-enhanced services. Panoramix is an EU-funded Horizon 2020 programme with the goal of protecting communication privacy by building a comprehensive mixnet infrastructure. This project has received funding from the European Union’s Horizon 2020 research and innovation programme under the Grant Agreement No 653497, "Privacy and Accountability in Networks via Optimized Randomized Mix-nets (Panoramix)” (For more on Nym, see https://www.nym.com/, For more on Panoramix, see https://panoramix.me/ .) I hope, as an organization committed to protecting the privacy of its customers, you'll agree that this is a valuable technology.
While the Nym node that I run may appear to be the source of material that is alleged to be infringing, I do not host that material. I do not select the material transmitted through the Nym node that I run, and I have no practical means of either identifying the source of such material or preventing its transmission. In addition, I do nothing to encourage or promote the use of the Nym network for copyright infringement or other prohibited activities. For these reasons, I am not an infringer of copyright in any materials that are transmitted through the Nym node that I run, either directly or under a theory of contributory or vicarious liability. In addition, as you are just acting as a conduit, you should continue to be protected under the DMCA 512(a) safe harbor provision without taking any further action.
Thank you for working with me on this matter. As a loyal subscriber, I appreciate your notifying me of this issue and hope that the protections of DMCA 512 put any concerns you may have to rest. If not, please contact me with any further questions.
Very truly yours,
Your customer, <YOUR_NAME/PSEUDONYM>
-
We are starting Operators Legal Clinic with Alexis Roussel, every Wednesday, 14:30 UTC (60 min) in our Operator Legal Forum channel on Matrix (opens in a new tab). Come and share your findigs and questions with the rest of the operators.
-
Join Operator Legal Forum channel (opens in a new tab) and share as much as possible (like screen prints, provider, location etc).
-
Join Community legal counsel (opens in a new tab) - our collective knowledge hub. Add your findings by opening a Pull Request (opens in a new tab)
-
While we are working on a new list of more friendly providers, consider to move away from these provides as soon as possible:
- Servinga / VPS2day (AS39378)
- Frantech / Ponynet / BuyVM (AS53667)
- OVH SAS / OVHcloud (AS16276)
- Online S.A.S. / Scaleway (AS12876)
- Hetzner Online GmbH (AS24940)
- IONOS SE (AS8560)
- Psychz Networks (AS40676)
- 1337 Services GmbH / RDP.sh (AS210558)
-
Backup your nodes to have access to
.nym
directory locally. Follow node and proxy configuration backup guides to be able to restore your node later on on another machine, without losing your delegation. -
We would like to ask operators who use reverse proxy and a domain (required for Gateways) to start using a common convention starting with
nym-exit
for their nodes URL. The entire address should have this new format:
nym-exit.<CUSTOM>.<DOMAIN>.<TLD>
For example:
# for squads running multiple nodes a format can look like this:
nym-exit.ch-node1.mysquad.org
# or like this
nym-exit.3-jamaica.mysquad.org
# for operators having one node per location, the format can look like this:
nym-exit.brazil.mysquad.org
# or if operators decide to not have any custom, they can simply have this format:
nym-exit.mysquad.org
The NYM-EXIT
part in the beginning is what's important.
-
When registering a domain, check Top Level Domain (TLD) (opens in a new tab) terms and conditions. For example
.icu
is a no go. Having a wrong TLD may lead to your domain being taken away from you when facing a DMCA report. -
Write a message to your provider and introduce your intention to run a Nym Node on their service
Hi,
I am reaching out to introduce myself! I am about to spin up a machine with you to run what is called a “nym node” - think of it as somewhat similar to a Tor exit node.
You can always recognize a nym node by our domain names: nym-exit
Nym node runners are a decentralized community all over the world. We provide secure internet traffic routing services to ordinary people and businesses via the Nym platform and NymVPN app.
The Nym platform implements strict encryption and security standards, which also means I simply relay traffic and do not know the end-destination nor its content.
The Nym traffic pattern is somewhat unique, as we route traffic using the “sphinx” packet format (again, think onion routing), which makes all traffic look uniform. I’d like to ensure this unique traffic pattern doesn’t raise any flags or issues with you! See https://nym.com/ for more details.
Feel free to ask any questions.
Many thanks,
<YOUR_NAME/PSEUDONYM>
- New page with templates for VPS provider
Delegation Program
If you are interested to sign up to delegation program que, message Merve on Element for the time being as we are working on CRM upgrade. We review nodes dynamically and delegate to new ones once a month. New operators interested to join DP must follow the rules specified here (opens in a new tab), run one of two latest binary version and have Terms & Conditions accepted.
Note: Due to the token price we allow operators to have Operators cost 1000 NYM, the profit margin maximum remains 20%.
Delegation and undelegation in January
Delegated to all these nodes:
AMnDNd1Xgw7Em9R5vehP7r12ZNWUZ3jmitDHya6gpvGR
DLkKyYcA5feq43rqZdx6nJBNZvQsdX7kb2f1f6ED4cs2
26ZmTxTVBKHZg8MTKwypHkXZVJhDC7QHuv3BdsyRyTuk
5ZWdDN9pQ18vYkYYs5ZERh4P4JLtMiijscZ6FvwSfVxR
3uBgUJR393acoCRysu6SiLsximiwAMM85QFxq9WD8puC
5rXcNe2a44vXisK3uqLHCzpzvEwcnsijDMU7hg4fcYk8
nuMerN7ahqsptK8zDUZhnxMyDqePza8vWDf8k171EEs
86cNnnRxNpGdEtSX9UP1GpT6xrNvNuxFdHNkZcK7pAJg
9ngFADaYpT54F9i8iYFZLYR7SB7hrubsPArwpqe1RXQb
FQBbq1crAkCrjVBnEN85VqgZgGRMLJV65NJk8bPADdw
FUH3E3dghXjC9hdt3jeAhSsxwozsw1yzBXkoaFqkL4ci
5wF5wN7T2UuSsiUcQyL77NwdnXwAXxFttpZ1dR1nu4kR
4pVq4QSCcq4zNCnBNCfyugPjVhVyGDCBDSW5rghg8oZS
8XW1WWN1PuuAYz2TXQ9iWRekMFEJXjdEq4asMyE2qCCN
CxgjcTTAnRJzDxMbqtX73vEbWwLQmVoW8zS8RZEicgfT
7fwyXd4Cmh92d4piEPHmdFm1Wz1QCFQDf6bnDGNT3M6P
Undelegated from 8 nodes for not meeting the rules (being offline):
# Gateways
DLxLKsd3LTnfudSSmHanPaZACsh1x4MGEzfJS4jQibir
DiciBkjHovXzTDE2EFJKPNj3TGw2oQjr7HPSas2YQPiQ
ADjpymCgjFsE5m7YvnZFxLMscg85dCUUesR5g8yN3Mzz
C9dEABjtFRMD1x4ZnbqnsELGJgutT73bPCfYzqBe7sHB
# Mixnodes
2FGgY5zWq6JP1BvpnLPbedWRYYAZELFCT9rMybNhnxpo
4nKkwPSbkbtkw3yrRKQVAVdviNgFgcNskgcSGdT2Sucy
DjY3T7n6VoHGcETMnmtZKmUU7NZP6AhCs8CoRsSSbViC
FAKhiQ8nW5sAWAxks1WB8u1MAWsapToCSE3KmF9LuGRQ
Undelegated due to high saturation:
5omopSZy59UyNPpx9P97vjBnN6PwPw9x5MVUx5kuNaXt
Service Grant Program v2
Aside from delegating on top of nodes, Nym runs a Service Grant Program (SGP) to support Exit Gateway operators before they will be rewarded by collecting zk-nym tickets from users subscription. Operators included in SGP are long term active community members with the highest requirements on the technical setup and upgrading pace. We are about to start a second iteration of SGP very soon (SGPv2). The final slots and locations are yet to be concluded. Priority to participate in SGPv2 will be given to the current operators in SGP. Based on the number of slots, we will then determine how many more operators can sign up.
Rules of SGPv2
We will share more info soon in the channels. The rules are not set in stone and could potentially be altered or updated in the future! Do not purchase new servers neither migrate your nodes just yet.
As we finalising last details of "Project Smoosh", where one binary - nym-node
- can run as an entry-gateway
, mixnode
or exit-gateway
in Mixnet mode as well as entry-gateway
or exit-gateway
in Wireguard mode, we plan to step up the game. SGPv2 grants will be higher if operators can meet new requirements.
Minimum Specs & Requirements
These are minimum requirements to become a part of SGPv2. We aim to have nodes on dedicated servers, with exceptions for much stronger VPS to meet the needed criteria while sharing server with other users.
Operators interested in joining SGPv2 can start by searching for servers that meet the above criteria, where they may eventually migrate their nodes, and then share their findings by submitting a form which will be shared shortly. Do not buy a new server, neither migrate a node just yet! We will be first reaching to the current participants of Service Grant Program. Everything will be announced, sending DMs to devrel will not speed up the process!
Features
-
build(deps): bump criterion from
0.4.0
to0.5.1
(opens in a new tab): Bumps criterion (opens in a new tab) from0.4.0
to0.5.1
. -
build(deps): bump http from
1.1.0
to1.2.0
(opens in a new tab): Bumps http (opens in a new tab) from1.1.0
to1.2.0
. -
http-api-client
: deduplicate code (opens in a new tab): After adding PATCH support in #5260 (opens in a new tab), it's now time to de-duplicate some of the code -
nym topology revamp (opens in a new tab): This PR changes the internals of the
NymTopology
to blur the lines between explicit mixnodes and gateways so that what used to be considered a "mixnode" could be a valid egress point of the network.NymTopology
is no longer divided intoBTreeMap<MixLayer, Vec<mix::Node>>
andVec<gateway::Node>
. instead there's information about the current rewarded set (to support future VRF work) and a simple map ofHashMap<NodeId, RoutingNode>
. The new features are mostly controlled via 2 new flags/config values:use_extended_topology
that tells the client to retrieve all network nodes rather than the ones that got assigned "active" mixnode role (or support being a gateway)ignore_egress_epoch_role
that tells the client it's fine to construct egress packets to nodes that are not assigned entry or exit gateway role
-
Move tun constants to network defaults (opens in a new tab):
- Regression Testing:
- Verified no issues arose when running tests for the affected files.
- Tested TUN behaviour with new nym-nodes in the hu branch.
Results:
- No bugs detected.
- Tunnels are functioning as expected, with traffic routing and IP generation working seamlessly.
-
Add dependabot assignes for the root cargo ecosystem (opens in a new tab)
-
build(deps): bump the patch-updates group across 1 directory with 35 updates (opens in a new tab): Bumps the
patch-updates
group with 33 updates -
Periodically remove stale gateway messages (opens in a new tab): This PR introduces a simple task that removes gateway messages that haven't been retrieved in (by default) 24h.
Automation Script for Data Cleanup Validation
Test Objective: Validate that the stale message cleanup mechanism in the database correctly removes records older than the configured threshold (24 hours).
Test Setup:
- Environment:
- SQLite database
- Bash script: used to insert data.
Steps Performed:
- Ran the insert_data.sh script to populate the database with test data:
- Recent records inserted successfully.
- Verified the database content post-insertion: sqlite3 clients.sqlite "SELECT * FROM message_store;"
- Confirmed that all 20 records (10 recent + 10 stale) were present.
- Allowed the system to run for 24 hours to trigger the cleanup mechanism.
- Queried the database again after 24 hours: sqlite3 gateway_storage.db "SELECT * FROM message_store;"
Expected Result:
- All stale records (older than 24 hours) should be removed.
- Recent records should remain in the database. Actual Result:
- Query after 24 hours showed only the 10 recent records.
- All 10 stale records were successfully removed.
- Use expect in geodata test to give error message on failure (opens in a new tab): Keep hitting this error on CI, from what I think is network hickup. But it's hard to tell form the log since the error is swallowed. Explicitly unwrap the result so we get a more detailed error output.
Quick Code Review
Summary
- CI Workflow: Adjusted paths to optimise build triggers, avoiding unnecessary CI runs while ensuring coverage for key directories
- Geolocation Test: Improved error handling by replacing assertions with
.expect
for clearer debugging in API regression tests
Conclusion
Regression testing confirms everything works as intended. Approved.
-
CancellationToken
-based shutdowns (opens in a new tab): This PR introduces scaffolding for usingCancellationToken
andTaskTracker
for our graceful shutdowns rather than the existingTaskClient
andTaskManager
. -
Introduce
/load
endpoint for self-reported quantised Nym Node load (opens in a new tab): This PR introduces a new/load
endpoint on aNymNode
to return its current load. It returns the following data:
pub struct NodeLoad {
pub total: Load,
pub machine: Load,
pub network: Load,
}
Where Load
is quantised into the following buckets / tiers:
pub enum Load {
Negligible, // 0 - 0.1
Low, // 0.1 - 0.3
Medium, // 0.3 - 0.6
High, // 0.6 - 0.8
VeryHigh, // 0.8 - 0.95
AtCapacity, // >= 0.95
}
/load
endpointThe actual values forNodeLoad
are determined as follows:
- For network we approximate current rx/tx rates on all
eth
interfaces and scale them to the range of 0-1Gbps (for this initial iteration we assume the maximum network speed is 1Gbps which would be treated as fully saturated). So for example, if the node is sending at 0.5Gbps, it would get aLoad
of 0.5 and thus value ofLoad::Medium
, 0.9Gbps would getLoad
of 0.9 and value ofLoad::VeryHigh
, etc. we take the bigger value between rx and tx - For machine load there's a bit more logic in there:
- Firstly we determine what I call a "base load" of the machine. we do this by taking the average load from the last 5min (via
getloadavg
) and dividing it by the number of CPUs in the machine. For example if the average load of the machine in the last 5min was1.23
and it has 2 CPUs, then it'sLoad
would beLoad::High
(1.23 / 2 = 0.615
) - However, whilst CPU utilisation is one of the most important factors, it does not tell the whole story. I tried to also take memory/swap utilisation into consideration (whilst not making it the main factor)
- Thus we calculate two additional auxiliary
Load
values, for memory usage and swap usage, i.e.:used_memory / total_memory
andused_swap / total_swap
respectively. - Then we check whether either of the
MemoryLoad
orSwapLoad
is bigger than the current baseLoad
of the machine we have determined, if so, it's increased by one tier / bucket. For example, say the current machine load isLoad::Low
, but the memory usage is at 90% (Load::VeryHigh
). that would result in the reportedLoad
being bumped up toLoad::Medium
instead. The same logic applies with swap load, however, only if the total swap > 1GB. this is to prevent weird edge cases where the machine has hardly any swap. - Finally, the
.total
Load
uses the same "tier bumping" behaviour using the.total
and.network
loads, i.e.if network > machine
, thentotal = machine + 1
. for example ifmachine
Load
isLoad::Low
, butnetwork
Load
isLoad::Medium
, then thetotal
Load
is set toLoad::Medium
instead.
- Firstly we determine what I call a "base load" of the machine. we do this by taking the average load from the last 5min (via
-
Bump the
patch-updates
group with 8 updates (opens in a new tab) -
Updated
cosmrs
andtendermint-rpc
to their most recent versions (opens in a new tab) -
Bump mikefarah/yq from
4.44.6
to4.45.1
(opens in a new tab) -
Update
indexed_db_futures
(opens in a new tab): Updates theindexed_db_futures
dependency to stop relying on the fork. -
Refresh wasm sdk (opens in a new tab): This PR refreshes the wasm clients to make them usable in the current network
-
Client gateway selection (opens in a new tab): Changed how gateway is selected.
- For init the target gateway can't support mixing
- For egress, unless
ignore_epoch_roles
is specified, the gateway can't be currently assigned to a mixing layer. But it can be standby or inactive
-
Exposed
NymApiClient
method for obtaining node performance history (opens in a new tab) -
Bind to
[::]
onnym-node
for both IP versions (opens in a new tab)
IPv4 Configuration and Migration Testing
Testing Steps:
- Initiated and ran a nym-node with version 1.3.1 on an IPv4-only machine, then updated it to the new 'hu', 1.4.0 version.
- Initiated and ran a new nym-node with 'hu', 1.4.0 always on a machine with only IPv4.
- Initiated and ran a new nym-node with 'hu', 1.4.0 on a machine with both IPv4 and IPv6 for regression testing.
Results:
- No functional issues during version updates.
- Logged message on all versions: "no registered client for destination: ff02::2"
Status: Pass
-
Handle ecash network errors differently (opens in a new tab): For errors that could be caused by network problems, we should mark the ticket as still pending, not as bad. This won't fix the underlying problem, but should not assume anymore that the client is the culprit and penalise its bandwidth quota.
-
Make client ignore dual mode nodes by default (opens in a new tab)
Testing Steps:
- Ensured a client is able to select a node which aside from a gateway, can also act as a mixnode
- Verified 'ignore_epoch_roles' is the default mode
- note; this is most likely not going to be a permanent solution
Results:
- Clients and topology are behaving correctly
Status: Pass
Bugfix
- Remove unnecessary arguments for nym-api swagger endpoints (opens in a new tab)
- Fixed sql migration for adding default message timestamp (opens in a new tab)
- Terminate mixnet socket listener on shutdown (opens in a new tab)
- Correctly handle ingore epoch roles flag (opens in a new tab)
v2025.1-reeses
- Release Binaries (opens in a new tab)
nym-node
version1.3.1
nym-node
Binary Name: nym-node
Build Timestamp: 2025-01-16T11:54:17.079662337Z
Build Version: 1.3.1
Commit SHA: 5ab164d229f85bd2dd27ec6e38292c281df2f678
Commit Date: 2025-01-16T12:51:53.000000000+01:00
Commit Branch: HEAD
rustc Version: 1.84.0
rustc Channel: stable
cargo Profile: release
Operators Updates & Tools
From nym-node v1.3.0
operators can choose multiple functionalities for their nym-node
binary (flagged as --mode
).
However, the clients are yet to be developed to be able to make a proper selection for multi-mode nodes and therefore we ask operators to sign only one functionality to --mode
option at a time. Please chose out of: mixnode
or entry-gateway
or exit-gateway
.
We are developing a design where operators can enable multiple modes, and let the Nym API to position the node according the network's needs in the beginning of each epoch.
- Node functionality info updated
- Fund your
nym-node
inbuilt Nyx account to prepare for gateway ticket rewarding config.toml
changes:- Replaced
mode
withmodes
to allow setting the node to run with say,entry
+mixnode
roles simultaneously - Added
maximum_forward_packet_delay
tomixnet.debug
section - Moved
verloc
section frommixnode.verloc
to top level - Removed
mixnode
section - Removed
entry_gateway
section togateway_tasks
- Moved
authenticator
section fromgateway_tasks
(entry_gateway
) toservice_providers
(exit_gateway
) - Renamed
exit_gateway
section toservice_providers
- Moved top level
authenticator
section toservice_providers
so that it'd live alongside NR and IPR - Added general
debug
section - Added
metrics
section
- Replaced
- All documentation migrated to a new URL nym.com/docs (opens in a new tab) alongside the rebranding of Nym organisation.
- Updated network architecture diagrams (opens in a new tab)
- New blow-by-blow mixnet traffic flow (opens in a new tab) section
- Winter Nym Squad League started (opens in a new tab)
- From this release onward (New Year) Operators Updates & Tools will be on top of each release changelog followed by features, cryptography and bugfix parts.
- All 2024 release notes were moved to the bottom section called Archived changelog
Features
- build(deps): bump micromatch from
4.0.4
to4.0.8
in/testnet-faucet
(opens in a new tab): Bumps micromatch (opens in a new tab) from4.0.4
to4.0.8
. - Move NS client to separate package under NS API (opens in a new tab):
- Moving NS API client code to separate package outside NS Agent makes the code cleaner & more modular
- NS agent now imports NS API client that it uses
- No functionality change in NS API or NS agent
- Introduced initial internal commands for nym-cli: ecash key and request generation (opens in a new tab)
- NS API - Gateway stats scraping (opens in a new tab): This PR adds a metrics scraper that fetches metrics from the
metrics/sessions
endpoint on gateway. The entries are stored and served on the API for one year - Remove explorer dependency (opens in a new tab)
- Hopefully final steps of the smoosh™️ (opens in a new tab): this PR is a bit more extensive than initially planned because of all the spaghetti that had to be untangled to make it all happen. The general idea is that now it's possible to run your node simultaneously in multiple modes. for example
mixnode
+entry
orentry
+exit
, etc. The modes do the following:mixnode
: allows the node to handle forward sphinx packetsentry-gateway
: allows the node to accepts websocket connections from incoming clients and to handle final hop sphinx packetsexit-gateway
: allows the node to handle final hop sphinx packets as well as starts NR and IPR service providers Furthermore, if node runs withwireguard
enabled, it will start localauthenticator
service provider which will also implicitly enable final hop packet handling regardless of the underlying mode. There are also various of other smaller (and bigger) changes:- Upon receiving a forward packet, its delay is now clamped so that one could not dos the node by asking it to delay it for, for example, a year
- As mentioned above, node can now run in multiple modes at the same time,
/metrics/mixing
endpoint got deprecated (it still provides the same information, however) and might be removed in future release- Introduced
/metrics/packet-stats
endpoint that provides more extensive information about packets received/sent - It is now possible to control whether the node should log its statistics to console
- The console logs are also updated with the current packet rates
- All nodes now run the "verloc" protocol and measure every other node on the network
- Metrics got revamped and unified:
- All running metrics are stored in a single
NymNodeMetrics
struct - There exists a
MetricsAggregator
that listens to any metrics events that might require additional processing - Any new metrics event types can be easily added by registering a new handler via
register_handler
. the type must implementMetricsHandler
trait and use unique variant ofMetricsEvent
enum. for exampleGatewaySessionStatsHandler
. It is, however, possible to have opaque handlers, such as the already implementedLegacyMixingStatsUpdater
andMixnetMetricsCleaner
- Everything in
mixnode
directory has been removed because there was nothing really left there. The mixing socket listener was unified innym-node
and similarlyverloc
was also moved there gateway
directory was similarly reduced in size. Now it also creates appropriate tasks as opposed to the whole gateway process. eventually it might also be further stripped, but today is not that day.- Removed the generic parameter on the
GatewayStorage
to simplify all the generics down the stack. it wasn't used anyway
CLI:
- Added
--modes
argument to specify all node modes with a single command (orenv
variable). for example:--modes="mixnode,entry"
. Can't be used alongside--modes
- Extended
--mode
argument to allow specifying it multiple times, for example:--mode mixnode --mode entry
. can't be used alongside--mode
Config changes:
- Replaced
mode
withmodes
to allow setting the node to run with say,entry
+mixnode
roles simultaneously - Added
maximum_forward_packet_delay
tomixnet.debug
section - Moved
verloc
section frommixnode.verloc
to top level - Removed
mixnode
section - Removed
entry_gateway
section togateway_tasks
- Moved
authenticator
section fromgateway_tasks
(entry_gateway
) toservice_providers
(exit_gateway
) - Renamed
exit_gateway
section toservice_providers
- Moved top level
authenticator
section toservice_providers
so that it'd live alongside NR and IPR - Added general
debug
section - Added
metrics
section - Better date serialization (opens in a new tab): Proper date serialization for NS API session stats
- Restore Location fields (opens in a new tab): restore
latitude
andlongitude
fields - Derive serialize for UserAgent (opens in a new tab)
- Change sqlite journal mode to WAL (opens in a new tab)
- Shipping raw metrics to PG (opens in a new tab)
- Extend raw ws fd for gateway client (opens in a new tab)
- Add fd callback to client core (opens in a new tab)
- TicketType derive Hash and Eq (opens in a new tab): It's useful to keep
TicketType
in maps, which requireHash
. Also deriveEq
since it's useful. - Extend swagger docs (opens in a new tab)
- Add FromStr impl for UserAgent (opens in a new tab): Add
FromStr
implementation forUserAgent
to make it easier to pass in custom user agent in vpn clients as a CLI argument. - Remove unneeded async function annotation (opens in a new tab)
- Add control messages to
GatewayTransciver
(opens in a new tab)
Review and Testing: Forget Me Implementation
- Validated the encryption and delivery of
ForgetMe
control messages to the gateway
Testing: MixTrafficController Integration
- Verified that the
MixTrafficController
invokesForgetMe
logic correctly during shutdown - Tested behaviour for gateway transceiver failures while sending control messages
Testing: Gateway Storage Updates
- Confirmed successful deletion of client data (e.g., inbox messages, bandwidth allocations) from persistent storage
- Add conversion unit tests for auth msg (opens in a new tab)
- Update TS bindings (opens in a new tab)
- Removed legacy socks5 listener (opens in a new tab)
- Add PATCH support to
nym-http-api-client
(opens in a new tab): AddPATCH
support tonym-http-api-client
crate - Wireguard metrics (opens in a new tab): With this PR on each peer controller update the following global metrics information are also updated:
- total bytes tx
- total bytes rx
- current active peers
- total peers registered
- The former two are exposed with REST endpoints
/api/v1/metrics/wireguard-stats
, while the rest will be accessible via prometheus (soon ™️ ). The wireguard stats are also logged to the console (assuming they're non-zero)
- Add close to credential storage (opens in a new tab): Add close method to credential storage
- Review File:
common/credential-storage/src/backends/sqlite.rs
- Verified addition of
close
method for the SQLite backend
- Review File:
common/credential-storage/src/ephemeral_storage.rs
- Confirmed addition of
close
method for ephemeral storage with no action required
- Review File:
common/credential-storage/src/persistent_storage/mod.rs
- Ensured
close
method integration for persistent storage
- Review File:
common/credential-storage/src/storage.rs
- Verified updates to the
Storage
trait to includeclose
andcleanup_expired
methods
- Review File:
common/network-defaults/src/constants.rs
- Confirmed updated
mixnet_vpn
constants were added.
- Review File:
service-providers/ip-packet-router/src/constants.rs
- Checked replacement of legacy
TUN_*
constants with newmixnet_vpn
constants. - Validated alignment of routing traffic configurations.
- Review File:
service-providers/ip-packet-router/src/ip_packet_router.rs
- Ensured new
nym_network_defaults::constants::mixnet_vpn
constants replaced old references. - Verified
TunDeviceConfig
consistency.
- Review File:
service-providers/ip-packet-router/src/util/generate_new_ip.rs
- Confirmed substitution of
TUN_DEVICE_*
constants withNYM_TUN_DEVICE_*
constants. - Tested functionality for generating random IPs within subnet.
- Expand
nym-node
prometheus metrics (opens in a new tab): This PR undusts the/api/v1/metrics/prometheus
and introduces the following 37 new data points:
- mixnet:
- ingress:
-
nym_node_mixnet_ingress_forward_hop_packets_received
-
nym_node_mixnet_ingress_final_hop_packets_received
-
nym_node_mixnet_ingress_malformed_packets_received
-
nym_node_mixnet_ingress_excessive_delay_packets
-
nym_node_mixnet_ingress_forward_hop_packets_dropped
-
nym_node_mixnet_ingress_final_hop_packets_dropped
-
nym_node_mixnet_ingress_forward_hop_packets_received_rate
-
nym_node_mixnet_ingress_final_hop_packets_received_rate
-
nym_node_mixnet_ingress_malformed_packets_received_rate
-
nym_node_mixnet_ingress_excessive_delay_packets_rate
-
nym_node_mixnet_ingress_forward_hop_packets_dropped_rate
-
nym_node_mixnet_ingress_final_hop_packets_dropped_rate
-
- egress:
-
nym_node_mixnet_egress_stored_on_disk_final_hop_packets
-
nym_node_mixnet_egress_forward_hop_packets_sent
-
nym_node_mixnet_egress_ack_packets_sent
-
nym_node_mixnet_egress_forward_hop_packets_dropped
-
nym_node_mixnet_egress_forward_hop_packets_sent_rate
-
nym_node_mixnet_egress_ack_packets_sent_rate
-
nym_node_mixnet_egress_forward_hop_packets_dropped_rate
-
- ingress:
- client sessions
nym_node_entry_client_sessions_unique_users
nym_node_entry_client_sessions_sessions_started
nym_node_entry_client_sessions_finished_sessions
nym_node_entry_client_sessions_durations_{TYP}
(histogram), for examplenym_node_entry_client_sessions_durations_vpn
- wireguard:
-
nym_node_wireguard_bytes_rx
-
nym_node_wireguard_bytes_tx
-
nym_node_wireguard_bytes_total_peers
-
nym_node_wireguard_bytes_active_peers
-
nym_node_wireguard_bytes_rx_rate
-
nym_node_wireguard_bytes_tx_rate
-
- network
nym_node_network_active_ingress_mixnet_connections
nym_node_network_active_ingress_web_socket_connections
nym_node_network_active_egress_mixnet_connections
- process
nym_node_process_forward_hop_packets_being_delayed
nym_node_process_packet_forwarder_queue_size
nym_node_process_topology_query_resolution_latency
(histogram)nym_node_process_final_hop_packets_pending_delivery
nym_node_process_forward_hop_packets_pending_delivery
- Amend 250gb limit (opens in a new tab): Change bandwidth cap to 250gb
- Warn users if node is run in exit mode only (opens in a new tab): Throws a warning if node is run in "exit" mode only as by default, this will NOT enable entry capabilities, i.e. opening the websocket. thus making it ineligible for rewarded set selection (and rewards)
- Reduce log severity for number of packets being delayed (opens in a new tab)
- Apply 1.84 linter suggestions (opens in a new tab)
- Readjusted --mode behaviour to fix the regression (opens in a new tab)
- Legacy alert (opens in a new tab): alert moved into
nav
components
Bugfix
- Fix overflow (opens in a new tab)
- Fix overflow again (opens in a new tab)
- Make sure to update timestamp of last batch verification to prevent double redemption (opens in a new tab)
- Make sure to apply gateway score filtering when choosing initial node (opens in a new tab)
- Fixed client session histogram buckets (opens in a new tab)
- Contract version assignment (opens in a new tab): This PR fixes updates to current nym-node version as well as introduces migration to fix the existing state of the mainnet contract
- Make sure refresh data key matches bond info (opens in a new tab): This is to forbid operators from reusing the same underlying identity key for multiple nodes by overwriting the describe data. the reported key has to always match what the node has bonded with (and the contract enforces uniqueness)
Archived Changelog
To allow reading through older changelogs, we store them below sorted by years.
v2024.14-crunch-patched
Patch for v2024.14-crunch
release. Fixes an issue (opens in a new tab) to allow only one private IP pair & compatibility issues between nym-nodes and older clients.
- Release binaries (opens in a new tab)
nym-node
version1.2.1
nym-node
Binary Name: nym-node
Build Timestamp: 2024-12-18T10:18:42.978852430Z
Build Version: 1.2.1
Commit SHA: 8d5a41a790e96ae5e821964865affaa7d3343eab
Commit Date: 2024-12-18T11:07:49.000000000+01:00
Commit Branch: HEAD
rustc Version: 1.83.0
rustc Channel: stable
cargo Profile: release
v2024.14-crunch
- Release binaries (opens in a new tab)
nym-node
version1.2.0
- Operators updates and tools
- Github CHANGELOG.md (opens in a new tab)
nym-node
Binary Name: nym-node
Build Timestamp: 2024-12-11T13:49:11.974104790Z
Build Version: 1.2.0
Commit SHA: a491e6a71a8cf862d77defd740a4ee8d65d8292a
Commit Date: 2024-12-11T10:28:47.000000000+01:00
Commit Branch: HEAD
rustc Version: 1.83.0
rustc Channel: stable
cargo Profile: release
Features
-
Bump elliptic from
6.5.4
to6.5.7
in /testnet-faucet (opens in a new tab): Bumps elliptic (opens in a new tab) from6.5.4
to6.5.7
. -
build(deps): bump micromatch from
4.0.4
to4.0.8
in /nym-wallet/webdriver (opens in a new tab): Bumps micromatch (opens in a new tab) from4.0.4
to4.0.8
. -
build(deps): bump axios from 1.6.0 to 1.7.5 in /nym-api/tests (opens in a new tab) Bumps axios (opens in a new tab) from 1.6.0 to 1.7.5.
-
Sync code with
.env
in build.rs (opens in a new tab): Keepdotenv
file always up to date -
build(deps): bump lazy_static from
1.4.0
to1.5.0
(opens in a new tab): Bumps lazy_static (opens in a new tab) from1.4.0
to1.5.0
. -
Create TaskStatusEvent trait instead of piggybacking on Error (opens in a new tab)
-
build(deps): bump once_cell from
1.19.0
to1.20.2
(opens in a new tab): Bumpsonce_cell
(opens in a new tab) from1.19.0
to1.20.2
-
Bump the patch-updates group across 1 directory with 10 updates (opens in a new tab): Bumps the patch-updates group with 9 updates in the / directory:
Package | From | To |
---|---|---|
anyhow (opens in a new tab) | 1.0.89 | 1.0.90 |
clap (opens in a new tab) | 4.5.18 | 4.5.20 |
clap_complete (opens in a new tab) | 4.5.29 | 4.5.33 |
pin-project (opens in a new tab) | 1.1.5 | 1.1.6 |
serde (opens in a new tab) | 1.0.210 | 1.0.211 |
serde_json (opens in a new tab) | 1.0.128 | 1.0.132 |
wasm-bindgen (opens in a new tab) | 0.2.93 | 0.2.95 |
wasm-bindgen-futures (opens in a new tab) | 0.4.43 | 0.4.45 |
web-sys (opens in a new tab) | 0.3.70 | 0.3.72 |
Updates anyhow | 1.0.89 | 1.0.90 |
-
[Product Data] Introduce data persistence on gateways (opens in a new tab): This PR builds on top of #4974 (opens in a new tab), not changing the behavior of the data collection, but persisting them in a sqlite database so they can be kept across restarts and crashes. It also leave the door open for other stats module to use that storage if needed. Here are some points of interest:
- New
gateway_stats_storage
(opens in a new tab) crate - Config migration (opens in a new tab) resulting from the added database.
- Resulting changes in the
statistics
(opens in a new tab) module to account the new storage system
- New
-
Integrate nym-credential-proxy into workspace (opens in a new tab): Integrate
nym-credential-proxy
into the main workspace -
Node Status API (opens in a new tab): merging a long-diverged feature branch - all commits here were their own merge requests
-
[Product Data] Better unique user count on gateways (opens in a new tab): To avoid double counting clients across gateways, we add a user ID to the gateway session data.
-
chore: ecash contract migration to remove unused 'redemption_gateway_share' (opens in a new tab)
-
[Product Data] Client-side stats collection (opens in a new tab): The goal is to anonymously gather stats from nym-clients. These stats will be sent through the mixnet to a Nym run service provider that will gather them. This PR sets the scene to send stats in a mixnet message to an address. The address can be set when the client is created. Current stats include some infos on sent packets along with platform information. If a receiving address is set, the client will send a mixnet packet every 5min to this address. Otherwise, nothing happens and the client runs as usual.
-
Send mixnet packet stats using task client (opens in a new tab)
-
Add granular log on nym-node (opens in a new tab) and make use of it for
defguard_wireguard_rs
big info logs -
Rewarding for ticketbook issuance (opens in a new tab): Revamps the current validator rewarder to allow for rewards for issuing the zk-nym ticketbooks.
-
[Product Data] Add stats reporting configuration in client config (opens in a new tab): Adds the stats reporting address to client configs. It can be set in the config file, as a CLI argument and as an env var in a
.env
file. As the stats reporting config in now in theDebugConfig
, theStatsReportingConfig
is no longer required, making the propagation of these changes more readable -
config score (opens in a new tab): introduces a concept of a
config_score
to a nym node which influences performance and thus rewarding amounts and chances of being in the rewarded set. Currently it's influenced by the following factors:- Accepting terms and conditions (not accepted: 0)
- Exposing self-described API (not exposed: 0)
- Running "nym-node" binary (legacy binary: 0)
- Number of versions behind the core (
score = 0.995 ^ (X * versions_behind ^ 1.65)
) - The old performance is now treated as
routing_score
- the "new" performance =
routing_score * config_score
-
Add Dockerfile and add env vars for clap arguments (opens in a new tab)
-
Aadd GH workflow for nym-validator-rewarder (opens in a new tab)
-
[Product data] Data consumption with ecash ticket (opens in a new tab): Send an event each time an ecash ticket get successfully spent. This allows to approximate how much data each client is using.
-
[Product Data] Config deserialization bug fix (opens in a new tab): Fixes a bug where a
None
value was serialized into an empty string, and incorrectly deserialized into aSome
variant. -
NS Agent auth with NS API (opens in a new tab): NS Agent authenticates with key that was registered with NS API
- Added flag to Agent to generate keypairs
- Agent requests are signed by agent
- Server-side requests are checked for authentication
-
Removed ci-nym-api-tests.yml which was running outdated (and broken) tests (opens in a new tab)
-
[Product Data] Set up country reporting from vpn-client (opens in a new tab): Add the ability to report exit country, along with a small refactoring of a module.
-
chore: remove standalone legacy mixnode/gateway binaries (opens in a new tab)
-
Update
serde_json_path
due to compilation issue (opens in a new tab) -
Add version to clientStatsReport (opens in a new tab): Add a
kind
andapi_version
field forClientStatsReport
-
Start session collection for exit gateways (opens in a new tab): Apparently, exit gateways are also entry gateways so we need to start session stats for them as well
-
build(deps): bump mikefarah/yq from
4.44.3
to4.44.5
(opens in a new tab): Bumps mikefarah/yq (opens in a new tab) from4.44.3
to4.44.5
. -
build(deps): bump cross-spawn from
7.0.3
to7.0.6
in /testnet-faucet (opens in a new tab): Bumps cross-spawn (opens in a new tab) from7.0.3
to7.0.6
. -
Add export_to_env to NymNetworkDetails (opens in a new tab): In
nym-vpn-core
we've started to read the network environment from a json file and then try to pass aroundNymNetworkDetails
directly instead of relying on the exported environment. However we still need to bridge with old code so we need to export the network details instance to the environment. -
Add support for DELETE to nym-http-api-client (opens in a new tab): Add delete support to
http-api-client
-
Add derive_extended_private_key to DirectSecp256k1HdWallet (opens in a new tab): Add
derive_extended_private_key
toDirectSectp256k1HdWallet
to support seeding ecash keys -
Move two minor jobs to free tier github hosted runners (opens in a new tab): In an attempt to easy the load on the self-hosted runners, move two minor workflows over to GH hosted free tier runners.
-
Remove peers with no allowed ip from storage (opens in a new tab)
-
Add indexes to monitor run and testing route (opens in a new tab)
-
Add
monitor_run
and testing_route indexes (opens in a new tab) -
explorer-api
: add nym node endpoints + UI to show nym-nodes and account balances (opens in a new tab): Explorer API:-
Existing endpoints stay identical
-
Adds new endpoints to get:
-
nym-nodes
(list + by id) -
account balance + delegations + rewarding + vesting
-
Explorer UI (NextJS)
- List of nym-nodes
- Remove service providers routes (Harbour Master shows these)
- Updates summary page to show nym-nodes
- Adds legacy markers to old gateway and mixnode bond lists
-
-
Add
monitor_run
and testing_route indexes (opens in a new tab) -
improvement: make internal gateway clients use the same topology cache (opens in a new tab): This should result in 66% reduction in queries for topology within
nym-node
as all the clients should rely on the same cache -
Update Security disclosure email, public key and policy (opens in a new tab)
-
adjusted config score penalty calculation (opens in a new tab)
-
Nmv2 add debug config (opens in a new tab): Adds debug config to disable poisson process, cover traffic and min performance filtering
-
introduce UNSTABLE endpoints for returning network monitor run details (opens in a new tab)
-
Don't consider legacy nodes for rewarded set selection (opens in a new tab)
-
Derive serialize for UserAgent (#5210) (opens in a new tab): Cherry-pick PR #5210 (opens in a new tab)
-
Remove any filtering on node semver (opens in a new tab): Removed any filtering on version of nodes. however, the parameters can still be passed to
nym-api
queries to not break existing clients, but they will happily ignore them -
Further config score adjustments (opens in a new tab): I still want to add helper endpoints on
nym-api
to expose some of this data. but for now, I'll let this PR bake over the weekend.
Bugfix
-
bugfix: don't send empty BankMsg in ecash contract (opens in a new tab): If ticketbook prices were to be set so low the resultant redemption would have created
BankMsg
with value of 0, that message is no longer going to be sent -
bugfix: correctly expose ecash-related data on nym-api (opens in a new tab): This PR makes fixes to ecash-related endpoints on
nym-api
- global data (such as aggregated signatures and keys) are actually always available by all apis
- global data (such as aggregated signatures and keys) are actually always available by all apis
-
bugfix: use default value for verloc config when deserialising missing values (opens in a new tab)
-
bugfix: fixed nym-node config migrations (again) (opens in a new tab)
-
bugfix: added explicit openapi servers to account for route prefixes (opens in a new tab)
Operators Updates & Tools
Nym Network will now only allow nodes which migrated their node in Nym mixnet smart contract to Nym Node. All nodes which are still bonded as a legacy one (Mixnode or Gateway) in the wallet will have no chance to take part in the Rewarded set selection.
Operators taking part in Delegation program or Service Grant program must migrate their nodes latest by December 16th, 08:00 UTC.
Updates
- Version count as a part of config score has been introduced. To familiarize yourself with Nym Node operator rewards calculation, read this page.
- Nym nodes running as Exit Gateway in Service Grant program received delegation. Nym team is now delegating total of 64,800,000 NYM on top 241 Nym Nodes (137 in Mixnode mode and 104 as Gateways). Our delegation aims to incentivise committed operators who support bootstrapping of Nym network before paying users come.
- 250k NYM - Upgrading to magura in time - 2 nodes
- 300k NYM - Upgrading to magura + bonus for a quick patch upgrade - 102 nodes
- No delegation - not upgrading in time - 2 nodes
-
nym-node
has now implemented IPv6 support for wireguard (opens in a new tab) -
network_tunnel_manager.sh
updated (opens in a new tab): run the commands below to make sure
network_tunnel_manager.sh
These commands can be run one by one or copy-pasted and run as a block.
mkdir $HOME/nym-binaries; \
curl -L https://raw.githubusercontent.com/nymtech/nym/refs/heads/develop/scripts/network_tunnel_manager.sh -o $HOME/nym-binaries/network_tunnel_manager.sh && \
chmod +x $HOME/nym-binaries/network_tunnel_manager.sh; \
$HOME/nym-binaries/network_tunnel_manager.sh check_nymtun_iptables ; \
$HOME/nym-binaries/network_tunnel_manager.sh remove_duplicate_rules nymtun0 ;\
$HOME/nym-binaries/network_tunnel_manager.sh remove_duplicate_rules nymwg;\
$HOME/nym-binaries/network_tunnel_manager.sh check_nymtun_iptables ; \
$HOME/nym-binaries/network_tunnel_manager.sh adjust_ip_forwarding ; \
$HOME/nym-binaries/network_tunnel_manager.sh apply_iptables_rules ; \
$HOME/nym-binaries/network_tunnel_manager.sh check_nymtun_iptables ; \
$HOME/nym-binaries/network_tunnel_manager.sh apply_iptables_rules_wg ; \
$HOME/nym-binaries/network_tunnel_manager.sh configure_dns_and_icmp_wg ; \
$HOME/nym-binaries/network_tunnel_manager.sh adjust_ip_forwarding ; \
$HOME/nym-binaries/network_tunnel_manager.sh check_ipv6_ipv4_forwarding; \
systemctl daemon-reload && service nym-node restart && journalctl -u nym-node -f
Then run the jokes in a new window for control
$HOME/nym-binaries/network_tunnel_manager.sh joke_through_the_mixnet
$HOME/nym-binaries/network_tunnel_manager.sh joke_through_wg_tunnel
Tools
- New APIs documentation with interactive APIs generated from the OpenAPI specs of various API endpoints offered by bits of Nym infrastructure run both by Nym and community operators for both Mainnet and the Sandbox testnet.
- Nym Harbourmaster (opens in a new tab) has a new tab called
CONTRACT EXPLORER
querying data from Nym mixnet contract in real time. - Nym Explorer (opens in a new tab) is updated to read migrated nodes correctly
- New community explorer by SpectreDAO (opens in a new tab) offers Nym Network dashboard, Node overview and Account stats view functions for operators and delegators.
nym-vpnc
build and run documentation, for those who don't want to use the Nym VPN GUIs.
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 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.