Difference between revisions of "Xx network Software Overview"
m |
|||
Line 150: | Line 150: | ||
To be able to participate in the network, a Node or Gateway has to have a compatible version with the required version reported by the Permissioning server. For a version to be compatible, the major version must be equal to the required major version and the minor version must be greater than or equal to the required minor version. The patch can be anything, but it will always be present. | To be able to participate in the network, a Node or Gateway has to have a compatible version with the required version reported by the Permissioning server. For a version to be compatible, the major version must be equal to the required major version and the minor version must be greater than or equal to the required minor version. The patch can be anything, but it will always be present. | ||
{{Node Handbook Navbox}} |
Revision as of 22:20, 15 July 2021
The xx network BetaNet codebase is combined between xx network’s consensus software and Elixxir’s cMix protocol. At launch, xx network will be testing and tuning Elixxir software with xx consensus coming online at a later date.
Elixxir software is organized into four groups of repositories as shown in the figure: Core, Services, Clients, and Tools. The Core libraries handle functionality across Clients and Services, which contain data structures, interfaces, and cryptography common to many of the xx network components. Services implements various messenger features, as well as authorizing Clients and Nodes to join the network. Clients interact with the network using a shared Client API (xxDK). Tools provide several interfaces and utilities to deploy, test, and debug the network.
Most of the code found in the Core and Services is written in the Go programming language. The repositories listed as public below can be found on the public Elixxir and xx network GitLab pages.
To follow the set up guide, most Node operators will likely elect to download the prepackaged tarballs containing the compiled binaries. To learn more, refer to the Node and Gateway Software section.
xx network Codebase
Core
xx network/Primitives
The xx network Primitives repository contains the basic data structures and utilities that are used in the Elixxir and Praxxis codebases. This includes the ID structure for Nodes, Gateways, and users and the NDF structure. Additional generic structures and utilities are also contained in Primitives, such as file access and rate limiting utilities.
xx network/Crypto
The xx network Crypto repository contains cryptographic primitives that are shared between Elixxir and Praxxis codebases. Primarily lower level primitives, randomness generation, TLS handling, and nonce handling.
xx network/Comms
The Comms repository handles all network communication functionality as well as all of the core connectivity logic. It includes generic comms handlers and protocols and not specific implementations, which are implemented in the respective Comm branches for each project.
Elixxir Codebase
Core
Elixxir/Primitives
The Elixxir Primitives repository contains the basic data structures and utilities that are used by all Elixxir repositories. This includes the user fact structure, the cMix message structure, and the version object.
Elixxir/Crypto
The Crypto repository encompasses all of the base cryptographic functionality found in the code base. Relying heavily on Go’s big integer implementation, Crypto features a cryptographically secure random number generator implementation, libraries for working with large integers in modulo cyclic groups for cMix operations, and basic encrypt/decrypt functionality. Like Primitives, Crypto only contains code that is generic to the larger system. A core approach to this repository is to supply wrappers for operations that may require migration to other implementations in the future.
Elixxir/Comms
Comms builds on the generic utilities of xx network Comms to provide specific functionality for Elixxir. It holds a gRPC protocol file along with a thin Client/Server implementation. The repository currently uses TLS certificates with RSA keys for encryption and identification, which will migrate to xx consensus-based quantum secure authenticated channels as development progresses.
Elixxir/GPUMaths
The GPUMaths repository accelerates the math used by Server, especially for precomputations. It provides a subset of the math implemented in the Crypto repository but accelerated on GPUs. Underlying the acceleration is a publicly available CUDA arbitrary-precision math library, CGBN2. Components of this written in CUDA are in a separate repository gpumathsnative.
Services
Elixxir/Server
The Server repository implements the core cMix functionality and is the software that a Node runs. It performs precomputation and real time computation and processes messages. It receives batches of messages from the Gateways as well as performs network team operations.
Elixxir/Gateway
The Gateway repository contains the API for Clients to interact with the network. Every Node runs a Gateway and the Gateways collect and store messages for Clients. Gateway is designed to be a scalable front-end to the xx network.
Elixxir/Permissioning
Permissioning, also referred to as Registration, manages the NDF for Clients and Servers and schedules cMix rounds within the network. Eventually this functionality will be managed by the distributed xx consensus. For now, this code handles admission, manages which Nodes are part of the network, and orchestrates when Nodes operate.
Clients
Elixxir/Client API (xxDK)
All Clients use the Client API to interact and send messages with the cMix network. It uses Go mobile to produce a library compatible with iOS and Android.
Elixxir/User Discovery (UD)
User Discovery helps users make first contact with other users. It facilitates user search and lookup in a private manner.
Elixxir/Mobile Clients
git: client-android [not public]
Currently, clients exist for iOS and Android operating systems. These both use the Go mobile libraries produced in the Client API.
Tools
Elixxir/Wrapper Script
The Wrapper Script is a Node and Gateway management script that simplifies the running of the xx network software. The script automates the management of the xx network software log files. For easy management or in the event of an error, it starts, stops, and restarts the software without the operator having to revisit the command line. Optionally, it can be set to automatically update the Node and Gateway with the latest xx network binaries and configuration files. To learn more, refer to the Wrapper Script Arguments section.
Elixxir/DevOps
DevOps is a deployment platform for Microsoft Azure, Google Cloud Platform, and Amazon Web Services (AWS) written in Terraform. DevOps allows for the deployment of test networks, management of deployments of individual Nodes, and the deployment of multi-cloud implementations of xx network.
Elixxir/Integration
The Integration repository is a series of end-to-end tests designed to test different functionality of the cMix protocol. Several tests focus on different batch sizes with Nodes only. Another test covers all the Client-level interaction within the network.
Elixxir/Local Environment
The Local Environment repository contains a set of scripts designed to allow the testing of the entire platform on a single machine.
Version Scheme
Both Gateway and Node binaries have a version string embedded in them, which consists of a major version, a minor version, and a patch string, separated by a period.
Major | Minor | Patch | ||
---|---|---|---|---|
┌┴┐ | ┌┴┐ | ┌─┴─┐ | ||
4 | . | 2 | . | 6ab |
To be able to participate in the network, a Node or Gateway has to have a compatible version with the required version reported by the Permissioning server. For a version to be compatible, the major version must be equal to the required major version and the minor version must be greater than or equal to the required minor version. The patch can be anything, but it will always be present.