diff --git a/documentation/autodoc/autodoc-generated-markdown/nym-node-commands.md b/documentation/autodoc/autodoc-generated-markdown/nym-node-commands.md index f6a87d2d51..bd11de6af9 100644 --- a/documentation/autodoc/autodoc-generated-markdown/nym-node-commands.md +++ b/documentation/autodoc/autodoc-generated-markdown/nym-node-commands.md @@ -227,3 +227,5 @@ Options: -o, --output [default: text] [possible values: text, json] -h, --help Print help ``` + +### `` diff --git a/documentation/autodoc/autodoc-generated-markdown/nymvisor-commands.md b/documentation/autodoc/autodoc-generated-markdown/nymvisor-commands.md index 97316f3583..a9c098f7f7 100644 --- a/documentation/autodoc/autodoc-generated-markdown/nymvisor-commands.md +++ b/documentation/autodoc/autodoc-generated-markdown/nymvisor-commands.md @@ -79,7 +79,7 @@ Run the associated daemon with the preconfigured settings Usage: nymvisor run [DAEMON_ARGS]... Arguments: - [DAEMON_ARGS]... + [DAEMON_ARGS]... Options: -h, --help Print help diff --git a/documentation/docs/components/accordion-template.tsx b/documentation/docs/components/accordion-template.tsx new file mode 100644 index 0000000000..7b4693538a --- /dev/null +++ b/documentation/docs/components/accordion-template.tsx @@ -0,0 +1,36 @@ +import Accordion from "@mui/material/Accordion"; +import AccordionActions from "@mui/material/AccordionActions"; +import AccordionSummary from "@mui/material/AccordionSummary"; +import AccordionDetails from "@mui/material/AccordionDetails"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import { + TableContainer, + Table, + TableBody, + TableCell, + TableRow, + Paper, +} from "@mui/material"; + + + +export const AccordionTemplate = ({ name, children }) => { +return ( +
+ + } + aria-controls="panel1-content" + id="panel1-header" + aria-label="nym-node --help command output" + > + {name} + + + {children} + + +
+ ) +}; + diff --git a/documentation/docs/components/outputs/api-scraping-outputs/time-now.md b/documentation/docs/components/outputs/api-scraping-outputs/time-now.md new file mode 100644 index 0000000000..76761ea691 --- /dev/null +++ b/documentation/docs/components/outputs/api-scraping-outputs/time-now.md @@ -0,0 +1 @@ +Wednesday, October 23rd 2024, 20:45:36 UTC diff --git a/documentation/docs/components/outputs/command-outputs/node-api-check-help.md b/documentation/docs/components/outputs/command-outputs/node-api-check-help.md new file mode 100644 index 0000000000..875b2921ae --- /dev/null +++ b/documentation/docs/components/outputs/command-outputs/node-api-check-help.md @@ -0,0 +1,17 @@ +```python +usage: Nym-node API check [-h] [-V] + {query_stats,q,query,version_count,v,version} ... + +Run through all endpoints and print results. + +positional arguments: + {query_stats,q,query,version_count,v,version} + query_stats (q, query) + Get all nodes API endpoints + version_count (v, version) + Sum of nodes in given version(s) + +options: + -h, --help show this help message and exit + -V, --version show program's version number and exit +``` diff --git a/documentation/docs/components/outputs/command-outputs/node-api-check-query-help.md b/documentation/docs/components/outputs/command-outputs/node-api-check-query-help.md new file mode 100644 index 0000000000..17c74e6008 --- /dev/null +++ b/documentation/docs/components/outputs/command-outputs/node-api-check-query-help.md @@ -0,0 +1,15 @@ +```python +usage: Nym-node API check query_stats [-h] [-n] [-m] [-o [OUTPUT]] id + +positional arguments: + id supply nym-node identity key + +options: + -h, --help show this help message and exit + -n, --no_routing_history + Display node stats without routing history + -m, --markdown Display results in markdown format + -o [OUTPUT], --output [OUTPUT] + Save results to file (in current dir or supply with + path without filename) +``` diff --git a/documentation/docs/components/outputs/command-outputs/nym-api-help.md b/documentation/docs/components/outputs/command-outputs/nym-api-help.md new file mode 100644 index 0000000000..fcaf94ce6b --- /dev/null +++ b/documentation/docs/components/outputs/command-outputs/nym-api-help.md @@ -0,0 +1,19 @@ +```sh +Usage: nym-api [OPTIONS] + +Commands: + init Initialise a Nym Api instance with persistent config.toml file + run Run the Nym Api with provided configuration optionally overriding set parameters + build-info Show build information of this binary + help Print this message or the help of the given subcommand(s) + +Options: + -c, --config-env-file + Path pointing to an env file that configures the Nym API + --no-banner + A no-op flag included for consistency with other binaries (and compatibility with nymvisor, oops) + -h, --help + Print help + -V, --version + Print version +``` diff --git a/documentation/docs/components/outputs/command-outputs/nym-node-help.md b/documentation/docs/components/outputs/command-outputs/nym-node-help.md new file mode 100644 index 0000000000..62836e167d --- /dev/null +++ b/documentation/docs/components/outputs/command-outputs/nym-node-help.md @@ -0,0 +1,22 @@ +```sh +Usage: nym-node [OPTIONS] + +Commands: + build-info Show build information of this binary + bonding-information Show bonding information of this node depending on its currently selected mode + node-details Show details of this node + migrate Attempt to migrate an existing mixnode or gateway into a nym-node + run Start this nym-node + sign Use identity key of this node to sign provided message + help Print this message or the help of the given subcommand(s) + +Options: + -c, --config-env-file + Path pointing to an env file that configures the nym-node and overrides any preconfigured values [env: NYMNODE_CONFIG_ENV_FILE_ARG=] + --no-banner + Flag used for disabling the printed banner in tty [env: NYMNODE_NO_BANNER=] + -h, --help + Print help + -V, --version + Print version +``` diff --git a/documentation/docs/components/outputs/command-outputs/nym-node-run-help.md b/documentation/docs/components/outputs/command-outputs/nym-node-run-help.md new file mode 100644 index 0000000000..0a5070b615 --- /dev/null +++ b/documentation/docs/components/outputs/command-outputs/nym-node-run-help.md @@ -0,0 +1,79 @@ +```sh +Start this nym-node + +Usage: nym-node run [OPTIONS] + +Options: + --id + Id of the nym-node to use [env: NYMNODE_ID=] [default: default-nym-node] + --config-file + Path to a configuration file of this node [env: NYMNODE_CONFIG=] + --accept-operator-terms-and-conditions + Explicitly specify whether you agree with the terms and conditions of a nym node operator as defined at [env: NYMNODE_ACCEPT_OPERATOR_TERMS=] + --deny-init + Forbid a new node from being initialised if configuration file for the provided specification doesn't already exist [env: NYMNODE_DENY_INIT=] + --init-only + If this is a brand new nym-node, specify whether it should only be initialised without actually running the subprocesses [env: NYMNODE_INIT_ONLY=] + --local + Flag specifying this node will be running in a local setting [env: NYMNODE_LOCAL=] + --mode + Specifies the current mode of this nym-node [env: NYMNODE_MODE=] [possible values: mixnode, entry-gateway, exit-gateway] + -w, --write-changes + If this node has been initialised before, specify whether to write any new changes to the config file [env: NYMNODE_WRITE_CONFIG_CHANGES=] + --bonding-information-output + Specify output file for bonding information of this nym-node, i.e. its encoded keys. NOTE: the required bonding information is still a subject to change and this argument should be treated only as a preview of future features [env: NYMNODE_BONDING_INFORMATION_OUTPUT=] + -o, --output + Specify the output format of the bonding information (`text` or `json`) [env: NYMNODE_OUTPUT=] [default: text] [possible values: text, json] + --public-ips + Comma separated list of public ip addresses that will be announced to the nym-api and subsequently to the clients. In nearly all circumstances, it's going to be identical to the address you're going to use for bonding [env: NYMNODE_PUBLIC_IPS=] + --hostname + Optional hostname associated with this gateway that will be announced to the nym-api and subsequently to the clients [env: NYMNODE_HOSTNAME=] + --location + Optional **physical** location of this node's server. Either full country name (e.g. 'Poland'), two-letter alpha2 (e.g. 'PL'), three-letter alpha3 (e.g. 'POL') or three-digit numeric-3 (e.g. '616') can be provided [env: NYMNODE_LOCATION=] + --http-bind-address + Socket address this node will use for binding its http API. default: `0.0.0.0:8080` [env: NYMNODE_HTTP_BIND_ADDRESS=] + --landing-page-assets-path + Path to assets directory of custom landing page of this node [env: NYMNODE_HTTP_LANDING_ASSETS=] + --http-access-token + An optional bearer token for accessing certain http endpoints. Currently only used for prometheus metrics [env: NYMNODE_HTTP_ACCESS_TOKEN=] + --expose-system-info + Specify whether basic system information should be exposed. default: true [env: NYMNODE_HTTP_EXPOSE_SYSTEM_INFO=] [possible values: true, false] + --expose-system-hardware + Specify whether basic system hardware information should be exposed. default: true [env: NYMNODE_HTTP_EXPOSE_SYSTEM_HARDWARE=] [possible values: true, false] + --expose-crypto-hardware + Specify whether detailed system crypto hardware information should be exposed. default: true [env: NYMNODE_HTTP_EXPOSE_CRYPTO_HARDWARE=] [possible values: true, false] + --mixnet-bind-address + Address this node will bind to for listening for mixnet packets default: `0.0.0.0:1789` [env: NYMNODE_MIXNET_BIND_ADDRESS=] + --nym-api-urls + Addresses to nym APIs from which the node gets the view of the network [env: NYMNODE_NYM_APIS=] + --nyxd-urls + Addresses to nyxd chain endpoint which the node will use for chain interactions [env: NYMNODE_NYXD=] + --wireguard-enabled + Specifies whether the wireguard service is enabled on this node [env: NYMNODE_WG_ENABLED=] [possible values: true, false] + --wireguard-bind-address + Socket address this node will use for binding its wireguard interface. default: `0.0.0.0:51822` [env: NYMNODE_WG_BIND_ADDRESS=] + --wireguard-private-ip + Private IP address of the wireguard gateway. default: `10.1.0.1` [env: NYMNODE_WG_IP=] + --wireguard-announced-port + Port announced to external clients wishing to connect to the wireguard interface. Useful in the instances where the node is behind a proxy [env: NYMNODE_WG_ANNOUNCED_PORT=] + --wireguard-private-network-prefix + The prefix denoting the maximum number of the clients that can be connected via Wireguard. The maximum value for IPv4 is 32 and for IPv6 is 128 [env: NYMNODE_WG_PRIVATE_NETWORK_PREFIX=] + --verloc-bind-address + Socket address this node will use for binding its verloc API. default: `0.0.0.0:1790` [env: NYMNODE_VERLOC_BIND_ADDRESS=] + --entry-bind-address + Socket address this node will use for binding its client websocket API. default: `0.0.0.0:9000` [env: NYMNODE_ENTRY_BIND_ADDRESS=] + --announce-ws-port + Custom announced port for listening for websocket client traffic. If unspecified, the value from the `bind_address` will be used instead [env: NYMNODE_ENTRY_ANNOUNCE_WS_PORT=] + --announce-wss-port + If applicable, announced port for listening for secure websocket client traffic [env: NYMNODE_ENTRY_ANNOUNCE_WSS_PORT=] + --enforce-zk-nyms + Indicates whether this gateway is accepting only coconut credentials for accessing the mixnet or if it also accepts non-paying clients [env: NYMNODE_ENFORCE_ZK_NYMS=] [possible values: true, false] + --mnemonic + Custom cosmos wallet mnemonic used for zk-nym redemption. If no value is provided, a fresh mnemonic is going to be generated [env: NYMNODE_MNEMONIC=] + --upstream-exit-policy-url + Specifies the url for an upstream source of the exit policy used by this node [env: NYMNODE_UPSTREAM_EXIT_POLICY=] + --open-proxy + Specifies whether this exit node should run in 'open-proxy' mode and thus would attempt to resolve **ANY** request it receives [env: NYMNODE_OPEN_PROXY=] [possible values: true, false] + -h, --help + Print help +``` diff --git a/documentation/docs/components/outputs/command-outputs/nymv-api-help.md b/documentation/docs/components/outputs/command-outputs/nymv-api-help.md new file mode 100644 index 0000000000..940536d5d0 --- /dev/null +++ b/documentation/docs/components/outputs/command-outputs/nymv-api-help.md @@ -0,0 +1,34 @@ +Usage: nym-api [OPTIONS] + +Commands: + init Initialise a Nym Api instance with persistent config.toml file + run Run the Nym Api with provided configuration optionally overriding set parameters + build-info Show build information of this binary + help Print this message or the help of the given subcommand(s) + +Options: + -c, --config-env-file + Path pointing to an env file that configures the Nym API + --no-banner + A no-op flag included for consistency with other binaries (and compatibility with nymvisor, oops) + -h, --help + Print help + -V, --version + Print version +Usage: nym-api [OPTIONS] + +Commands: + init Initialise a Nym Api instance with persistent config.toml file + run Run the Nym Api with provided configuration optionally overriding set parameters + build-info Show build information of this binary + help Print this message or the help of the given subcommand(s) + +Options: + -c, --config-env-file + Path pointing to an env file that configures the Nym API + --no-banner + A no-op flag included for consistency with other binaries (and compatibility with nymvisor, oops) + -h, --help + Print help + -V, --version + Print version diff --git a/documentation/docs/components/outputs/command-outputs/nymvisor-help.md b/documentation/docs/components/outputs/command-outputs/nymvisor-help.md new file mode 100644 index 0000000000..e4124a3ea9 --- /dev/null +++ b/documentation/docs/components/outputs/command-outputs/nymvisor-help.md @@ -0,0 +1,20 @@ +```sh +Usage: nymvisor [OPTIONS] + +Commands: + init Initialise a nymvisor instance with persistent Config.toml file + run Run the associated daemon with the preconfigured settings + build-info Show build information of this binary + daemon-build-info Show build information of the associated daemon + add-upgrade Queues up another upgrade for the associated daemon + config Show configuration options being used by this instance of nymvisor + help Print this message or the help of the given subcommand(s) + +Options: + -c, --config-env-file + Path pointing to an env file that configures the nymvisor and overrides any preconfigured values + -h, --help + Print help + -V, --version + Print version +``` diff --git a/documentation/docs/components/outputs/command-outputs/nymvisor-init-daemon.md b/documentation/docs/components/outputs/command-outputs/nymvisor-init-daemon.md new file mode 100644 index 0000000000..a6ea10e554 --- /dev/null +++ b/documentation/docs/components/outputs/command-outputs/nymvisor-init-daemon.md @@ -0,0 +1,6 @@ +2024-10-23T17:45:06.789452Z  INFO tools/nymvisor/src/cli/init.rs:416: enabled nymvisor logging +2024-10-23T17:45:06.789476Z  INFO tools/nymvisor/src/cli/init.rs:419: initialising the nymvisor +2024-10-23T17:45:06.789497Z  INFO get_build_information: tools/nymvisor/src/daemon/mod.rs:63: attempting to obtain daemon build information self.executable_path="./nym-node" +2024-10-23T17:45:06.795736Z  INFO tools/nymvisor/src/cli/init.rs:217: initialising the directory structure +2024-10-23T17:45:06.795827Z  INFO tools/nymvisor/src/cli/init.rs:250: setting up the genesis binary +2024-10-23T17:45:06.796090Z  INFO get_build_information: tools/nymvisor/src/daemon/mod.rs:63: attempting to obtain daemon build information self.executable_path="/home/strix/.nym/nymvisors/data/nym-node/genesis/bin/nym-node" diff --git a/documentation/docs/components/outputs/csv2md-outputs/isp-sheet.md b/documentation/docs/components/outputs/csv2md-outputs/isp-sheet.md new file mode 100644 index 0000000000..b1d4cec752 --- /dev/null +++ b/documentation/docs/components/outputs/csv2md-outputs/isp-sheet.md @@ -0,0 +1,21 @@ +| **ISP** | **Locations** | **Public IPv6** | **Crypto Payments** | **Comments** | **Last Updated** | +|:------------------------------------------------|:---------------------------------------------------------------------------------------------------------|:-------------------------------------|:---------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------| +| [AlexHost](https://alexhost.com) | Moldova, Bulgaria, Sweden, Netherlands | Yes, on by default | Yes | They allow TOR Bridges, Relays. Exit nodes are only allowed on dedicated servers (prices start from 26 EUR) | 07/2024 | +| [BitLaunch](https://bitlaunch.io) | Canada, USA, UK | No | Yes | Expensive. Digial Ocean through BitLanch has IPv6 | 05/2024 | +| [Cherry Servers](https://www.cherryservers.com) | Lithuania, Netherlands, USA, Singapore | No | Yes | Issued IP doesn’t match the location offered by the provider. | 05/2024 | +| [Flokinet](https://flokinet.is) | Netherlands, Iceland, Romania,France | Yes, needs a ticket and custom setup | yes, including XMR | Very slow customer support | 05/2024 | +| [HostSailor](https://hostsailor.com) | USA | Yes, based on ticket | Yes | The IPv6 setup needs custom research and is not documented | 05/2024 | +| [Hostiko](https://hostiko.com.ua) | Ukraine, Germany | Yes, on by default | Yes | Ukrainian provider. They allow Exit nodes on Germany boxes but limit the bandwidth, you also have to restrict certain ports like 25 and 587. Make sure you open a ticket. | 07/2024 | +| [Hostinger](https://hostinger.com) | France, Lithuania, India, USA, Brazil | Yes, out of the box | Yes | Crypto payments must be done per each server monthly or annually. | 05/2024 | +| [Hostslick](https://hostslick.com) | Netherlands, Germany | Yes, on by default | Yes | Good amount of bandwidth for the price. Make sure you open the ticket if you want to run Exit node | 07/2024 | +| [Incognet](https://incognet.io) | Netherlands and USA | Yes, on by default | Yes | They allow Tor exit nodes but you must adhere to their rules https://incognet.io/tor-exits | 07/2024 | +| [IsHosting](https://ishosting.com/en) | Brazil, Netherlands | Yes, based on ticket | Yes | Expensive | 05/2024 | +| [Linode](https://linode.com) | USA, Canada, Japan, India, Indonesia, Sweden, Netherlands, Germany, Brazil, France, UK, Australia, Italy | Yes out of the box | No, only through [BitLAunch](https://bitlaunch.io) | IPv6 sometimes need to be re-added in Networking tab, no reboot needed | 05/2024 | +| [LiteServer](https://liteserver.nl) | Netherlands | Yes, on by default | Yes | Very reliable Dutch provider. They do allow Relay nodes but for Exit nodes you need to contact them. Always check T&C https://liteserver.nl/legal | 07/2024 | +| [Mevspace](https://mevspace.com) | Poland | Yes, on by default | Yes | Flexible Polish providers with 3 DCs in Poland. They do allow Tor Exit nodes but you may need a dedicated server for this. Make sure you open a ticket to check. As of today's date, they have 48h for 1 EUR tariff | 07/2024 | +| [Misaka](https://www.misaka.io/) | South Africa | Yes, native support | No | Very Expensive | 05/2024 | +| [Njalla](https://nja.la) | Sweden | Yes | Yes | Privacy vandguards! The biggest VPS 45 is 3 cores only, but it works better than many “larger” servers on the market. | 05/2024 | +| [RDP](https://rdp.sh) | Netherlands, USA, Poland | Yes, on by default | Yes | German provider. Exit nodes are allowed, policy is here https://rdp.sh/docs/faq/tor ports 25,465,587 must be closed. Make sure you open a ticket before running an exit node. | 07/2024 | +| [TerraHost](https://terrahost.no) | Norway | Yes, on by default | Yes | Very reliable Norwegian provider. Only allow exit nodes on Dedicated servers subject to certain caveats (you must open a ticket). Always check T&C https://terrahost.no/avtalebetingelser | 07/2024 | +| [iHostArt](https://ihostart.com) | Romania | Yes, on by default | Yes | Super permissive provider. They do allow Tor Exit/Relay/Bridge. Pro-free speech etc. Recently, IPv6 geolocation was set to North Korea, so be aware. | 07/2024 | +| [vSys Host](https://vsys.host) | Ukraine, Netherlands, USA | Yes, on by default | Yes | Pretty permissive provider registered in Ukraine. Should allow Relay/Exit nodes but nothing in T&C, so better double check. | 07/2024 | diff --git a/documentation/docs/components/outputs/csv2md-outputs/variables.md b/documentation/docs/components/outputs/csv2md-outputs/variables.md new file mode 100644 index 0000000000..b152bd4a2b --- /dev/null +++ b/documentation/docs/components/outputs/csv2md-outputs/variables.md @@ -0,0 +1,23 @@ +| **Flag (Option)** | **Variable** | **Description** | **Syntax example** | +|:-----------------------------------------------|:------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------| +| `-w` or `--write-changes` | *none* | Specify whether to write new changes - the values of other flags in the given command - to the config file | `--write-changes` | +| `--accept-operator-terms-and-conditions` | *none* | A flag added explicitly to `nym-node run` command every time, showing that the operator agreed with [T&Cs](#terms--conditions) | `--accept-operator-terms-and-conditions` | +| `--announce-wss-port` | `` | Port listening to Web Secure Socket, default and recommended `9001` | `9001` | +| *not a flag* | `` | Replace with all flags used to run the binary with a given command | `--id alice_super_node –accept-operator-terms-and-conditions` | +| *not a flag* | ` ` | A name of a binary | `nym-node` | +| `--expose-system-hardware` | `` | Specify whether basic system hardware information should be exposed. default: `true`, possible values: `true` or `false` | `--expose-system-hardware false` | +| `--expose-system-info` | `` | Specify whether basic system information should be exposed. default: `true`, possible values: `true` or `false` | `--expose-system-info false` | +| `--hostname` | `` | Your registered DNS domain, asigned to the VPS with `nym-node`. Use without prefix like `http://` or `https://` | `exit-gateway1.squad.nsl` | +| `--http-bind-address` | `` | Socket address this node will use for binding its http API - mandatory! Must be on port `8080`! | `--http-bind-address 0.0.0.0:8080` | +| `--id` | `` | A local only `nym-node` identifier, specified by flag `--id`. Not mandatory as it defaults to `default-nym-node` if not specified. | `--id alice_super_node` | +| *not a flag* | `` | Node public identity key, exposed on the network | `GQvHcg61viyN9brWn1hficjD66Q9TorsLN2CMGJewVfo` | +| `--landing-page-assets-path` | `` | A sub-directory located at `/var/www/` containing html configuration files | `/var/www/exit-gateway1.squad.nsl` | +| `--location` | `` | Location of your node. Formats like 'Jamaica', or two-letter alpha2 (e.g. 'JM'), three-letter alpha3 (e.g. 'JAM') or three-digit numeric-3 (e.g. '388') can be provided. | `--location JAM` | +| `--mixnet-bind-address` | `` | Address to bind to for listening for mixnet packets - mandatory! Must be on port `1789`! | `--mixnet-bind-address 0.0.0.0:1789` | +| `--mode` | `` | A functionality of your `nym-node` in the mixnet - mandatory! Chose from `entry-gateway`, `mixnode` or `exit-gateway` | `--mode exit-gateway` | +| *not a flag* | `` | Version of validator binaries | `v0.43.0` | +| *not a flag* | `` | Specify a full path to the given file, directory or binary behind this variable | `/root/src/nym/target/release/` | +| `--public-ips` | `` | IPv4 of the `nym-node` server - mandatory! Use this address as a `host` value for bonding.Use this address as a `host` value for bonding. | `--public-ips "$(curl -4 https://ifconfig.me)"` | +| *not a flag* | `` | Any text you want to show on the landing page | Welcome to Nym Node, operator contact is example@email.me | +| `--wireguard-enabled` | `` | Specifies whether the wireguard service is enabled, possible values: `true` or `false` - `true` is recommended | `--wireguard-enabled true` | +| `--wireguard-private-ip` | `` | Private IP address of the wireguard gateway. This mandatory field is set to a correct default: `10.1.0.1`, operators upgrading from older versions must overwrite it. | `--wireguard-private-ip 10.1.0.1` | diff --git a/documentation/docs/components/outputs/nyx-outputs/nyx-percent-stake.md b/documentation/docs/components/outputs/nyx-outputs/nyx-percent-stake.md new file mode 100644 index 0000000000..39bbb86bce --- /dev/null +++ b/documentation/docs/components/outputs/nyx-outputs/nyx-percent-stake.md @@ -0,0 +1 @@ +0.64% diff --git a/documentation/docs/components/outputs/nyx-outputs/nyx-total-stake.md b/documentation/docs/components/outputs/nyx-outputs/nyx-total-stake.md new file mode 100644 index 0000000000..e36dbca0e2 --- /dev/null +++ b/documentation/docs/components/outputs/nyx-outputs/nyx-total-stake.md @@ -0,0 +1 @@ +44.811 diff --git a/documentation/docs/components/snippets-general/time-now.mdx b/documentation/docs/components/snippets-general/time-now.mdx new file mode 100644 index 0000000000..11d54a1599 --- /dev/null +++ b/documentation/docs/components/snippets-general/time-now.mdx @@ -0,0 +1,9 @@ + +import TimeNow from 'components/outputs/api-scraping-outputs/time-now.md'; +import { Callout } from 'nextra/components'; + + + +The data on this page were last time updated on . + + diff --git a/documentation/docs/components/time-now.tsx b/documentation/docs/components/time-now.tsx new file mode 100644 index 0000000000..01f94797d5 --- /dev/null +++ b/documentation/docs/components/time-now.tsx @@ -0,0 +1,12 @@ + +import { Callout } from 'nextra/components'; +import TimeOutput from 'components/snippets-general/time-now.mdx'; + +export const TimeNow = () => { + +return ( +
+ +
+ ) +} diff --git a/documentation/docs/data/csv/variables.csv b/documentation/docs/data/csv/variables.csv index 3829069acf..8abcf6f8f7 100644 --- a/documentation/docs/data/csv/variables.csv +++ b/documentation/docs/data/csv/variables.csv @@ -15,8 +15,8 @@ *not a flag* ,`` ,"Specify a full path to the given file, directory or binary behind this variable ",`/root/src/nym/target/release/` `--announce-wss-port`,``,"Port listening to Web Secure Socket, default and recommended `9001`",`9001` `--landing-page-assets-path`,``,A sub-directory located at `/var/www/` containing html configuration files,`/var/www/exit-gateway1.squad.nsl` -,` `,A name of a binary,`nym-node` -,``,Replace with all flags used to run the binary with a given command,`--id alice_super_node –accept-operator-terms-and-conditions` -,``,Any text you want to show on the landing page ,"Welcome to Nym Node, operator contact is example@email.me" -,``,Version of validator binaries,`v0.43.0` -,``,"Node public identity key, exposed on the network",`GQvHcg61viyN9brWn1hficjD66Q9TorsLN2CMGJewVfo` +*not a flag* ,` `,A name of a binary,`nym-node` +*not a flag* ,``,Replace with all flags used to run the binary with a given command,`--id alice_super_node –accept-operator-terms-and-conditions` +*not a flag* ,``,Any text you want to show on the landing page ,"Welcome to Nym Node, operator contact is example@email.me" +*not a flag* ,``,Version of validator binaries,`v0.43.0` +*not a flag* ,``,"Node public identity key, exposed on the network",`GQvHcg61viyN9brWn1hficjD66Q9TorsLN2CMGJewVfo` diff --git a/documentation/docs/package.json b/documentation/docs/package.json index fbbf1dc7b0..486d5aee26 100644 --- a/documentation/docs/package.json +++ b/documentation/docs/package.json @@ -6,6 +6,8 @@ "author": "Nym Technologies SA", "scripts": { "generate:commands": "../scripts/next-scripts/autodoc.sh", + "prebuild": "../scripts/prebuild.sh", + "predev": "../scripts/prebuild.sh", "build": "next build", "dev": " next dev", "lint": "next lint", diff --git a/documentation/docs/pages/operators/archive/archive.mdx b/documentation/docs/pages/operators/archive.mdx similarity index 100% rename from documentation/docs/pages/operators/archive/archive.mdx rename to documentation/docs/pages/operators/archive.mdx diff --git a/documentation/docs/pages/operators/archive/_meta.json b/documentation/docs/pages/operators/archive/_meta.json index e7ee9ba104..7f32f48c3a 100644 --- a/documentation/docs/pages/operators/archive/_meta.json +++ b/documentation/docs/pages/operators/archive/_meta.json @@ -1,4 +1,3 @@ { - "archive": "Why Archive?", "faq": "FAQ" } diff --git a/documentation/docs/pages/operators/changelog.mdx b/documentation/docs/pages/operators/changelog.mdx new file mode 100644 index 0000000000..dda6cc7e6e --- /dev/null +++ b/documentation/docs/pages/operators/changelog.mdx @@ -0,0 +1,1860 @@ +import { Callout } from 'nextra/components'; +import { Tabs } from 'nextra/components'; +import { RunTabs } from 'components/operators/nodes/node-run-command-tabs'; +import { VarInfo } from 'components/variable-info.tsx'; +import { AccordionTemplate } from 'components/accordion-template.tsx'; + + +export const TestingSteps = () => ( +
+ Testing steps performed +
+); + +export const TryYourself = () => ( +
+ Try yourself +
+); + +export const CiConfig = () => ( +
+ Components of ci-binary-config-checker +
+); + + + +# Changelog + +This page displays a full list of all the changes during our release cycle from `v2024.3-eclipse` onwards. Operators can find here the newest updates together with links to relevant documentation. The list is sorted so that the newest changes appear first. + + + +## `v2024.12-aero` + +- [Release binaries](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.12-aero) +- [Release CHANGELOG.md](https://github.com/nymtech/nym/blob/nym-binaries-v2024.12-aero/CHANGELOG.md) +- [`nym-node`](nodes/nym-node.mdx) version `1.1.9` + +```sh +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](https://github.com/nymtech/nym/pull/4743): Starting to move this from being standalone binaries (as seen [here](https://github.com/nymtech/nym-zcash-grpc-demo)) into the sdk. EDIT this has sort of expanded a bit to include a few things: + - [x] simple example + - [x] example doc to `src/tcp_proxy.rs` + - [x] simple echo server in `tools/` + - [x] multithread example + - [x] example to sdk for using different network + - [x] go ffi for proxies + +- [Build(deps): bump `toml` from `0.5.11` to `0.8.14`](https://github.com/nymtech/nym/pull/4805): [`toml`](https://github.com/toml-rs/toml) version update + +}> +- Ensured that the `cargo.toml` is legible in various places; tested it on `nym-node`, `nym-api` and `nymvisor`. +- Ensured that updating the cargo.toml file and restarting the given binary continues to behave as normal. + + +- [Use `serde` from workspace](https://github.com/nymtech/nym/pull/4833): cargo autoinherit for `serde` - cargo autoinherit for `bs58` and `vergen` in `cosmwasm-smart-contracts` + +- [Gateway database modifications for different modes](https://github.com/nymtech/nym/pull/4868): 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`](https://github.com/nymtech/nym/pull/4869) + +- [Chore: remove queued migration for adding explicit admin](https://github.com/nymtech/nym/pull/4871) + +- [Allow clients to send stateless gateway requests without prior registration](https://github.com/nymtech/nym/pull/4873): in order to make changes to the registration/authentication procedure we needed a way of extracting protocol information before undergoing the handshake. + +- [Fix sql `serde` with `enum`](https://github.com/nymtech/nym/pull/4875) + +- [Few fixes to NNM pre deploy](https://github.com/nymtech/nym/pull/4883) + +- [Feature/updated gateway registration](https://github.com/nymtech/nym/pull/4885): 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 + + +- [Build and Push CI](https://github.com/nymtech/nym/pull/4887) + +- [Entry wireguard tickets](https://github.com/nymtech/nym/pull/4888): 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 replace `nymvpn-x` with `nym-vpn-app`](https://github.com/nymtech/nym/pull/4889): Change dependency from `nymvpn-x` to `nym-vpn-app` to reflect the new package name of the tauri client + +- [Update network monitor entry point](https://github.com/nymtech/nym/pull/4893) + +- [Remove clippy github PR annotations](https://github.com/nymtech/nym/pull/4896): 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. + +- [Fix clippy for beta toolchain](https://github.com/nymtech/nym/pull/4897): + +- [Update cargo deny](https://github.com/nymtech/nym/pull/4901): 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 + +- [Data Observatory stub](https://github.com/nymtech/nym/pull/4905): You need Postgres up for `sqlx` compile-time checked queries to work + +}> + +- Get [`page_up.sh` script](https://github.com/nymtech/nym/blob/develop/nym-data-observatory/pg_up.sh) + +```bash +./pg_up.sh +``` + +- Play with the database: +```bash +docker exec -it nym-data-observatory-pg /bin/bash +psql -U youruser -d yourdb +``` + + +- [Proxy ffi](https://github.com/nymtech/nym/pull/4906): Updates Go & CPP FFI with the proxy code from [\#4743](https://github.com/nymtech/nym/pull/4743) + +- [Bump `http-api-client` default timeout to 30 sec](https://github.com/nymtech/nym/pull/4917) + +- [Check both version and type in message header](https://github.com/nymtech/nym/pull/4918) + +- [Fix argument to `cargo-deny` action](https://github.com/nymtech/nym/pull/4922) + +- [Expose error type](https://github.com/nymtech/nym/pull/4924) + +- [Make ip-packet-request VERSION pub](https://github.com/nymtech/nym/pull/4925) + +- [Assume offline mode](https://github.com/nymtech/nym/pull/4926) + +- [`nym-node`: don't use bloomfilters for double spending checks](https://github.com/nymtech/nym/pull/4960): this PR disables gateways polling for double spending bloomfilters and also `nym-apis` from providing this data. + +### Bugfix + +- [Fix `apt install` in `ci-build-upload-binaries.yml`](https://github.com/nymtech/nym/pull/4894) + +- [Fix missing duplication of modified tables](https://github.com/nymtech/nym/pull/4904) + +- [Fix nymvpn.com url in mainnet defaults](https://github.com/nymtech/nym/pull/4920): 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. + +- [Fix handle drop](https://github.com/nymtech/nym/pull/4934) + +- [Replace unreachable macro with an error return](https://github.com/nymtech/nym/pull/4958) + +### Operators Guide, Tooling & Updates + +#### Documentation Updates + +- [Update FAQ sphinx size](https://github.com/nymtech/nym/pull/4946): 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](https://github.com/nymtech/nym/pull/4885) it in this release. + +**The faster the operators upgrade to this [latest release](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.12-aero), 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: + +1. 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? +2. Needed improvements of Nym Node binaries to improve the throughput on mainnet +3. Measurement of required machine specs + - Releasing a new spec requirements +4. Raw data record +5. 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](testing/performance.md). + +> 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](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.11-wedel) +- [Release CHANGELOG.md](https://github.com/nymtech/nym/blob/nym-binaries-v2024.11-wedel/CHANGELOG.md) +- [`nym-node`](nodes/nym-node.mdx) version `1.1.8` + +```sh +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](https://github.com/nymtech/nym/pull/4610): 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 like [`locust`](https://locust.io/). 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](https://github.com/nymtech/nym/pull/4725) + +- [Remove deprecated mark_as_success and use new disarm](https://github.com/nymtech/nym/pull/4751): Update function name to keep terminology consistent with tokio `CancellationToken DropGuard`. + +- [Update peer refresh value](https://github.com/nymtech/nym/pull/4754): `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` and `DEFAULT_PEER_TIMEOUT_CHECK` have been moved to `common/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](https://github.com/nymtech/nym/pull/4756) + +- [Make gateway latency check generic](https://github.com/nymtech/nym/pull/4759): 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. + + +- [chore: remove repetitive words](https://github.com/nymtech/nym/pull/4763) + +- [Avoid race on ip and registration structures](https://github.com/nymtech/nym/pull/4766): 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. +}> +1. - **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 + +2. **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 + +3. **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) + +4. **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 + + +- [Persist used wireguard private IPs](https://github.com/nymtech/nym/pull/4771) + +- [Enable dependabot version upgrades for root rust workspace](https://github.com/nymtech/nym/pull/4778) + +- [Fix clippy for `unwrap_or_default`](https://github.com/nymtech/nym/pull/4783): Fix nightly build for [beta toolchain](https://github.com/nymtech/nym/actions/runs/10552082396/job/29230401668) + +- [Update dependabot](https://github.com/nymtech/nym/pull/4796): Bump max number of dependabot rust PRs to 10. Add readme entry to workspace package. + +- [Run `cargo-autoinherit` for a few new crates](https://github.com/nymtech/nym/pull/4801): Run cargo-autoinherit for a few new crates - Sort crates list. + +- [Add `axum` server to `nym-api`](https://github.com/nymtech/nym/pull/4803): Summary PR to add axum functionality behind a feature flag `axum`, alongside rocket. + +- [Remove unused wireguard flag from SDK](https://github.com/nymtech/nym/pull/4823) + +- [Expose wireguard details on self described endpoint](https://github.com/nymtech/nym/pull/4825) + +}> +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: +```json + "wireguard": { + "port": 51822, + "public_key": "" + } +``` + + +- [Revamped ticketbook serialisation and exposed additional cli methods](https://github.com/nymtech/nym/pull/4827): `wip` branch that includes changes needed for `vpn-api` alongside additional `ecash utils` +}> +Checked the following commands: +```sh +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](https://github.com/nymtech/nym/pull/4831) + +- [Remove serde_crate named import](https://github.com/nymtech/nym/pull/4832) + +- [Create nym-repo-setup debian package and nym-vpn meta package](https://github.com/nymtech/nym/pull/4837): Create nym-repo-setup debian package that sets up the nymtech debian repo on the system it's installed on. It does 2 things: + + 1. Copy the keyring to `/usr/share/keyrings/nymtech.gpg` + 2. 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. + +}> +1. Install with +```sh +sudo dpkg -i ./nym-repo-setup.deb +``` +2. Once it's installed, it should be possible to install the vpn client with +```sh +sudo apt install nym-vpnc +``` +3. To remove the repo, use +```sh +sudo apt remove nym-repo-setup +``` + +NOTE: removing the repo will not remove any installed nym-vpn packages + + + +}> +1. **Downloaded** the `nym-repo-setup.deb` package to a Debian-based test system + +2. **Installed** the repository setup package using the command: +```bash +sudo dpkg -i ./nym-repo-setup.deb +``` + +3. **Verified** that the GPG keyring was copied to `/usr/share/keyrings/nymtech.gpg`: +```bash +ls -l /usr/share/keyrings/nymtech.gpg +``` + +4. **Checked** that the repository specification was added to `/etc/apt/sources.list.d/nymtech.list`: +```bash +cat /etc/apt/sources.list.d/nymtech.list +``` + + 5. **Updated** the package list: +```bash +sudo apt update +``` + +6. **Installed** the VPN client meta-package: +```bash +sudo apt install nym-vpnc +``` + +7. **Confirmed** that the `nym-vpnc` package and its dependencies (daemon and UI) were installed successfully + +8. **Tested** the VPN client to ensure it operates as expected + +9. **Removed** the repository setup package: +```bash +sudo apt remove nym-repo-setup +``` + +10. **Verified** that the repository specification file `/etc/apt/sources.list.d/nymtech.list` was removed + +11. **Ensured** that the installed `nym-vpnc` packages remained installed and functional after removing the repo setup package + + +- [Use ecash credential type for bandwidth value](https://github.com/nymtech/nym/pull/4840) + +- [Start switching over jobs to arc-ubuntu-20.04](https://github.com/nymtech/nym/pull/4843) + + + +}> +``` + - 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](https://github.com/nymtech/nym/pull/4853) + +- [Revert runner for `ci-docs`](https://github.com/nymtech/nym/pull/4855) + +- [Remove `golang` workaround in `ci-sdk-wasm`](https://github.com/nymtech/nym/pull/4858) + +- [Fix linux conditional in `ci-build.yml`](https://github.com/nymtech/nym/pull/4863) + +- [Disable push trigger and add missing paths in `ci-build`](https://github.com/nymtech/nym/pull/4864) + +- [chore: removed completed queued mixnet migration](https://github.com/nymtech/nym/pull/4865) + +- [Bump defguard to github latest version](https://github.com/nymtech/nym/pull/4872) + +- [Backport #4894 to fix ci](https://github.com/nymtech/nym/pull/4899) + +### Bugfix + +- [Fix test failure in ipr request size](https://github.com/nymtech/nym/pull/4844): 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](https://github.com/nymtech/nym/pull/4845) + +- [Allow updating globally stored signatures](https://github.com/nymtech/nym/pull/4891) + +- [Bugfix/ticketbook false double spending](https://github.com/nymtech/nym/pull/4892) +}> +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](https://github.com/nymtech/nym/commit/05d6652177fb77324f8c38b3d8a547d07e729fec): Operators setting up WSS and reverse proxy on Gateways have now cleaner and simpler guide to configure their VPS. + +- [Updat hostname instruction for WSS](https://github.com/nymtech/nym/commit/7146c4c012ba7012dc74edc8510bbf377dc32fba): Adding a hostname instruction for clarity + +## `nym-node` patch from `release/2024.10-caramello` + +- [Patch release binaries](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.10-caramello-patch) + +```sh +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`](#v202410-caramello) release [bug](#known-bugs--undone-features) where one of the used dependencies - [`DefGuard`](https://github.com/DefGuard/defguard/issues/619), 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: +```sh +/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`](#v202410-caramello). + +## `v2024.10-caramello` + +- [Release binaries](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.10-caramello) +- [Release CHANGELOG.md](https://github.com/nymtech/nym/blob/nym-binaries-v2024.10-caramello/CHANGELOG.md) +- [`nym-node`](nodes/nym-node.mdx) version `1.1.7` + + +- Backport 4844 and 4845 ([#4857]) +- Bugfix/client registration vol2 ([#4856]) +- Remove wireguard feature flag and pass runtime enabled flag ([#4839]) +- Eliminate cancel unsafe sig awaiting ([#4834]) +- added explicit updateable admin to the mixnet contract ([#4822]) +- using legacy signing payload in CLI and verifying both variants in contract ([#4821]) +- adding ecash contract address ([#4819]) +- Check profit margin of node before defaulting to hardcoded value ([#4802]) +- Sync last_seen_bandwidth immediately ([#4774]) +- Feature/additional ecash nym cli utils ([#4773]) +- Better storage error logging ([#4772]) +- bugfix: make sure DKG parses data out of events if logs are empty ([#4764]) +- Fix clippy on rustc beta toolchain ([#4746]) +- Fix clippy for beta toolchain ([#4742]) +- Disable testnet-manager on non-unix ([#4741]) +- Don't set NYM_VPN_API to default ([#4740]) +- Update publish-nym-binaries.yml ([#4739]) +- Update ci-build-upload-binaries.yml ([#4738]) +- Add NYM_VPN_API to network config ([#4736]) +- Re-export RecipientFormattingError in nym sdk ([#4735]) +- Persist wireguard peers ([#4732]) +- Fix tokio error in 1.39 ([#4730]) +- Feature/vesting purge plus ranged cost params ([#4716]) +- Fix (some) feature unification build failures ([#4681]) +- Feature Compact Ecash : The One PR ([#4623]) + +[#4857]: https://github.com/nymtech/nym/pull/4857 +[#4856]: https://github.com/nymtech/nym/pull/4856 +[#4839]: https://github.com/nymtech/nym/pull/4839 +[#4834]: https://github.com/nymtech/nym/pull/4834 +[#4822]: https://github.com/nymtech/nym/pull/4822 +[#4821]: https://github.com/nymtech/nym/pull/4821 +[#4819]: https://github.com/nymtech/nym/pull/4819 +[#4802]: https://github.com/nymtech/nym/pull/4802 +[#4774]: https://github.com/nymtech/nym/pull/4774 +[#4773]: https://github.com/nymtech/nym/pull/4773 +[#4772]: https://github.com/nymtech/nym/pull/4772 +[#4764]: https://github.com/nymtech/nym/pull/4764 +[#4746]: https://github.com/nymtech/nym/pull/4746 +[#4742]: https://github.com/nymtech/nym/pull/4742 +[#4741]: https://github.com/nymtech/nym/pull/4741 +[#4740]: https://github.com/nymtech/nym/pull/4740 +[#4739]: https://github.com/nymtech/nym/pull/4739 +[#4738]: https://github.com/nymtech/nym/pull/4738 +[#4736]: https://github.com/nymtech/nym/pull/4736 +[#4735]: https://github.com/nymtech/nym/pull/4735 +[#4732]: https://github.com/nymtech/nym/pull/4732 +[#4730]: https://github.com/nymtech/nym/pull/4730 +[#4716]: https://github.com/nymtech/nym/pull/4716 +[#4681]: https://github.com/nymtech/nym/pull/4681 +[#4623]: https://github.com/nymtech/nym/pull/4623 + + +### Features + +- [Add 1GB/day/user bandwidth cap](https://github.com/nymtech/nym/pull/4717) + +}> +**Scenario 1: Bandwidth Decreasing Continuously** + +1. Started the client and noted the initial bandwidth (e.g., 1GB). +2. Used the client and tracked bandwidth usage over time (e.g., decrease by 100MB every hour). +3. Restarted the client after some usage. +4. 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** + +1. Used the client normally until the end of the day. +2. Suspended some clients and kept others active. +3. Checked bandwidth at midnight. +4. 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)** + +1. Configured the system to reset bandwidth at midday. +2. Used the client and monitored bandwidth until midday. +3. Kept the client connected during the reset time. +4. 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** + +1. Kept a client inactive for 3 days. +2. Verified removal from the peer list after 3 days. +3. Reconnected the client after 3 days and checked for a new private IP. +4. 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](https://github.com/nymtech/nym/pull/4710): 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](https://github.com/nymtech/nym/pull/4706): Commands for archived / legacy binaries `nym-gateway` and `nym-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 all `cli` related things. + +}> +- Verify that the `nym-gateway` binary and `nym-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 from `init` 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](https://github.com/nymtech/nym/pull/4723): Allow the IPR to handle clients connecting both using `v6` and `v7`, 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 new `v7` 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: +```sh +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 +``` + + +- [Backport `#4844` and `#4845`](https://github.com/nymtech/nym/pull/4857) + +- [Remove wireguard feature flag and pass runtime enabled flag](https://github.com/nymtech/nym/pull/4839) + +- [Eliminate cancel unsafe sig awaiting](https://github.com/nymtech/nym/pull/4834) + +- [Added explicit updateable admin to the mixnet contract](https://github.com/nymtech/nym/pull/4822) + +- [Using legacy signing payload in CLI and verifying both variants in contract](https://github.com/nymtech/nym/pull/4821) + +- [Adding ecash contract address](https://github.com/nymtech/nym/pull/4819) + +- [Check profit margin of node before defaulting to hardcoded value ](https://github.com/nymtech/nym/pull/4802) + +- [Sync `last_seen_bandwidth` immediately](https://github.com/nymtech/nym/pull/4774) + +- [Feature/additional ecash `nym-cli` utils](https://github.com/nymtech/nym/pull/4773) + +- [Better storage error logging](https://github.com/nymtech/nym/pull/4772) + +- [Disable testnet-manager on non-unix](https://github.com/nymtech/nym/pull/4741) + +- [Don't set NYM_VPN_API to default](https://github.com/nymtech/nym/pull/4740) + +- [Update publish-nym-binaries.yml](https://github.com/nymtech/nym/pull/4739): Adds wireguard to builds + +- [Update ci-build-upload-binaries.yml](https://github.com/nymtech/nym/pull/4738): Adds wireguard for ci-builds + +- [Add NYM_VPN_API to network config](https://github.com/nymtech/nym/pull/4736) + +- [Re-export RecipientFormattingError in nym sdk](https://github.com/nymtech/nym/pull/4735) + +- [Persist wireguard peers](https://github.com/nymtech/nym/pull/4732) + +- [Feature/vesting purge plus ranged cost params](https://github.com/nymtech/nym/pull/4716): Combines [\#4715](https://github.com/nymtech/nym/pull/4715) and [\#4711](https://github.com/nymtech/nym/pull/4711) 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` to `3.0.3` in `/nym-wallet/webdriver`](https://github.com/nymtech/nym/pull/4709): Bumps [braces](https://github.com/micromatch/braces) from `3.0.2` to `3.0.3`. + +### Bugfix + +- [chore: fix 1.80 lint issues](https://github.com/nymtech/nym/pull/4731) + +}> +- Building all binaries is ok +- Running `cargo fmt` returns no issues + + +- [Fix version 1 not having template correspondent initially](https://github.com/nymtech/nym/pull/4733) + +}> +Tested updating an old `nym-node` version and ensuring it did not throw any errors. + + +- [Bugfix/client registration vol2](https://github.com/nymtech/nym/pull/4856) + +- [Fix tokio error in `1.39`](https://github.com/nymtech/nym/pull/4730): + - Bump tokio to `1.39.2`, skipping the issue with `1.39.1` + + +- [Fix (some) feature unification build failures](https://github.com/nymtech/nym/pull/4681): Running a script in the root workspace that builds each crate independently + + +```sh +#!/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](https://github.com/nymtech/nym/pull/4764): This will be the case on post `0.50` chains + +- [Fix clippy on rustc beta toolchain](https://github.com/nymtech/nym/pull/4746): Fix clippy warnings for rust beta toolchain + +- [Fix clippy for beta toolchain](https://github.com/nymtech/nym/pull/4742): Fix beta toolchain clippy by removing unused module + - Add `nym-` prefix to `serde-common` crate + - Remove ignored `default-features = false` attribute for workspace dependency + +### Crypto + +- [Feature Compact Ecash : The One PR](https://github.com/nymtech/nym/pull/4623) + +### Operators Guide, Tooling & Updates + +- More explicit [setup for `nym-node`](nodes/setup.md#initialise--run) with a new [option explanation](nodes/setup.md#essential-parameters--variables), including syntax examples + +- New [VPS networking configuration steps for Wireguard](nodes/configuration.md#routing-configuration) + +- Wireguard [builds from source](binaries/building-nym.md) 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](https://forum.nymtech.net/t/poll-proposal-for-on-chain-minimum-profit-margin-for-all-nym-nodes/253) + + +*Minimum profit margin = 20%*
+*Maximum profit margin = 50%*
+*Minimum operating cost = 0 NYM*
+*Maximum operating cost = 1000 NYM* +
+ +- [Nym Harbourmater](https://harbourmaster.nymtech.net) 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](#operators-tasks) + - DNS resolution check, to configure see [tasklist below](#operators-tasks) + - Wireguard perfomance bigger than 0.75, to configure see [tasklist below](#operators-tasks) + +- New [Nym Wallet](https://github.com/nymtech/nym/releases/tag/nym-wallet-v1.2.14) is out! + - Vesting contract functionalities have been purged, users can only remove tokens from vesting + - Migrating from `mixnode` or `gateway` smart contracts to a new unifying `nym-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 all `nym-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](testing/node-api-check.md) 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](sandbox.mdx) 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//data/description.toml` (all nodes) +- Configure wireguard routing with new [`network_tunnel_manager.sh`](https://gist.github.com/tommyv1987/ccf6ca00ffb3d7e13192edda61bb2a77) following [these steps](nodes/configuration.md#routing-configuration) (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](nodes/proxy-configuration.md) on `nym-node` (Gateways only for the time being) +- Don't forget to restart your node - or (preferably using [systemd automation](nodes/nym-node/configuration.mdx#systemd)) reload daemon and restart the service +- Optional: Use [`nym-gateway-probe`](testing/gateway-probe.html) and [NymVPN CLI](https://nymtech.net/developers/nymvpn/cli.html) 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](https://matrix.to/#/#operators:nymtech.chat) + + +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: + +1. Get the script onto your machine (soon on github for curl or wget): + +```sh +# 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 +``` + +2. Make executable: + +```sh +chmod +x ping_with_curl_average_for_wg_check.sh +``` + +3. In case you don't have `bc`, install it: + +```sh +sudo apt install bc +``` + +4. Run: + +```sh +./ping_with_curl_average_for_wg_check.sh +``` + +5. Share results and ID key in [Nym Operators channel](https://matrix.to/#/#operators:nymtech.chat) + +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 on `nym-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` as `EntryGateway`, 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 ..` +```sh +/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](https://github.com/DefGuard/defguard/issues/619). 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: + +1. Did operators only encounter this error after a `nym-node` (Gateway) restart? +2. 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](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.9-topdeck) +- [Release CHANGELOG.md](https://github.com/nymtech/nym/blob/nym-binaries-v2024.9-topdeck/CHANGELOG.md) +- [`nym-node`](nodes/nym-node.mdx) version `1.1.6` + + +- chore: fix 1.80 lint issues ([#4731]) +- Handle clients with different versions in IPR ([#4723]) +- Add 1GB/day/user bandwidth cap ([#4717]) +- Feature/merge back ([#4710]) +- removed mixnode/gateway config migration code and disabled cli without explicit flag ([#4706]) + +[#4731]: https://github.com/nymtech/nym/pull/4731 +[#4723]: https://github.com/nymtech/nym/pull/4723 +[#4717]: https://github.com/nymtech/nym/pull/4717 +[#4710]: https://github.com/nymtech/nym/pull/4710 +[#4706]: https://github.com/nymtech/nym/pull/4706 + + +### Features + +* [Removed `nym-mixnode` and `nym-gateway` config migration code and disabled CLI without explicit flag](https://github.com/nymtech/nym/pull/4706): 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 a `nym-node`. The next step, in say a month or so, is to completely remove all `cli` related things. +}> +- Verify that the `nym-gateway` binary and `nym-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 from `init` which has been removed) and the message stating to update to `nym-node` is a `_warning_` now +- Check `nym-node` is not affected +- Review the changes in the PR + + +* [Add 1GB/day/user bandwidth cap](https://github.com/nymtech/nym/pull/4717) + +}> +**Scenario 1: Bandwidth Decreasing Continuously'** + +1. Start the client and noted the initial bandwidth (e.g., 1GB). +2. Us the client and track bandwidth usage over time (e.g., decrease by 100MB every hour). +3. Restart the client after some usage. +4. 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'** + +1. Use the client normally until the end of the day. +2. Suspend some clients and kept others active. +3. Check bandwidth at midnight. +4. 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)'** + +1. Configure the system to reset bandwidth at midday. +2. Use the client and monitored bandwidth until midday. +3. Keep the client connected during the reset time. +4. 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](https://github.com/nymtech/nym/pull/4723): Allow the IPR to handle clients connecting both using `v6` and `v7`, 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 new `v7` 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: +```sh +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](https://github.com/nymtech/nym/pull/4710): Merge back from the release branch the changes that fix the `nym-node` upgrades. + +* [Fix version `1.x.x` not having template correspondent initially](https://github.com/nymtech/nym/pull/4733): 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. + + +* [chore: fix 1.80 lint issues](https://github.com/nymtech/nym/pull/4731): +}> +- Building all binaries is ok +- Running `cargo fmt` returns no issues + + +### Operators Guide updates + +* [WireGuard tunnel configuration guide](nodes/configuration.md#routing-configuration) for `nym-node` (currently Gateways functionalities). For simplicity we made a detailed step by step guide to upgrade an existing `nym-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 as `nym-node` version `1.1.6`. You can find the release here: [Nym 2024.9-topdeck Release](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.9-topdeck). + +- **Important:** Before proceeding, make sure to [back up](nodes/maintenance.md#backup-a-node) 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: +```bash +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: + +1. Check the current status of UFW (Uncomplicated Firewall): +```bash +ufw status +``` + +2. Ensure that the following ports are allowed on your machine before adding the WireGuard port: + +```bash +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 +``` + +3. Confirm that the UFW rules have been updated: +```bash +ufw status +``` + +**Step 2: Download and Prepare the Network Tunnel Manager Script** + +1. Download the [`network_tunnel_manager.sh`](https://gist.github.com/tommyv1987/ccf6ca00ffb3d7e13192edda61bb2a77) script: +```bash +curl -L -o network_tunnel_manager.sh https://gist.githubusercontent.com/tommyv1987/ccf6ca00ffb3d7e13192edda61bb2a77/raw/3c0a38c1416f8fdf22906c013299dd08d1497183/network_tunnel_manager.sh +``` + +2. Make the script executable: +```bash +chmod u+x network_tunnel_manager.sh +``` + +3. Apply the WireGuard IPTables rules: +```bash +./network_tunnel_manager.sh apply_iptables_rules_wg +``` + +**Step 3: Update the Nym Node Service File** + +1. Modify your [`nym-node` service file](nodes/configuration.md#systemd) to enable WireGuard. Open the file (usually located at `/etc/systemd/system/nym-node.service`) and update the `[Service]` section as follows: + +```ini +[Service] +User= +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 --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 +``` + +2. Reload the systemd daemon to apply the changes: +```bash +systemctl daemon-reload +``` + +3. Restart the `nym-node service`: +```bash +systemctl restart nym-node.service +``` + +4. Optionally, you can check if the node is running correctly by monitoring the service logs: +```bash +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: +```bash +./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 to `true`](nodes/setup.md#-initialise--run): With a proper [routing configuration](nodes/configuration.md#routing-configuration) `nym-nodes` running as Gateways can now enable WG. See the example below: + + +For Exit Gateway: +```sh +./nym-node run --id --mode exit-gateway --public-ips "$(curl -4 https://ifconfig.me)" --hostname --http-bind-address 0.0.0.0:8080 --mixnet-bind-address 0.0.0.0:1789 --location --accept-operator-terms-and-conditions --wireguard-enabled true + +# wireguard can be enabled from version 1.1.6 onwards +``` + +For Entry Gateway: +```sh +./nym-node run --id --mode entry-gateway --public-ips "$(curl -4 https://ifconfig.me)" --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](https://nymtech.net/.wellknown/network-requester/exit-policy.txt): Based on the survey, AMA and following discussions we added several ports to Nym exit policy. The ports voted upon in the [forum governance](https://forum.nymtech.net/t/poll-a-new-nym-exit-policy-for-exit-gateways-and-the-nym-mixnet-is-inbound/464) 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](https://nymtech.net/developers/archive/nym-connect.html), PR [\#4750](https://github.com/nymtech/nym/commit/5096c1e60e203dcf8be934823946e24fda16a9a3): 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](https://github.com/nymtech/nym/commit/7e36595d8fa7706876880b42df1c998a4b8c1478), [\#4752](https://github.com/nymtech/nym/commit/1db61f800c6884e284c5ab21e7abce3bc6d91d99) [\#4755](https://github.com/nymtech/nym/commit/aaf3dca5b999ad7f19d2ff170078b43c9c4476c2), [\#4737](https://github.com/nymtech/nym/commit/6f669866e92e637772726ad05caa5c5501a830f3) +}> +- Use [deadlinkchecker.com](https://www.deadlinkchecker.com/website-dead-link-checker.asp) 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](https://nymtech.net/operators/nodes/vps-setup.html#configure-your-firewall), PR [\#4734](https://github.com/nymtech/nym/commit/5e6417f83788f30b2a84e4dd73d6dd9619a2bb16): Make crystal clear that the addresses and ports in operators `config.toml` must be opened using [`ufw`](https://nymtech.net/operators/nodes/vps-setup.html#configure-your-firewall) and set up as in the example below: + +```toml +[host] +public_ips = [ +'' +] + +[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](https://https://harbourmaster.nymtech.net/) 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](https://nymtech.net/about/token) + +--- + + +## `v2024.8-wispa` + +- [Release binaries](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.8-wispa) +- [Release CHANGELOG.md](https://github.com/nymtech/nym/blob/nym-binaries-v2024.8-wispa/CHANGELOG.md) +- [`nym-node`](nodes/nym-node.mdx) version `1.1.5` + + +- add event parsing to support cosmos_sdk to 0.50 ([#4697]) +- Fix NR config compatibility ([#4690]) +- Remove UserAgent constructor since it's weakly typed ([#4689]) +- [bugfix]: Node_api_check CLI looked over roles on blacklisted nodes ([#4687]) +- Add mixnodes to self describing api cache ([#4684]) +- Move and whole bump of crates to workspace and upgrade some ([#4680]) +- Remove code that refers to removed nym-network-statistics ([#4679]) +- Remove nym-network-statistics ([#4678]) +- Create UserAgent that can be passed from the binary to the nym api client ([#4677]) +- Add authenticator ([#4667]) + +[#4697]: https://github.com/nymtech/nym/pull/4697 +[#4690]: https://github.com/nymtech/nym/pull/4690 +[#4689]: https://github.com/nymtech/nym/pull/4689 +[#4687]: https://github.com/nymtech/nym/pull/4687 +[#4684]: https://github.com/nymtech/nym/pull/4684 +[#4680]: https://github.com/nymtech/nym/pull/4680 +[#4679]: https://github.com/nymtech/nym/pull/4679 +[#4678]: https://github.com/nymtech/nym/pull/4678 +[#4677]: https://github.com/nymtech/nym/pull/4677 +[#4667]: https://github.com/nymtech/nym/pull/4667 + + + +### Features + +* [Default construct NodeRole](https://github.com/nymtech/nym/pull/4721): To preserve compatibility with newer clients interacting with older `nym-api` +}> +1. Reviewed the changes in the `nym-api-requests/src/models.rs` file. +2. Verified that the `NymNodeDescription` struct includes the new `role` field with a default value set by `default_node_role`. +3. Checked the implementation of the `default_node_role` function to ensure it returns `NodeRole::Inactive`. +4. Ran the updated code in the sandbox environment. +5. 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](https://github.com/nymtech/nym/pull/4721) on develop)](https://github.com/nymtech/nym/pull/4722) +* [Add upgrades to `nym-node` for `authenticator` changes](https://github.com/nymtech/nym/pull/4703) +}> +1. Reviewed the changes in the `gateway/src/error.rs` and `gateway/src/node/mod.rs` files. +2. Verified the new error enum `AuthenticatorStartupFailure` was added to `GatewayError`. +3. Confirmed the implementation of the `StartedAuthenticator` struct and its usage in the `start_authenticator` function. +4. Ran the updated code in the canary environment. +5. Monitored the canary environment for any issues or errors related to the changes. + + +* [Add event parsing to support `cosmos_sdk` to `0.50`](https://github.com/nymtech/nym/pull/4697) +}> +1. Reviewed the changes in `common/client-libs/validator-client/src/nyxd/cosmwasm_client/client_traits/signing_client.rs`, `logs.rs`, `types.rs`, and `nym-api/src/coconut/tests/mod.rs` files. +2. Verified the addition of event parsing in the relevant functions and structs. +3. Ensured that the `find_attribute` function correctly parses event attributes. +4. Ran the updated code in the sandbox environment. +5. Broadcasted transactions on the sandbox network to test the changes. +6. Monitored the sandbox network for any malformed responses or errors after the test chain upgrade. + + +* [Send bandwidth status messages when connecting](https://github.com/nymtech/nym/pull/4691): When connecting to the gateway we get received the available bandwidth left. Emit a status messages for this, for consumption by the application layer. +}> +1. Reviewed the changes in `common/bandwidth-controller/src/event.rs`, `common/bandwidth-controller/src/lib.rs`, and `common/client-libs/gateway-client/src/client.rs` files. +2. Verified the implementation of `BandwidthStatusMessage` enum for emitting status messages. +3. Ensured `GatewayClient` is updated to send bandwidth status messages when connecting. +4. Deployed the updated code on the canary environment. +5. Connected to the gateway and checked for the emission of bandwidth status messages. +6. Verified that the messages were correctly parsed and consumed by the application layer. +7. Ran the VPN client to observe the parsed events. + + +* [Fix NR config compatibility](https://github.com/nymtech/nym/pull/4690): 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 +}> +1. Reviewed the changes in the `service-providers/network-requester/src/config/mod.rs` and `service-providers/network-requester/src/config/template.rs` files. +2. Ensured `NetworkRequester` config is able to read old keys for compatibility. +3. Removed old and deleted config keys from the `NetworkRequester` template. +4. Compiled the project to verify no issues or warnings appeared. +5. Ran all tests to ensure that the changes did not affect the functionality. +6. Validated that no leftover code from the old statistics service provider caused any issues. + + +* [Remove `UserAgent` constructor since it's weakly typed](https://github.com/nymtech/nym/pull/4689): +}> +1. Reviewed the changes in `common/http-api-client/src/user_agent.rs` file. +2. Verified the removal of the `UserAgent` constructor and ensured that all instances of `UserAgent::new` are updated accordingly. +3. Checked the implementation of `UserAgent` struct using `BinaryBuildInformation` and `BinaryBuildInformationOwned`. +4. Deployed the updated code across different environments (QA, sandbox, and canary). +5. Ran tests to ensure that the `UserAgent` struct functions correctly without the constructor. + + +* [Add mixnodes to self describing api cache](https://github.com/nymtech/nym/pull/4684): + - Abstracts getting the self describing info a bit + - Adds mixnodes to the cache refresher as well + - Adds `role` field to the `NodeDescription` struct, to be able to distinguish between mixnodes and gateways + - Switched to using `NodeStatusCache` instead of `ContractCache` +}> +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](https://github.com/nymtech/nym/pull/4680): + - Fix cargo warning for `default_features` + - Move dirs 4.0 to workspace + - Use workspace `base64` dep + - Move `rand_chacha` and `x25519-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 +}> +1. Reviewed the changes to move and upgrade crates to the workspace. +2. 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` and `x25519-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. +3. Ensured the `Cargo.toml` files across the project reflect these changes correctly. +4. Compiled the entire project to check for any issues or warnings. +5. Verified that all tests pass successfully after the changes. + + +* [Remove `nym-network-statistics`](https://github.com/nymtech/nym/pull/4678): Remove `nym-network-statistics` service provider that is no longer used. +}> +1. Reviewed the project to identify all references to `nym-network-statistics`. +2. Removed all code and dependencies associated with `nym-network-statistics`. +3. Ensured that no references to `nym-network-statistics` remain in the codebase, including comments, imports, and configuration files. +4. Compiled the project to check for any issues or warnings. +5. Ran all tests to ensure the removal did not affect the functionality of the project. + + + +* [Remove code that refers to removed `nym-network-statistics`](https://github.com/nymtech/nym/pull/4679): Follow up to [\#4678](https://github.com/nymtech/nym/pull/4678) where all code interacting with it is removed. +}> +1. Reviewed the project to identify all references to `nym-network-statistics`. +2. Removed all code and dependencies associated with `nym-network-statistics`. +3. Ensured that no references to `nym-network-statistics` remain in the codebase, including comments, imports, and configuration files. +4. Compiled the project to check for any issues or warnings. +5. Ran all tests to ensure the removal did not affect the functionality of the project. + + +* [Create `UserAgent` that can be passed from the binary to the `nym-api` client](https://github.com/nymtech/nym/pull/4677): + - Support setting `UserAgent` for the validator client + - Support setting `UserAgent` in the SDK `MixnetClient` + - Set `UserAgent` when getting the list of gateways and topology in + - `nym-client` + - `nym-socks5-client` + - Standalone `ip-packet-router` + +}> +Used the nym-vpn-cli to test this, and we can visibly see the `UserAgent`, no issues with the comments mentioned above. + +Example of the user agent sent: +`nym-client/1.1.36/x86_64-unknown-linux-gnu/e18bb70` + +image + +Connected with no problems + + +* [Add `authenticator`](https://github.com/nymtech/nym/pull/4667) + +### Bugfix + +* [`Node_api_check.py` CLI looked over roles on blacklisted nodes](https://github.com/nymtech/nym/pull/4687): Removing/correcting this redundant function which results in unwanted error print, will resolve in the program not looking up the `roles` endpoint for blacklisted GWs, instead just ignores the role description and still return all other endpoints. + +### Operators Guide updates + +* [Create a guide to backup and restore `nym-node`](https://nymtech.net/operators/nodes/maintenance.html#backup-a-node), PR [\#4720](https://github.com/nymtech/nym/pull/4720) +* [Add manual IPv6 ifup/down network configuration](https://nymtech.net/operators/troubleshooting/vps-isp.html#network-configuration), PR [\#4651](https://github.com/nymtech/nym/pull/4651) +* [Extend ISP list](https://nymtech.net/operators/legal/isp-list.html) +* [Add SSL cert bot block to WSS setup](https://nymtech.net/operators/nodes/proxy-configuration.html#web-secure-socket-setup), [PR here](https://github.com/nymtech/nym/commits/develop/): WSS setup fully works! +* [Correct `HTTP API port` in bonding page](https://nymtech.net/operators/nodes/bonding.html#bond-via-the-desktop-wallet-recommended) , [PR \#4707](https://github.com/nymtech/nym/pull/4707): Change `HTTP API port` to `8080` on every `nym-node` by opening `config.toml` and making sure that your binding addresses and ports are as in the block below. Then go to desktop wallet and open the box called `Show advanced options` and make sure all your ports are set correctly (usually this means to change `HTTP api port` to `8080` for `mixnode` mode). + +```toml +[host] +public_ips = [ +'' +] + +[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' +``` + + +* [Comment our deprecated node pages in `/docs`](https://github.com/nymtech/nym/pull/4727) + - Fixes [issue \#4632](https://github.com/nymtech/nym/issues/4632) +* [Remove redundant syntax from the setup guide](https://github.com/nymtech/nym/pull/4682) + +--- + +## `v2024.7-doubledecker` + +- [Release binaries](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.7-doubledecker) +- [Release CHANGELOG.md](https://github.com/nymtech/nym/blob/nym-binaries-v2024.7-doubledecker/CHANGELOG.md) +- [`nym-node`](nodes/nym-node.mdx) version `1.1.4` + + +- Add an early return in `parse_raw_str_logs` for empty raw log strings. ([#4686]) +- Bump braces from 3.0.2 to 3.0.3 in /wasm/mix-fetch/internal-dev ([#4672]) +- add expiry returned on import ([#4670]) +- [bugfix] missing rustls feature ([#4666]) +- Bump ws from 8.13.0 to 8.17.1 in /wasm/client/internal-dev-node ([#4665]) +- Bump braces from 3.0.2 to 3.0.3 in /clients/native/examples/js-examples/websocket ([#4663]) +- Bump ws from 8.14.2 to 8.17.1 in /sdk/typescript/packages/nodejs-client ([#4662]) +- Update setup.md ([#4661]) +- New clippy lints ([#4660]) +- Bump braces from 3.0.2 to 3.0.3 in /nym-api/tests ([#4659]) +- Bump braces from 3.0.2 to 3.0.3 in /docker/typescript_client/upload_contract ([#4658]) +- Update vps-setup.md ([#4656]) +- Update configuration.md ([#4655]) +- Remove old PR template ([#4639]) + +[#4686]: https://github.com/nymtech/nym/pull/4686 +[#4672]: https://github.com/nymtech/nym/pull/4672 +[#4670]: https://github.com/nymtech/nym/pull/4670 +[#4666]: https://github.com/nymtech/nym/pull/4666 +[#4665]: https://github.com/nymtech/nym/pull/4665 +[#4663]: https://github.com/nymtech/nym/pull/4663 +[#4662]: https://github.com/nymtech/nym/pull/4662 +[#4661]: https://github.com/nymtech/nym/pull/4661 +[#4660]: https://github.com/nymtech/nym/pull/4660 +[#4659]: https://github.com/nymtech/nym/pull/4659 +[#4658]: https://github.com/nymtech/nym/pull/4658 +[#4656]: https://github.com/nymtech/nym/pull/4656 +[#4655]: https://github.com/nymtech/nym/pull/4655 +[#4639]: https://github.com/nymtech/nym/pull/4639 + + +### Features + +- [Remove the `nym-mixnode` and `nym-gateway` binaries from the CI upload builds action](https://github.com/nymtech/nym/pull/4693) +- [Add an early return in `parse_raw_str_logs` for empty raw log strings.](https://github.com/nymtech/nym/pull/4686): This accommodates for the v50 + chain upgrade. +- [Bump braces from `3.0.2` to `3.0.3` in `/wasm/mix-fetch/internal-dev`](https://github.com/nymtech/nym/pull/4672): Version update of [braces](https://github.com/micromatch/braces) +- [Bump braces from `3.0.2` to `3.0.3` in `/clients/native/examples/js-examples/websocket`](https://github.com/nymtech/nym/pull/4663): Version update of [braces](https://github.com/micromatch/braces). +- [Bump braces from `3.0.2` to `3.0.3` in `/nym-api/tests`](https://github.com/nymtech/nym/pull/4659): Version update of [braces](https://github.com/micromatch/braces). +- [Bump braces from `3.0.2` to `3.0.3` in `/docker/typescript_client/upload_contract`](https://github.com/nymtech/nym/pull/4658): Version update of [braces](https://github.com/micromatch/braces). +- [Bump `ws` from `8.13.0` to `8.17.1` in `/wasm/client/internal-dev-node`](https://github.com/nymtech/nym/pull/4665): Version update of [`ws`](https://github.com/websockets/ws). +- [Bump `ws` from `8.14.2` to `8.17.1` in `/sdk/typescript/packages/nodejs-client`](https://github.com/nymtech/nym/pull/4662): Version update of [`ws`](https://github.com/websockets/ws). +- [Add expiry returned on import](https://github.com/nymtech/nym/pull/4670): We need to return the expiry on import for desktop daemon `nym-vpnd`. +- [New clippy lints](https://github.com/nymtech/nym/pull/4660) +- [Remove `nym-connect` directory](https://github.com/nymtech/nym/pull/4643): Since the `nym-vpn` has superseded `nym-connect`, remove `nym-connect` from the repo. +- [Remove old PR template](https://github.com/nymtech/nym/pull/4639) + +### Bugfix + +- [missing rustls feature](https://github.com/nymtech/nym/pull/4666): It just happens to work due to `feature-unification`. It should probably have this feature inbuild. + +### Operators Guide updates + +- [Node description guide](nodes/configuration.md#node-description): Steps to add self-description to `nym-node` and query this information from any node. +- [Web Secure Socket (WSS) guide and reverse proxy update](nodes/proxy-configuration.md), PR [here](https://github.com/nymtech/nym/pull/4694): A guide to setup `nym-node` in a secure fashion, using WSS via Nginx and Certbot. Landing page (reversed proxy) is updated and simplified. + +--- + +## `v2024.6-chomp` + +- [Release binaries](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.6-chomp) +- [Release CHANGELOG.md](https://github.com/nymtech/nym/blob/nym-binaries-v2024.6-chomp/CHANGELOG.md) +- [`nym-node`](nodes/nym-node.mdx) version `1.1.3` +- Standalone `nym-gateway` and `nym-mixnode` binaries are no longer released + + +- Remove additional code as part of Ephemera Purge and SP and contracts ([#4650]) +- bugfix: make sure nym-api can handle non-cw2 (or without detailed build info) compliant contracts ([#4648]) +- introduced a flag to accept toc and exposed it via self-described API ([#4647]) +- bugfix: make sure to return an error on invalid public ip ([#4646]) +- Add ci check for PR having an assigned milestone ([#4644]) +- Removed ephemera code ([#4642]) +- Remove stale peers ([#4640]) +- Add generic wg private network routing ([#4636]) +- Feature/new node endpoints ([#4635]) +- standarised ContractBuildInformation and added it to all contracts ([#4631]) +- validate nym-node public ips on startup ([#4630]) +- Bump defguard wg ([#4625]) +- Fix cargo warnings ([#4624]) +- Update kernel peers on peer modification ([#4622]) +- Handle v6 and v7 requests in the IPR, but reply with v6 ([#4620]) +- fix typo ([#4619]) +- Update crypto and rand crates ([#4607]) +- Purge name service and service provider directory contracts ([#4603]) + +[#4650]: https://github.com/nymtech/nym/pull/4650 +[#4648]: https://github.com/nymtech/nym/pull/4648 +[#4647]: https://github.com/nymtech/nym/pull/4647 +[#4646]: https://github.com/nymtech/nym/pull/4646 +[#4644]: https://github.com/nymtech/nym/pull/4644 +[#4642]: https://github.com/nymtech/nym/pull/4642 +[#4640]: https://github.com/nymtech/nym/pull/4640 +[#4636]: https://github.com/nymtech/nym/pull/4636 +[#4635]: https://github.com/nymtech/nym/pull/4635 +[#4631]: https://github.com/nymtech/nym/pull/4631 +[#4630]: https://github.com/nymtech/nym/pull/4630 +[#4625]: https://github.com/nymtech/nym/pull/4625 +[#4624]: https://github.com/nymtech/nym/pull/4624 +[#4622]: https://github.com/nymtech/nym/pull/4622 +[#4620]: https://github.com/nymtech/nym/pull/4620 +[#4619]: https://github.com/nymtech/nym/pull/4619 +[#4607]: https://github.com/nymtech/nym/pull/4607 +[#4603]: https://github.com/nymtech/nym/pull/4603 + + +### Features + +- [Make embedded NR/IPR ignore performance of the Gateway](https://github.com/nymtech/nym/pull/4671): fixes bug in relation to scoring issue on nym-nodes operating as exit gateways failing to come online. +- [Introduce a flag to accept Operators Terms and Conditions and exposed it via self-described API](https://github.com/nymtech/nym/pull/4647) +}> +- Verify that the `execute` function correctly checks if the `accept_operator_terms` flag is set. +- Test that a warning is displayed when the `accept_operator_terms` flag is not set. +- Confirm that the `NymNode` instance is initialized with `with_accepted_toc(accepted_toc)` when the flag is set. +- Apply the `--accept-toc` flag in the service and confirmed the change by running: +```sh +curl -s -X 'GET' 'http://18.171.251.41:8080/api/v1/auxiliary-details?output=json' -H 'accept: application/json' | jq .accepted_toc +``` +- Verify that the output is `true`. + + +- [Rename 'accept-toc' flag and fields into explicit 'accept-operator-terms-and-conditions'](https://github.com/nymtech/nym/pull/4654): makes the `accept-toc` flag more explicit. +- [Validate nym-node public ips on startup](https://github.com/nymtech/nym/pull/4630): makes sure `nym-node` is not run with an empty `public_ips` and that they do not correspond to common misconfigurations like `127.0.0.1` or `0.0.0.0` unless run with `--local` flag. +}> +- Use the latest release/chomp binary with nym-node and input a dodgy ip + +image + +- Validation: + +image + +When restarting the node it complains within the service launch file + + +- [New node endpoints](https://github.com/nymtech/nym/pull/4635): introduces new endpoints on nym-api (and creates scaffolding for additional ones) for providing **unfiltered** network topology alongside performance score of all nodes. + - `NymApiTopologyProvider` got modified to use those endpoints alongside (configurable) filtering of nodes with score \< 50% (like our current blacklist) + - Old clients should work as before as no existing endpoint got removed +}> +- Validate that the `skimmed` endpoints are working, keeping in mind that they are unstable. The *full-fat* and *semi-skimmed* have not yet been implemented. + + +- [Remove stale peers](https://github.com/nymtech/nym/pull/4640) +- [Removed ephemera code](https://github.com/nymtech/nym/pull/4642) +}> +- Check references to everything named SP and Ephemera and removed any additional references + + +- [Remove additional code as part of Ephemera Purge and SP and contracts](https://github.com/nymtech/nym/pull/4650): in line with [#4642](https://github.com/nymtech/nym/pull/4642) and [#4603](https://github.com/nymtech/nym/pull/4603) +}> +- Check references to everything named SP and Ephemera and removed any additional references + + +- [Add ci check for PR having an assigned milestone](https://github.com/nymtech/nym/pull/4644): add a CI check for checking that a PR is assigned to a milestone. Can bypassed the check by adding a `no-milestone` label to a PR +}> +- CI complains if no milestone is associated with the an issue. + + +- [Bump defguard wireguard](https://github.com/nymtech/nym/pull/4625) +- [Add generic wireguard private network routing](https://github.com/nymtech/nym/pull/4636): as defguard wireguard only allows for peer routing modifications, we will configure the entire wireguard private network to be routed to the wg device. Configuring per peer is also not desirable, as the interface doesn't allow removing routes, so unused ip routing won't be cleaned until gateway restart (and it would also pollute to routing table with a lot of rules when many peers are added). +}> +- This is a part of a bigger ticket, but initial testing has proven to shown that launching nym-nodes (entry and exit gateways) in WG enable mode to be working + +*QA will use this template for the other related WG tickets in this release milestone.* + +- [Standarise `ContractBuildInformation` and add it to all contracts](https://github.com/nymtech/nym/pull/4631): Similarly to `cw2`, we're now saving `ContractBuildInformation` under a constant storage key, i.e. `b"contract_build_info"` that standarises the retrieval by nym-api. + - Also each of our contracts now saves and updates that information upon init and migration. +}> +- Use the latest release/chomp contracts and deploy these to QA +- Use the `nym-api` to query for the results of these new contracts + +```sh + curl -X 'GET' \ + 'https://qa-nym-api.qa.nymte.ch/api/v1/network/nym-contracts-detailed' \ + -H 'accept: application/json' +``` + +- It returns a detailed view of the contracts and which branch they were built from, alongside rust versions and so forth. +image + + +- [Update kernel peers on peer modification](https://github.com/nymtech/nym/pull/4622): +}> +- This is a part of a bigger ticket, but initial testing has proven to shown that launching nym-nodes (entry and exit gateways) in WG enable mode to be working. +*QA will use this template for the other related WG tickets in this release milestone.* + + +- [Handle v6 and v7 requests in the IPR, but reply with v6](https://github.com/nymtech/nym/pull/4620): teach the IPR to read both v6 and v7 requests, but always reply with v6. This is to prepare for bumping to v7 and signed connect/disconnect messages. Follow up PRs will add + - Verify signature + - Send v7 in client with signatures included +- [Purge name service and service provider directory contracts](https://github.com/nymtech/nym/pull/4603): this is a compiler assisted purge of the `nym-name-service` and `nym-service-provider-directory` contracts that were never deployed on mainnet, and will anyhow be superseded by the new mixnode directory that is being worked on. +}> +It works insofar that it compiles, we need to deploy and test this on non-mainnet before merging in + +- Purge `nym-name-service` contract +- Purge `nym-name-service-common` +- Purge `nym-service-provider-directory` contract +- Purge `nym-service-provider-directory-common` +- Remove everywhere name-service contract is used +- Remove everywhere sp contract is used + +Performed: +- Check references to everything named SP and Ephemera and removed any additional references + + +### Crypto + +- [Update crypto and rand crates](https://github.com/nymtech/nym/pull/4607): Update sphinx crate to `0.1.1` along with 25519 crates and `rand` crates +}> +This PR contains a test failure due to the update [here](https://github.com/nymtech/nym/blob/b4a0487a41375167b2f481c00917b957b9f89789/common/crypto/src/asymmetric/encryption/mod.rs#L353-L358) + +- This is due a change in `x25519-dalek` from `1.1.1` to `2`. +- Crypto operations should be identical, but the byte representation has changed (sphinx clamps at creation, x25519 clamps at use). This cannot be changed in the sphinx crate without breaking changes. +- There is a good chance that this failure doesn't impact anything else, but it has to be tested to see. +- A mix of old and new clients with a mix of old and new mixnodes should do + + +### Bugfix +- [Make sure nym-api can handle non-cw2 (or without detailed build info) compliant contracts](https://github.com/nymtech/nym/pull/4648): fixes the issue (even if some contracts aren't uploaded on chain it doesn't prohibit the api from working - caveat, the essential vesting and mixnet contract are required) +}> +- Use the latest release/chomp contracts and deploy these to QA +- If the contract was not found, the API would complain of invalid contracts, thus not starting the rest of the operations of the API (network monitor / rewarding etc) + + `Jun 11 16:27:34 qa-v2-nym-api bash[1352642]: 2024-06-11T16:27:34.551Z ERROR nym_api::nym_contract_cache::cache::refresher - Failed to refresh validator cache - Abci query failed with code 6 - address n14y2x8a60knc5jjfeztt84kw8x8l5pwdgnqg256v0p9v4p7t2q6eswxyusw: no such contract: unknown request` + + +- [Make sure to return an error on `nym-node` invalid public ip](https://github.com/nymtech/nym/pull/4646): bugfix for [#4630](https://github.com/nymtech/nym/pull/4630) that interestingly hasn't been detected by clippy. +}> +- Use the latest release/chomp binary with nym-node and input a dodgy ip +image + +- Validation: +image + + +- [Extend the return error when connecting to gateway fails](https://github.com/nymtech/nym/pull/4626) +}> +- Verify that the `establish_connection` function correctly attempts to establish a connection to the gateway. +- Test error handling for `NetworkConnectionFailed` by simulating a failed connection. +- Ensure that the `NetworkConnectionFailed` error includes the `address` and `source` details as expected. +- Checked that `SocketState::Available` is set correctly when a connection is successfully established. + + +- [Fix Cargo warnings](https://github.com/nymtech/nym/pull/4624): On every cargo command we have the set warnings: + +warning: /home/alice/src/nym/nym/common/dkg/Cargo.toml: `default-features` is ignored for bls12_381, since `default-features` was not specified for `workspace.dependencies.bls12_381`, this could become a hard error in the future warning: /home/alice/src/nym/nym/common/dkg/Cargo.toml: `default-features` is ignored for ff, since `default-features` was not specified for `workspace.dependencies.ff`, this could become a hard error in the future warning: /home/alice/src/nym/nym/common/dkg/Cargo.toml: `default-features` is ignored for group, since `default-features` was not specified for `workspace.dependencies.group`, this could become a hard error in the future warning: /home/alice/src/nym/nym/common/client-libs/validator-client/Cargo.toml: `default-features` is ignored for bip32, since `default-features` was not specified for `workspace.dependencies.bip32`, this could become a hard error in the future warning: /home/alice/src/nym/nym/common/client-libs/validator-client/Cargo.toml: `default-features` is ignored for prost, since `default-features` was not specified for `workspace.dependencies.prost`, this could become a hard error in the future warning: /home/alice/src/nym/nym/common/credentials-interface/Cargo.toml: `default-features` is ignored for bls12_381, since `default-features` was not specified for `workspace.dependencies.bls12_381`, this could become a hard error in the future warning: /home/alice/src/nym/nym/common/credentials/Cargo.toml: `default-features` is ignored for bls12_381, since `default-features` was not specified for `workspace.dependencies.bls12_381`, this could become a hard error in the future warning: /home/alice/src/nym/nym/common/nymcoconut/Cargo.toml: `default-features` is ignored for bls12_381, since `default-features` was not specified for `workspace.dependencies.bls12_381`, this could become a hard error in the future warning: /home/alice/src/nym/nym/common/nymcoconut/Cargo.toml: `default-features` is ignored for ff, since `default-features` was not specified for `workspace.dependencies.ff`, this could become a hard error in the future warning: /home/alice/src/nym/nym/common/nymcoconut/Cargo.toml: `default-features` is ignored for group, since `default-features` was not specified for `workspace.dependencies.group`, this could become a hard error in the future. + + - This PR adds `default-features = false` to the workspace dependencies to fix these. An alternative way would be to remove `default-features = false` in the crates, but we assume these were put there for a good reason. Also we might have other crates outside of the main workspace that depends on these crates having default features disabled. + - We also have the warning `warning: profile package spec nym-wasm-sdk in profile release did not match any packages` which we fix by commenting out the profile settings, since the crate is currently commented out in the workspace crate list. +}> +- All binaries have been built and deployed from this branch and no issues have surfaced. + + +### Operators Guide updates + +- [New Release Cycle](release-cycle.md) introduced: a transparent release flow, including: + - New environments + - Stable testnet + - [Testnet token faucet](https://nymtech.net/operators/sandbox.html#sandbox-token-faucet) + - Flow [chart](release-cycle.md#release-flow) +- [Sandbox testnet](sandbox.md) guide: teaching Nym node operators how to run their nodes in Nym Sandbox testnet environment. +- [Terms & Conditions flag](nodes/setup.md#terms--conditions) +- [Node API Check CLI](testing/node-api-check.md) +- [Pruning VPS `syslog` scripts](troubleshooting/vps-isp.md#pruning-logs) +- [Black-xit: Exiting the blacklist](troubleshooting/nodes.md#my-gateway-is-blacklisted) + +--- + +## `v2024.5-ragusa` + +- [Release binaries](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.5-ragusa) +- [Release CHANGELOG.md](https://github.com/nymtech/nym/blob/nym-binaries-v2024.5-ragusa/CHANGELOG.md) +- [`nym-node`](nodes/nym-node.mdx) version `1.1.2` + +- Feature/nym node api location ([#4605]) +- Add optional signature to IPR request/response ([#4604]) +- Feature/unstable tested nodes endpoint ([#4601]) +- nym-api: make report/avg_uptime endpoints ignore blacklist ([#4599]) +- removed blocking for coconut in the final epoch state ([#4598]) +- allow using explicit admin address for issuing freepasses ([#4595]) +- Use rfc3339 for last_polled in described nym-api endpoint ([#4591]) +- Explicitly handle constraint unique violation when importing credential ([#4588]) +- [bugfix] noop flag for nym-api for nymvisor compatibility ([#4586]) +- Chore/additional helpers ([#4585]) +- Feature/wasm coconut ([#4584]) +- upgraded axum and related deps to the most recent version ([#4573]) +- Feature/nyxd scraper pruning ([#4564]) +- Run cargo autoinherit on the main workspace ([#4553]) +- Add rustls-tls to reqwest in validator-client ([#4552]) +- Feature/rewarder voucher issuance ([#4548]) + +[#4605]: https://github.com/nymtech/nym/pull/4605 +[#4604]: https://github.com/nymtech/nym/pull/4604 +[#4601]: https://github.com/nymtech/nym/pull/4601 +[#4599]: https://github.com/nymtech/nym/pull/4599 +[#4598]: https://github.com/nymtech/nym/pull/4598 +[#4595]: https://github.com/nymtech/nym/pull/4595 +[#4591]: https://github.com/nymtech/nym/pull/4591 +[#4588]: https://github.com/nymtech/nym/pull/4588 +[#4586]: https://github.com/nymtech/nym/pull/4586 +[#4585]: https://github.com/nymtech/nym/pull/4585 +[#4584]: https://github.com/nymtech/nym/pull/4584 +[#4573]: https://github.com/nymtech/nym/pull/4573 +[#4564]: https://github.com/nymtech/nym/pull/4564 +[#4553]: https://github.com/nymtech/nym/pull/4553 +[#4552]: https://github.com/nymtech/nym/pull/4552 +[#4548]: https://github.com/nymtech/nym/pull/4548 + + +### Features + +- New `nym-node` API endpoint `/api/v1/auxiliary-details`: to expose any additional information. Currently it's just the location. `nym-api` will then query all nodes for that information and put it in the `self-described` endpoint. +- New `nym-node` location available - use one of the three options to add this to your node config: + 1. Update the `location` field under `[host]` section of `config.toml` + 2. For new nodes: Initialise the node with `--location` flag, where they have to provide the country info. Either full country name (e.g. 'Jamaica'), two-letter alpha2 (e.g. 'JM'), three-letter alpha3 (e.g. 'JAM') or three-digit numeric-3 (e.g. '388') can be provided. + 3. For existing nodes: It's also possible to use exactly the same `--location` argument as above, but make sure to also provide `--write-changes` (or `-w`) flag to persist those changes! +- [Feature/unstable tested nodes endpoint](https://github.com/nymtech/nym/pull/4601): Adds new data structures (`TestNode`, `TestRoute`, `PartialTestResult`) to handle test results for Mixnodes and Gateways. With the inclusion of pagination to handle large API responses efficiently. Lastly, introducing a new route with the tag `unstable` thus meaning not to be consumed without a user risk, prefixes in endpoints with unstable, are what it says on the tin. +}> +- Deploy new api changes to sandbox environment +- Ensure current operations are transactional and standed operations are working +- Run a script to ensure that the new endpoints are working as expected with pagination + +image + + + +- [`nym-api`: make report/avg_uptime endpoints ignore blacklist](https://github.com/nymtech/nym/pull/4599): When querying for node specific data, it's no longer going to go through the entire list of all cached (and filtered nodes) to find it; instead it will attempt to retrieve a single unfiltered entry. +}> +- Build the project and deployed it in a test environment. +- Manually test API endpoints for mixnode and gateway data. +- Verify that the endpoints return the expected data and handle blacklists correctly. +- API performance improved due to the efficient `HashMap` lookups +- Data in mainnet will differ from test nets due to the increased amount of gateways and mixnodes in that environment +- Test standard uptime routes: +```sh +curl -X 'GET' 'https://validator.nymtech.net/api/v1/status/gateway/Fo4f4SQLdoyoGkFae5TpVhRVoXCF8UiypLVGtGjujVPf/avg_uptime' -H 'accept: application/json' +``` + + +- [Use rfc3339 for last_polled in described nym-api endpoint](https://github.com/nymtech/nym/pull/4591): Fix issue where the validator-client can't parse the nym-api response for the described endpoint, in particular the `latest_polled` field that was recently added, by making the field use `rfc3339` + - **Note:** This will require upgrading `nym-api` and everything that depends on the described endpoint. +}> +- Update a `nym-api` to the binary built from this branch, then restart the api +- Check the `journalctl` for error messages +- Connected via client and could not see the error messages, this is backwards compatible +- Local testing using sdk examples: +```sh +cd /nym/sdk/rust/nym-sdk +cargo run --example simple + +# outcome +thread 'main' panicked at sdk/rust/nym-sdk/examples/simple.rs:9:64: +called Result::unwrap() on an Err value: ClientCoreError(ValidatorClientError(NymAPIError { source: ReqwestClientError { source: reqwest::Error { kind: Request, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, +``` + + +- [Upgrade `axum` and related dependencies to the most recent version](https://github.com/nymtech/nym/pull/4573) +- [Run cargo autoinherit on the main workspace](https://github.com/nymtech/nym/pull/4553): Move several dependencies to the workspace level using cargo autoinherit, to make it easier to keep our dependencies up to date. + - Run cargo autoinherit in the root + - Merge in the new workspace deps in the main list + - We made sure to not mix in other changes as well - all features flags for all crates should be the same as before +}> +- Run `cargo autoinherit` in the root directory to move dependencies to the workspace level +- Merge the new workspace dependencies into the main list +- Ensure no other changes were mixed in during the process +- Verify that all feature flags for all crates remained the same as before +- Build all the binaries from this branch to confirm successful compilation +- Deploy the built binaries across different environments to ensure there were no issues + + +- [Add rustls-tls to reqwest in validator-client](https://github.com/nymtech/nym/pull/4552): An attempt to make possible to end up in a situation where use use the validator-client but without functioning TLS support. For the monorepo this is masked by cargo feature unification, but becomes a problem for outside consumers, as as been noticed in many of the vpn client implementations. + - In `validator-client`: `reqwest`, enable `rustls-tls` for `non-wasm32` + - In `client-core`: Use default features enabled for `non-wasm32` and switch to `webpki` roots, since that's what we're using with `reqwest` anyway + - In `gateway-client`: Switch to `webpki` roots, since that's what we're using with `reqwest` anyway + +#### Crypto + +- [Remove blocking for coconut in the final epoch state](https://github.com/nymtech/nym/pull/4598) +}> +- Build the project to ensure no compilation errors +- Run tests to verify the functionality of the `issue_credential` function +- Execute integration tests to check the behaviour during an epoch transition. + + +- [Allow using explicit admin address for issuing freepasses](https://github.com/nymtech/nym/pull/4595) +- [Explicitly handle constraint unique violation when importing credential](https://github.com/nymtech/nym/pull/4588): Add a strong type for when a duplicate credential is imported so the vpn lib can handle this. +- [Feature/wasm coconut](https://github.com/nymtech/nym/pull/4584): This pull request requires [\#4585](https://github.com/nymtech/nym/pull/4585) to be merged first +- [Feature/nyxd scraper pruning](https://github.com/nymtech/nym/pull/4564): This PR introduces storage pruning to `nyxd` scraper which is then used by the validators rewarder. +}> +- Add a `main.rs` file in the `nyxd` scraper dir, underneath `lib.rs`, amend `config.pruning_options.validate()?;` to be `let _ = config.pruning_options.validate();` in the mod.rs file +- Test the different variations of `pruning_options`: + - Check the *default* option: `pruning_options: PruningOptions::default()` + - Check the *nothing* option: `pruning_options: PruningOptions::nothing()` + - Check the *custom* option, example: `pruning_options: PruningOptions { keep_recent: (500), interval: (10), strategy: (PruningStrategy::Custom) }` + - Check the pruning *in real life* for the validator rewarder +- Validate that the database table `blocks` was being updated accordingly + + +- [Feature/rewarder voucher issuance](https://github.com/nymtech/nym/pull/4548) + - Introduces signature checks on issued credential data + - Stores evidence of any failures/malicious behaviour in the internal db + +### Bugfix + +- [`noop` flag for `nym-api` for `nymvisor` compatibility](https://github.com/nymtech/nym/pull/4586) + - The application starts correctly and logs the starting message + - The `--no_banner` flag works as intended, providing compatibility with `nymvisor` +}> +- Build the project to ensure no compilation errors +- Run the binary with different command-line arguments to verify the CLI functionality +- Test with and without the `--no_banner` flag to ensure compatibility and expected behavior +- Verify logging setup and configuration file parsing + + +### Operators Guide updates + +- [`nym-gateway-probe`](testing/gateway-probe.md): A CLI tool to check in-real-time networking status of any Gateway locally. +- [Where to host your `nym-node`?](legal/isp-list.md): A list of Internet Service Providers (ISPs) by Nym Operators community. We invite all operators to add their experiences with different ISPs to strengthen the community knowledge and Nym mixnet performance. +- Make sure you run `nym-node` with `--wireguard-enabled false` and add a location description to your `config.toml`, both documented in [`nym-node` setup manual](nodes/setup.md#mode-exit-gateway). + + +--- + +## `v2024.4-nutella` + +- [Merged PRs](https://github.com/nymtech/nym/milestone/59?closed=1) +- [`nym-node`](nodes/nym-node.mdx) version `1.1.1` +- This release also contains: `nym-gateway` and `nym-network-requester` binaries +- core improvements on nym-node configuration +- Nym wallet changes: + - Adding `nym-node` command to bonding screens + - Fixed the delegation issues with fixing RPC +- [Network configuration](nodes/configuration.md#connectivity-test-and-configuration) section updates, in particular for `--mode mixnode` operators +- [VPS IPv6 troubleshooting](troubleshooting/vps-isp.md#ipv6-troubleshooting) updates + + +--- + +## `v2024.3-eclipse` + +- Release [Changelog.md](https://github.com/nymtech/nym/blob/nym-binaries-v2024.3-eclipse/CHANGELOG.md) +- [`nym-node`](nodes/nym-node.mdx) initial release +- New tool for monitoring Gateways performance [harbourmaster.nymtech.net](https://harbourmaster.nymtech.net) +- New versioning `1.1.0+nymnode` mainly for internal migration testing, not essential for operational use. We aim to correct this in a future release to ensure mixnodes feature correctly in the main API +- New [VPS specs & configuration](nodes/vps-setup.md) page +- New [configuration page](nodes/configuration.md) with [connectivity setup guide](nodes/configuration.md#connectivity-test-and-configuration) - a new requirement for `exit-gateway` +- API endpoints redirection: Nym-mixnode and nym-gateway endpoints will eventually be deprecated; due to this, their endpoints will be redirected to new routes once the `nym-node` has been migrated and is running + +**API endpoints redirection** + +| Previous endpoint | New endpoint | +| --- | --- | +| `http://:8000/stats` | `http://:8000/api/v1/metrics/mixing` | +| `http://:8000/hardware` | `http://:8000/api/v1/system-info` | +| `http://:8000/description` | `http://:8000/api/v1/description` | diff --git a/documentation/docs/pages/operators/community-counsel/isp-list.mdx b/documentation/docs/pages/operators/community-counsel/isp-list.mdx index f78f47c0e8..e3affcaabc 100644 --- a/documentation/docs/pages/operators/community-counsel/isp-list.mdx +++ b/documentation/docs/pages/operators/community-counsel/isp-list.mdx @@ -1,4 +1,6 @@ import { Callout } from 'nextra/components'; +import IspTable from 'components/outputs/csv2md-outputs/isp-sheet.md'; + # Where to host your `nym-node`? @@ -16,6 +18,4 @@ While we trust that Nym node operators are honest, we would like to ask everyone To edit or add information to the ISP list, make changes to the csv file located [here](https://github.com/nymtech/nym/blob/develop/documentation/docs/data/csv/isp-sheet.csv) and submit your edits as a pull request according to [this guide](add-content.mdx). -``` - -``` + diff --git a/documentation/docs/pages/operators/community-counsel/landing-pages.mdx b/documentation/docs/pages/operators/community-counsel/landing-pages.mdx index 9a1311a6ae..bdc65c3222 100644 --- a/documentation/docs/pages/operators/community-counsel/landing-pages.mdx +++ b/documentation/docs/pages/operators/community-counsel/landing-pages.mdx @@ -10,4 +10,4 @@ The entire content of this page is under [Creative Commons Attribution 4.0 Inter Exit Gateway landing page is a great and transparent way to prevent possible troubles by providing people with basic facts, links to laws and regulations on a given topic as well as operator's contact info. To inspire each other we share some examples how Nym community handled this issue below. -Initiated by an amazing pull request from Avril 14th we made a complete guide to setup landing page behind [reverse proxy and Web Secure Socket](../nodes/nym-node/proxy-configuration.mdx) for Nym Nodes. +Initiated by an amazing pull request from Avril 14th we made a complete guide to setup landing page behind [reverse proxy and Web Secure Socket](../nodes/nym-node/configuration/proxy-configuration.mdx) for Nym Nodes. diff --git a/documentation/docs/pages/operators/introduction.mdx b/documentation/docs/pages/operators/introduction.mdx index 4ca8238ad8..90edc25f5d 100644 --- a/documentation/docs/pages/operators/introduction.mdx +++ b/documentation/docs/pages/operators/introduction.mdx @@ -28,10 +28,10 @@ If you want to dive deeper into Nym's architecture, clients, nodes, and SDK exam **Node setup and usage guides:** -* [Nym Node](nodes/nym-node.mdx) -* [Nymvisor](nodes/nymvisor-upgrade.mdx) +* [Nym Node](nodes/nym-node/nym-node.mdx) +* [Nymvisor](nodes/maintenance/nymvisor-upgrade.mdx) * [Validators](nodes/validator-setup.mdx) -* [Nym API Setup](nodes/nym-api.mdx) +* [Nym API Setup](nodes/validator-setup/nym-api.mdx) **Maintenance, troubleshooting and FAQ** @@ -44,3 +44,7 @@ If you want to dive deeper into Nym's architecture, clients, nodes, and SDK exam * [Exit Gateway](community-counsel/exit-gateway.mdx) * [Community Counsel](community-counsel.mdx) * [How to Add Info](community-counsel/add-content.mdx) + +**Archive** + +*[FAQ: Project Smoosh](archive/faq/smoosh-faq.mdx) diff --git a/documentation/docs/pages/operators/nodes/maintenance.mdx b/documentation/docs/pages/operators/nodes/maintenance.mdx index 0cc2b99a5c..fa686f906c 100644 --- a/documentation/docs/pages/operators/nodes/maintenance.mdx +++ b/documentation/docs/pages/operators/nodes/maintenance.mdx @@ -104,7 +104,7 @@ Anything can happen to the server on which your node is running. To back up your 1. Node keys to initialise the same node on a new VPS 2. Access to the bonding Nym account (wallet seeds) to edit the IP on smart contract -Assuming that everyone access their wallets from local machine and does *not* store their seeds on VPS, point 2. should be a given. +Assuming that everyone access their wallets from local machine and does *not* store their seeds on VPS, point 2. should be a given. To backup your `nym-node` keys and configuration in the easiest way possible, copy the entire config directory `.nym` from your VPS to your local desktop, using a special copy command `scp`: @@ -220,7 +220,7 @@ scp -r -3 @:/etc/systemd/system/nym-node. Local node identifier, denoted as `` accross the documentation (not the identity key) is a name chosen by operators which defines where the nodes configuration data will be stored, where the ID determines the path to `~/.nym/nym-nodes//`. This ID is never shared on the network. -When running a [`nym-node`](nym-nodes/nym-node.md), a local identifier specified with a flag `--ID ` is no longer necessary. Nodes without a specified ID will be assigned a default ID `default-nym-node`. This streamlines node management, particularly for operators handling multiple nodes via ansible and other automation scripts, as all data is stored at `~/.nym/nym-nodes/default-nym-node`. +When running a [`nym-node`](nym-node/nym-node.mdx), a local identifier specified with a flag `--ID ` is no longer necessary. Nodes without a specified ID will be assigned a default ID `default-nym-node`. This streamlines node management, particularly for operators handling multiple nodes via ansible and other automation scripts, as all data is stored at `~/.nym/nym-nodes/default-nym-node`. If you already operate a `nym-node` and wish to change the local ID to `default-nym-node` or anything else, follow the steps below to do so. @@ -302,4 +302,3 @@ All validator-specific port configuration can be found in `$HOME/.nymd/config/co | 1317 | REST API server endpoint | | 26656 | Listen for incoming peer connections | | 26660 | Listen for Prometheus connections | - diff --git a/documentation/docs/pages/operators/nodes/maintenance/nymvisor-upgrade.mdx b/documentation/docs/pages/operators/nodes/maintenance/nymvisor-upgrade.mdx index 33bac5ffca..5fb4d2408e 100644 --- a/documentation/docs/pages/operators/nodes/maintenance/nymvisor-upgrade.mdx +++ b/documentation/docs/pages/operators/nodes/maintenance/nymvisor-upgrade.mdx @@ -2,6 +2,16 @@ import { Tabs } from 'nextra/components'; import { Callout } from 'nextra/components'; import { VarInfo } from 'components/variable-info.tsx'; import { Steps } from 'nextra/components'; +import NymvisorBuildInfo from 'components/outputs/command-outputs/nymvisor-build-info.md'; +import NymvisorHelp from 'components/outputs/command-outputs/nymvisor-help.md'; +import NymvisorInitDaemon from 'components/outputs/command-outputs/nymvisor-init-daemon.md'; +import { AccordionTemplate } from 'components/accordion-template.tsx'; + + +export const NymvisorInitD = () => ( +
+
+); # Automatic Node Upgrade: Nymvisor Setup & Usage @@ -29,9 +39,8 @@ Nymvisor is an early and experimental software. Users should use it at their own
## Current version -``` - -``` + + ## Preliminary steps @@ -53,9 +62,7 @@ You can check that your binaries are properly compiled with: Which should return a list of all available commands. -``` - -``` + You can also check the various arguments required for individual commands with: @@ -75,10 +82,6 @@ Initialise your Nymvisor instance with the following command. You must initialis Where the value of `--daemon-home` might be `~/.nym/nym-nodes/default-nym-node` and `` might be `/home/sakine/nym/target/release/nym-node`, or wherever your node binary is located. -``` - -``` - By default this will create config files at `~/.nym/nymvisors/instances/nym-node-default/config/config.toml` as shown in the console output above. For config options look at the different `--flags` available, or the [environment variables](#environment-variables) section below. ### Running your Nymvisor Instance @@ -89,14 +92,10 @@ The interface to the `nymvisor run ` command is quite simple. Any argument `run` Nymvisor and start your node via the following command. Make sure to stop any existing node before running this command. -``` +```sh ./nymvisor run run --id ``` -``` - -``` - Nymvisor will now manage your node process (for an in-depth overview of this command check the [in-depth command information](./nymvisor-upgrade.md#commands-in-depth) below). It will periodically poll [this endpoint](https://nymtech.net/.wellknown/nym-node/upgrade-info.json) (replace `nym-node` with whatever node you may actually be running via Nymvisor) and check for a new `version` of the binary it is watching. If this exists, it will then, using the information proceed with these steps: diff --git a/documentation/docs/pages/operators/nodes/maintenance/nymvisor-upgrade/nymvisor-configuration.mdx b/documentation/docs/pages/operators/nodes/maintenance/nymvisor-upgrade/nymvisor-configuration.mdx index 20b000959a..3863c379d2 100644 --- a/documentation/docs/pages/operators/nodes/maintenance/nymvisor-upgrade/nymvisor-configuration.mdx +++ b/documentation/docs/pages/operators/nodes/maintenance/nymvisor-upgrade/nymvisor-configuration.mdx @@ -10,7 +10,7 @@ import { Steps } from 'nextra/components'; ## Nymvisor Automation with `systemd` -This section contains guide how to setup `systemd` automation for Nymvisor. If you are looking for other chapters, visit these pages: [VPS setup](../preliminrary-steps/vps-setup.mdx), advanced terminal tools like [tmux and nohup setup](../nym-node/configuration.mdx#vps-setup-and-automation), [`nym-node` automation](../nym-node/configuration.mdx#systemd) or [`validator` automation](../validator-setup/nyx-configuration#automation). +This section contains guide how to setup `systemd` automation for Nymvisor. If you are looking for other chapters, visit these pages: [VPS setup](../../../preliminrary-steps/vps-setup.mdx), advanced terminal tools like [tmux and nohup setup](../../nym-node/configuration.mdx#vps-setup-and-automation), [`nym-node` automation](../../nym-node/configuration.mdx#systemd) or [`validator` automation](../../validator-setup/nyx-configuration#automation). Since you're planning to run your node via a Nymvisor instance, as well as creating a Nymvisor `.service` file, you will also want to **stop any previous node automation process you already have running**. @@ -96,4 +96,3 @@ service nymvisor restart This lets your operating system know it's ok to reload the service configuration and restarts the node in a graceful way. - diff --git a/documentation/docs/pages/operators/nodes/nym-node.mdx b/documentation/docs/pages/operators/nodes/nym-node.mdx index b4454c7777..33ef5ad2e7 100644 --- a/documentation/docs/pages/operators/nodes/nym-node.mdx +++ b/documentation/docs/pages/operators/nodes/nym-node.mdx @@ -5,7 +5,7 @@ import { VarInfo } from 'components/variable-info.tsx' NYM NODE is a tool for running a node within the Nym network. Nym Nodes containing functionality such as `mixnode`, `entry-gateway` and `exit-gateway` are fundamental components of Nym Mixnet architecture. Nym Nodes are ran by decentralised node operators. -To setup any type of Nym Node, start with either building [Nym's platform](../binaries/building-nym.md) from source or download [pre-compiled binaries](../binaries/pre-built-binaries.md) on the [configured server (VPS)](vps-setup.md) where you want to run the node. Your Nym Node will need to be bonded before it can be run. We recommend most users use the [Nym desktop wallet](wallet-preparation.md) for this. +To setup any type of Nym Node, start with either building [Nym's platform](../binaries/building-nym.mdx) from source or download [pre-compiled binaries](../binaries/pre-built-binaries.mdx) on the [configured server (VPS)](preliminary-steps/vps-setup.mdx) where you want to run the node. Your Nym Node will need to be bonded before it can be run. We recommend most users use the [Nym desktop wallet](preliminary-steps/wallet-preparation.mdx) for this. **Follow [preliminary steps](preliminary-steps.mdx) page before you configure and run a `nym-node`!** @@ -13,12 +13,12 @@ To setup any type of Nym Node, start with either building [Nym's platform](../bi Once [VPS and Nym wallet are configured](preliminary-steps.mdx), binaries ready, the operators of `nym-node` need to: -1. **[Setup](nym-nde/setup.mdx) the node** +1. **[Setup](nym-node/setup.mdx) the node** 2. **[Configure](nym-node/configuration.mdx) the node and optionally automation, Wireguard, WSS, reversed proxy ...** 3. **[Run](nym-node/setup.mdx#initialise--run) the node or [the service](nym-node/configuration.md#systemd)** -4. **[Bond](nym-node/bonding.md) the node to the Nym API, using Nym wallet** +4. **[Bond](nym-node/bonding.mdx) the node to the Nym API, using Nym wallet** Make sure to follow the steps thoroughly, in case you find any point difficult don't hesitate to ask in our [Operators channel](https://matrix.to/#/#operators:nymtech.chat). diff --git a/documentation/docs/pages/operators/nodes/nym-node/configuration.mdx b/documentation/docs/pages/operators/nodes/nym-node/configuration.mdx index a6ed80e60d..8709742093 100644 --- a/documentation/docs/pages/operators/nodes/nym-node/configuration.mdx +++ b/documentation/docs/pages/operators/nodes/nym-node/configuration.mdx @@ -1,7 +1,27 @@ import { Callout } from 'nextra/components'; import { Tabs } from 'nextra/components'; import { VarInfo } from 'components/variable-info.tsx'; -import { Steps } from 'nextra/components' +import { Steps } from 'nextra/components'; +import { AccordionTemplate } from 'components/accordion-template.tsx' + +export const ManagerIPOutput = () => ( +
+ Correct ./network_tunnel_manager.sh fetch_and_display_ipv6 output +
+); + +export const ManagerTablesOutput = () => ( +
+ Correct ./network_tunnel_manager.sh check_nymtun_iptables output +
+); + +export const ShowTun = () => ( +
+ Correct ip addr show nymtun0 output +
+); + # Nym Node Configuration @@ -220,7 +240,8 @@ For everyone participating in Delegation Program or Service Grant program, this ### Quick IPv6 Check You can always check IPv6 address and connectivity by using some of these methods: - +
+ ```sh # locally listed IPv6 addresses ip -6 addr @@ -239,6 +260,7 @@ curl -6 https://ipv6.icanhazip.com # using telnet telnet -6 ipv6.telnetmyip.com ``` + Make sure to keep your IPv4 address enabled while setting up IPv6, as the majority of routing goes through that one! @@ -292,13 +314,14 @@ chmod +x network_tunnel_manager.sh && \ ```sh ./network_tunnel_manager.sh fetch_and_display_ipv6 ``` - +
+}> ```sh -# EXPECTED OUTPUT iptables-persistent is already installed. Using IPv6 address: 2001:db8:a160::1/112 #the address will be different for you operation fetch_ipv6_address_nym_tun completed successfully. ``` + ###### 4. Check Nymtun IP tables: @@ -309,8 +332,9 @@ operation fetch_ipv6_address_nym_tun completed successfully. - If there's no process running it wouldn't return anything. - In case you see `nymtun0` but not active, this is probably because you are setting up a new (never bonded) node and not upgrading an existing one. +
+}> ```sh -# EXPECTED OUTPUT iptables-persistent is already installed. network Device: eth0 --------------------------------------- @@ -337,6 +361,7 @@ Chain FORWARD (policy DROP 0 packets, 0 bytes) 0 0 ACCEPT all nymtun0 eth0 ::/0 ::/0 operation check_nymtun_iptables completed successfully. ``` + ###### 5. Apply rules for wireguad routing @@ -356,8 +381,9 @@ operation check_nymtun_iptables completed successfully. ip addr show nymtun0 ``` +
+}> ```sh -# EXPECTED OUTPUT # your addresses will be different 8: nymtun0: mtu 1420 qdisc fq_codel state UNKNOWN group default qlen 500 link/none @@ -368,6 +394,7 @@ ip addr show nymtun0 inet6 fe80::ad08:d167:5700:8c7c/64 scope link stable-privacy valid_lft forever preferred_lft forever` ``` + - Validate your IPv6 and IPv4 networking by running a joke test via Mixnet: ```sh diff --git a/documentation/docs/pages/operators/nodes/nym-node/configuration/proxy-configuration.mdx b/documentation/docs/pages/operators/nodes/nym-node/configuration/proxy-configuration.mdx index 0cc1d83187..1a65b31481 100644 --- a/documentation/docs/pages/operators/nodes/nym-node/configuration/proxy-configuration.mdx +++ b/documentation/docs/pages/operators/nodes/nym-node/configuration/proxy-configuration.mdx @@ -1,7 +1,14 @@ import { Callout } from 'nextra/components'; import { Tabs } from 'nextra/components'; import { VarInfo } from 'components/variable-info.tsx'; -import { Steps } from 'nextra/components' +import { Steps } from 'nextra/components'; +import { AccordionTemplate } from 'components/accordion-template.tsx'; + +export const IndexPage = () => ( +<> + An example template for index.html page + +); # Reverse Proxy & Web Secure Socket @@ -60,6 +67,8 @@ mkdir -p /var/www/ - Use your own html code (check this [markdown to html tool](https://markdowntohtml.com/)) or copy the template below to a new file called `index.html` located in `/var/www/` directory. + +}> ```html @@ -276,6 +285,7 @@ specified IP:port combination. Please be considerate when using these options. ``` + ###### 3. If you used the template above - before you save and close the file, make sure to edit the text, especially the information in these points: @@ -394,7 +404,7 @@ nano /etc/nginx/sites-available/ ``` - Paste the text below to the editor and change `` occurrences to your domain name: -``` +```ini server { listen 80; listen [::]:80; @@ -552,7 +562,7 @@ nano /etc/nginx/sites-available/wss-config-nym ``` - Paste the block below. Don't forget to insert your correct values. -```bash +```ini ############################################################# # EXCHANGE ALL & VARIABLES ! # ############################################################# diff --git a/documentation/docs/pages/operators/nodes/nym-node/setup.mdx b/documentation/docs/pages/operators/nodes/nym-node/setup.mdx index d17a7f10de..045e9cc55c 100644 --- a/documentation/docs/pages/operators/nodes/nym-node/setup.mdx +++ b/documentation/docs/pages/operators/nodes/nym-node/setup.mdx @@ -1,25 +1,20 @@ -{/* -import { MyTab } from '../../../../components/operators/nodes/node-run-command-tabs' -import Mixnode from './snippets/mixnode-run-tab-snippet.mdx'; -import EntryGateway from './snippets/entry-gateway-run-tab-snippet.mdx'; -import ExitGateway from './snippets/exit-gateway-run-tab-snippet.mdx'; -import Mixnode from './snippets/mixnode-run-tab-snippet.mdx'; -*/} import { Callout } from 'nextra/components'; import { Tabs } from 'nextra/components'; import { RunTabs } from 'components/operators/nodes/node-run-command-tabs'; import { VarInfo } from 'components/variable-info.tsx'; -import { MigrateTabs } from 'components/operators/nodes/node-migrate-command-tabs' +import { MigrateTabs } from 'components/operators/nodes/node-migrate-command-tabs'; +import BuildInfo from 'components/outputs/command-outputs/nym-node-build-info.md'; +import NymNodeHelp from 'components/outputs/command-outputs/nym-node-help.md'; +import NymNodeRunHelp from 'components/outputs/command-outputs/nym-node-run-help.md'; +import { AccordionTemplate } from 'components/accordion-template.tsx'; # Nym Node Setup & Run -This documentation page provides a guide on how to set up and run a [NYM NODE](nym-node.md), along with explanations of available flags, commands, and examples. +This documentation page provides a guide on how to set up and run a [NYM NODE](../nym-node.mdx), along with explanations of available flags, commands, and examples. ## Current version -``` - -``` + ## Summary @@ -73,15 +68,13 @@ You can always use `--help` flag to see the commands or arguments associated wit Run `./nym-node --help` to see all available commands: -``` - -``` + To list all available flags for each command, run `./nym-node --help` for example `./nym-node run --help`: -``` - -``` + + + The Wireguard flags currently have limited functionality. From version `1.1.6` ([`v2024.9-topdeck`](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.9-topdeck)) wireguard is available and recommended to be switched on for nodes running as Gateways. Keep in mind that this option needs a bit of a special [configuration](configuration.md#wireguard-setup). @@ -159,7 +152,7 @@ In such case, you can `run` a node to initalise it or try if everything works, b ### Migrate -Migration is a must for all deprecated nodes (`nym-mixnode`, `nym-gateway`). For backward compatibility we created an [archive section](../archive/nodes/setup-guides.md) with all the guides for individual binaries. However, the binaries from version 1.1.35 (`nym-gateway`) and 1.1.37 (`nym-mixnode`) onwards will no longer have `init` command. +Migration is a must for all deprecated nodes (`nym-mixnode`, `nym-gateway`). These binaries from version 1.1.35 (`nym-gateway`) and 1.1.37 (`nym-mixnode`) onwards will no longer have `init` command and `nym-node` is the only binary to use for `gateway` or `mixnode` fucntionalities. **Nym cannot promise 100% serialisation for operators migrating from long outdated versions to the newest ones. If you are about to migrate, start with [`nym-node v1.1.0`](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2024.3-eclipse) and keep upgrading version by version all the way to the latest one.** @@ -176,4 +169,4 @@ Make sure to use `--deny-init` flag to prevent initialisation of a new node. If there are any problems checkout the troubleshooting section or report an issue. -Follow up with [configuration](configuration.md) page for automation, reversed proxy setup and other tweaks, then head straight to [bonding](bonding.md) page to finalise your setup. +Follow up with [configuration](configuration.mdx) page for automation, reversed proxy setup and other tweaks, then head straight to [bonding](bonding.mdx) page to finalise your setup. diff --git a/documentation/docs/pages/operators/nodes/performance-and-testing.mdx b/documentation/docs/pages/operators/nodes/performance-and-testing.mdx index 558587820e..2246a76a9d 100644 --- a/documentation/docs/pages/operators/nodes/performance-and-testing.mdx +++ b/documentation/docs/pages/operators/nodes/performance-and-testing.mdx @@ -16,8 +16,8 @@ There are multiple ways to monitor performance of nodes and the machines on whic A list of different scripts, templates and guides for easier navigation: -* [`nym-gateway-probe`](gateway-probe.md) - a useful tool used under the hood of [harbourmaster.nymtech.net](https://harbourmaster.nymtech.net) -* [Prometheus and Grafana](prometheus-grafana.md) self-hosted setup +* [`nym-gateway-probe`](perfomance-and-testing/gateway-probe.mdx) - a useful tool used under the hood of [harbourmaster.nymtech.net](https://harbourmaster.nymtech.net) +* [Prometheus and Grafana](performance-and-testing/prometheus-grafana.mdx) self-hosted setup * [Nym-node CPU cron service](https://gist.github.com/tommyv1987/97e939a7adf491333d686a8eaa68d4bd) - an easy bash script by Nym core developer [@tommy1987](https://gist.github.com/tommyv1987), designed to monitor a CPU usage of your node, running locally * Nym's script [`prom_targets.py`](https://github.com/nymtech/nym/blob/develop/scripts/prom_targets.py) - a useful python program to request data from API and can be run on its own or plugged to more sophisticated flows @@ -45,4 +45,3 @@ We do testing in order to **understand and increase the overall quality of the N 7. Adjust rewarding based on the machine specs and server pricing Visit [Nym Harbour Master](https://harbourmaster.nymtech.net/) monitoring page to monitor network components (nodes) performance. - diff --git a/documentation/docs/pages/operators/nodes/performance-and-testing/node-api-check.mdx b/documentation/docs/pages/operators/nodes/performance-and-testing/node-api-check.mdx index 1f3aa7adf0..3487984388 100644 --- a/documentation/docs/pages/operators/nodes/performance-and-testing/node-api-check.mdx +++ b/documentation/docs/pages/operators/nodes/performance-and-testing/node-api-check.mdx @@ -3,6 +3,8 @@ import { Callout } from 'nextra/components'; import { VarInfo } from 'components/variable-info.tsx'; import { Steps } from 'nextra/components'; import { MyTab } from 'components/generic-tabs.tsx'; +import NodeApiCheckHelp from 'components/outputs/command-outputs/node-api-check-help.md'; +import NodeApiCheckQueryHelp from 'components/outputs/command-outputs/node-api-check-query-help.md' # Node API Check @@ -120,21 +122,21 @@ Now you are ready to check your node. ./node_api_check.py --help ``` -- Output: -```python - -``` +- Command Output: + + #### `query_stats` -When you want to see all the options connected to any command, add a `--help` flag after the command of your choice, like in this example: +When you want to see all the options connected to any command, add a `--help` flag after the command of your choice. Command `query_stats` is the most useful one of this program. + ```sh ./node_api_check query_stats --help ``` -```python - -``` +- Command output: + + The most common usage may be `./node_api_check.py query_stats ` where `` is required, substitute it with node Identity Key. diff --git a/documentation/docs/pages/operators/nodes/preliminary-steps.mdx b/documentation/docs/pages/operators/nodes/preliminary-steps.mdx index 96d6c206ce..178d5746ca 100644 --- a/documentation/docs/pages/operators/nodes/preliminary-steps.mdx +++ b/documentation/docs/pages/operators/nodes/preliminary-steps.mdx @@ -4,8 +4,7 @@ There are a couple of steps that need completing before starting to set up your `nym-node`: -1. **[Prepare your wallet](preliminary-steps/wallet-preparation.md):** [desktop](https://nymtech.net/docs/wallet/desktop-wallet.html) or [CLI](https://nymtech.net/docs/wallet/cli-wallet.html). -2. **[Requisition and setup a VPS](preliminary-steps/vps-setup.md)** (Virtual Private Server) +1. **[Prepare your wallet](preliminary-steps/wallet-preparation.mdx):** [desktop](https://nymtech.net/docs/wallet/desktop-wallet.html) or [CLI](../../developers/tools/nym-cli/commands.mdx). +2. **[Requisition and setup a VPS](preliminary-steps/vps-setup.mdx)** (Virtual Private Server) Make sure to follow these steps carefully as it prevents a lot of troubleshooting later on. - diff --git a/documentation/docs/pages/operators/nodes/validator-setup.mdx b/documentation/docs/pages/operators/nodes/validator-setup.mdx index 10585ced07..21612c377d 100644 --- a/documentation/docs/pages/operators/nodes/validator-setup.mdx +++ b/documentation/docs/pages/operators/nodes/validator-setup.mdx @@ -2,7 +2,7 @@ import { Callout } from 'nextra/components'; import { Tabs } from 'nextra/components'; import { VarInfo } from 'components/variable-info.tsx'; import { Steps } from 'nextra/components'; -import {Accordion, AccordionItem} from "@nextui-org/react"; +import { AccordionTemplate } from 'components/accordion-template.tsx'; # Validators @@ -100,7 +100,8 @@ At this point, you will have a copy of the `nyxd` binary in your `build/` direct ``` You should see a similar help menu printed to you: - +
+ ```sh Nyx Daemon (server) @@ -136,6 +137,7 @@ Flags: Use "nyxd [command] --help" for more information about a command. ``` + ### Linking `nyxd` to `libwasmvm.so` @@ -169,6 +171,8 @@ nyxd - This should return the regular help menu: +
+ ```sh Nyx Daemon (server) @@ -204,6 +208,7 @@ Flags: Use "nyxd [command] --help" for more information about a command. ``` + ## Initialising your validator diff --git a/documentation/docs/pages/operators/nodes/validator-setup/nym-api.mdx b/documentation/docs/pages/operators/nodes/validator-setup/nym-api.mdx index a205a0a0b7..42420b9e6d 100644 --- a/documentation/docs/pages/operators/nodes/validator-setup/nym-api.mdx +++ b/documentation/docs/pages/operators/nodes/validator-setup/nym-api.mdx @@ -3,6 +3,9 @@ import { Tabs } from 'nextra/components'; import { VarInfo } from 'components/variable-info.tsx'; import { Steps } from 'nextra/components'; import {Accordion, AccordionItem} from "@nextui-org/react"; +import ApiBuildInfo from 'components/outputs/command-outputs/nym-api-build-info.md'; +import NymApiHelp from 'components/outputs/command-outputs/nym-api-help.md'; +import { AccordionTemplate } from 'components/accordion-template.tsx'; # Nym API Setup @@ -103,9 +106,8 @@ DKG ceremony in points: * From the perspective of validator operators, this is all they had to do. Under the hood, each `nym-api` instance then took part in several rounds of key submission, verification, and derivation. This will continue until quorum is acheived. ## Current version -``` - -``` + + ## Setup and Usage @@ -118,10 +120,7 @@ You can check that your binary is properly compiled with: Which should return a list of all available commands. - -``` - -``` + You can also check the various arguments required for individual commands with: @@ -211,6 +210,8 @@ You can also change the value of `local_validator` in the config file found by d This process is quite noisy, but informative: +
+ ```bash Starting nym api... 2023-12-12T14:29:55.800Z INFO rocket::launch > 🔧 Configured for release. @@ -288,6 +289,7 @@ Starting nym api... 2023-12-12T14:31:56.290Z INFO nym_api::nym_contract_cache::cache::refresher > Updating validator cache. There are 888 mixnodes and 105 gateways 2023-12-12T14:31:56.291Z INFO nym_api::node_status_api::cache::refresher > Updating node status cache ``` + ## Automation diff --git a/documentation/docs/pages/operators/sandbox.mdx b/documentation/docs/pages/operators/sandbox.mdx index 159021c62f..a39ca790c7 100644 --- a/documentation/docs/pages/operators/sandbox.mdx +++ b/documentation/docs/pages/operators/sandbox.mdx @@ -9,7 +9,7 @@ Nym node operators can run their nodes in Nym Sandbox testnet environment. Wheth Below are steps to [setup your environment](#sandbox-environment-setup) and an introduction to [Sandbox token faucet](#sandbox-token-faucet). -This page is for Nym node operators. If you want to run NymVPN CLI over Sandbox testnet, visit [Nym Developers portal](https://nymtech.net/docs/developers/nymvpn/cli.html#testnet-environment). +This page is for Nym node operators. If you want to run NymVPN CLI over Sandbox testnet, visit [NymVPN CLI Testnet guide](https://nym-vpn-cli.sandbox.nymtech.net/). ## Sandbox Environment Setup @@ -49,7 +49,7 @@ curl -o sandbox.env -L https://raw.githubusercontent.com/nymtech/nym/develop/env ###### 3. Bond your node to Nym Sandbox environment - Open [Nym Wallet](https://nymtech.net/download/wallet) and switch to testnet - Go to [faucet.nymtech.net](https://faucet.nymtech.net) and aquire 101 testnet NYM tokens -- Follow the steps on the [bonding page](nodes/bonding.mdx) +- Follow the steps on the [bonding page](nodes/nym-node/bonding.mdx) ![](/images/operators/sandbox.png) diff --git a/documentation/docs/pages/operators/tokenomics/validator-rewards.md b/documentation/docs/pages/operators/tokenomics/validator-rewards.mdx similarity index 78% rename from documentation/docs/pages/operators/tokenomics/validator-rewards.md rename to documentation/docs/pages/operators/tokenomics/validator-rewards.mdx index f4b1210704..72c3cabdef 100644 --- a/documentation/docs/pages/operators/tokenomics/validator-rewards.md +++ b/documentation/docs/pages/operators/tokenomics/validator-rewards.mdx @@ -1,10 +1,22 @@ + +import { Callout } from 'nextra/components'; +import { Tabs } from 'nextra/components'; +import { RunTabs } from 'components/operators/nodes/node-run-command-tabs'; +import { VarInfo } from 'components/variable-info.tsx'; +import { MigrateTabs } from 'components/operators/nodes/node-migrate-command-tabs'; +import NyxPercentStake from 'components/outputs/nyx-outputs/nyx-percent-stake.md'; +import NyxTotalStake from 'components/outputs/nyx-outputs/nyx-total-stake.md'; +import { TimeNow } from 'components/time-now.tsx'; + # Nyx Validator Rewards + + ## Summary * Nyx Validators are rewarded in NYM tokens from the Nym mixmining pool and increasingly from apps that run on the Nym mixnet, the first of which is the NymVPN. * Validators are rewarded for two different types of work: signing blocks in the Nyx chain and running the NymAPI to monitor mixnet routing and sign zk-nym credentials. -* New validators can join via a NYM-to-NYX swap contract. The contract will not allow more than 1% of total stake increase per month to prevent sudden hostile takeovers. Current stake is million Nyx. Rate: 1:4.8 ~ 288k NYX for 60k NYM => voting power +* New validators can join via a NYM-to-NYX swap contract after contacting us and getting whitelisted. The contract will not allow more than 1% of total stake increase per month to prevent sudden hostile takeovers. Current stake is million Nyx. Rate: 1:4.8 ~ 288k NYX for 60k NYM \=\> voting power * NYX tokens serve no other purpose than self-delegation for voting power and governance. All rewards are in NYM and distributed directly to the validators self-delegation address and are not distributed to stakers. * The contract will only allow swapping NYM to NYX and will **not** allow exchanging NYX back to NYM. A NYX holder who wishes to sell their NYX stake will have to do so via OTC trades. @@ -22,7 +34,7 @@ Validator rewards initially come from the Nym mixmining pool with additional rew 1. **From mixmining pool** - at a rate of 1000 NYM per hour, of which 2/3 are distributed for signing blocks and 1/3 for zk-nyms. These are stable in NYM, and therefore will fluctuate in their fiat value depending on exchange rate. -2. **From vpn user subscriptions** - the rate is tied to the growth of NymVPN subscriptions and will be stable in fiat, fluctuating in NYM depending on exchange rate. 1/3 will be distributed for signing blocks and 2/3 for zk-nyms. +2. **From vpn user subscriptions** - the rate is tied to the growth of NymVPN subscriptions and will be stable in fiat, fluctuating in NYM depending on exchange rate. 1/3 will be distributed for signing blocks and 2/3 for zk-nyms. | Source | Signing blocks | Running NymAPI | Currency | | :-- | --: | --: | :---: | @@ -52,4 +64,4 @@ The smart contract will have two parameters: ### Maximum Amount of NYX Available for Purchase per Month -The contract will not allow more than 1% of total stake increase per month to prevent sudden hostile takeovers. Current stake level is million Nyx. +The contract will not allow more than 1% of total stake increase per month to prevent sudden hostile takeovers. Current stake level is million Nyx. diff --git a/documentation/docs/pages/operators/troubleshooting/nodes.mdx b/documentation/docs/pages/operators/troubleshooting/nodes.mdx index 988e5fcae3..0bfe8a756d 100644 --- a/documentation/docs/pages/operators/troubleshooting/nodes.mdx +++ b/documentation/docs/pages/operators/troubleshooting/nodes.mdx @@ -32,7 +32,7 @@ We have scripts which automatically include the Git commit hash and Git tag in t What to do? * Follow the instructions in the Binaries section to [build nym from source](../binaries/building-nym.mdx) or [download precompiled binaries](../binaries/pre-build-binaries.mdx) -* To upgrade, follow the [upgrade instructions](../nodes/maintenance/manual-upgrade/mdx) +* To upgrade, follow the [upgrade instructions](../nodes/maintenance/manual-upgrade.mdx) ## General Node Config @@ -104,9 +104,9 @@ First of all check the 'Mixnodes' section of either of the Nym Network Explorers * [Mainnet](https://explorer.nymtech.net/) * [Sandbox testnet](https://sandbox-explorer.nymtech.net/) -You can also check [Nym Harbourmaster](https://harbourmaster.nymtech.net) which now also includes mixnode mode. +You can also check [Nym Harbourmaster](https://harbourmaster.nymtech.net) which now also includes mixnode mode. -There are a few community explorers as well. +There are a few community explorers as well. * [ExploreNYM](https://explorenym.net/) * [Mixplorer](https://mixplorer.xyz/) @@ -319,7 +319,7 @@ Let your Gateway run and follow these steps: -###### 1. Check if your [firewall configuration](../nodes/preliminary-steps/vps-setup.mdx#configure-your-firewall) +###### 1. Check if your [firewall configuration](../nodes/preliminary-steps/vps-setup.mdx#configure-your-firewall) - If `ufw` is active and if the necessary ports are open / allowed, including the ones for Swagger page and Reversed proxy/WSS if this is your case. @@ -365,7 +365,7 @@ If your logs show that your Node has `cover down: 0.00` that means that the embe ###### 6. [Check out if your `syslog`s](vps-isp.mdx#pruning-logs) aren't eating all your disk space and prune them -###### 7. When all problems are addressed: Restart the node service +###### 7. When all problems are addressed: Restart the node service Don't forget `systemctl daemon-reload`) and wait until your node gets above 50% of performance (average of last 24h) - this will likely take 24-48 hours. During this time your node is tested by `nym-api` and every positive response picks up your routing score. diff --git a/documentation/docs/pages/operators/variables.mdx b/documentation/docs/pages/operators/variables.mdx index 8bf1f02cfc..c9ccd630e8 100644 --- a/documentation/docs/pages/operators/variables.mdx +++ b/documentation/docs/pages/operators/variables.mdx @@ -1,7 +1,5 @@ -{/* -TODO - MAKE PLUGIN WHICH CAN RUN PYTHON SCRIPT TO PRINT CSV LOCATED IN ../../data/csv/variables.csv -*/} import { Callout } from 'nextra/components' +import VariablesTable from 'components/outputs/csv2md-outputs/variables.md'; # Essential Parameters & Variables @@ -14,6 +12,6 @@ Below is a table listing the most essential variables and parameters which they To prevent over-flooding of our documentation we cannot provide with every single command syntax as there is a large combination of possibilities. Remember that you can always print the options using a `--help` flag together with any binary command.
- + diff --git a/documentation/docs/pages/styles.css b/documentation/docs/pages/styles.css index f819ecdccc..bb74dee16e 100644 --- a/documentation/docs/pages/styles.css +++ b/documentation/docs/pages/styles.css @@ -137,3 +137,8 @@ input:focus-visible { a.MuiLink-root { color: var(--colorPrimary) !important; } + + +.MuiPaper-root.MuiAccordion-root { + border-radius: 8px; +} diff --git a/documentation/scripts/api-scraping/api_targets.py b/documentation/scripts/api-scraping/api_targets.py new file mode 100644 index 0000000000..d7491dec27 --- /dev/null +++ b/documentation/scripts/api-scraping/api_targets.py @@ -0,0 +1,337 @@ +#!/usr/bin/python3 + +import argparse +import os +import requests +import json +import sys +import pandas as pd +from collections import namedtuple +from time import gmtime, strftime +import time + +############################################ +############## GENERAL FNs ################# +############################################ + +def get_url(args, **kwargs): + config_file = "./api_targets_config.json" + with open(config_file, "r") as f: + config = json.load(f) + env = args.api + endpoint = args.endpoint + if env == "github": + url = f"{config[env]}/{endpoint}" + else: + url = f"{config[env]}/api/v1/{endpoint}" + return url + +def subparser_read(args): + url = get_url(args) + r = requests.get(url) + response = r.json() + return response + + +def print_time_now(args): + #now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + #now = time.ctime() + day = strftime("%d", gmtime()) + if day[0] == "0": + day = day[1] + if day == "1" or day == "21" or day == "31": + suffix = "st" + elif day == "2" or day == "22": + suffix = "nd" + elif day == "3" or day == "23": + suffix = "rd" + else: + suffix = "th" + now = strftime(f"%A, %B {day}{suffix} %Y, %X UTC", gmtime()) + print(now) + +############################################ +########### NYX RELATED FNs ################ +############################################ + +def convert_u_nym(unym): + unym = float(unym) + nym = unym / 1000000 + nym = int(nym) + return nym + +def thousand_separator(n, separator): + if separator == " ": + n = f'{n:_}' + n = remove_underscore(n) + else: + n = f'{n:{separator}}' + return n + +def remove_underscore(arg): + string = arg.replace("_", " ") + string = string.title() + return string + +def display_supply_table(response, args): + separator = args.separator + df = pd.DataFrame(response) + df = df.T + del df['denom'] +# df.set_axis(['**Item**', '**Amount in NYM**'], axis=1, inplace=True) + df = df.rename_axis('index1').reset_index() + df = df.rename(columns={'index1': '**Item**', 'amount': '**Amount in NYM**'}) + df['**Item**'] = df['**Item**'].apply(remove_underscore) + df['**Amount in NYM**'] = df['**Amount in NYM**'].apply(convert_u_nym) + desc_column = _get_desc_column() + df.insert(1, '**Description**', desc_column, True) + stake_saturation = _get_stake_saturation() + df.loc[len(df.index)] = ['Stake Saturation', 'Optimal size of node self-bond + delegation', stake_saturation] + df['**Amount in NYM**'] = df['**Amount in NYM**'].apply(thousand_separator, args=(separator, )) + table = df.to_markdown(index=False,colalign=("left","left","right")) + print(table) + +def _get_stake_saturation(): + reward_params = get_api("https://validator.nymtech.net/api/v1/epoch/reward_params") + stake_saturation = get_dict_value(reward_params,["interval","stake_saturation_point"]) + stake_saturation = convert_u_nym(stake_saturation) + return stake_saturation + +def _get_desc_column(): + supply = "Maximum amount of NYM token in existence" + reserve = "Tokens releasing for operators rewards" + vesting = "Tokens locked outside of cicrulation for future claim" + circulating = "Amount of unlocked tokens" + desc_column = [supply, reserve, vesting, circulating] + return desc_column + +def read_supply(args): + separator = args.separator + response = subparser_read(args) + if args.endpoint == "circulating-supply": + if args.value: + value = get_nested_value(response, args) + value = convert_u_nym(value) + value = thousand_separator(value, separator) + print(value) + elif args.format == "markdown": + display_supply_table(response, args) + else: + value = response + print(value) + elif args.endpoint == "epoch/reward_params": + value = get_reward_params(response, args, separator) + print(value) + +def get_reward_params(response, args, separator): + value = get_nested_value(response, args) + if args.format == "percent": + value = _return_percent_annotation(value) + else: + value = convert_u_nym(value) + value = thousand_separator(value, separator) + return value + +def get_nested_value(response, args): + value = response + for key in args.value: + value = value[key] + return value + +def _return_percent_annotation(value): + value = float(value) * 100 + value = f"{value}%" + return value + +########################################### +############# CALCULATE FNs ############### +########################################### + +def calculate(args): + separator = args.separator + reward_params = get_api("https://validator.nymtech.net/api/v1/epoch/reward_params") + circulating_supply = get_api("https://validator.nymtech.net/api/v1/circulating-supply") + if args.staking_target: + display_staking_target(args, reward_params, circulating_supply, separator) + +def get_api(url): + r = requests.get(url) + response = r.json() + return response + + +def display_staking_target(args, reward_params, circulating_supply, separator): + keys = ["interval", "staking_supply_scale_factor"] + staking_supply_scale_factor = get_dict_value(reward_params, keys) + keys = ["circulating_supply", "amount"] + circulating_supply = get_dict_value(circulating_supply, keys) + staking_target = float(staking_supply_scale_factor) * float(circulating_supply) + staking_target = convert_u_nym(staking_target) + if args.separator: + staking_target = thousand_separator(staking_target, separator) + print(staking_target) + +def get_dict_value(json, keys): + value = json + for key in keys: + value = value[key] + return value + + +########################################### +############ GH RELATED FNs ############### +########################################### + +def get_nym_vpn_version(args): + response = subparser_read(args) + if args.client == "desktop": + version = current_desktop_version(args, response) + elif args.client == "cli": + version = current_cli_version(args, response) + else: + print("Incorrect argument for -c, --client") + sys.exit(-1) + +def current_cli_version(args, response): + df = pd.DataFrame(response) + print(df) + + # NEEDS THIS IN PYTHON: + # current_cli_version=$(curl -s $release_url | jq -r '.[].tag_name' | grep '^nym-vpn-cli-v' | sort -Vr | head -n 1 | awk -F'-v' '{print $NF}') + + +def current_desktop_version(args, response): + # NEEDS THIS IN PYTHON: + df = pd.DataFrame(response) + print(df) + # version=$(curl -s $release_url | jq -r '.[].tag_name' | grep '^nym-vpn-desktop-v' | sort -Vr | head -n 1 | awk -F'-v' '{print $NF}') + + +########################################### +############### MAIN PARSER ############### +########################################### + +def parser_main(): + parser = argparse.ArgumentParser( + prog="Nym API scraper", + description='''Get any live data from Nyx validator''', + epilog='' + ) + subparsers = parser.add_subparsers(help="") + parser_supply = subparsers.add_parser('validator', + help='Reads validaor API enpoints', + aliases=['v'] + ) + + parser_supply.add_argument( + "-a","--api", + type=str, + default="mainnet", + help="choose: mainnet, perf, sandbox" + ) + parser_supply.add_argument( + "-e","--endpoint", + type=str, + help="choose from: https://validator.nymtech.net/api/swagger/index.html" + ) + parser_supply.add_argument( + "-v","--value", + type=str, + help="dictionary keys to get needed value separated by a space", + nargs = '+' + ) + + parser_supply.add_argument( + "-f","--format", + type=str, + help="'markdown' formats the output for documentation purpose; 'percent' returns a number with % annotation", + ) + + parser_supply.add_argument( + "-s", "--separator", + type=str, + default=" ", + help="Add custom thousand separator to --format flag (default is none)" + ) + + parser_supply.set_defaults(func=read_supply) + + + + + parser_calculate = subparsers.add_parser('calculate', + help='Calculate and print the values of optional args', + aliases=['c'] + ) + + parser_calculate.add_argument( + "--staking_target", + action="store_true", + help="A multiplier of staking supply scale factor and circulating supply" + ) + + parser_calculate.add_argument( + "-s", "--separator", + type=str, + default=" ", + help="Add custom thousand separator to --format flag (default is none)" + ) +# parser_calculate.add_argument( +# "--api", +# default="mainnet", +# ) + + parser_calculate.set_defaults(func=calculate) + + parser_time_now = subparsers.add_parser('time_now', + help='Prints UTC time now', + aliases=['time', 't'] + ) + + parser_time_now.set_defaults(func=print_time_now) + + + parser_nym_vpn = subparsers.add_parser('nym_vpn', + help='reads NymVPN latest version', + aliases=['n'] + ) + + parser_nym_vpn.add_argument( + "-c","--client", + type=str, + default="desktop", + help="choose: desktop, cli - default: desktop" + ) + + parser_nym_vpn.add_argument( + "-a","--api", + type=str, + default="github", + help="choose: mainnet, perf, sandbox" + ) + + parser_nym_vpn.add_argument( + "-e","--endpoint", + type=str, + help="add the url suffix", + default="repos/nymtech/nym-vpn-client/releases" + ) + + + parser_nym_vpn.set_defaults(func=get_nym_vpn_version) + + + + + args = parser.parse_args() + try: + args.func(args) + except AttributeError as e: + print("Error on argparser") + sys.exit(-1) + + + + +if __name__ == "__main__": + parser_main() diff --git a/documentation/scripts/api-scraping/api_targets_config.json b/documentation/scripts/api-scraping/api_targets_config.json new file mode 100644 index 0000000000..fd5d8b6939 --- /dev/null +++ b/documentation/scripts/api-scraping/api_targets_config.json @@ -0,0 +1,6 @@ +{ + "sandbox": "https://sandbox-nym-api1.nymtech.net", + "perf": "https://api.performance.nymte.ch", + "mainnet": "https://validator.nymtech.net", + "github": "https://api.github.com" +} diff --git a/documentation/scripts/cmdrun/nyx-percent-stake.sh b/documentation/scripts/cmdrun/nyx-percent-stake.sh new file mode 100755 index 0000000000..89b85f929c --- /dev/null +++ b/documentation/scripts/cmdrun/nyx-percent-stake.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +stake_unyx=$(curl -s -L https://api.nymtech.net/cosmos/staking/v1beta1/pool | jq 'values["pool"]["bonded_tokens"]') +stake_unyx=$(python -c "print(int($stake_unyx))") +stake_nyx=$(python -c "print($stake_unyx / 1000000)") +voting288k_percent=$(python -c "print(288000 / $stake_nyx * 100)") +echo ${voting288k_percent:0:4}% diff --git a/documentation/scripts/cmdrun/nyx-total-stake.sh b/documentation/scripts/cmdrun/nyx-total-stake.sh new file mode 100755 index 0000000000..1f000428cf --- /dev/null +++ b/documentation/scripts/cmdrun/nyx-total-stake.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +stake=$(curl -s -L https://api.nymtech.net/cosmos/staking/v1beta1/pool | jq 'values["pool"]["bonded_tokens"]') +echo ${stake:1:2}.${stake:3:3} diff --git a/documentation/scripts/prebuild.sh b/documentation/scripts/prebuild.sh new file mode 100755 index 0000000000..43ba431236 --- /dev/null +++ b/documentation/scripts/prebuild.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +set -o errexit +set -o nounset +set -o pipefail + +cd ../scripts && +python csv2md.py -s 1 ../docs/data/csv/variables.csv > ../docs/components/outputs/csv2md-outputs/variables.md && +python csv2md.py -s 0 ../docs/data/csv/isp-sheet.csv > ../docs/components/outputs/csv2md-outputs/isp-sheet.md && +cd cmdrun && +./nyx-percent-stake.sh > ../../docs/components/outputs/nyx-outputs/nyx-percent-stake.md && +./nyx-total-stake.sh > ../../docs/components/outputs/nyx-outputs/nyx-total-stake.md && +cd ../api-scraping && +python api_targets.py time_now > ../../docs/components/outputs/api-scraping-outputs/time-now.md && +cd ../../../scripts && +echo '```python' > ../documentation/docs/components/outputs/command-outputs/node-api-check-query-help.md && +python node_api_check.py query_stats --help >> ../documentation/docs/components/outputs/command-outputs/node-api-check-query-help.md && +echo '```' >> ../documentation/docs/components/outputs/command-outputs/node-api-check-query-help.md && +echo '```python' > ../documentation/docs/components/outputs/command-outputs/node-api-check-help.md && +python node_api_check.py --help >> ../documentation/docs/components/outputs/command-outputs/node-api-check-help.md && +echo '```' >> ../documentation/docs/components/outputs/command-outputs/node-api-check-help.md && +cd ../target/release/ && +echo '```sh' > ../../documentation/docs/components/outputs/command-outputs/nym-node-help.md && +./nym-node --help >> ../../documentation/docs/components/outputs/command-outputs/nym-node-help.md && +echo '```' >> ../../documentation/docs/components/outputs/command-outputs/nym-node-help.md && +echo '```sh' > ../../documentation/docs/components/outputs/command-outputs/nym-node-run-help.md && +./nym-node run --help >> ../../documentation/docs/components/outputs/command-outputs/nym-node-run-help.md && +echo '```' >> ../../documentation/docs/components/outputs/command-outputs/nym-node-run-help.md && +echo '```sh' > ../../documentation/docs/components/outputs/command-outputs/nymvisor-help.md && +./nymvisor --help >> ../../documentation/docs/components/outputs/command-outputs/nymvisor-help.md && +echo '```' >> ../../documentation/docs/components/outputs/command-outputs/nymvisor-help.md && +echo '```sh' > ../../documentation/docs/components/outputs/command-outputs/nym-api-help.md && +./nym-api --help >> ../../documentation/docs/components/outputs/command-outputs/nym-api-help.md && +echo '```' >> ../../documentation/docs/components/outputs/command-outputs/nym-api-help.md && + +echo "prebuild finished"