From bc49a02a026ccd6d44ce7e19f003ea8685fe4967 Mon Sep 17 00:00:00 2001 From: Agost Biro Date: Sat, 8 Jun 2024 13:07:00 +0200 Subject: [PATCH] Fix docs and release build commands --- CONTRIBUTING.md | 37 ++++--- Dockerfile.source | 2 +- README-linux.md | 277 ---------------------------------------------- README.md | 13 +-- Taskfile.yaml | 4 +- 5 files changed, 27 insertions(+), 306 deletions(-) delete mode 100644 README-linux.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c01756f..3282e86 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,18 +1,28 @@ -# Local development +# Contributing -The following software is required for local development (assuming MacOS ARM): +## Testing -- Go 1.20 -- Rust toolchain -- GMP 6.3: `brew install gmp` -- Install the Go plugin for uniffi-rs: `cargo install uniffi-bindgen-go --git https://github.com/NordSecurity/uniffi-bindgen-go --tag v0.2.1+v0.25.0` +Testing the [`vdf`](./vdf) and [`node`](./node) packages requires linking the +[native VDF](./crates/vdf). The `test.sh` scripts in the respective directories +help with this. -# Building release binaries +## Pull Requests -The following is software is required to build release binaries (assuming MacOS -ARM) : +Contributions are welcome – a new network is rife with opportunities. We are +in the process of updating our JIRA board so that it can be made public. The +repository has basic coding guidelines: -- [Local development](#local-development) dependencies +- 80 character line limit, with the exception where gofmt or the syntax is + impossible to achieve otherwise +- Error wrapping matching function names +- Interface composition and dependency injection with Wire + +## Building release binaries + +The following software is required to build release binaries (assuming MacOS +ARM): + +- [Running from source](README.md#running-from-source) dependencies - Docker - [Taskfile](https://taskfile.dev/) @@ -22,13 +32,8 @@ that statically link the [native VDF](./crates/vdf) for the supported platforms: ```shell task build_node_arm64_macos task build_node_arm64_linux -task build_node_arm64_macos +task build_node_amd64_linux ``` The output binaries will be in `node/build`. -# Testing - -Testing the [`vdf`](./vdf) and [`node`](./node) packages requires linking the -[native VDF](./crates/vdf). The `test.sh` scripts in the respective directories -help with this. diff --git a/Dockerfile.source b/Dockerfile.source index 5296e97..d4c9b72 100644 --- a/Dockerfile.source +++ b/Dockerfile.source @@ -1,4 +1,4 @@ -FROM golang:1.20.14-bullseye as build-base +FROM golang:1.22.4-bullseye as build-base ENV PATH="${PATH}:/root/.cargo/bin/" diff --git a/README-linux.md b/README-linux.md deleted file mode 100644 index 1880929..0000000 --- a/README-linux.md +++ /dev/null @@ -1,277 +0,0 @@ -# Quilibrium - Dawn - -Quilibrium is a decentralized alternative to platform as a service providers. -This release, mirrored to GitHub, is the Dawn release, which contains the -initial application, the MPC Powers-of-Tau Ceremony. Documentation for the -underlying technology can be found at https://www.quilibrium.com/ - -## Install Requirements - - wget https://:go.dev/dl/go1.20.14.linux-amd64.tar.gz - sudo tar -xvf go1.20.14.linux-amd64.tar.gz - sudo mv go /usr/local - sudo rm go1.20.14.linux-amd64.tar.gz - sudo nano ~/.bashrc - -At the end of the file, add these lines and save the file. - - GOROOT=/usr/local/go - GOPATH=$HOME/go - PATH=$GOPATH/bin:$GOROOT/bin:$PATH - -On command line, run - ~/.bashrc - -Check GO Version - go version - -It must show "go version go.1.20.14 linux/amd64" - -## Configure Linux Network Device Settings - -To optimize throughput and latency for large parallel job typcal of network like Q - - nano /etc/sysctl.conf - -Copy and paste the 3 lines below into the file. The values below are six hundred million. - - #Increase buffer sizes for better network performance - net.core.rmem_max=600000000 - net.core.wmem_max=600000000 - -Save and exit then - sudo sysctl -p - - -## Clone the Repo - - git clone https://github.com/QuilibriumNetwork/ceremonyclient.git - cd ceremonyclient/node - -## Quick Start - -All commands are to be run in the `node/` folder. - -If you have a voucher from the offline ceremony, first run: - - GOEXPERIMENT=arenas go run ./... -import-priv-key `cat /path/to/voucher.hex` - -If you do not, or have already run the above, run: - - GOEXPERIMENT=arenas go run ./... - -## Peer ID - -In order to find the peer id of a running node, execute the following command from the `node/` folder: - - GOEXPERIMENT=arenas go run ./... -peer-id - -The peer id will be printed to stdout. - -## EXPERIMENTAL – gRPC/REST Support - -If you want to enable gRPC/REST, add the following entries to your config.yml: - - sudo nano .config/config.yml - -edit these lines below - - listenGrpcMultiaddr: /ip4/127.0.0.1/tcp/8337 - listenRESTMultiaddr: /ip4/127.0.0.1/tcp/8338 - -Save and exit - -Ensure that port 8337 among other neeeded ports are enabled via firewall. - - sudo ufw enable - sudo ufw allow 8336 - sudo ufw allow 8337 - sudo ufw allow 8338 - sudo ufw status - - -Please note: this interface, while read-only, is unauthenticated and not rate- -limited. It is recommended that you only enable if you are properly controlling -access via firewall or only query via localhost. - -## Token Balance - -In order to query the token balance of a running node, execute the following command from the `node/` folder: - - GOEXPERIMENT=arenas go run ./... -balance - -Or - - GOEXPERIMENT=arenas /root/go/bin/node -balance - -The confirmed token balance will be printed to stdout in QUILs. - -Note that this feature requires that [gRPC support](#experimental--grpcrest-support) is enabled. - -## Build the node binary file - - GOEXPERIMENT=arenas go install ./... - -Thiw will build binary file in /root/go/bin folder - -## Start the Quilibrium Node as a Service - - nano /lib/systemd/system/ceremonyclient.service - -Write the code below - - [Unit] - Description=Ceremony Client Go App Service - - [Service] - Type=simple - Restart=always - RestartSec=5s - WorkingDirectory=/root/ceremonyclient/node - Environment=GOEXPERIMENT=arenas - ExecStart=/root/go/bin/node ./... - - [Install] - WantedBy=multi-user.target - -Save and exit - -To start service run - - service ceremonyclient start - -To stop service run - - service ceremonyclient stop - -To view service logs run - - sudo journalctl -u ceremonyclient.service -f --no-hostname -o cat - -## Upgrading Node - - service ceremonyclient stop - git fetch origin - git merge origin - -Go to ceremonyclient/node folder and run - - GOEXPERIMENT=arenas go clean -v -n -a ./... - rm /root/go/bin/node - GOEXPERIMENT=arenas go install ./... - service ceremonyclient start - -If everything is okay you would see logs when you run - - sudo journalctl -u ceremonyclient.service -f --no-hostname -o cat - -Ensure that your service running correctly. - -## Auto Upgrading Script - -Create a file named update.sh in your server and put the code below. - - - - #!/bin/bash - - # Stop the ceremonyclient service - service ceremonyclient stop - - # Switch to the ~/ceremonyclient directory - cd ~/ceremonyclient - - # Fetch updates from the remote repository - git fetch origin - git merge origin - - # Switch to the ~/ceremonyclient/node directory - cd ~/ceremonyclient/node - - # Clean and reinstall node - GOEXPERIMENT=arenas go clean -v -n -a ./... - rm /root/go/bin/node - GOEXPERIMENT=arenas go install ./... - - # Start the ceremonyclient service - service ceremonyclient start - - - chmod u+x update.sh - -When there is new update, run - ./update.sh - -## Stats Collection - -In order to opt-in to stats collection about the health of the network, edit your `config.yml` in the `node/.config` directory to have a new section under `engine`: - -```yml - -engine: - statsMultiaddr: "/dns/stats.quilibrium.com/tcp/443" - -``` - -## Purpose - -The ceremony application provides a secure reference string (SRS) from which -KZG proofs can be constructed for the network. This yields applicability for a -number of proof systems, in particular for the release after Dawn, the ability -to provide proofs of execution, and proofs of data availability for the network. - -### Rewards - -For participating in a round of the ceremony, nodes will be allocated: - - reward = 161 * log_2(participant_count) QUIL - -### Basic Flow - -Rounds of the ceremony follow the following order: - -- OPEN: Nodes can join in for the round, deferring preference to nodes that -could not join in on the prior round -- IN PROGRESS: The MPC ceremony round is in progress, nodes are engaging in a -logarithmic collection of Multiplication-to-Add Oblivious Transfer circuits, -each sub round producing a new collection of values, until the sub rounds have -completed, producing a collection of public G1 and G2 BLS48-581 points for each -peer. -- FINALIZING: The collection of points are broadcasted, and added together, -producing a singular ceremony transcript contribution. -- VALIDATING: The updated ceremony transcript is validated against the -predecessor, and is confirmed to be the new state, issuing rewards to the -participant set. The next round can begin. - -## Pull Requests - -Contributions are welcome – a new network is rife with opportunities. We are -in the process of updating our JIRA board so that it can be made public. The -repository has basic coding guidelines: - -- 80 character line limit, with the exception where gofmt or the syntax is -impossible to achieve otherwise -- Error wrapping matching function names -- Interface composition and dependency injection with Wire - -## Minimum System Requirements - -For the Dawn phase, a server must have a minimum of 16GB of RAM, preferably -32 GB, 250GB of storage, preferably via SSD, and 50MBps symmetric bandwidth. -For Intel/AMD, the baseline processor is a Skylake processor @ 3.4GHz with 12 -dedicated cores. For ARM, the M1 line of Apple is a good reference. - -With Dusk, these minimum requirements will reduce significantly. - -## License + Interpretation - -Significant portions of Quilibrium's codebase depends on GPL-licensed code, -mandating a minimum license of GPL, however Quilibrium is licensed as AGPL to -accomodate the scenario in which a cloud provider may wish to coopt the network -software. The AGPL allows such providers to do so, provided they are willing -to contribute back the management code that interacts with the protocol and node -software. To provide clarity, our interpretation is with respect to node -provisioning and management tooling for deploying alternative networks, and not -applications which are deployed to the network, mainnet status monitors, or -container deployments of mainnet nodes from the public codebase. - diff --git a/README.md b/README.md index 0c16c33..4e75cbd 100644 --- a/README.md +++ b/README.md @@ -64,17 +64,10 @@ This section contains community-built clients, applications, guides, etc
< - A detailed beginners' guide for how to setup a Quilibrium Node, created by [@demipoet](https://www.github.com/demipoet) - [link](https://quilibrium.guide/)
- -## Pull Requests +## Development -Contributions are welcome – a new network is rife with opportunities. We are -in the process of updating our JIRA board so that it can be made public. The -repository has basic coding guidelines: - -- 80 character line limit, with the exception where gofmt or the syntax is -impossible to achieve otherwise -- Error wrapping matching function names -- Interface composition and dependency injection with Wire +Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information on +how to contribute to this repository. ## License + Interpretation diff --git a/Taskfile.yaml b/Taskfile.yaml index ddc2b67..382429b 100644 --- a/Taskfile.yaml +++ b/Taskfile.yaml @@ -40,12 +40,12 @@ tasks: build_node_arm64_linux: desc: Build the Quilibrium node binary for ARM64 Linux. Outputs to node/build. cmds: - - docker build --platform linux/arm64 -f Dockerfile --output node/build/arm64_linux --target=node . + - docker build --platform linux/arm64 -f Dockerfile.source --output node/build/arm64_linux --target=node . build_node_amd64_linux: desc: Build the Quilibrium node binary for AMD64 Linux. Outputs to node/build. cmds: - - docker build --platform linux/amd64 -f Dockerfile --output node/build/amd64_linux --target=node . + - docker build --platform linux/amd64 -f Dockerfile.source --output node/build/amd64_linux --target=node . build:source: desc: Build the Quilibrium docker image from source.