* added additional workspace-wide dependencies * Added conditional serialization on 'BinaryBuildInformationOwned' * initial framework for service provider messages * updated request/response tags to account for existing variants of Socks5Message * handling legacy deserialization * another serialization revamp to account for legacy version * legacy client working with versioned network requester * socks5 client deserializing responses into updated structures * using new structures for sending in socks5 client * SendRequest wrapper for Request::Send variant * created named fields for all variants of 'ControllerCommand' * Versioning socks5 requests + moving to proper Socks5Request struct * Updated backwards compatible Socks5Response * unused imports * poc ServiceProvider trait * wip * implemented 'ServiceProvider' trait on the Network Requester * Socks5RequestError * added properly serialized ErrorResponse to ControlResponse * fixed version serialization + feature selection * handling of version control requests * improved SocksProxyError by providing more concrete variants and removing generic case * got rid of ServiceProviderClient trait and wrote simple example showing control requests * tests for serialisation backwards compatibility * post-merge fixes due to method renaming * enum boxing to make clippy happier * making sure to not drop buffer channel when starting `DirectClient` * Using nym-sdk in the example * Replaced printing version to stdout with proper log call
The Nym Privacy Platform
The platform is composed of multiple Rust crates. Top-level executable binary crates include:
- nym-mixnode - shuffles Sphinx packets together to provide privacy against network-level attackers.
- nym-client - an executable which you can build into your own applications. Use it for interacting with Nym nodes.
- nym-socks5-client - a Socks5 proxy you can run on your machine and use with existing applications.
- nym-gateway - acts sort of like a mailbox for mixnet messages, which removes the need for direct delivery to potentially offline or firewalled devices.
- nym-network-monitor - sends packets through the full system to check that they are working as expected, and stores node uptime histories as the basis of a rewards system ("mixmining" or "proof-of-mixing").
- nym-explorer - a (projected) block explorer and (existing) mixnet viewer.
- nym-wallet - a desktop wallet implemented using the Tauri framework.
Building
Platform build instructions are available on our docs site. Wallet build instructions are also available on our docs site.
Developing
There's a .env.sample-dev file provided which you can rename to .env if you want convenient logging, backtrace, or other environment variables pre-set. The .env file is ignored so you don't need to worry about checking it in.
For Typescript components, please see ts-packages.
Developer chat
You can chat to us in Keybase. Download their chat app, then click Teams -> Join a team. Type nymtech.friends into the team name and hit continue. For general chat, hang out in the #general channel. Our development takes places in the #dev channel. Node operators should be in the #node-operators channel.
Rewards
Node, node operator and delegator rewards are determined according to the principles laid out in the section 6 of Nym Whitepaper. Below is a TLDR of the variables and formulas involved in calculating the epoch rewards. Initial reward pool is set to 250 million Nym, making the circulating supply 750 million Nym.
Node reward for node i is determined as:
and
Operator of node i is credited with the following amount:
Delegate with stake s recieves:
where s' is stake s scaled over total token circulating supply.
Licensing and copyright information
This program is available as open source under the terms of the Apache 2.0 license. However, some elements are being licensed under CC0-1.0 and MIT. For accurate information, please check individual files.