Skip to content
Snippets Groups Projects
Commit f77ce906 authored by Josh Brooks's avatar Josh Brooks
Browse files

Merge branch 'josh/localEnvMigration' into 'release'

Josh/local env migration

See merge request !24
parents 6e104445 2e670932
Branches
No related tags found
3 merge requests!68Master merge,!24Josh/local env migration,!11Release
Showing
with 1224 additions and 50 deletions
# Integration
## Purpose
This is for running the network locally on a single machine.
There are 2 testing suite packages (smokeinfra and basice2e) and a
general-use long-running network package (localNetwork).
### Testing Suites
This is to automatically test all the system's components and make sure they
work together correctly. If the integration test passes, it should guarantee
that clients can send messages all the way through the system, including
mixing with multiple nodes and an anonymity set greater than 1. If the
integration test fails, look at the logs and narrow down the cause by adding
more logging statements if necessary.
work together correctly. These testing suites are used by the xx network team to ensure basic functionality
of the network and its clients. It is a part of their CI/CD workflow. If the
integration tedigga#1
st fails with an unknown or unhandled error, they look at the logs
to narrow down and resolve the issue.
[SmokeInfra](./smokeinfra/) is a simple test of the xx network, ensuring that rounds are running.
Generally speaking, this is for the xx network team and developers that wish to
contribute to how the network operates.
[BasicE2E](./basice2e) determines whether clients can send messages all the way through the system, including
mixing with multiple nodes and an anonymity set greater than 1. There are several
tests of the client in this package, including features such as group messaging,
file transfer, etc. Whenever a new feature is introduced to the client by the
xx network development team, a new test for this feature
is added to this testing suite via the run script (`run.sh`)
## Local Network
The [localNetwork package](./localNetwork) is a more general-use network tool.
This package will run a local version of the xx network on a single machine until a
manually killed by the user. This can be done using either the `run.sh` or the `runpublish.sh` scripts.
With this network established, a developer may,
for example, test the xxDK.
## How to manually run locally
1. Build the binaries under test for your operating system and place them in
1. Build the binaries for your operating system and place them in
the `bin` directory.
1. `cd` to `basice2e/` and run `run.sh`. Observe the results and inspect the
2. `cd` to any of the three previously mentioned directories and run `run.sh`. Observe the results and inspect the
logs if things go wrong.
1. Make changes to the `run.sh` script, config files, and binaries as needed
3. OPTIONAL: Make changes to the `run.sh` script, config files, and binaries as needed
based on your analysis of the logs. You may want to add more logging or build
the binaries under test with race condition checking to track down problems.
## What runs on continuous integration?
## Scripts
The `master` branch of integration runs whenever you merge anything to the
`master` branch of any of the projects that integration tests. The CI server
downloads the latest `master` branch binaries that any CI server built and
uses them to run `basice2e/run.sh`.
### `build.sh`
The benchmark branch of integration runs nightly and produces information about
how fast the software runs. It doesn't provide the full performance picture
because it runs on one modest CI server, rather than on a team of powerful
servers. However, the information it provides is sometimes useful.
[`build.sh`](./build.sh) generates version information for all repositories under test and
builds binaries for them in the `bin/` directory.
So, if you make changes that break integration and merge the fixes to the
`master` branch of integration, you ought to also merge the `master` branch
into the `benchmark` branch so that the benchmarks will continue to function.
### `download_cmix_binaries.sh`
## Automate running locally
The script [`download_cmix_binaries.sh`](./download_cmix_binaries.sh) accepts an optional flag that
specifies which platform to download the binaries for. If no flag is specified,
then the script defaults to the Linux binaries. Refer to the table below for
details on the flags.
`build.sh` generates version information for all repositories under test and
builds binaries for them in the `bin/` directory.
|Long flag|Short flag|Effect|
|---|---|---|
|linux|l|downloads the Linux binaries|
|mac|m|downloads the Mac binaries|
A second argument can be provided which changes where the script downloads from.
By default it downloads from a public bucket which includes release and master builds.
|Flag name|Short flag|Effect|
|---|---|---|
|dev downloads|d|downloads from internal CI |
This script will require additional set-up steps, see the [Additional Set-Up](#Additional-Set-Up) section for
details.
### download.sh
`download_cmix_binaries` downloads binaries from certain branches into the `bin/` directory.
The targeted operating system for the binaries can be specified via command line arguments.
[`download.sh`](./download.sh) will download all network related repositories to the working
directory. Each repository will be individually built, with the binary being moved
to the `binaries/` directory, for the run script (`run.sh`) to initiate. This
will not require additional steps like `download_cmix_binaries.sh`, it will use up more
local storage. This will download binaries from release by default.
If you want to build and run custom binaries off of custom branches, you may create a branch in
local environment styled as `feature/[INSERT_PROJECT_BRANCH]` and run the download script
checked out into that feature branch.
### `update.sh`
`update.sh` runs `git pull` for each repo under test, and by uncommenting the
relevant code, checks out the `master` branch of each repo before pulling. This
......@@ -57,3 +100,39 @@ resulting logs, set the INTEGRATION\_EDITOR environment variable:
If you need to make a lot of exploratory changes to get things integrated,
using these utility scripts can speed up the process.
### Additional Set Up
You will need to add a personal access token to your environment vars to download binaries via the
`download_cmix_binaries.sh`. You can generate one [here](https://gitlab.com/-/profile/personal_access_tokens),
giving it the "api" scope.
Please add the following to your `~/.zshrc` or `~/.bash_profile` depending on your shell
(You could most likely find out what shell you're using by running `echo $0` in the terminal).
```
export GITLAB_ACCESS_TOKEN=token_here
```
You could also invoke the script with the var, if you don't want to set it in your file or use
a different token temporarily.
```
GITLAB_ACCESS_TOKEN=token_here ./download_cmix_binaries.sh [l/m] d
```
The script downloads from the CI when the second argument into it (the one after the platform flag) is `d`.
## What runs on continuous integration? (Team Only)
The `master` branch of integration runs whenever you merge anything to the
`master` branch of any of the projects that integration tests. The CI server
downloads the latest `master` branch binaries that any CI server built and
uses them to run `basice2e/run.sh`.
The benchmark branch of integration runs nightly and produces information about
how fast the software runs. It doesn't provide the full performance picture
because it runs on one modest CI server, rather than on a team of powerful
servers. However, the information it provides is sometimes useful.
So, if you make changes that break integration and merge the fixes to the
`master` branch of integration, you ought to also merge the `master` branch
into the `benchmark` branch so that the benchmarks will continue to function.
\ No newline at end of file
......@@ -39,17 +39,6 @@ permissiveIPChecking: true
# Expects duration in"h". (Defaults to 1 weeks (168 hours)
messageRetentionLimit: "168h"
# "Location of the user discovery contact file.
udContactPath: "results/udbContact.bin"
udbAddress: "127.0.0.1:18001"
# Path to UDB public key PEM file
udbPubKeyPemPath: "../keys/cmix.rip.crt"
clientRegCodes:
- "FFFF"
- "GGGG"
# Path to the file containing the round ID
roundIdPath: "results/roundId.txt"
......@@ -70,8 +59,9 @@ ndfOutputPath: "results/permissions-ndfoutput.json"
# === REQUIRED FOR ENABLING TLS ===
# Path to the UDB certificate file
udbCertPath: "../keys/cmix.rip.crt"
# Path to the certificate file
serverCertPath: "../keys/cmix.rip.crt"
# "Location of the user discovery contact file.
udContactPath: "results/udbContact.bin"
udbAddress: "127.0.0.1:18001"
# Time interval (in minutes) in which the database is
# checked for banned nodes
......@@ -95,6 +85,3 @@ RegCodesFilePath: "regCodes.json"
# Set address space size for ephemeral IDs
addressSpace: 32
# Public address used in NDF to give to client
registrationAddress: "0.0.0.0:11421"
#!/bin/bash
# If we are on a feature branch, add it to the eval list
FBRANCH=$(git rev-parse --abbrev-ref HEAD)
if [[ "$CI_BUILD_REF_NAME" != "" ]]; then
FBRANCH=$CI_BUILD_REF_NAME
fi
FBRANCH=$(echo $FBRANCH | grep feature)
# Also check for the branch name without the "feature" on it.
FBRANCH2=$(echo $FBRANCH | sed 's/feature\///g')
LOCALPATH=$(pwd)
echo "Local path: $LOCALPATH"
BINARYPATH=$LOCALPATH/bin
# Clean up pathing
rm -rf gitlab.com/*
rm -rf bin/*
mkdir -p bin
mkdir -p bin
CHECKOUTBRANCH=""
setCheckoutBranch() {
CHECKOUTBRANCH="release"
if [ -z "$FBRANCH"]; then
CHECKOUTBRANCH=$FBRANCH
fi
if [ -z "$FBRANCH2"]; then
CHECKOUTBRANCH=$FBRANCH2
fi
}
# Download client
git clone https://git.xx.network/elixxir/client gitlab.com/elixxir/client
pushd gitlab.com/elixxir/client
setCheckoutBranch
git checkout $CHECKOUTBRANCH
go mod vendor -v
go mod tidy
go build -mod vendor -o "$LOCALPATH/bin/client" main.go
go build -mod vendor -o "$BINARYPATH/client" main.go
popd
# Download UD
echo "Downloading user discovery..."
git clone https://git.xx.network/elixxir/user-discovery-bot gitlab.com/elixxir/user-discovery-bot
pushd gitlab.com/elixxir/user-discovery-bot
setCheckoutBranch
git checkout $CHECKOUTBRANCH
go mod vendor -v
go mod tidy
go build -mod vendor -o "$LOCALPATH/bin/udb" main.go
go build -mod vendor -o "$BINARYPATH/udb" main.go
popd
echo "Downloading permissioning server..."
# Download scheduling server
echo "Downloading scheduling server..."
git clone https://git.xx.network/elixxir/registration gitlab.com/elixxir/registration
pushd gitlab.com/elixxir/registration
setCheckoutBranch
git checkout $CHECKOUTBRANCH
go mod vendor -v
go mod tidy
go build -mod vendor -o "$LOCALPATH/bin/permissioning" main.go
go build -mod vendor -o "$BINARYPATH/permissioning" main.go
popd
# Download client registrar
echo "Downloading client registrar"
git clone https://git.xx.network/elixxir/client-registrar.git gitlab.com/elixxir/client-registrar
pushd gitlab.com/elixxir/client-registrar
setCheckoutBranch
git checkout $CHECKOUTBRANCH
go mod vendor -v
go mod tidy
go build -mod vendor -o "$LOCALPATH/bin/client-registrar" gitlab.com/elixxir/client-registrar
go build -mod vendor -o "$BINARYPATH/client-registrar" gitlab.com/elixxir/client-registrar
popd
# Download cMix node
echo "Downloading cMix node..."
git clone https://git.xx.network/elixxir/server gitlab.com/elixxir/server
pushd gitlab.com/elixxir/server
setCheckoutBranch
git checkout $CHECKOUTBRANCH
go mod vendor -v
go mod tidy
go build -mod vendor -o "$LOCALPATH/bin/server" main.go
go build -mod vendor -o "$BINARYPATH/server main".go
popd
# Download cMix gateway
echo "Downloading cMix gateway..."
git clone https://git.xx.network/elixxir/gateway gitlab.com/elixxir/gateway
pushd gitlab.com/elixxir/gateway
setCheckoutBranch
git checkout $CHECKOUTBRANCH
go mod vendor -v
go mod tidy
go build -mod vendor -o "$LOCALPATH/bin/gateway" main.go
make clean
go build -mod vendor -o "$BINARYPATH/gateway" main.go
popd
# Local Continuously Running Network (localNetwork)
This tool runs several servers as a local simulation of the xx network.
The basic structure is as follows:
* 3 cMix Nodes, BatchSize of 32
* 3 Gateways, each connected to its own node
* User Discovery Bot
* Scheduling Server
* Client Registrar
With these tools you may run the xxDK off of the produced [ndf](./ndf.json), testing locally without
having to operate on MainNet or any other live network.
## Operating the Network
To run the local network, you only need to run either `run.sh` or `runpublic.sh`. The difference
between these two scripts is described below, in the [scripts section](#scripts). Below is an example of running
`run.sh`:
```commandline
./run.sh
rm: cannot remove 'gateway*-knownRound': No such file or directory
rm: cannot remove 'errServer-*': No such file or directory
rm: cannot remove '*.log': No such file or directory
rm: cannot remove 'roundId.txt': No such file or directory
rm: cannot remove '*-knownRound': No such file or directory
rm: cannot remove 'updateId*': No such file or directory
rm: cannot remove 'lastupdateid*': No such file or directory
rm: cannot remove 'udbsession': No such file or directory
STARTING SERVERS...
Permissioning: 112749
Client Registrar: 112750
Server 0: 112757
Server 1: 112762
Server 2: 112763
Gateway 0 -- 112774
Gateway 1 -- 112775
Gateway 2 -- 112776
You can't use the network until rounds run.
If it doesn't happen after 1 minute, please Ctrl+C
and review logs for what went wrong.
Waiting for rounds to run..............STARTING UDB...
UDB: 112937
\nNetwork rounds have run. You may now attempt to connect.
Press enter to exit...
```
This script will run continuously until the user has sent a kill signal. The run script expects
`Enter/Return` once the network is set up. However, at any point prior of after the network is set
up, the user may kill the script using standard kill signals (`CTR+C`, `CTR+D`, etc.).
## Scripts
### `run.sh`
The `run.sh` script will run the network with internal IP addresses. This will allow the user
to test the xxDK from the machine running the local network.
### runpublish.sh`
The `runpublish.sh` runs the network with remotely accessible IP addresses. This
will allow the user to test the xxDK from another machine, provided they have passed the ndf
along.
## Configurability of Local Network
If you wish to test with a larger local network, you may use the [config file generation script](./configGen/gen.py).
This will generate a programmable number of gateways/servers config files.
The snippet below gives an example on how to run this script:
```commandline
$ cd configGen/
$ python3 gen.py
Total number of nodes: 9
Minimum number of nodes online to start network: 3
Size of each team: 3
```
This example generates 9 cMix nodes with 9 associated gateways. The rounds will have 3 nodes in a team,
and the network only needs 3 nodes running to start running rounds.
Once config files have been generated, you need only execute the run script to run a network of the desired size
and specifications. Please note that this network does run locally, and as such larger networks
may be resource intensive (depending on the user's machine).
# ==================================
# Client Registrar Configuration
# ==================================
# Log message level (0 = info, 1 = debug, >1 = trace)
logLevel: 0
# Path to log file
logPath: "results/client-registrar.log"
# Public address, used in NDF it gives to client
publicAddress: "0.0.0.0:11421"
# The listening port of this server
port: 11421
# === REQUIRED FOR ENABLING TLS ===
# Path to the registration server private key file
keyPath: "../keys/cmix.rip.key"
# Path to the registration server certificate file
certPath: "../keys/cmix.rip.crt"
# Maximum number of connections per period
userRegCapacity: 1000
# How often the number of connections is reset
userRegLeakPeriod: "24h"
# Database connection information
dbUsername: "cmix"
dbPassword: ""
dbName: "cmix_server"
dbAddress: ""
# List of client codes to be added to the database (for testing)
clientRegCodes:
- "AAAA"
- "BBBB"
- "CCCC"
################################################################################
## Copyright © 2018 Privategrity Corporation #
## #
## All rights reserved. #
################################################################################
##
# Gateway Configuration File
##
# Log message level
loglevel: 0
# Output log file
log: "results/gateways/gateway-0.log"
# Port for Gateway to listen on. Gateway must be the only listener on this port.
# Required field.
Port: 8200
# Local IP address of the Gateway, used for internal listening. Expects an IPv4
# address without a port. (Default "0.0.0.0")
listeningAddress: ""
# The public IPv4 address of the Gateway, as reported to the network, to use
# instead of dynamically looking up Gateway's own IP address. If a port is not
# included, then the port flag is used instead.
overridePublicIP: "0.0.0.0"
# The public IP address of the Node associated with this Gateway.
cmixAddress: "{NODE_ADDR}"
# Period in which the message cleanup function executes. Recommended period is on the order of a minute.
messageTimeout: "1800s"
# Path to where the IDF is saved. This is used by the wrapper management script.
idfPath: "results/gateways/misc/gatewayIDF-0.json"
# === REQUIRED FOR ENABLING TLS ===
# Path to the private key file
keyPath: "../keys/cmix.rip.key"
# Path to the certificate file
certPath: "../keys/cmix.rip.crt"
# Path to the permissioning certificate
schedulingCertPath: "../keys/cmix.rip.crt"
# Path to the certificate file
cmixCertPath: "../keys/cmix.rip.crt"
# How often the periodic storage tracker checks for items older than the
# retention period value. Expects duration in "s", "m", "h". (Defaults to 5
# minutes)
cleanupInterval: 5m
# How long a message record should last in the gossip buffer if it arrives
# before the Gateway starts handling the gossip. (Default 300s)
bufferExpiration: 300s
# Frequency with which to check the gossip buffer. Should be long, since the
# thread takes a lock each time it checks the buffer. (Default 150s)
monitorThreadFrequency: 150s
# Flags for rate limiting communications
# The capacity of rate limiting buckets in the map. (Default 20)
capacity: 20
# The rate that the rate limiting bucket leaks tokens at [tokens/ns]. (Default 3)
leakedTokens: 3
# How often the number of leaked tokens is leaked from the bucket. (Default 1ms)
leakDuration: 1ms
# How often inactive buckets are removed. (Default 10s)
pollDuration: 10s
# The max age of a bucket without activity before it is removed. (Default 10s)
bucketMaxAge: 10s
devMode: true
import os
import string
import random
def randomString(stringLength=4):
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for i in range(stringLength))
nodes = int(input("Total number of nodes: "))
minStart = int(input("Minimum number of nodes online to start network: "))
teamSize = int(input("Size of each team: "))
# Array of integers for ports of each server and gateway in the network
gateway_ports = []
node_ports = []
node_regCodes = []
server_template = ""
with open("server_template.yaml") as f:
server_template = f.read()
gateway_template = ""
with open("gateway_template.yaml") as f:
gateway_template = f.read()
reg_template = ""
with open("permissioning_template.yaml") as f:
reg_template = f.read()
reg_json_template = ""
with open("registration_template.json") as f:
reg_json_template = f.read()
# Generate a list of all ports servers and gateways occupy. Doing this as a
# separate step because their configs need every one listed, and generating them
# once is lighter on CPU cycles.
for i in range(nodes):
gateway_ports.append(8200+i)
node_ports.append(11200+i)
regCode = randomString()
# If this regCode is already in the list, we loop until we get one that
# isn't
while regCode in node_regCodes:
regCode = randomString()
node_regCodes.append(regCode)
# Generate server and gateway configs
for i in range(nodes):
with open("../server-{}.yaml".format(i), 'w') as f:
# Array of strings defining node and gateway IPs and ports
node_addrs = []
node_addrs.append("\"{}\"".format(node_ports[i]))
# TODO: replace iplistoutput, idf, metrics log
# Create a new config based on template
s_config = server_template.replace("server-1", "server-" + str(i)) \
.replace("gateway-1", "gateway-" + str(i)) \
.replace("metrics-server-0", "metrics-server-" + str(i)) \
.replace("ipList-1", "ipList-" + str(i)) \
.replace("{NODE_ADDR}", "\r\n".join(node_addrs)) \
.replace("{DB_ADDR}", "".join(["\"\""])) \
.replace("AAAA", node_regCodes[i]) \
.replace("nodeID-0.json", "nodeID-"+str(i)+".json") \
.replace("11200", str(node_ports[i])) \
.replace("results/servers/server-0", "results/servers/server-" + str(i)) \
.replace("errServer-0.txt", "errServer-"+str(i)+".txt")
f.write(s_config)
with open("../gateway-{}.yaml".format(i), 'w') as f:
# Array of strings defining node and gateway IPs and ports
node_addrs = []
node_addrs.append("0.0.0.0:{}".format(node_ports[i]))
# Create a new config based on template
g_config = gateway_template.replace("server-1", "server-" + str(i)) \
.replace("gateway-0", "gateway-" + str(i)) \
.replace("8200", str(gateway_ports[i])) \
.replace("{NODE_ADDR}", "".join(node_addrs)) \
.replace("gatewayIDF-0", "gatewayIDF-" + str(i))
f.write(g_config)
# Generate permissioning stuff
with open("../registration.json", "w") as f:
config = reg_json_template.replace("{teamSize}", str(teamSize))
f.write(config)
with open("../permissioning-actual.yaml", "w") as f:
config = reg_template.replace("{minStart}", str(minStart))
f.write(config)
# Generate server regCodes file
with open("../regCodes.json", "w") as f:
f.write("[")
countries = ["CR", "GB", "SK", "HR", "IQ", "RU"]
for i in range(nodes):
f.write("{\"RegCode\": \"" + node_regCodes[i] + "\", \"Order\": \"" + \
countries[i % len(countries)] + "\"}")
# If not the last element, write a comma
if i is not (nodes - 1):
f.write(",")
f.write("]")
# ==================================
# Permissioning Server Configuration
# ==================================
# Log message level
logLevel: 1
# Path to log file
logPath: "results/permissioning.log"
# The listening port of this server
port: 18000
# Database connection information
dbUsername: ""
dbPassword: ""
dbName: ""
dbAddress: "0.0.0.0:6969"
# Minimum number of nodes to begin running rounds. this differs from the number of members
# in a team because some scheduling algorithms may require multiple teams worth of nodes at minimum
minimumNodes: 3
# The minimum version required of gateways to connect
minGatewayVersion: "3.0.0"
# The minimum version required of servers to connect
minServerVersion: "3.0.0"
# The minimum version required of a client to connect
minClientVersion: "4.0.0"
# Time interval (in seconds) between committing Node statistics to storage
nodeMetricInterval: 3
# For testing, use the sequence as the country code. Do not use the geobinning database
disableGeoBinning: true
# For testing, do not exclude node or gateway IPs which are local to the machine
allowLocalIPs: true
# Disable pruning of NDF for offline nodes
# if set to false, network will sleep for five minutes on start
disableNDFPruning: true
permissiveIPChecking: true
# How long rounds will be tracked by gateways. Rounds (and messages as an extension)
# prior to this period are not guaranteed to be delivered to clients.
# Expects duration in"h". (Defaults to 1 weeks (168 hours)
messageRetentionLimit: "168h"
# "Location of the user discovery contact file.
udContactPath: "results/udbContact.bin"
udbAddress: "127.0.0.1:18001"
# === REQUIRED FOR ENABLING TLS ===
# Path to the UDB certificate file
udbCertPath: "../keys/cmix.rip.crt"
# Path to the file containing the round ID
roundIdPath: "results/roundId.txt"
# Path to the file containing the update ID
updateIdPath: "results/updateId.txt"
# Path to whitelisted IPs for client ratelimiting
whitelistedIpAddressesPath: "whitelist.txt"
# === REQUIRED FOR ENABLING TLS ===
# Path to the private key file
keyPath: "../keys/cmix.rip.key"
# Path to the certificate file
certPath: "../keys/cmix.rip.crt"
# Path to the node topology permissioning info
ndfOutputPath: "ndf.json"
# Time interval (in minutes) in which the database is
# checked for banned nodes
BanTrackerInterval: "3"
groups:
cmix:
prime: "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF"
generator: "2"
e2e:
prime: "E2EE983D031DC1DB6F1A7A67DF0E9A8E5561DB8E8D49413394C049B7A8ACCEDC298708F121951D9CF920EC5D146727AA4AE535B0922C688B55B3DD2AEDF6C01C94764DAB937935AA83BE36E67760713AB44A6337C20E7861575E745D31F8B9E9AD8412118C62A3E2E29DF46B0864D0C951C394A5CBBDC6ADC718DD2A3E041023DBB5AB23EBB4742DE9C1687B5B34FA48C3521632C4A530E8FFB1BC51DADDF453B0B2717C2BC6669ED76B4BDD5C9FF558E88F26E5785302BEDBCA23EAC5ACE92096EE8A60642FB61E8F3D24990B8CB12EE448EEF78E184C7242DD161C7738F32BF29A841698978825B4111B4BC3E1E198455095958333D776D8B2BEEED3A1A1A221A6E37E664A64B83981C46FFDDC1A45E3D5211AAF8BFBC072768C4F50D7D7803D2D4F278DE8014A47323631D7E064DE81C0C6BFA43EF0E6998860F1390B5D3FEACAF1696015CB79C3F9C2D93D961120CD0E5F12CBB687EAB045241F96789C38E89D796138E6319BE62E35D87B1048CA28BE389B575E994DCA755471584A09EC723742DC35873847AEF49F66E43873"
generator: "2"
# Path to file with config for scheduling algorithem within the user directory
schedulingConfigPath: "registration_template.json"
# Path to JSON file with list of Node registration codes (in order of network
# placement)
RegCodesFilePath: "regCodes.json"
# Set address space size for ephemeral IDs
addressSpace: 32
{
"TeamSize": {teamSize},
"BatchSize": 32,
"MinimumDelay": 60,
"RealtimeDelay": 120,
"SemiOptimalOrdering": true,
"Threshold": 0.3,
"NodeCleanUpInterval": 3,
"ResourceQueueTimeout": 300000
}
\ No newline at end of file
# START YAML ===
# registration code used for first time registration. Unique. Provided by xx network
registrationCode: "AAAA"
useGPU: false
devMode: true
rawPermAddr: true
cmix:
paths:
# Path where the ID will be stored after the ID is created on first run
# used by the wrapper script
idf: "results/servers/nodeID-0.json"
# Path to the self signed TLS cert that the node uses for identification
cert: "../keys/cmix.rip.crt"
# Path to the private key for the self signed TLS cert
key: "../keys/cmix.rip.key"
# Path to where the log will be stored
log: "results/servers/server-0.log"
#
ipListOutput: "results/servers/ipList-1.txt"
# Path where an error file will be placed in the event of a fatal error
# used by the wrapper script
errOutput: "results/servers/errServer-0.txt"
# port the node will communicate on
port: 11200
overridePublicIP: "0.0.0.0"
database:
name: "cmix_server"
username: "cmix"
password: ""
address: ""
gateway:
paths:
# Path to the self signed TLS cert used by the gateway
cert: "../keys/cmix.rip.crt"
scheduling:
paths:
# Path to the self signed TLS cert used by the permissioning. Provided by xx network
cert: "../keys/cmix.rip.crt"
# IP Address of the permissioning server, provided by xx network
address: "0.0.0.0:18000"
metrics:
# location of stored metrics data. Modification to set to permissioning
# server instead of saving will be made at a later date
log: "results/servers/metrics-server-0.log"
# === END YAML
################################################################################
## Copyright © 2018 Privategrity Corporation #
## #
## All rights reserved. #
################################################################################
##
# Gateway Configuration File
##
# Log message level
loglevel: 0
# Output log file
log: "results/gateways/gateway-0.log"
# Port for Gateway to listen on. Gateway must be the only listener on this port.
# Required field.
Port: 8200
# Local IP address of the Gateway, used for internal listening. Expects an IPv4
# address without a port. (Default "0.0.0.0")
listeningAddress: ""
# The public IPv4 address of the Gateway, as reported to the network, to use
# instead of dynamically looking up Gateway's own IP address. If a port is not
# included, then the port flag is used instead.
overridePublicIP: "0.0.0.0"
# The public IP address of the Node associated with this Gateway.
cmixAddress: "0.0.0.0:11200"
# Period in which the message cleanup function executes. Recommended period is on the order of a minute.
messageTimeout: "1800s"
# Path to where the IDF is saved. This is used by the wrapper management script.
idfPath: "results/gateways/misc/gatewayIDF-0.json"
# === REQUIRED FOR ENABLING TLS ===
# Path to the private key file
keyPath: "../keys/cmix.rip.key"
# Path to the certificate file
certPath: "../keys/cmix.rip.crt"
# Path to the permissioning certificate
schedulingCertPath: "../keys/cmix.rip.crt"
# Path to the certificate file
cmixCertPath: "../keys/cmix.rip.crt"
# How often the periodic storage tracker checks for items older than the
# retention period value. Expects duration in "s", "m", "h". (Defaults to 5
# minutes)
cleanupInterval: 5m
# How long a message record should last in the gossip buffer if it arrives
# before the Gateway starts handling the gossip. (Default 300s)
bufferExpiration: 300s
# Frequency with which to check the gossip buffer. Should be long, since the
# thread takes a lock each time it checks the buffer. (Default 150s)
monitorThreadFrequency: 150s
# Flags for rate limiting communications
# The capacity of rate limiting buckets in the map. (Default 20)
capacity: 20
# The rate that the rate limiting bucket leaks tokens at [tokens/ns]. (Default 3)
leakedTokens: 3
# How often the number of leaked tokens is leaked from the bucket. (Default 1ms)
leakDuration: 1ms
# How often inactive buckets are removed. (Default 10s)
pollDuration: 10s
# The max age of a bucket without activity before it is removed. (Default 10s)
bucketMaxAge: 10s
devMode: true
################################################################################
## Copyright © 2018 Privategrity Corporation #
## #
## All rights reserved. #
################################################################################
##
# Gateway Configuration File
##
# Log message level
loglevel: 0
# Output log file
log: "results/gateways/gateway-1.log"
# Port for Gateway to listen on. Gateway must be the only listener on this port.
# Required field.
Port: 8201
# Local IP address of the Gateway, used for internal listening. Expects an IPv4
# address without a port. (Default "0.0.0.0")
listeningAddress: ""
# The public IPv4 address of the Gateway, as reported to the network, to use
# instead of dynamically looking up Gateway's own IP address. If a port is not
# included, then the port flag is used instead.
overridePublicIP: "0.0.0.0"
# The public IP address of the Node associated with this Gateway.
cmixAddress: "0.0.0.0:11201"
# Period in which the message cleanup function executes. Recommended period is on the order of a minute.
messageTimeout: "1800s"
# Path to where the IDF is saved. This is used by the wrapper management script.
idfPath: "results/gateways/misc/gatewayIDF-1.json"
# === REQUIRED FOR ENABLING TLS ===
# Path to the private key file
keyPath: "../keys/cmix.rip.key"
# Path to the certificate file
certPath: "../keys/cmix.rip.crt"
# Path to the permissioning certificate
schedulingCertPath: "../keys/cmix.rip.crt"
# Path to the certificate file
cmixCertPath: "../keys/cmix.rip.crt"
# How often the periodic storage tracker checks for items older than the
# retention period value. Expects duration in "s", "m", "h". (Defaults to 5
# minutes)
cleanupInterval: 5m
# How long a message record should last in the gossip buffer if it arrives
# before the Gateway starts handling the gossip. (Default 300s)
bufferExpiration: 300s
# Frequency with which to check the gossip buffer. Should be long, since the
# thread takes a lock each time it checks the buffer. (Default 150s)
monitorThreadFrequency: 150s
# Flags for rate limiting communications
# The capacity of rate limiting buckets in the map. (Default 20)
capacity: 20
# The rate that the rate limiting bucket leaks tokens at [tokens/ns]. (Default 3)
leakedTokens: 3
# How often the number of leaked tokens is leaked from the bucket. (Default 1ms)
leakDuration: 1ms
# How often inactive buckets are removed. (Default 10s)
pollDuration: 10s
# The max age of a bucket without activity before it is removed. (Default 10s)
bucketMaxAge: 10s
devMode: true
################################################################################
## Copyright © 2018 Privategrity Corporation #
## #
## All rights reserved. #
################################################################################
##
# Gateway Configuration File
##
# Log message level
loglevel: 0
# Output log file
log: "results/gateways/gateway-2.log"
# Port for Gateway to listen on. Gateway must be the only listener on this port.
# Required field.
Port: 8202
# Local IP address of the Gateway, used for internal listening. Expects an IPv4
# address without a port. (Default "0.0.0.0")
listeningAddress: ""
# The public IPv4 address of the Gateway, as reported to the network, to use
# instead of dynamically looking up Gateway's own IP address. If a port is not
# included, then the port flag is used instead.
overridePublicIP: "0.0.0.0"
# The public IP address of the Node associated with this Gateway.
cmixAddress: "0.0.0.0:11202"
# Period in which the message cleanup function executes. Recommended period is on the order of a minute.
messageTimeout: "1800s"
# Path to where the IDF is saved. This is used by the wrapper management script.
idfPath: "results/gateways/misc/gatewayIDF-2.json"
# === REQUIRED FOR ENABLING TLS ===
# Path to the private key file
keyPath: "../keys/cmix.rip.key"
# Path to the certificate file
certPath: "../keys/cmix.rip.crt"
# Path to the permissioning certificate
schedulingCertPath: "../keys/cmix.rip.crt"
# Path to the certificate file
cmixCertPath: "../keys/cmix.rip.crt"
# How often the periodic storage tracker checks for items older than the
# retention period value. Expects duration in "s", "m", "h". (Defaults to 5
# minutes)
cleanupInterval: 5m
# How long a message record should last in the gossip buffer if it arrives
# before the Gateway starts handling the gossip. (Default 300s)
bufferExpiration: 300s
# Frequency with which to check the gossip buffer. Should be long, since the
# thread takes a lock each time it checks the buffer. (Default 150s)
monitorThreadFrequency: 150s
# Flags for rate limiting communications
# The capacity of rate limiting buckets in the map. (Default 20)
capacity: 20
# The rate that the rate limiting bucket leaks tokens at [tokens/ns]. (Default 3)
leakedTokens: 3
# How often the number of leaked tokens is leaked from the bucket. (Default 1ms)
leakDuration: 1ms
# How often inactive buckets are removed. (Default 10s)
pollDuration: 10s
# The max age of a bucket without activity before it is removed. (Default 10s)
bucketMaxAge: 10s
devMode: true
{"Timestamp":"2019-12-20T16:29:17.475068867-08:00","Gateways":[{"Id":[80,88,123,40,173,239,204,78,152,58,208,191,117,100,128,180,222,99,203,138,138,126,236,35,255,230,36,22,15,229,159,206,1],"Address":"0.0.0.0:8200","Tls_certificate":"-----BEGIN CERTIFICATE-----\n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\n-----END CERTIFICATE-----\n"},{"Id":[119,202,117,27,100,163,223,134,153,205,212,237,214,173,127,236,24,192,194,144,189,255,197,189,165,121,229,68,140,42,188,246,1],"Address":"0.0.0.0:8300","Tls_certificate":"-----BEGIN CERTIFICATE-----\nMIIGHTCCBAWgAwIBAgIUAUBluP82Kv2R/dKPcpsl+9FLsXQwDQYJKoZIhvcNAQEL\nBQAwgZIxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTESMBAGA1UEBwwJQ2xhcmVt\nb250MRAwDgYDVQQKDAdFbGl4eGlyMRQwEgYDVQQLDAtEZXZlbG9wbWVudDEZMBcG\nA1UEAwwQZ2F0ZXdheS5jbWl4LnJpcDEfMB0GCSqGSIb3DQEJARYQYWRtaW5AZWxp\neHhpci5pbzAeFw0xOTA4MTYwMDQ3NTFaFw0yMDA4MTUwMDQ3NTFaMIGSMQswCQYD\nVQQGEwJVUzELMAkGA1UECAwCQ0ExEjAQBgNVBAcMCUNsYXJlbW9udDEQMA4GA1UE\nCgwHRWxpeHhpcjEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxGTAXBgNVBAMMEGdhdGV3\nYXkuY21peC5yaXAxHzAdBgkqhkiG9w0BCQEWEGFkbWluQGVsaXh4aXIuaW8wggIi\nMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC0/EYr1DxZ59vWcqLybsW1oIiT\nAeDu1wQDHLW1qhsvn3KS1DNbQaan0b0xrAZAai3vSrEe9YIq8q7ew7DwiJEUVGN6\n+mlZQ7mQrzjpuWXjW8jmX1OZEp9pPe7Ze+nH9wqyMAt2RN1zawwxlb/YNqeRxi+v\ndTJ4yWeWXrxlqhgXml5miSlMMxHU0XjcZjLfJPn0xo2oHow84vT4TBdT+pwCFoId\n8JlxRjvyr16rO9KkB9nlVsJ0ov+fjXAirdgoka4tKjIDiYofiCDuZfqFccPQkdB4\n0vuFNymEWET1WC0w6PNo5iilOggBDvYjFLXhwC+KOF1lJ5dA7uAPW3l9iLhioGkW\nZd78Q3EgXtK6Kge4dW3DvJVeWLdsJwEIJUuuhjF2bB9oknTocHPwt8jvDaExuOO/\n0Gits0TQdeNDBDMmSxZQ1DJZ+NIRUl2YLfySXfjaZSqL1u7V0EaDWxhxRWQgI6EB\n+QcSGvqrJ0/Y/S5+cRHU5rd2WORwTUOCzjeQvvQXIQabGr5dInfHEdcuKoTFYQ0H\nLa50zEIt94aE2n/Dp0nvVbai+XyGZiSHurKsx5NaY70E1j+XFbiuz0uD9SmqGfgQ\nhj5YG+ml08q7DM3ySP352bXcM5D3Y3voLxc+Sr0LjUHAIUddClI4CLC5l0oJZC6O\nEHhUroCSxk9ufRmXYQIDAQABo2kwZzAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW\nBBRzwHeD/lxvYa6VAoZtm/LCYi8bujAfBgNVHSMEGDAWgBRzwHeD/lxvYa6VAoZt\nm/LCYi8bujAUBgNVHREEDTALgglmb28uY28udWswDQYJKoZIhvcNAQELBQADggIB\nAFLe9m8UrCgrRopBOsDTQrQUVpodG9ulfEHDZ3h+8y3rVth2O2/Cvfc11e5chXBW\n+YxItdmTFJJgOP/tdaUZUw43wv9ilNY/V9DfCOirYOi7+mD6hCtBakaxPz50vv3L\nGhfZM+esLhzEgU5xoaR5kdsjerqejBNUMdT8M3hGUhJeFQa0yx1sHGrqsU9i+JGc\nioamZM7zr5VP9uO7fOkA5wX8dCuvdgD1bTP4ISB1hdPAnoRiKTe8jaI/NraWwcFx\nSAznTpVxKwjzJ1cEytGLXw+3Sb1UeqTb4a8GLrMDofi/P7iUDLnvlFRMjRvFkoyH\nIn5pq/cWr0ezmEceOZ833aNWvSirKTJA0gJav+kp+tUPUIGjIATlJq1kaaIKMk4I\nSvwgsGkpHS1sO93R84NDqAb/Ob4mb/pc5n76nnSeUubyxxL8p7+N2+UBH1DStWuk\n/sj73bKVvHdsw57SVkG5TYrnt7hudVQBDi8jV3iXyS1b6YDxm1dKQCS2s7D0gynf\nxURNnrjaAVNjYcvfEGLAVZsOEU30YiiAVtotbbE8Wzvh3H2saj+oH/RLEQlYdG1B\nUgCXZutZon+z1HREUJ6A/VULgJFeyinJVvr8YiVblSJg6qmLvzVSu471ENSMGsNE\n9fjH7YYTYCmkZdkNXsipF/lxaJ5sPkKT8FaHRpR6N9Nj\n-----END CERTIFICATE-----\n"},{"Id":[200,43,213,232,11,4,43,121,126,227,145,167,225,172,1,39,137,105,111,232,83,218,195,186,203,60,99,122,182,145,162,189,1],"Address":"0.0.0.0:8400","Tls_certificate":"-----BEGIN CERTIFICATE-----\n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\n-----END CERTIFICATE-----\n"}],"Nodes":[{"Id":[80,88,123,40,173,239,204,78,152,58,208,191,117,100,128,180,222,99,203,138,138,126,236,35,255,230,36,22,15,229,159,206,2],"Address":"-----BEGIN CERTIFICATE-----\n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\nJd4xiuF9ZfCGdFcwN/NHm4NFn1aKBGJK/w==\n-----END CERTIFICATE-----\n","Tls_certificate":"127.0.0.1:57966"},{"Id":[119,202,117,27,100,163,223,134,153,205,212,237,214,173,127,236,24,192,194,144,189,255,197,189,165,121,229,68,140,42,188,246,2],"Address":"-----BEGIN CERTIFICATE-----\n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\ngYLhcEAL2qjMpku9ZGWLYhV63oGEbPU4+w==\n-----END CERTIFICATE-----\n","Tls_certificate":"127.0.0.1:57962"},{"Id":[200,43,213,232,11,4,43,121,126,227,145,167,225,172,1,39,137,105,111,232,83,218,195,186,203,60,99,122,182,145,162,189,2],"Address":"-----BEGIN CERTIFICATE-----\n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\nJBoJnTRJ5Q4FR9gYHFPsJUBS4V5B2Rs42Q==\n-----END CERTIFICATE-----\n","Tls_certificate":"127.0.0.1:57964"}],"Registration":{"Address":"0.0.0.0:18000","Tls_certificate":"-----BEGIN CERTIFICATE-----\n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\n-----END CERTIFICATE-----\n"},"Udb":{"Id":[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3]},"E2e":{"Prime":"E2EE983D031DC1DB6F1A7A67DF0E9A8E5561DB8E8D49413394C049B7A8ACCEDC298708F121951D9CF920EC5D146727AA4AE535B0922C688B55B3DD2AEDF6C01C94764DAB937935AA83BE36E67760713AB44A6337C20E7861575E745D31F8B9E9AD8412118C62A3E2E29DF46B0864D0C951C394A5CBBDC6ADC718DD2A3E041023DBB5AB23EBB4742DE9C1687B5B34FA48C3521632C4A530E8FFB1BC51DADDF453B0B2717C2BC6669ED76B4BDD5C9FF558E88F26E5785302BEDBCA23EAC5ACE92096EE8A60642FB61E8F3D24990B8CB12EE448EEF78E184C7242DD161C7738F32BF29A841698978825B4111B4BC3E1E198455095958333D776D8B2BEEED3A1A1A221A6E37E664A64B83981C46FFDDC1A45E3D5211AAF8BFBC072768C4F50D7D7803D2D4F278DE8014A47323631D7E064DE81C0C6BFA43EF0E6998860F1390B5D3FEACAF1696015CB79C3F9C2D93D961120CD0E5F12CBB687EAB045241F96789C38E89D796138E6319BE62E35D87B1048CA28BE389B575E994DCA755471584A09EC723742DC35873847AEF49F66E43873","Small_prime":"","Generator":"2"},"Cmix":{"Prime":"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF","Small_prime":"","Generator":"B22FDF91EE6BA01BDE4969C1A986EA1F81C4A1795921403F3437D681D05E95167C2F6414CCB74AC8D6B3BA8C0E85C7E4DEB0E8B5256D37BC5C21C8BE068F5342858AFF2FC7FF2644EBED8B10271941C74C86CCD71AA6D2D98E4C8C70875044900F842998037A7DFB9BC63BAF1BC2800E73AF9615E4F5B869D4C6DE6E5F48FACE9CA594CC5D228CB7F763A0AD6BF6ED78B27F902D9ADA38A1FCD7D09E398CE377BB15A459044D3B8541DC6D8049B66AE1662682254E69FAD31CA0016251D0522EF8FE587A3F6E3AB1E5F9D8C2998874ABAB205217E95B234A7D3E69713B884918ADB57360B5DE97336C7DC2EB8A3FEFB0C4290E7A92FF5758529AC45273135427"}}
# ==================================
# Permissioning Server Configuration
# ==================================
# Log message level
logLevel: 1
# Path to log file
logPath: "results/permissioning.log"
# The listening port of this server
port: 18000
# Database connection information
dbUsername: ""
dbPassword: ""
dbName: ""
dbAddress: "0.0.0.0:6969"
# Minimum number of nodes to begin running rounds. this differs from the number of members
# in a team because some scheduling algorithms may require multiple teams worth of nodes at minimum
minimumNodes: 3
# The minimum version required of gateways to connect
minGatewayVersion: "3.0.0"
# The minimum version required of servers to connect
minServerVersion: "3.0.0"
# The minimum version required of a client to connect
minClientVersion: "4.0.0"
# Time interval (in seconds) between committing Node statistics to storage
nodeMetricInterval: 3
# For testing, use the sequence as the country code. Do not use the geobinning database
disableGeoBinning: true
# For testing, do not exclude node or gateway IPs which are local to the machine
allowLocalIPs: true
# Disable pruning of NDF for offline nodes
# if set to false, network will sleep for five minutes on start
disableNDFPruning: true
permissiveIPChecking: true
# How long rounds will be tracked by gateways. Rounds (and messages as an extension)
# prior to this period are not guaranteed to be delivered to clients.
# Expects duration in"h". (Defaults to 1 weeks (168 hours)
messageRetentionLimit: "168h"
# "Location of the user discovery contact file.
udContactPath: "results/udbContact.bin"
udbAddress: "127.0.0.1:18001"
# === REQUIRED FOR ENABLING TLS ===
# Path to the UDB certificate file
udbCertPath: "../keys/cmix.rip.crt"
# Path to the file containing the round ID
roundIdPath: "results/roundId.txt"
# Path to the file containing the update ID
updateIdPath: "results/updateId.txt"
# Path to whitelisted IPs for client ratelimiting
whitelistedIpAddressesPath: "whitelist.txt"
# === REQUIRED FOR ENABLING TLS ===
# Path to the private key file
keyPath: "../keys/cmix.rip.key"
# Path to the certificate file
certPath: "../keys/cmix.rip.crt"
# Path to the node topology permissioning info
ndfOutputPath: "ndf.json"
# Time interval (in minutes) in which the database is
# checked for banned nodes
BanTrackerInterval: "3"
groups:
cmix:
prime: "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF"
generator: "2"
e2e:
prime: "E2EE983D031DC1DB6F1A7A67DF0E9A8E5561DB8E8D49413394C049B7A8ACCEDC298708F121951D9CF920EC5D146727AA4AE535B0922C688B55B3DD2AEDF6C01C94764DAB937935AA83BE36E67760713AB44A6337C20E7861575E745D31F8B9E9AD8412118C62A3E2E29DF46B0864D0C951C394A5CBBDC6ADC718DD2A3E041023DBB5AB23EBB4742DE9C1687B5B34FA48C3521632C4A530E8FFB1BC51DADDF453B0B2717C2BC6669ED76B4BDD5C9FF558E88F26E5785302BEDBCA23EAC5ACE92096EE8A60642FB61E8F3D24990B8CB12EE448EEF78E184C7242DD161C7738F32BF29A841698978825B4111B4BC3E1E198455095958333D776D8B2BEEED3A1A1A221A6E37E664A64B83981C46FFDDC1A45E3D5211AAF8BFBC072768C4F50D7D7803D2D4F278DE8014A47323631D7E064DE81C0C6BFA43EF0E6998860F1390B5D3FEACAF1696015CB79C3F9C2D93D961120CD0E5F12CBB687EAB045241F96789C38E89D796138E6319BE62E35D87B1048CA28BE389B575E994DCA755471584A09EC723742DC35873847AEF49F66E43873"
generator: "2"
# Path to file with config for scheduling algorithem within the user directory
schedulingConfigPath: "registration.json"
# Path to JSON file with list of Node registration codes (in order of network
# placement)
RegCodesFilePath: "regCodes.json"
# Set address space size for ephemeral IDs
addressSpace: 32
# ==================================
# Permissioning Server Configuration
# ==================================
# Log message level
loglevel: 0
# Path to log file
logPath: "results/registration.log"
# The listening port of this server
port: 11420
# Database connection information
dbUsername: ""
dbPassword: ""
dbName: ""
dbAddress: "0.0.0.0:6969"
# Minimum number of nodes to begin running rounds. this differs from the number of members
# in a team because some scheduling algorithms may require multiple teams worth of nodes at minimum
minimumNodes: 3
# The minimum version required of gateways to connect
minGatewayVersion: "3.0.0"
# The minimum version required of servers to connect
minServerVersion: "3.0.0"
# The minimum version required of a client to connect
minClientVersion: "4.0.0"
# Time interval (in seconds) between committing Node statistics to storage
nodeMetricInterval: 3
# For testing, use the sequence as the country code. Do not use the geobinning database
disableGeoBinning: true
# For testing, do not exclude node or gateway IPs which are local to the machine
allowLocalIPs: true
# Disable pruning of NDF for offline nodes
# if set to false, network will sleep for five minutes on start
disableNDFPruning: true
permissiveIPChecking: true
# How long rounds will be tracked by gateways. Rounds (and messages as an extension)
# prior to this period are not guaranteed to be delivered to clients.
# Expects duration in"h". (Defaults to 1 weeks (168 hours)
messageRetentionLimit: "168h"
# "Location of the user discovery contact file.
udContactPath: "results/udbContact.bin"
udbAddress: "127.0.0.1:18001"
# === REQUIRED FOR ENABLING TLS ===
# Path to the UDB certificate file
udbCertPath: "../keys/cmix.rip.crt"
# Path to the file containing the round ID
roundIdPath: "results/roundId.txt"
# Path to the file containing the update ID
updateIdPath: "results/updateId.txt"
# Path to whitelisted IPs for client ratelimiting
whitelistedIpAddressesPath: "whitelist.txt"
# === REQUIRED FOR ENABLING TLS ===
# Path to the private key file
keyPath: "../keys/cmix.rip.key"
# Path to the certificate file
certPath: "../keys/cmix.rip.crt"
# Path to the node topology permissioning info
ndfOutputPath: "ndf.json"
# Time interval (in minutes) in which the database is
# checked for banned nodes
BanTrackerInterval: "3"
# E2E/CMIX Primes
groups:
cmix:
prime: "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF"
generator: "2"
e2e:
prime: "E2EE983D031DC1DB6F1A7A67DF0E9A8E5561DB8E8D49413394C049B7A8ACCEDC298708F121951D9CF920EC5D146727AA4AE535B0922C688B55B3DD2AEDF6C01C94764DAB937935AA83BE36E67760713AB44A6337C20E7861575E745D31F8B9E9AD8412118C62A3E2E29DF46B0864D0C951C394A5CBBDC6ADC718DD2A3E041023DBB5AB23EBB4742DE9C1687B5B34FA48C3521632C4A530E8FFB1BC51DADDF453B0B2717C2BC6669ED76B4BDD5C9FF558E88F26E5785302BEDBCA23EAC5ACE92096EE8A60642FB61E8F3D24990B8CB12EE448EEF78E184C7242DD161C7738F32BF29A841698978825B4111B4BC3E1E198455095958333D776D8B2BEEED3A1A1A221A6E37E664A64B83981C46FFDDC1A45E3D5211AAF8BFBC072768C4F50D7D7803D2D4F278DE8014A47323631D7E064DE81C0C6BFA43EF0E6998860F1390B5D3FEACAF1696015CB79C3F9C2D93D961120CD0E5F12CBB687EAB045241F96789C38E89D796138E6319BE62E35D87B1048CA28BE389B575E994DCA755471584A09EC723742DC35873847AEF49F66E43873"
generator: "2"
# Path to file with config for scheduling algorithm within the user directory
schedulingConfigPath: "registration.json"
# Path to JSON file with list of Node registration codes (in order of network
# placement)
RegCodesFilePath: "regCodes.json"
# Set address space size for ephemeral IDs
addressSpace: 32
[{"RegCode": "wksc", "Order": "CR"},{"RegCode": "uvdt", "Order": "GB"},{"RegCode": "npdd", "Order": "SK"}]
\ No newline at end of file
{
"TeamSize": 3,
"BatchSize": 32,
"MinimumDelay": 60,
"RealtimeDelay": 120,
"SemiOptimalOrdering": true,
"Threshold": 0.3,
"NodeCleanUpInterval": 3,
"ResourceQueueTimeout": 300000
}
\ No newline at end of file
#!/usr/bin/env bash
set -e
# Clear out the previous run's logs
rm gateway*-knownRound || true
rm errServer-* || true
rm *.log || true
rm roundId.txt || true
rm *-knownRound || true
rm updateId* || true
rm lastupdateid* || true
rm -r udbsession || true
rm -fr results || true
# Globals
SERVERLOGS=results/servers
GATEWAYLOGS=results/gateways
CLIENTOUT=results/clients
DUMMYOUT=results/dummy-console.txt
UDBOUT=results/udb-console.txt
mkdir -p $SERVERLOGS
mkdir -p $GATEWAYLOGS
## Uncomment to allow for verbose gRPC logs
#export GRPC_GO_LOG_VERBOSITY_LEVEL=99
#export GRPC_GO_LOG_SEVERITY_LEVEL=info
nodes=$(ls -1q ./server-*.yaml | wc -l | xargs)
BIN_PATH="../bin"
CONFIG_PATH="$(pwd)"
# Execute finish function on exit
trap finish EXIT
trap finish INT
echo "STARTING SERVERS..."
# Copy udbContact into place when running locally.
cp udbContact.bin results/udbContact.bin
# Run Permissioning
"$BIN_PATH"/permissioning \
--logLevel 2 -c "$CONFIG_PATH/permissioning-actual.yaml" &> results/registration_err.log &
echo "Permissioning: " $!
# Run Client Registrar
"$BIN_PATH"/client-registrar \
-l 2 -c "$CONFIG_PATH/client-registrar.yaml" &> results/clientRegistrar_err.log &
echo "Client Registrar: " $!
# Run server
for i in $(seq $nodes $END); do
x=$(($i - 1))
"$BIN_PATH"/server \
-l 2 --config "$CONFIG_PATH/server-$x.yaml" &> $SERVERLOGS/server$x\_err.log &
echo "Server $x: " $!
done
# Run Gateway
for i in $(seq $nodes $END); do
x=$(($i - 1))
"$BIN_PATH"/gateway \
--logLevel 2 --config "$CONFIG_PATH/gateway-$x.yaml" &> $GATEWAYLOGS/gw$x\_err.log &
PIDVAL=$!
echo "Gateway $x -- $PIDVAL"
done
# Pipe child PIDs into file
jobs -p > results/serverpids
finish() {
# Read in and kill all child PIDs
# NOTE: jobs -p doesn't work in a signal handler
echo "STOPPING SERVERS AND GATEWAYS..."
for job in $(cat results/serverpids)
do
echo "KILLING $job"
kill $job || true
done
sleep 5
for job in $(cat results/serverpids)
do
echo "KILL -9 $job"
kill -9 $job || true
done
set +x
}
echo "You can't use the network until rounds run."
echo "If it doesn't happen after 1 minute, please Ctrl+C"
echo "and review logs for what went wrong."
rm rid.txt || true
touch rid.txt
echo -n "Waiting for rounds to run..."
cnt=0
while [ ! -s rid.txt ] && [ $cnt -lt 240 ]; do
sleep 1
grep -a "RID 1 ReceiveFinishRealtime END" results/servers/*.log > rid.txt || true
cnt=$(($cnt + 1))
echo -n "."
done
# Run UDB
# Start a user discovery bot server
echo "STARTING UDB..."
UDBCMD="../bin/udb --logLevel 3 --config udb.yaml -l 1 --protoUserPath udbProto.json"
$UDBCMD >> $UDBOUT 2>&1 &
echo "UDB: " $!
echo $! >> results/serverpids
echo "\nNetwork rounds have run. You may now attempt to connect."
sleep 4
# Wait until user input to exit
read -p 'Press enter to exit...'
# Grab the IP of the NIC inside of our machine so we can 'sed' it into the
# config files
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
# Linux
export IP=$(netstat -nr | grep default | grep -v tun | awk '{print $2}')
elif [[ "$OSTYPE" == "darwin"* ]]; then
# macOS/iOS/watchOS/tvOS/iPadOS/some Darwin distros
export IP=$(ipconfig getifaddr $(netstat -nr | grep default | head -1 | awk '{print $4}'))
else
# Unknown.
echo I don\'t know how to get an IP from your OS!
exit
fi
# Backup the configs to a folder labelled after the epoch, so an alphabetical
# sort will sort the oldest to newest. Your oldest backup is probably the
# original files, but I would suggest trying "git reset --hard" instead if you
# just want to revert your configs.
mkdir -p configbackups
cp -r configurations configbackups/$(date +%s)
# Replace local IPs with the IP our NIC has in all config files
sed -i '.bak' "s/127\.0\.0\.1/$IP/g" configurations/*
sed -i '.bak' "s/0\.0\.0\.0/$IP/g" configurations/*
# Since we back the files up into configbackups, this is only clutter after
# the sed commands finish. We can clean it up.
rm configurations/*.bak
# Run the localenvironment
echo "Preparing to run on $IP ..."
./run.sh
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment