# Quilibrium Guide > Quilibrium's mission, simplified, is to secure every bit of traffic of the Internet. Long live the Internet. ## Internal Documentation 1. Monitoring Rate of Change - [https://quilibrium.guide/internal/rate-of-change](/internal/rate-of-change) 2. Profiler - [https://quilibrium.guide/internal/profiler](/internal/profiler) 3. Rollback to 1.4.21-p1 while backing up 2.0.0-p8 - [https://quilibrium.guide/internal/rollback](/internal/rollback) ## Release Change Log | Version | Release Date | Release Change Log | | ---------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 2.1.0-p2 (Bloom) | October 23, 2025 | [https://farcaster.xyz/cassie/0xcbfbf2cf](https://farcaster.xyz/cassie/0xcbfbf2cf) | | 2.1.0.0 (Bloom) | September 30, 2025 | [https://farcaster.xyz/cassie/0xed367424](https://farcaster.xyz/cassie/0xed367424) | | 2.0.2-p1 (Dusk) | October 26, 2024 | [https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6](https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6) | | 2.0.2 (Dusk) | October 25, 2024 | [https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6](https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6) | | 2.0.1 (Dusk) | October 23, 2024 | [https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6](https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6) | | 2.0.0-p8 (Dusk) | October 18, 2024 | [https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6](https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6) | | 2.0.0-p7 (Dusk) | October 17, 2024 | [https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6](https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6) | | 2.0.0-p6 (Dusk) | October 17, 2024 | [https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6](https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6) | | 2.0.0-p4 (Dusk) | October 16, 2024 | [https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6](https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6) | | 2.0.0-p3 (Dusk) | October 15, 2024 | [https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6](https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6) | | 2.0.0-p2 (Dusk) | October 14, 2024 | [https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6](https://quilibrium.discourse.group/t/psa-2-0-10-10-launch/749/6) | | 1.4.21.1 (Centauri) | July 30, 2024 | [https://quilibrium.discourse.group/t/v1-4-21-1-release-notes/557](https://quilibrium.discourse.group/t/v1-4-21-1-release-notes/557) | | 1.4.21 (Centauri) | July 5, 2024 | [https://quilibrium.discourse.group/t/v1-4-21-release-notes/415](https://quilibrium.discourse.group/t/v1-4-21-release-notes/415) | | 1.4.20-p1 (Solstice) | June 29, 2024 | [https://quilibrium.discourse.group/t/v1-4-20-p1-release-notes/354](https://quilibrium.discourse.group/t/v1-4-20-p1-release-notes/354) | | 1.4.20 (Solstice) | June 21, 2024 | [https://quilibrium.discourse.group/t/v1-4-20-release-notes/281](https://quilibrium.discourse.group/t/v1-4-20-release-notes/281) | | 1.4.19-p1 (Betelgeuse) | June 16, 2024 | Includes:
- The rust BLS48581 implementation
- If running manual workers by config, it will reattempt a few times with 50ms inbetween before shutting down, giving time to let the worker restart
| | 1.4.19 (Betelgeuse) | June 9, 2024 | v1.4.19 is out! Very important notes below:

IF YOU ARE USING WINDOWS WITHOUT WSL, YOU ARE GONNA HAVE A BAD TIME

This release is going to be on a new branch, we are going to have a gitlab only one for now so our server gets hammered GitHub's doesn't. We'll then move to a proper CDN next week and unify GitHub and gitlab moving forward. If you're on GitHub as a remote, make the switch to the source.quilibrium.com remote or you won't get .19 tonight. The new branch is release-cdn, you can check it out with git checkout release-cdn

This release is also the first step of moving to rust, and by consequence, if you're building from source, you need rust
You'll also need cargo, libgmp, uniffi-go, to update to go 1.22, and some other goodies. If none of that sounds like a fun time to set up, it's time to start using the binaries.
You can build on windows, but it's a trial by fire if it's not via WSL, and if it is via WSL, use the binaries.
If you want to see what your accumulated rewards are, in a separate terminal (if running without a detached screen), run:
You will be helpfully reminded when running this that only rewards accumulated on .19 show up here.
Last week's rewards will be added to the rewards page, and will combine with your rewards on .19+ in 2.0.
TL;DR: There is no tldr, read the damn thing
| | 1.4.18-p2 (Nebula) | May 25, 2024 | git repo source changed to Gitlab | ## Resources and Links ### Official Links * Quilibrium website - [https://quilibrium.com](https://quilibrium.com) * Quilibrium Discourse Forum - [https://quilibrium.discourse.group/](https://quilibrium.discourse.group/) * Quilibrium network dashboard - [https://dashboard.quilibrium.com/](https://dashboard.quilibrium.com/) * Quilibrium status page - [https://status.quilibrium.com/](https://status.quilibrium.com/) * Quilibrium blog on Paragraph - [https://paragraph.xyz/@quilibrium.com](https://paragraph.xyz/@quilibrium.com) * Quilibrium Github - [https://github.com/QuilibriumNetwork](https://github.com/QuilibriumNetwork) * Quilibrium Channel on Warpcast - [https://warpcast.com/\~/channel/quilibrium](https://warpcast.com/~/channel/quilibrium) * Quilibrium Builders Channel on Warpcast - [https://warpcast.com/\~/channel/q-builders](https://warpcast.com/~/channel/q-builders) * "Long Live The Internet" Collectible on Opensea - [https://opensea.io/collection/long-live-the-internet](https://opensea.io/collection/long-live-the-internet) ### Official Repositories * Cassie's Self-hosted Gitlab instance - [https://source.quilibrium.com/quilibrium/ceremonyclient](https://source.quilibrium.com/quilibrium/ceremonyclient) * (Currently Suspended) Github instance - [https://github.com/QuilibriumNetwork/ceremonyclient](https://github.com/QuilibriumNetwork/ceremonyclient) ### Articles, Interviews and Video Explainers * "Lets take a journey" on Cassie's latest Twitch stream, 24 Jun 2024 - [https://www.youtube.com/watch?v=eZ6oRyMAB3c\&ab\_channel=CassandraHeart](https://www.youtube.com/watch?v=eZ6oRyMAB3c\&ab_channel=CassandraHeart) * "Fireside Chat: PoMW, Multiproofs, and 1.4.19" on Paragraph, 6 Jun 2024 - [https://paragraph.xyz/@quilibrium.com/fireside-chat-pomw,-multiproofs,-and-v1419](https://paragraph.xyz/@quilibrium.com/fireside-chat-pomw,-multiproofs,-and-v1419) * "Quil Builder's Guide" on Paragraph, 30 May 2024 - [https://paragraph.xyz/@quilibrium.com/quil-builders-guide](https://paragraph.xyz/@quilibrium.com/quil-builders-guide) * "ELI5: Quilibrium" on Paragraph, 17 May 2024 - [https://paragraph.xyz/@quilibrium.com/eli5-quilibrium](https://paragraph.xyz/@quilibrium.com/eli5-quilibrium) * "Q 'Rude' FAQ" on Paragraph, 16 May 2024 - [https://paragraph.xyz/@quilibrium.com/q-rude-faq](https://paragraph.xyz/@quilibrium.com/q-rude-faq) * "Mission Above All" on Paragraph, 11 May 2024 - [https://paragraph.xyz/@quilibrium.com/mission-above-all](https://paragraph.xyz/@quilibrium.com/mission-above-all) * "The "Alternative" Thesis of Consumer Crypto (Long Version)" on Youtube, 3 May 2024 - [https://youtu.be/GeuZsX6dC08](https://youtu.be/GeuZsX6dC08) * "The Storm Before the Calm" on Paragraph, 6 Apr 2024 - [https://paragraph.xyz/@quilibrium.com/the-storm-before-the-calm](https://paragraph.xyz/@quilibrium.com/the-storm-before-the-calm) * "The Alternative Thesis of Consumer Crypto" on Paragraph, 27 Mar 2024 - [https://paragraph.xyz/@quilibrium.com/the-alternative-thesis-of-consumer-crypto](https://paragraph.xyz/@quilibrium.com/the-alternative-thesis-of-consumer-crypto) * "Mission Control" on Paragraph, 27 Feb 2024 - [https://paragraph.xyz/@quilibrium.com/mission-control](https://paragraph.xyz/@quilibrium.com/mission-control) * "Quilibrium Q\&A, Roadmap, High Level Explainer" on Youtube, 17 Feb 2024 - [https://youtu.be/Ye677-FkgXE](https://youtu.be/Ye677-FkgXE) * "A Taste of the Future" on Paragraph, 28 January 2024 - [https://paragraph.xyz/@quilibrium.com/doom-on-frames](https://paragraph.xyz/@quilibrium.com/doom-on-frames) * "An Epitaph for Blockchain" on Paragraph, 24 Jan 2024 - [https://paragraph.xyz/@quilibrium.com/an-epitaph-for-blockchain](https://paragraph.xyz/@quilibrium.com/an-epitaph-for-blockchain) * "Proof of Meaningful Work" on Paragraph, 8 Jan 2024 - [https://paragraph.xyz/@quilibrium.com/proof-of-meaningful-work](https://paragraph.xyz/@quilibrium.com/proof-of-meaningful-work) * "Quilibrium Overview: How does it tick?" on Youtube, 1 May 2023 - [https://youtu.be/\_mO07gDTX7Q](https://youtu.be/_mO07gDTX7Q) * "Oblivious Transfer, Part 1" on Youtube, 1 May 2023 - [https://youtu.be/ZMh11fozDGc](https://youtu.be/ZMh11fozDGc) ### Community Links and Community Articles * "Quil Node Running Guide - Mac M2 Mini" by King ([https://warpcast.com/king](https://warpcast.com/king)) on Paragraph, 2 Jun 2024 - [https://paragraph.xyz/@kingcaster/quil-node-running-guide-mac-m2-mini](https://paragraph.xyz/@kingcaster/quil-node-running-guide-mac-m2-mini) * "Quilibrium: A New Way to Internet Freedom and Privacy" on DelphiDigital community, 17 May 2024 - [https://members.delphidigital.io/feed/quilibrium-a-new-way-to-internet-freedom-and-privacy](https://members.delphidigital.io/feed/quilibrium-a-new-way-to-internet-freedom-and-privacy)
* Quilibrium Guide on Demipoet's Github - [https://github.com/demipoet/quilibrium-guide-github](https://github.com/demipoet/quilibrium-guide-github) * Quilibrium Community on Discord - [https://discord.gg/quilibrium](https://discord.gg/quilibrium) ### Node Minimum Specifications requirements * 8vCpu (12vCPU preferred) * 16GB of RAM (32GB preferred) * 250GB of storage (300GB preferred) * 50MBps symmetric bandwidth ## Upgrading to Quilibrium v2.1.0-p2 (Bloom) For more better FAQ regarding the v2.1.0-p2 (Bloom), please refer to the ([link](/)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.1.0-p2 (Bloom), by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=2.1.0.1) as applicable 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. \[optional atm..] deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS, arch and current version variables echo "2. setting release OS, arch and current version variables..." release_os="linux" release_arch="amd64" current_version="2.1.0.1" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder echo "4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder..." cd ~/ceremonyclient/client rm rm -rf qclient* echo "... deleted qclient (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch cd .. echo "... download of required qclient files done" # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" journalctl -u ceremonyclient.service -f --no-hostname -o cat ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-1-0-2-upgrade-success.png) ## Using gRPCurl for Info on Quilibrium Network :::info You need to configure the `config.yml` and configure the `listenGrpcMultiaddr` variable there. Instructions on how to do that is found [here](/setup-node/setup-node-8#1-enable-grpc-to-enable-grpc-function-calls-for-your-node). ::: Note: This section is not part of the installation or setup process for the Q Node. The commands within this section are used only after you have successfully completed the steps above and you just want to query for more information about your Q Node. Reference: [https://github.com/mscurtescu/ceremonyclient/wiki/gRPCurl-How-To](https://github.com/mscurtescu/ceremonyclient/wiki/gRPCurl-How-To) ### Installation There are many ways to install gRPCurl (brew, docker, Go) and since we already have installed Go you may install gRPCurl from the source package
Run: ```bash go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest ``` The command above takes care of installing the command in the bin sub-folder of $GOPATH
Verify your installation works, run: ```bash grpcurl -help ``` As long as the terminal does not say unknown command, but something else, you have successfully installed gRPCurl ### Available gRPC Functions to call on your Q Node #### Get Node Info Run: ```bash grpcurl -plaintext localhost:8337 quilibrium.node.node.pb.NodeService.GetNodeInfo ``` Response: ```bash { "peerId": "QmBgOwjQo6a12345Aq1fvc6wJ3xnTXNTzOLDLwFHyabcde==", "maxFrame": "7658" } ``` #### Get Token Info (works for some nodes) Run: ```bash grpcurl -plaintext localhost:8337 quilibrium.node.node.pb.NodeService.GetTokenInfo ``` Response: ```bash { "confirmedTokenSupply": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsuy4PqzEAA=", "unconfirmedTokenSupply": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsuxtRfqwAA=", "ownedTokens": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", "unconfirmedOwnedTokens": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" } ``` Values are encoded, but the ownedTokens and unconfirmedTokens are for sure equal to 0. Needs more decoding studies here. #### Count of all Q Nodes Run: ```bash grpcurl -plaintext -max-msg-sz 5000000 localhost:8337 quilibrium.node.node.pb.NodeService.GetPeerInfo | grep peerId | wc -l ``` Response: ```bash 11000 ``` #### Get Peer Info Run: ```bash grpcurl -plaintext -max-msg-sz 5000000 localhost:8337 quilibrium.node.node.pb.NodeService.GetPeerInfo | less ``` Response: ```bash { "peerInfo": [ { "peerId": "EiCIlJTLaQ+GE0ElmoCTb1wK/OWfWTzDA9hC1AyAmNNCew==", "multiaddrs": [ "" ], "maxFrame": "1439", "timestamp": "1708984499614", "version": "AQIP", "signature": "uOXC/WFc3tCsaqJKplle2q/oeUDGlwZf/ZrDdjWqn/Z3ZBUZZy2jwbB78vhFrNsArVuEw+x9eSWAVTq7ugE4ME5bUNUB4+7Gl6BtV8vPNwqh5NWbfNooKbHDNyees6MEi+VsM04wS4wf147SLiGPxicA", "publicKey": "gMTEXXTwVMd9JGBTdJ3+eh/qIGuYapU+PGe7kg3HUgdlj4Ff8NBMVhHxoN/dYLnmpaquGOcqgKcA", "totalDistance": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAET2HAgKu7BSR42UPY8a2MEk/qOTrCjR9shges9bZvO/Ng==" }, { "peerId": "EiA3Xnx1esdF2BJXwEuVFXw+gj5g5ss4ajJBQ3TNXWiAxA==", "multiaddrs": [ "" ], "maxFrame": "6783", "timestamp": "1704564573411", "version": "AQIB", "signature": "JOJoCRUmzizAlFjf3dXB8wAeEvFXsXCIl66A/sLu4hjIJktYzvZPAc83abLeG3Zm8WHhuhtnHH4AXHitiWGlqwtFbWCRE6TuDFioemJBKhRgwS3bLF3KIC0yWEcBSTM5hgJCDWe7oCSI2NV8n7mufRUA", "publicKey": "prlfQeX4gLPLOz87HChd1zOWihxXeoVdUBMdBTjNmSYsYAGnJuMmGDdgZoipZWsrgsEbhnjKfa2A", "totalDistance": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHW0BTyd89JROjwc23I0r7qOJ7ROny+L+EWD1n6OHytKKw==" }, ``` ## Frequently Asked Questions (FAQ) ##### What's my balance? Why am I still at 0? > This question is the most frequently asked of them all. Depending on when you joined in on the project, the answer will vary. At this point, fully-synchronized nodes should start accumulating a balance. We are working to improve synchronization so it's not an incredibly long slog to get there. Everyone who has been participating should see some balance when Dusk launches. ##### How do I know my node is operating properly? > You should see the frame number your node is processing continually increase. This may be slow at first due to heavy fork reconciliation – think of each node with a prover key as being able to send valid frames, but the timereel as a means to choose between them. Because we have had many iterations and lots of early networking issues, we may be initial forks that your node must churn through. We're working on improving sync to be smarter about this so you don't have to reconcile all of them. ##### Where do I run a node? > Don't run it on IaaS/PaaS providers like AWS/GCP/Azure. The egress fees will eat you alive. If you don't want to/can't run on your own hardware, VPS/ bare metal hosts do well. Be advised: Q uses a lot of bandwidth in this stage. ##### How do I run a node? > If you have git and go 1.20 installed, it's just these three steps: ```bash git clone https://github.com/QuilibriumNetwork/ceremonyclient.git cd ceremonyclient/node GOEXPERIMENT=arenas go run ./... ``` > If you don't, follow whatever guide for your operating system to install go 1.20 (MUST be 1.20.X, 1.19- won't work, 1.21+ won't either). ##### I'm getting cannot load arena: malformed module path "arena" when I run it, what am I doing wrong? > Wrong version of golang. Make sure you installed 1.20 (and it has priority on your PATH environment variable) ##### I'm getting the error below when I run the -balance command flag, what am I doing wrong? ```bash panic: error getting token info: rpc error: code = Unknown desc = get token info : get highest candidate data clock frame: item not found goroutine 1 [running]: main.main() /root/ceremonyclient/node/main.go:101 +0x745 exit status 2 ``` > Nothing. ##### The balance tag: > The -balance command tag when calling the GOEXPERIMENT=arenas go run ./... -balance has been deprecated since Dawn v1.2.9. Unless your node was upgraded to the latest version, yet upgraded from a version \<1.2.9 (e.g. 1.2.7) (i.e. the very first version your node ran with was one older than 1.2.9), the -balance command tag will not work anymore and will face the error below. ##### GetTokenInfo gRPCurl function: > The same error shows for the GetTokenInfo function if you were to call using gRpcUrl library (see image below) ##### Solution: > You can still see your balance in the logs of a running node. In later releases, it is certain there will be a friendlier way to see a node’s $QUIL balance. ##### Someone is offering me QUIL OTC, is this legit? > No. Tokens do not unlock until Dusk, nobody can transfer you QUIL or buy it from you. ##### Who is developing Quilibrium? > Officially the core Quil dev team is just Cassie as of right now (making this an oddly third person statement), plus many folks who have submitted PRs to the core project, as well as related projects like Agost with quilibrium-rs, and Sir0uk with the nodekeeper dashboard. If you'd like to join in, there's loads of things to work on, please DM! ##### Wen balance > See 1st question ## Upgrading to Quilibrium v1.4.18-p2 ### Complete upgrade script code block (without service systemd modification) ```bash # switch to Gitlab repo of Cassie cd ~/ceremonyclient git remote set-url origin https://source.quilibrium.com/quilibrium/ceremonyclient.git git pull # end of switch code block service ceremonyclient stop cd ~/ceremonyclient git reset --hard origin/release git fetch --all git clean -df git merge origin/release cd ~/ceremonyclient/client rm ~/go/bin/qclient GOEXPERIMENT=arenas go build -o /root/go/bin/qclient main.go cd ~/ceremonyclient/node service ceremonyclient start ``` :::warning If you face this issue, after running your newly upgraded v1.4.18-p2 node for a while, as shown in the image below ::: ![Patch 2 possible issue](/p2-possible-issue.jpeg) Most likely you're on a machine that has a lower core-to-GB RAM ratio than 1:2 (e.g. 1:1), you will very likely need to do the following or you may see the node repeatedly restart with the autorun script: 1. You can set the environment variable GOMAXPROCS to half the number of GB RAM (e.g. on a 32 core, 32GB RAM system, GOMAXPROCS=16) 2. Increase the RAM. 3. You can manually set the config.yml value dataWorkerMemoryLimit under the engine section to 1073741824 (not recommended) Try the steps above cautiously, i.e. try them one by one, then restart your node to see the issue is gone. ## Upgrading to Quilibrium v1.4.18 **HARD FORK FOR QUILIBRIUM NETWORK** :::warning Nodes that are not updated to v1.4.18 do not earn $QUIL rewards ::: Quilibrium version 1.4.18 is the very first version release wherein signature checks are implemented and applied towards built binary files. From this version onwards, it is highly recommended to run your node using signed code builds. This means it is not recommended to run your node from main by building from source code. This means the systemd configuration file has to change. > TL;DR complete code block found [here](/archived/upgrade-1-4-18#complete-upgrade-script-code-block-for-initial-run-only-with-service-systemd-modification) ### 1.4.18 Release Notes * Quilibrium v1.4.18 implements a miniaturized version of Proof of Meaningful Work (PoMW) i.e. it has not the full data set prover * This release will have a high chance of utilizing the server's CPU fully * `node-info` method is temporarily useless, use the peer manifest RPC to obtain useful info * Nodes that are not updated to v1.4.18 do not earn $QUIL rewards ### Upgrade Instructions #### 1. Stop the service ```bash service ceremonyclient stop ``` #### 2. Git fetch and clean ```bash cd ~/ceremonyclient git fetch origin git merge origin cd ~/ceremonyclient/node GOEXPERIMENT=arenas go clean -v -n -a ./... ``` #### 3. Remove previous `node` build file ```bash rm /root/go/bin/node ls /root/go/bin ``` #### 4. Rebuild the `qclient` ```bash cd ~/ceremonyclient/client rm /root/go/bin/qclient GOEXPERIMENT=arenas go build -o /root/go/bin/qclient main.go ls /root/go/bin ``` #### 5. Switch to branch `release` of the ceremonyclient repository to be able to access the binary files ```bash cd /root/ceremonyclient/node git checkout release ``` #### 6. Modify the service systemd file ##### Prechecks To modify the service systemd file correctly, we need to identify the correct binary file to run, as there are 3 options. * node-1.4.18-linux-amd64 * node-1.4.18-linux-arm64 * node-1.4.18-darwin-arm64 First we need to check your server OS type. Run this command ```bash echo $OSTYPE ``` If your OSTYPE == `darwin`, then you will use this binary file * node-1.4.18-darwin-arm64 If your OSTYPE == `linux-gnu`, your remaining options are * node-1.4.18-linux-amd64 * node-1.4.18-linux-arm64 * ~~node-1.4.18-darwin-arm64~~ To narrow down to the correct binary file, run this command further. ```bash echo $arch ``` If $arch contains `arm`, then your binary file is * node-1.4.18-linux-arm64 If you see blank result, then your binary file is * node-1.4.18-linux-amd64 ##### Modify the service systemd file We need to modify the `ExecStart` value from `/root/go/bin/node ./...` to `/root/ceremonyclient/node/node-1.4.18-linux-amd64`. ```bash sed -i 's/ExecStart=\/root\/go\/bin\/node .\/.../ExecStart=\/root\/ceremonyclient\/node\/node-1.4.18-linux-amd64/g' /lib/systemd/system/ceremonyclient.service systemctl daemon-reload ``` :::info Replace the `node-1.4.18-linux-amd64` accordingly above, based on the Prechecks we made. ::: #### 7. Start the ceremonyclient service ```bash service ceremonyclient start ``` ### Complete upgrade script code block (for initial run only, with service systemd modification) ```bash service ceremonyclient stop cd ~/ceremonyclient git fetch origin git merge origin cd ~/ceremonyclient/node GOEXPERIMENT=arenas go clean -v -n -a ./... rm /root/go/bin/node cd ~/ceremonyclient/client rm /root/go/bin/qclient GOEXPERIMENT=arenas go build -o /root/go/bin/qclient main.go cd /root/ceremonyclient/node git checkout release sed -i 's/ExecStart=\/root\/go\/bin\/node .\/.../ExecStart=\/root\/ceremonyclient\/node\/node-1.4.18-linux-amd64/g' /lib/systemd/system/ceremonyclient.service systemctl daemon-reload service ceremonyclient start ``` ### Complete upgrade script code block (without service systemd modification) ```bash service ceremonyclient stop cd ~/ceremonyclient git reset --hard origin/release git fetch --all git clean -df git merge origin/release cd ~/ceremonyclient/client rm ~/go/bin/qclient GOEXPERIMENT=arenas go build -o /root/go/bin/qclient main.go cd ~/ceremonyclient/node service ceremonyclient start ``` ## Upgrading to Quilibrium v1.4.19-p1 ### Complete upgrade script code block This code block upgrades your node to v1.4.19-p1, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64) 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch variables..." release_os="linux" release_arch="amd64" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done mv qclient-$version-$release_os-$release_arch qclient chmod +x ./qclient echo "... \"qclient-$version-$release_os-$release_arch\" renamed to \"qclient\"" cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.19-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-1.4.19-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." service ceremonyclient start echo "... service started" ``` ### Post v1.4.19 rewards earned :::info To find out your post-v1.4.19 rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.19.1-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Upgrading to Quilibrium v1.4.19 ### Complete upgrade script code block (with service systemd modification) ```bash # switch to Gitlab repo of Cassie cd ~/ceremonyclient git remote set-url origin https://source.quilibrium.com/quilibrium/ceremonyclient.git git pull # end of switch code block service ceremonyclient stop cd ~/ceremonyclient git reset --hard origin/release-cdn git fetch --all git clean -df git merge origin/release-cdn cd ~/ceremonyclient/node sed -i 's/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.18-linux-amd64/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.19-linux-amd64/g' /lib/systemd/system/ceremonyclient.service systemctl daemon-reload service ceremonyclient start ``` :::warning If you face this error after running the code block above, just try the code block again. This just means the Gitlab server that Cassie is personally hosting encountered an internal server error (Error 500) due to overwhelming requests from thousands of nodes trying to upgrade at the same time. ::: ![HTTPError 500](/19-possible-issue.jpeg) ### Signs of success :::info The image below is what you should see if successful ::: ![Success upgrade](/19-upgrade-success.jpeg) ### Upgrading Go 1.20.14 to Go 1.22.4 This code block assumes you already have installed Go 1.20.14 in your server before. ```bash rm -rf /usr/local/go cd ~ wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz tar -xvf go1.22.4.linux-amd64.tar.gz mv go /usr/local rm go1.22.4.linux-amd64.tar.gz source ~/.bashrc go version ``` ### Building `qclient` and `grpcurl` with Go 1.22.4 ```bash # building qclient cd ~/ceremonyclient/client rm ~/go/bin/qclient GOEXPERIMENT=arenas go build -o ~/go/bin/qclient main.go # building grpcurl cd ~ go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest ``` ### Post v1.4.19 rewards earned :::info To find out your post-v1.4.19 rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.19-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Upgrading to Quilibrium v1.4.20 from .19-p1 ### Complete upgrade script code block This code block upgrades your node to v1.4.20 from v1.4.19-p1, by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64) 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. not doing anything with qclient because its latest version is still 1.4.19-p1 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS and arch variables echo "2. setting release OS and arch variables..." release_os="linux" release_arch="amd64" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # not doing anything with qclient because its latest version is still 1.4.19-p1 echo "4. not doing anything with qclient because its latest version is still 1.4.19-p1..." # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.19.1-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-1.4.19.1-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/20-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info To find out your post-v1.4.19+ rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.20-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Upgrading to Quilibrium v1.4.20 from versions .19 and older ### Complete upgrade script code block This code block upgrades your node to v1.4.20 from v1.4.19-p1, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS, arch variables, and the current version variable * Please adjust the variable values below (default os=linux, arch=amd64) * IMPORTANT please adjust the variable value for current\_version below. Change this to your node's current version. 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch variables..." release_os="linux" release_arch="amd64" current_version="1.4.19" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do qclient_version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done mv qclient-$qclient_version-$release_os-$release_arch qclient chmod +x ./qclient echo "... \"qclient-$qclient_version-$release_os-$release_arch\" renamed to \"qclient\"" cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/20-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info To find out your post-v1.4.19+ rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.20-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Upgrading to Quilibrium v1.4.21.1 from .21 ### Complete upgrade script code block This code block upgrades your node to v1.4.21.1 from v1.4.21, by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64) 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. not doing anything with qclient because its latest version is still 1.4.19-p1 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS and arch variables echo "2. setting release OS and arch variables..." release_os="linux" release_arch="amd64" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # not doing anything with qclient because its latest version is still 1.4.19-p1 echo "4. not doing anything with qclient because its latest version is still 1.4.19-p1..." # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.21-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-1.4.21-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/21-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info To find out your post-v1.4.19+ rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.21.1-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Upgrading to Quilibrium v1.4.21.1 from versions .19 and older ### Complete upgrade script code block This code block upgrades your node to v1.4.21.1 from v1.4.19 and older, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS, arch variables, and the current version variable * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=1.4.19) * IMPORTANT please adjust the variable value for current\_version below. Change this to your node's current version. 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch and current version variables..." release_os="linux" release_arch="amd64" current_version="1.4.19" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do qclient_version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done mv qclient-$qclient_version-$release_os-$release_arch qclient chmod +x ./qclient echo "... \"qclient-$qclient_version-$release_os-$release_arch\" renamed to \"qclient\"" cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/21-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info To find out your post-v1.4.19+ rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.21.1-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Upgrading to Quilibrium v1.4.21 from .20-p1 ### Complete upgrade script code block This code block upgrades your node to v1.4.21 from v1.4.20-p1, by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64) 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. not doing anything with qclient because its latest version is still 1.4.19-p1 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS and arch variables echo "2. setting release OS and arch variables..." release_os="linux" release_arch="amd64" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # not doing anything with qclient because its latest version is still 1.4.19-p1 echo "4. not doing anything with qclient because its latest version is still 1.4.19-p1..." # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.20.1-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-1.4.20.1-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/21-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info To find out your post-v1.4.19+ rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.21-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Upgrading to Quilibrium v1.4.21 from versions .19 and older ### Complete upgrade script code block This code block upgrades your node to v1.4.21 from v1.4.19 and older, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS, arch variables, and the current version variable * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=1.4.19) * IMPORTANT please adjust the variable value for current\_version below. Change this to your node's current version. 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch and current version variables..." release_os="linux" release_arch="amd64" current_version="1.4.19" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do qclient_version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done mv qclient-$qclient_version-$release_os-$release_arch qclient chmod +x ./qclient echo "... \"qclient-$qclient_version-$release_os-$release_arch\" renamed to \"qclient\"" cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/21-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info To find out your post-v1.4.19+ rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.21-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Upgrading to Quilibrium v2.0.0.2 from 1.4.21.1 ### Complete upgrade script code block This code block upgrades your node to v2.0.0.2 from v1.4.21.1, by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64) 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS and arch variables echo "2. setting release OS and arch variables..." release_os="linux" release_arch="amd64" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder echo "4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder..." cd ~/ceremonyclient/client rm rm -rf qclient* echo "... deleted qclient (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch mv ./qclient-$clientversion-$release_os-$release_arch ./qclient cd .. echo "... download of required qclient files done" # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.21.1-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-1.4.21.1-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/21-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info To find out your post-v1.4.19+ rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.21.1-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Upgrading to Quilibrium v2.0.0.1 from versions .19 and older For more better FAQ regarding the v2.0.0.1, please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) ### Complete upgrade script code block This code block upgrades your node to v2.0.0.1 from v1.4.19 and older, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS, arch variables, and the current version variable * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=1.4.19) * IMPORTANT please adjust the variable value for current\_version below. Change this to your node's current version. 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch and current version variables..." release_os="linux" release_arch="amd64" current_version="1.4.19" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch mv ./qclient-$clientversion-$release_os-$release_arch ./qclient cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.0.0-p2 (Dusk) from 1.4.21-p1 For more better FAQ regarding the v2.0.0-p2 (Dusk), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.0.0-p2 (Dusk) from v1.4.21-p1, by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64) 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS and arch variables echo "2. setting release OS and arch variables..." release_os="linux" release_arch="amd64" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder echo "4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder..." cd ~/ceremonyclient/client rm rm -rf qclient* echo "... deleted qclient (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch mv ./qclient-$clientversion-$release_os-$release_arch ./qclient cd .. echo "... download of required qclient files done" # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.21.1-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-1.4.21.1-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.0.0-p2 (Dusk) from versions .19 and older For more better FAQ regarding the v2.0.0-p2 (Dusk), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.0.0-p2 (Dusk) from v1.4.19 and older, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS, arch variables, and the current version variable * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=1.4.19) * IMPORTANT please adjust the variable value for current\_version below. Change this to your node's current version. 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch and current version variables..." release_os="linux" release_arch="amd64" current_version="1.4.19" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch mv ./qclient-$clientversion-$release_os-$release_arch ./qclient cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.0.0-p3 (Dusk) from v2.0.0-p2 For more better FAQ regarding the v2.0.0-p3 (Dusk), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.0.0-p3 (Dusk) from v2.0.0-p2, by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=2.0.0.2) as applicable 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS, arch and current version variables echo "2. setting release OS, arch and current version variables..." release_os="linux" release_arch="amd64" current_version="2.0.0.2" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder echo "4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder..." cd ~/ceremonyclient/client rm rm -rf qclient* echo "... deleted qclient (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch mv ./qclient-$clientversion-$release_os-$release_arch ./qclient cd .. echo "... download of required qclient files done" # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.0.0-p2 (Dusk) from versions .19 and older For more better FAQ regarding the v2.0.0-p2 (Dusk), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.0.0-p2 (Dusk) from v1.4.19 and older, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS, arch variables, and the current version variable * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=1.4.19) * IMPORTANT please adjust the variable value for current\_version below. Change this to your node's current version. 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch and current version variables..." release_os="linux" release_arch="amd64" current_version="1.4.19" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch mv ./qclient-$clientversion-$release_os-$release_arch ./qclient cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.0.0-p8 (Dusk) from v2.0.0-p7 For more better FAQ regarding the v2.0.0-p8 (Dusk), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.0.0-p8 (Dusk) from v2.0.0-p7, by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=2.0.0.7) as applicable 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS, arch and current version variables echo "2. setting release OS, arch and current version variables..." release_os="linux" release_arch="amd64" current_version="2.0.0.7" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder echo "4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder..." cd ~/ceremonyclient/client rm rm -rf qclient* echo "... deleted qclient (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch cd .. echo "... download of required qclient files done" # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.0.0-p8 (Dusk) from versions .19 and older For more better FAQ regarding the v2.0.0-p8 (Dusk), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.0.0-p8 (Dusk) from v1.4.19 and older, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS, arch variables, and the current version variable * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=1.4.19) * IMPORTANT please adjust the variable value for current\_version below. Change this to your node's current version. 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch and current version variables..." release_os="linux" release_arch="amd64" current_version="1.4.19" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.0.1 (Dusk) from v2.0.0-p8 For more better FAQ regarding the v2.0.1 (Dusk), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.0.1 (Dusk) from v2.0.0-p8, by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=2.0.0.7) as applicable 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS, arch and current version variables echo "2. setting release OS, arch and current version variables..." release_os="linux" release_arch="amd64" current_version="2.0.0.8" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder echo "4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder..." cd ~/ceremonyclient/client rm rm -rf qclient* echo "... deleted qclient (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch cd .. echo "... download of required qclient files done" # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Quick FAQ :::info The image below is a screenshot from the Quilibrium Telegram groupchat ::: ![2-0-quick-faq](/2-0-quick-faq.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.0.1 (Dusk) from versions .19 and older For more better FAQ regarding the v2.0.1 (Dusk), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.0.1 (Dusk) from v1.4.19 and older, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS, arch variables, and the current version variable * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=1.4.19) * IMPORTANT please adjust the variable value for current\_version below. Change this to your node's current version. 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch and current version variables..." release_os="linux" release_arch="amd64" current_version="1.4.19" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Quick FAQ :::info The image below is a screenshot from the Quilibrium Telegram groupchat ::: ![2-0-quick-faq](/2-0-quick-faq.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.0.2-p1 (Dusk) from v2.0.1 For more better FAQ regarding the v2.0.2-p1 (Dusk), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.0.2-p1 (Dusk) from v2.0.1, by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=2.0.0.7) as applicable 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS, arch and current version variables echo "2. setting release OS, arch and current version variables..." release_os="linux" release_arch="amd64" current_version="2.0.1" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder echo "4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder..." cd ~/ceremonyclient/client rm rm -rf qclient* echo "... deleted qclient (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch cd .. echo "... download of required qclient files done" # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" journalctl -u ceremonyclient.service -f --no-hostname -o cat ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Quick FAQ :::info The image below is a screenshot from the Quilibrium Telegram groupchat ::: ![2-0-quick-faq](/2-0-quick-faq.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.0.2-p1 (Dusk) from versions .19 and older For more better FAQ regarding the v2.0.2-p1 (Dusk), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.0.2-p1 (Dusk) from v1.4.19 and older, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS, arch variables, and the current version variable * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=1.4.19) * IMPORTANT please adjust the variable value for current\_version below. Change this to your node's current version. 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch and current version variables..." release_os="linux" release_arch="amd64" current_version="1.4.19" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-0-upgrade-success.png) ### Quick FAQ :::info The image below is a screenshot from the Quilibrium Telegram groupchat ::: ![2-0-quick-faq](/2-0-quick-faq.png) ### Post v1.4.19+ rewards earned :::info Please avoid using the --node-info command flag while the 24-hours stasis lock period is in place ::: ## Upgrading to Quilibrium v2.1.0.0 (Bloom) For more better FAQ regarding the v2.1.0.0 (Bloom), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.1.0.0 (Bloom), by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=2.0.3.4) as applicable 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS, arch and current version variables echo "2. setting release OS, arch and current version variables..." release_os="linux" release_arch="amd64" current_version="2.0.3.4" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder echo "4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder..." cd ~/ceremonyclient/client rm rm -rf qclient* echo "... deleted qclient (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch cd .. echo "... download of required qclient files done" # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" journalctl -u ceremonyclient.service -f --no-hostname -o cat ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-1-0-0-upgrade-success.png) ## Claiming wQUIL on Ethereum L1 :::info Important: This assumes you have successfully installed the Quilibrium qclient app. Installation instructions found [here](/cli-commands/cli-commands-1). ::: ### 1. About $wQUIL Token $wQUIL token means "wrapped $QUIL" from the Quilibrium network and is compared with a 1:1 ratio, ie 1 $wQUIL = 1 $QUIL. The one-way Q L1->Ethereum L1 bridge enables the token's circulation for incentivized node operators, until the Quilibrium network reaches v2.0. As such, the $wQUIL tokens are available only on the Ethereum L1 network. #### Contract Details * Name: Wrapped QUIL
* Ticker: wQUIL
* Network: ETH Mainnet
* Contract Address: 0x8143182a775c54578c8b7b3ef77982498866945d * Etherscan: [https://etherscan.io/address/0x8143182a775c54578c8b7b3ef77982498866945d](https://etherscan.io/address/0x8143182a775c54578c8b7b3ef77982498866945d) * Dexscreener: [https://dexscreener.com/ethereum/0x43e7ade137b86798654d8e78c36d5a556a647224](https://dexscreener.com/ethereum/0x43e7ade137b86798654d8e78c36d5a556a647224) ## Claiming wQUIL on Ethereum L1 :::info Important: This assumes you have successfully installed the Quilibrium qclient app. Installation instructions found [here](/cli-commands/cli-commands-1). ::: ### 2. Generate hex `payload` proof Generate hex `payload` from the Quilibrium bridge on the website > The hex payload string is meant to identify the originating wallet for the request. This is so when you feed it into the `cross-mint` command on the node, the proof generated is only valid for your EVM wallet. #### 1. Click `Claim Rewards` button Go to the new updated [Quilibrium website](https://quilibrium.com) and click `Claim Rewards` button. ![Updated Q Website](/claim-wquil-img1.jpeg) #### 2. Input your node peer ID and connect wallet Input your node peer ID on the textfield on upper-left corner. Press Enter. Then, click `Connect Wallet` button. ![Enter your peer ID](/claim-wquil-img2.jpeg) #### 3. Choose your wallet extension Choose your EOA wallet extension where your Ethereum L1 wallet is found.
> If the wallet extension you're using can be found among the options, choose the respective icon.
> If others, look for them in Wallet Connect option. ![Connect wallet](/claim-wquil-img3.jpeg) #### 4. Generate the hex `payload` string as proof After connecting your wallet, you will see a `Prove` button after. Clicking on that opens the dialog window below. ![Get proof](/claim-wquil-img4.jpeg) Copy that line `qclient cross-mint 0x000000000...` to clipboard (by selecting the entire line and pressing `Ctrl+c`) and proceed to the next step. ## Claiming wQUIL on Ethereum L1 :::info Important: This assumes you have successfully installed the Quilibrium qclient app. Installation instructions found [here](/cli-commands/cli-commands-1). ::: ### 3. Invoke `cross-mint` command on node `qclient` #### 1. Using copied hex `payload` string, invoke `cross-mint` command Using the copied hex `payload` string you copied from [Step 1](/claim-wquil/claim-wquil-1#4-generate-the-hex-payload-string-as-proof), invoke the `cross-mint` command in your node client. Run ```bash cd ~/ceremonyclient/client qclient cross-mint 0x000000000000000000000000000000000000000000 ``` Or if you are running your node inside a Docker container, run ```bash docker compose exec node qclient cross-mint --config /root/.config 0x000000000000000000000000000000000000000000 ``` The output must resemble something like ```console [Example] $ qclient cross-mint 0x000000000000000000000000000000000000000000 {"peerPublicKey":"knksdfsdfnsdkfndsfjnfsdkfndksfndsfsdfnfsdfddsnfdsdfsfsdfdssdfsdffdssE+CUd+2A","peerSignature":"8sAjnsdjfnsdfkocArw+/absdasddsa/fubFHDwydBGenasdibdibediasdiasjdnsaidnasdinasdisandsadx3rSIROvW/9sZnwGyoA","proverPublicKey":"oomsjndsjndsajnasdkasdnksadnksadnksadnsddadsddas","proverSignature":"jeloirjfomdosfoddsofjdsfW+haasdjknsdfjnsdfijndsfjndsfkjsdnfkndsfdsfsdzq+ksdfjnkfjdsnkfjsndfkjsndfkjsdbfksbdfkjdsfbsdfbsdkfbdfskbdksbfkdsbffdsbkbf"} ``` #### 2. Paste the result on browser. Paste the result string back in the dialog window on your browser, overwriting the placeholder value `example: (....)`. After pasting the result string, the dialog window disappears if it is valid and you may proceed to Step 3. :::note If the result string is invalid, the dialog window will show this error message "An invalid cross mint proof was provided" ::: ![Paste result browser](/claim-wquil-img4.jpeg) #### 3. Click `Claim` button. Click the `Claim` button next displayed to your connected wallet, as shown below (example used with coinbase wallet). ![Click claim](/claim-wquil-img5.jpeg) :::success When the hex `payload` proof is submitted to the bridge signer, it verifies the signatures and sets claim ability for only the claiming wallet ::: #### 4. Confirm transaction on wallet extension to claim! Confirm the transaction on your wallet extension to complete your $wQUIL claim! ![success](/claim-wquil-img6.jpeg) ## Claiming wQUIL on Ethereum L1 :::info Important: This assumes you have successfully installed the Quilibrium qclient app. Installation instructions found [here](/cli-commands/cli-commands-1). ::: ### 4. Other things to note * Users can only claim 100% of their QUIL rewards. They cannot claim partial amount of their rewards. * The UID for the given claim is deterministic, based on the node id, meaning you will get the same transaction hash if you already claimed it. * You will get an error message if an attempt to claim twice with two different wallets * Basically cross mint is cross-signing as well; extreme restrictions to help squash scammers * Of course, nothing stops someone from saying "Hey I can help you mint, just enter this string and give me your response" as a service for those 100+ node runners * Small tweaks were already added here for forward thinking, to add friction, for "sybils" * Batch claiming is decided against because of two reasons: it would be extremely hard to audit, and it would be too easy for undetected sybils to sweep their rewards ## CLI Commands in Quilibrium With the release of Quilibrium 1.4.17 on May 11, 2024, the node application comes with the `/client` folder. At that version, only the `cross-mint` command will be made available.

By Quilibrium 2.0, the other commands will be made available for you to have better visibility on your node's conditions, earned rewards and perform transfer transactions. ### 1. Installation (Optional) :::warning By Quilibrium v1.4.19-p1 since June 15, 2024, building/installing the qclient binary from source is not required, as the binary file is now downloadable directly from the Quilibrium releases site. ::: 1. Remove the `qclient` binary file, in case it exists. ```console rm /root/go/bin/qclient ``` 2. Go to the `client` directory inside the `ceremonyclient` local repo folder. Build the `qclient` binary file ```console cd ~/ceremonyclient/client GOEXPERIMENT=arenas go build -o /root/go/bin/qclient main.go ``` 3. Verify that the `qclient` binary file is in the Go bin directory. ``` ls /root/go/bin ``` #### General Command Syntax The CLI tooling itself will be relatively simple, and the commands can be run as follows
(assuming a build in the accompanying */client* folder rather than `go run ./...`: ```bash qclient [--config=] <...> ``` ## CLI Commands in Quilibrium With the release of Quilibrium 1.4.17 on May 11, 2024, the node application comes with the `/client` folder. At that version, only the `cross-mint` command will be made available.

By Quilibrium 2.0, the other commands will be made available for you to have better visibility on your node's conditions, earned rewards and perform transfer transactions. ### 2. Cross-mint $wQUIL on Ethereum L1 chain [Return to step 1](/cli-commands/cli-commands-1)
Signs a payload from the Quilibrium bridge to mint tokens on Ethereum L1 and prints the result to stdout ```bash cd ~/ceremonyclient/client qclient cross-mint ``` > payload - the hex-encoded payload from the Quilibrium bridge with optional 0x-prefix, must be specified Or if you are running your node inside a Docker container, run ```bash docker compose exec node qclient cross-mint --config /root/.config 0x000000000000000000000000000000000000000000 ``` Response: ```console [Example] $ qclient cross-mint {"peerPublicKey":"knksdfsdfnsdkfndsfjnfsdkfndksfndsfsdfnfsdfddsnfdsdfsfsdfdssdfsdffdssE+CUd+2A","peerSignature":"8sAjnsdjfnsdfkocArw+/absdasddsa/fubFHDwydBGenasdibdibediasdiasjdnsaidnasdinasdisandsadx3rSIROvW/9sZnwGyoA","proverPublicKey":"oomsjndsjndsajnasdkasdnksadnksadnksadnsddadsddas","proverSignature":"jeloirjfomdosfoddsofjdsfW+haasdjknsdfjnsdfijndsfjndsfkjsdnfkndsfdsfsdzq+ksdfjnkfjdsnkfjsndfkjsndfkjsdbfksbdfkjdsfbsdfbsdkfbdfskbdksbfkdsbffdsbkbf"} ``` ## CLI Commands in Quilibrium With the release of Quilibrium 1.4.17 on May 11, 2024, the node application comes with the `/client` folder. At that version, only the `cross-mint` command will be made available.

By Quilibrium 2.0, the other commands will be made available for you to have better visibility on your node's conditions, earned rewards and perform transfer transactions. ### 3. Querying Balance [Return to step 1](/cli-commands/cli-commands-1)
The command line tool takes arguments in either decimal (xx.xxxxx) format or raw unit (0x00000) format. Note that raw units are a multiple of QUIL: 1 QUIL = 0x1DCD65000 units

Command: ```bash qclient token balance ``` Response: ```console $ qclient token balance 50.0 QUIL (Account 0x23c0f371e9faa7be4ffedd616361e0c9aeb776ae4d7f3a37605ecbfa40a55a90) ``` ## CLI Commands in Quilibrium With the release of Quilibrium 1.4.17 on May 11, 2024, the node application comes with the `/client` folder. At that version, only the `cross-mint` command will be made available.

By Quilibrium 2.0, the other commands will be made available for you to have better visibility on your node's conditions, earned rewards and perform transfer transactions. ### 4. Querying Individual Coins [Return to step 1](/cli-commands/cli-commands-1)
Users may wish to view the individual coins:

Command: ```bash qclient token coins ``` Response: ```console $ qclient token coins 25.0 QUIL (Coin 0x1148092cdce78c721835601ef39f9c2cd8b48b7787cbea032dd3913a4106a58d) 25.0 QUIL (Coin 0x2dda9dc9770a1e5a01974fcd5af2a77147d0f19fb4935a1df677ec6050be0a9e) ``` ## CLI Commands in Quilibrium With the release of Quilibrium 1.4.17 on May 11, 2024, the node application comes with the `/client` folder. At that version, only the `cross-mint` command will be made available.

By Quilibrium 2.0, the other commands will be made available for you to have better visibility on your node's conditions, earned rewards and perform transfer transactions. ### 5. Creating a Pending Transaction [Return to step 1](/cli-commands/cli-commands-1)
Quilibrium's token application has two modes: a two-stage transfer/accept (or reject), or a single-stage mutual transfer.

Command: ```bash qclient token transfer ``` Response:
To perform a two-stage transfer, you have two options: ```console $ qclient token transfer QUIL (Pending Transaction 0x0382e4da0c7c0133a1b53453b05096272b80c1575c6828d0211c4e371f7c81bb) ``` or ```console $ qclient token transfer QUIL (Pending Transaction 0x0382e4da0c7c0133a1b53453b05096272b80c1575c6828d0211c4e371f7c81bb) ```
Omitting the RefundAccount will simply provide your own originating account. The option to specify exists so that you can maintain anonymity when sending by creating a fresh account to receive the refund. The RefundAccount cannot be the same as the ToAccount.

The first is a user-friendly version of a transfer, akin to what account-based networks like Ethereum and Solana do, where you operate on a balance. Behind the scenes, the client is actually splitting and/or merging coins as needed in order to create the requisite amount to send as a discrete coin. The second is an application-aware version of a transfer, akin to what UTXO-based networks like Bitcoin do, where you operate on the raw coin balance under a specific address. If you have good reason to manage coins separately (yet under the control of the same managing account), you will want to use the second option in conjunction with split/merge operations if needed: ```console $ qclient token split QUIL (Coin 0x024479f49f03dc53fd702198cd9b548c9e96004e19ef6a4e9c5211a9795ba34d) QUIL (Coin 0x0140e01731256793bba03914f3844d645fbece26553acdea8ac4de4d84f91690) $ qclient token merge QUIL (Coin 0x151f4ae225e20759077e1724e4c5d0feae26c477fd10d728dfea962eec79b83f) ``` ## CLI Commands in Quilibrium With the release of Quilibrium 1.4.17 on May 11, 2024, the node application comes with the `/client` folder. At that version, only the `cross-mint` command will be made available.

By Quilibrium 2.0, the other commands will be made available for you to have better visibility on your node's conditions, earned rewards and perform transfer transactions. ### 6. Accepting a Pending Transaction [Return to step 1](/cli-commands/cli-commands-1)
To accept a pending transaction, you simply run: ```console $ qclient token accept QUIL (Coin 0x2688997f2776ab5993894ed04fcdac05577cf2494ddfedf356ebf8bd3de464ab) ``` The same applies for rejecting a pending transaction ```console $ qclient token reject QUIL (PendingTransaction 0x27fff099dee515ece193d2af09b164864e4bb60c19eb6719b5bc981f92151009) ```
This creates a separate pending transaction because if the refund address is specified by the originator, and were they to specify another of your own addresses, it would be no different than accepting. ## CLI Commands in Quilibrium With the release of Quilibrium 1.4.17 on May 11, 2024, the node application comes with the `/client` folder. At that version, only the `cross-mint` command will be made available.

By Quilibrium 2.0, the other commands will be made available for you to have better visibility on your node's conditions, earned rewards and perform transfer transactions. ### 7. Performing a Mutual Transfer [Return to step 1](/cli-commands/cli-commands-1)
Pending transactions introduce friction, but without that friction, users can be spammed coins they don't want, or sent coins from an address they do not wish to interact with. If both parties agree in advance to transact, they can perform a mutual transfer, where both parties must be online, but can avoid having to deal with the two-phase transaction. This is great for maintaining privacy (each party's account is private) as well as ensuring a timely completion of a transaction:

On the receiver's side: ```console $ qclient token mutual-receive Rendezvous: 0x2ad567e4fc1ac335a8d3d6077de2ee998aff996b51936da04ee1b0f5dc196a4f Awaiting sender... ``` and after the sender connects: ```console Awaiting sender... OK QUIL (Coin 0x0525c76ecdc6ef21c2eb75df628b52396adcf402ba26a518ac395db8f5874a82) ``` On the sender's side: ```console $ qclient token mutual-transfer Confirming rendezvous... OK QUIL (Coin [private]) ``` or if using the raw Coin address: ```console $ qclient token mutual-transfer Confirming rendezvous... OK QUIL (Coin [private]) ``` This will likely be the first unique experience Quilibrium provides to users already familiar with other networks, as privacy preservation is an immediately obvious and first class experience here by showing the user what it can (or *cannot*) see. ## CLI Commands in Quilibrium With the release of Quilibrium 1.4.17 on May 11, 2024, the node application comes with the `/client` folder. At that version, only the `cross-mint` command will be made available.

By Quilibrium 2.0, the other commands will be made available for you to have better visibility on your node's conditions, earned rewards and perform transfer transactions. ### 8. Claiming Rewards [Return to step 1](/cli-commands/cli-commands-1)
Tokens issued after 1.5.0 are issued by nodes providing their proofs to the Mint Authority functionality of the token application. Claiming those rewards can be configured to be performed automatically (default, generates a new Coin every claim and merges them), or in lump sums at intervals, manually. It is recommended for ease of management that the defaults are applied, so that in the event of hardware failure no rewards go unclaimed.

If you wish to do it manually however, you will need to run: ```console $ qclient token mint all QUIL (Coin 0x162ad88c319060b4f5ea6dbf9a0c2cd82d3d70dfc22d5fc99ca5371083d68416) ``` ## About Quilibrium and Components In the sections after "What is Quilibrium?", Q's underlying architectural components are explained in two ways - in terms a five year old can understand (no math, just metaphors), but we'll also step it up in accuracy to a level a high schooler could also understand (algebra, a bit intermediate but with effort can be understood). There will be two pages named `ELI5` and `ELIHS` (Explain Like I'm a High Schooler) with its own respective story for each component. This will omit quite a few details, but hopefully will help connect ideas to real world concepts so that the broader picture becomes clearer. ### What is Quilibrium? Quilibrium is a protocol under active development with a core mission to secure every bit of traffic on the web. We believe that previous attempts at doing this through trusted institutions have failed, evinced by revelations by Snowden and others, as well as through their own actions – one only need to look briefly at Cloudflare's and others' deplatforming before it starts to get a little uncomfortable about their behaviors in playing internet cop. To answer this, you need to solve for securely decentralizing the web – servers, storage, traffic. This is not a challenge I take lightly, and hard tech problems require hard tech answers. If you've been deep in the cryptography research space, very little of Q's [whitepaper](https://www.quilibrium.com/quilibrium.pdf) will feel novel, because it isn't – every idea we have utilized is based on existing, battle tested cryptography. Quilibrium's technologies are not unique – many of these things are inventions that existed in some way in other projects or papers, much like how Bitcoin did not contribute anything new in terms of cryptography or data structures – the novelty was the right combination of technologies which unlocked the entire field of decentralized finance. With Quilibrium's combination of technologies, the scale and speed of applications in a decentralized context becomes so much broader than simply finance alone, while still enabling decentralized finance to flourish. ### Quilibrium is: * A censorship-resistant peer-to-peer network for application infrastructure. * A multi-party computation framework. * A privacy-preserving E2EE framework. * Incentivized, through the use of a fair-launch based, tokenized consensus model. ### Quilibrium is not: * A blockchain – strictly, not a distributed ledger produced by linear sequences of blocks of transactions. * A design by committee project – like more traditional OSS projects, Quilibrium is BDFL-driven. * Flexible on its mission – we will not support censorship, we will not compromise on privacy or secrecy, and we will not compromise on users' fundamental human rights. * An unethical launch – we will not engage in token warrants/token sales with investors, not only because a fair launch cannot enable such a thing to happen, but also because an alignment of investors in a business directly to a protocol's token is intrinsically broken (and morally questionable, but this is best reserved for a separate post). ##### References * "Q Rude FAQ" on Paragraph, 16 May 2024 - [https://paragraph.xyz/@quilibrium.com/q-rude-faq](https://paragraph.xyz/@quilibrium.com/q-rude-faq) * "Proof of Meaningful Work" on Paragraph, 8 January 2024 - [https://paragraph.xyz/@quilibrium.com/proof-of-meaningful-work](https://paragraph.xyz/@quilibrium.com/proof-of-meaningful-work) * Quilibrium Whitepaper - "Quilibrium: A Peer-to-Peer MPC Platform as a Service", 25 December 2022 - [https://www.quilibrium.com/quilibrium.pdf](https://www.quilibrium.com/quilibrium.pdf) ## Network Dashboard Visibility Issue ### Complete upgrade script code block (with service systemd modification) ```bash service ceremonyclient stop sed -i 's/listenRESTMultiaddr: ""/listenRESTMultiaddr: \/ip4\/127.0.0.1\/tcp\/8338/g' ~/ceremonyclient/node/.config/config.yml service ceremonyclient start ``` ```bash sed -i 's/listenMultiaddr: \/ip4\/0.0.0.0\/udp\/8336\/quic/listenMultiaddr: \/ip4\/0.0.0.0\/tcp\/8336/g' ~/ceremonyclient/node/.config/config.yml ``` :::warning If you face this error after running the code block above, just try the code block again. This just means the Gitlab server that Cassie is personally hosting encountered an internal server error (Error 500) due to overwhelming requests from thousands of nodes trying to upgrade at the same time. ::: ![HTTPError 500](/19-possible-issue.jpeg) ### Signs of success :::info The image below is what you should see if successful ::: ![Success upgrade](/19-upgrade-success.jpeg) ### Post v1.4.19 rewards earned :::info To find out your post-v1.4.19 rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.19-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Internal Documentation >> Profiler Go Back to Internal Documentation page - [https://quilibrium.guide/internal](/internal) ### Create the script ```bash cd ~ vim profiler.sh ``` Copy paste this code block ```bash #!/bin/sh DIR_PATH=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) nodeVersion=$1 ceremonyPath=${3:-"$DIR_PATH"} lastBalance=0 if [[ "$OSTYPE" == "linux-gnu"* ]]; then release_os="linux" if [[ $(uname -m) == "aarch64"* ]]; then release_arch="arm64" else release_arch="amd64" fi cpuBrand=$(lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p') else release_os="darwin" release_arch="arm64" cpuBrand=$(sysctl -n machdep.cpu.brand_string) fi get_current_reward_profile(){ rewardData=`$ceremonyPath/node-$nodeVersion-$release_os-$release_arch --balance` set -f balanceRaw=(${rewardData// / }) aL=${#balanceRaw[@]} balance=${balanceRaw[$(expr $aL - 2)]} timestampRaw=$(date) timestamp=$(date +%s) change=$(echo "$balance - $lastBalance" | bc) rawData="$timestamp:$cpuBrand:$balance" lastBalance=$balance echo "[$timestampRaw] Balance update ($cpuBrand): $balance QUIL (change: $change QUIL)" echo -e "[$timestampRaw] Balance update ($cpuBrand): $balance QUIL (change: $change QUIL)" >> ~/profiler.log } while true do get_current_reward_profile sleep $2 done # a reward profiler if anyone wants it. # # Usage: # - save as profiler.sh # - bash profiler.sh # - e.g. bash profiler.sh 1.4.20 60 /Users/atk/Projects/ceremonyclient/node # - or (if the script is in node folder) bash profiler.sh 1.4.20 60 # # Notes: # - either put it in /node directory or situate it else where # - if in /node directory, argument 3 is not required, otherwise you need to provide the directory path to ceremonyclient/node ``` Save the file by pressing `:wq`. ### Execute the script ```bash chmod +x profiler.sh ./profiler.sh ``` ### Monitor the profiler.log ```bash tail -f ~/profiler.log ``` ## Internal Documentation >> Monitoring Rate of Change Go Back to Internal Documentation page - [https://quilibrium.guide/internal](/internal) ### Create the script ```bash cd ~ vim rateofchange.sh ``` Copy paste this code block ```bash #!/bin/bash # Function to extract balance from the command output extract_balance() { ~/ceremonyclient/node/node-1.4.21-linux-amd64 --node-info | grep -oP 'Unclaimed balance: \K[0-9.]+(?= QUIL)' } # Function to calculate the rate of change per hour using awk calculate_rate_of_change() { local current_balance=$1 local previous_balance=$2 local time_diff=$3 echo "$current_balance $previous_balance $time_diff" | awk '{print ($1 - $2) * (3600 / $3)}' } cd ~/ceremonyclient/node previous_balance=0 previous_time=$(date +%s) while true do current_balance=$(extract_balance) current_time=$(date +%s) time_diff=$((current_time - previous_time)) if [ "$previous_balance" != 0 ]; then balance_diff=$(echo "$current_balance $previous_balance" | awk '{print $1 - $2}') rate_of_change=$(calculate_rate_of_change $current_balance $previous_balance $time_diff) echo "$(date -u) Current Balance: $current_balance QUIL (Difference: $balance_diff QUIL, Rate of Change: $rate_of_change QUIL/hour)" echo -e "$(date -u) Current Balance: $current_balance QUIL (Difference: $balance_diff QUIL, Rate of Change: $rate_of_change QUIL/hour)" >> ~/rateofchange.log else echo "$(date -u) Current Balance: $current_balance QUIL" echo -e "$(date -u) Current Balance: $current_balance QUIL" >> ~/rateofchange.log fi previous_balance=$current_balance previous_time=$current_time sleep 120 done ``` Save the file by pressing `:wq`. ### Execute the script ```bash chmod +x rateofchange.sh ./rateofchange.sh ``` ### Monitor the rateofchange.log ```bash tail -f ~/rateofchange.log ``` ## Internal Documentation >> Rollback ### Rollback to 1.4.21-p1 while backing up 2.0.0-p8 binaries #### Assuming you backed up the 1.4.21-p1 binaries ```bash # stop the service service ceremonyclient stop # copy the node folder and back it up on a new folder inside root folder. cp -r ~/ceremonyclient/node ~/node2.0.0-p8-backup # remove all node binaries (expected these are all 2.0.0-p8 binaries) rm -r ~/ceremonyclient/node/node* # restore the 1.4.21-p1 binaries into the node folder # adjust the ~/node-backup to the correct folder where you backed up the 1.4.21-p1 binaries cp -r ~/node-backup/node* ~/ceremonyclient/node/ # update service config file, and do daemon-reload sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-2.0.0.8-linux-amd64/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.21.1-linux-amd64/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload # restart the service service ceremonyclient start # trace logs journalctl -u ceremonyclient.service -f --no-hostname -o cat ``` #### Assuming you DID NOT back up the 1.4.21-p1 binaries ```bash # stop the service service ceremonyclient stop # copy the node folder and back it up on a new folder inside root folder. cp -r ~/ceremonyclient/node ~/node2.0.0-p8-backup # remove all node binaries (expected these are all 2.0.0-p8 binaries) rm -r ~/ceremonyclient/node/node* # restore the 1.4.21-p1 binaries into the node folder release_os="linux" release_arch="amd64" cd ~/ceremonyclient/node curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch" > "node-1.4.21.1-$release_os-$release_arch" curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch.dgst" > "node-1.4.21.1-$release_os-$release_arch.dgst" curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch.dgst.sig.1" > "node-1.4.21.1-$release_os-$release_arch.dgst.sig.1" curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch.dgst.sig.2" > "node-1.4.21.1-$release_os-$release_arch.dgst.sig.2" curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch.dgst.sig.3" > "node-1.4.21.1-$release_os-$release_arch.dgst.sig.3" curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch.dgst.sig.8" > "node-1.4.21.1-$release_os-$release_arch.dgst.sig.8" curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch.dgst.sig.9" > "node-1.4.21.1-$release_os-$release_arch.dgst.sig.9" curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch.dgst.sig.13" > "node-1.4.21.1-$release_os-$release_arch.dgst.sig.13" curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch.dgst.sig.15" > "node-1.4.21.1-$release_os-$release_arch.dgst.sig.15" curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch.dgst.sig.16" > "node-1.4.21.1-$release_os-$release_arch.dgst.sig.16" curl "https://releases.quilibrium.com/node-1.4.21.1-$release_os-$release_arch.dgst.sig.17" > "node-1.4.21.1-$release_os-$release_arch.dgst.sig.17" chmod +x ./node-1.4.21.1-$release_os-$release_arch # update service config file, and do daemon-reload sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-2.0.0.8-linux-amd64/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.21.1-linux-amd64/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload # restart the service service ceremonyclient start # trace logs journalctl -u ceremonyclient.service -f --no-hostname -o cat ``` ### Backup your node 1.4.21-p1 again, and then Re-update to 2.0.0-p8 or 2.0.1 once mainnet 2.0.1 is ready ```bash # stop the service service ceremonyclient stop currtimestamp=$(date +%Y%m%d-%H%M%S) # back up your .config folder to root directory cp -r ~/ceremonyclient/node/.config ~/config-backup-$currtimestamp # back up your entire node folder to root directory cp -r ~/ceremonyclient/node ~/node-backup-$currtimestamp # Update your node to latest version release_os="linux" release_arch="amd64" current_version="1.4.21.1" cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd ~/ceremonyclient/client rm rm -rf qclient* files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch cd .. sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload cd ~ service ceremonyclient start # trace logs journalctl -u ceremonyclient.service -f --no-hostname -o cat ``` ## Trouble with Store frame synchronization? Note: This section is only recommended who are having trouble syncing data frames (at slow speeds). If you are not in a rush, and confident with your server's performance, we do not recommend you follow this part. Note 2: This section is not part of the installation or setup process for the Q Node. Also - Cassie advised that on Quilibrium v2.0 the frame synchronization time will be seen reduced from an average of >1 day to an average of a few hours. Note 3: Please expect this section to be deprecated when v2.0 is released. ### Description If you are worried that node frame synchronization takes a long time, here's a solution for you. Cherry Servers πŸ’ [www.cherryservers.com](www.cherryservers.com) has officially provided a snapshot of a synchronized store folder. This is the store directory found on this path `~/ceremonyclient/node/.config/store`. URL: [https://snapshots.cherryservers.com/quilibrium/store.zip](https://snapshots.cherryservers.com/quilibrium/store.zip) Steps to use this store snapshot is below. ### Instructions to use #### TL;DR code block ```bash apt install unzip cd ~/ceremonyclient/node/.config wget https://snapshots.cherryservers.com/quilibrium/store.zip service ceremonyclient stop mv store old-store unzip store.zip rm store.zip rm -rf old-store service ceremonyclient start ``` #### 1. Install unzip package onto your system. ```bash apt install unzip ``` #### 2. Download the store snapshot in the `.config` directory. ```bash cd ~/ceremonyclient/node/.config wget https://snapshots.cherryservers.com/quilibrium/store.zip ``` #### 3. Stop the `ceremonyclient` service ```bash service ceremonyclient stop ``` #### 4. Replace the old store with the store snapshot ```bash mv store old-store unzip store.zip rm store.zip rm -rf old-store ``` #### 5. Start the `ceremonyclient` service ```bash service ceremonyclient start ``` ## Upgrading to Quilibrium v1.4.20-p1 from .20 ### Complete upgrade script code block This code block upgrades your node to v1.4.20-p1 from v1.4.20, by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64) 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. not doing anything with qclient because its latest version is still 1.4.19-p1 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS and arch variables echo "2. setting release OS and arch variables..." release_os="linux" release_arch="amd64" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # not doing anything with qclient because its latest version is still 1.4.19-p1 echo "4. not doing anything with qclient because its latest version is still 1.4.19-p1..." # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-1.4.20-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-1.4.20-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/20-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info To find out your post-v1.4.19+ rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.20.1-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Upgrading to Quilibrium v1.4.20-p1 from versions .19 and older ### Complete upgrade script code block This code block upgrades your node to v1.4.20-p1 from v1.4.19 and older, by doing the following: 1. stopping the ceremonyclient service first 2. making a backup of the entire .config folder on \~ folder 3. deleting and recreating an empty ceremonyclient directory, in order to start afresh 4. setting release OS, arch variables, and the current version variable * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=1.4.19) * IMPORTANT please adjust the variable value for current\_version below. Change this to your node's current version. 5. creating node folder, and downloading all required node-related files (binaries, .dgst and \*.sig files) 6. creating client folder, and downloading qclient binary 7. copying your backed up .config directory inside node 8. modifying the service configuration file 9. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # make a backup of the whole .config folder on your root folder echo "2. making a backup of the entire .config folder on ~ folder..." cd ~ cp -r ~/ceremonyclient/node/.config ~/config config_copy_status=$? config_copy_message="Successful" if [ $config_copy_status != 0 ]; then config_copy_message="Unsuccessful" fi echo "... Copy Code: $config_copy_status - $config_copy_message" echo "... backup of .config directory done" # delete and remake the ceremonyclient directory echo "3. deleting and recreating the ceremonyclient directory, in order to start afresh..." if [ $config_copy_status != 0 ]; then echo "... because backup of .config failed, only renaming ceremonyclient to ceremonyclient_old" mv ceremonyclient ceremonyclient_old else echo "... because backup of .config is successful, proceeding with deleting ceremonyclient folder" rm -rf ceremonyclient/ fi mkdir ceremonyclient && cd ceremonyclient echo "... deleted and recreated" # setting release OS and arch variables echo "4. setting release OS and arch and current version variables..." release_os="linux" release_arch="amd64" current_version="1.4.19" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # create node directory and download all required node files (binaries, dgst, and sig files) echo "5. creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder recreated" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # creating client directory for qclient echo "6. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder recreated" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do qclient_version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done mv qclient-$qclient_version-$release_os-$release_arch qclient chmod +x ./qclient echo "... \"qclient-$qclient_version-$release_os-$release_arch\" renamed to \"qclient\"" cd .. echo "... download of required qclient files done" # copying your backed up .config directory inside node echo "7. copying your backed up .config directory inside node..." cp -r ~/config ~/ceremonyclient/node/.config rm -rf ~/config echo "... .config directory copied back in node folder" # modifying the service configuration file echo "8. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "9. starting the service again..." cd ~ service ceremonyclient start echo "... service started" ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/20-upgrade-success.png) ### Post v1.4.19+ rewards earned :::info To find out your post-v1.4.19+ rewards earned, run this code block on your node. Replace with the right binary file, as applicable. Then you should see the image below as a result. ::: ```bash cd ~/ceremonyclient/node ./node-1.4.20.1-linux-amd64 --node-info ``` ![Rewards shown](/19-rewards-shown.jpeg) ## Managing your Quilibrium Node ### 1. Backing up your `.config` folder, daily For this objective, we will not reinvent the wheels, but leverage on what the community has built for the community. :::warning However, the script described below is tailored to leveraging on Cherry Servers included backup storage of 100 GB for each server rented. The backup storage is a decoupled network-attached file storage space that is dedicated to your server. ::: #### A. Activate your included backup storage. Go to the Cherry Servers portal ([link](https://portal.cherryservers.com/)) and login to your Cherry Servers account. Go to your Servers. Select the server you want to activate your included backup storage for. On your server's overview page, click the `Backup Storage` sub-menu option under Storages found on the left sidebar. ![Click Backup Storage](/backup-config-activate.png) Click the `Activate +` blue button found on the upper-right corner of the page. ![Click Activate+](/backup-config-activate2.png) Wait until the `Included Backup Storage 100 GB` gets displayed on the Plan field on the pop-up dialog that appears. Then click `Activate`. ![Click Activate](/backup-config-activate3.png) You will see that the backup storage is now on `Provisioning` State. You will have to wait around two (2) to three (3) minutes for this State to change from `Provisioning` to `Active`. Once it is in an `Active` state, you should be able to see the storage private and public IP addresses, as well as Service Configuration details on how to connect to the backup storage via FTP, SMB, and NFS protocols. Under `# Sample instructions:` section, the username and password will be displayed on plaintext. and further instructions to connect are displayed further depending on the selected protocol tab (FTP, SMB or NFS). #### B. Copy and paste the code block below. This `quilup.sh` script is created by @Lili of CherryServers. We will modify the script a bit and perform the following changes: 1. Change the folder that the script will backup from `node` to `.config`. 2. Exclude `config.yml` and `keys.yml` from files to be backed up using an exclusion file called `exclude_file.txt` Run the code block below. ```bash cd ~ wget https://snapshots.cherryservers.com/quilup.sh chmod +x quilup.sh # creating an exclude-file.txt echo -e "# a sample exclude rule file\nconfig.yml\nkeys.yml" >> exclude_file.txt # modifying the initial rclone copy command to only clone .config folder, and exclude config.yml and keys.yml sed -i 's/rclone copy --transfers 10 --checkers 20 --disable-http2 --retries 1 \/$HOME\/ceremonyclient\/node ftp:\/quil\/$hostname\/node --stats-one-line --stats=1s --log-file=\/tmp\/rclone.log/rclone copy --transfers 10 --checkers 20 --disable-http2 --retries 1 \/$HOME\/ceremonyclient\/node\/.config ftp:\/quil\/$hostname\/config --stats-one-line --stats=1s --log-file=\/tmp\/rclone.log --exclude-from \/$HOME\/exclude_file.txt/g' ~/quilup.sh # modifying the crontab rclone copy command to only clone .config folder, and exclude config.yml and keys.yml sed -i 's/$HOME\/ceremonyclient\/node ftp:\/quil\/$hostname\/node/$HOME\/ceremonyclient\/node\/.config ftp:\/quil\/$hostname\/config --exclude-from \/$HOME\/exclude_file.txt/g' ~/quilup.sh # adding 3rd question if user wants to mount the ftp folder to ~/config-backup location. if y, then execute mount sed -i 's/echo "πŸ•’ cron job added πŸ•’"/echo "πŸ•’ cron job added πŸ•’"\nfi\n\n#ask user if they want to mount the ftp folder\nread -p "do you want to mount ftp:\/quil\/$hostname\/config to ~\/config-backup folder? (y\/n): " mount_config\n\nif [ "$mount_config" == "y" ]; then\n if [ "$backup_choice" == "1" ]; then\n echo "... installing nfs-common package first (in case of Ubuntu OS)"\n apt -y install nfs-common\n mkdir ~\/config-backup\n mount -t nfs $ftp_host:\/export\/backup\/quil\/$hostname\/config ~\/config-backup\n echo "πŸ•’ ftp folder mounted to ~\/config-backup\/ πŸ•’"\n echo "listing \/root\/config-backup\/ contents..."\n echo "πŸ•’ ftp folder mounted to ~\/config-backup\/ πŸ•’"\n echo "listing \/root\/config-backup\/ contents..."\n find "\/root\/config-backup" -type f -exec echo Found file {} \\;\n elif [ "$backup_choice" == "2" ]; then\n echo "im sorry. mounting instructions were not added for storj backup choice"\n fi/g' ~/quilup.sh # execute quilup.sh ./quilup.sh ``` #### C. Follow the script instructions. Press `1` to select πŸ’ Cherry Servers Backup Storage πŸ’. ![Press 1](/backup-config-script.png) Type your backup storage IP address and FTP password next. :::info Your FTP password may be found on the Backup Storage page of your server in the Cherry Servers dashboard. Under the Service Configuration section, on the FTP tab. ::: :::warning After entering your password, this will automatically proceed with the following steps: 1. Stopping the node (by running `service ceremonyclient stop`) 2. Starting the upload of the whole `.config` folder to your backup storage (by running `rclone copy --transfers 10 --checkers 20 --disable-http2 --retries 1 /$HOME/ceremonyclient/node/.config ftp:/quil/$hostname/config --stats-one-line --stats=1s --log-file=/tmp/rclone.log`) * Do note that you can see the upload logs on this location `/tmp/rclone.log` 3. Restarting the node (by running `service ceremonyclient start`) ::: ![Type in IP addr and FTP password](/backup-config-script2.png) After entering your password, this will automatically proceed with the steps described above. ![Steps taken](/backup-config-script3.png) The script will ask you next if you want to add the `rclone sync` task to crontab job to run every 12 hours? Type `y` to answer yes. ![Setup cron job](/backup-config-script4.png) The backup script execution is now completed. #### D. Verify mounted folder `~/config-backup` Go to the `config-backup` folder. ```bash cd ~/config-backup ls ``` This should represent your node's backup files located in your backup storage. Backed up files listed below. ![Backed up files](/backup-config-mount2.png) ## Managing your Quilibrium Node ### 4. Controllng your node #### 1. Start your Q Node Run: ```bash service ceremonyclient start ``` Note #1: If you have the monitoring window on [Section XII](#xii-monitor-traceinfo-logs-of-your-q-node-service) open, you will notice after executing this start command that your Q Node will start up

Note #2: If you skipped [Section VI](#vi-import-your-voucher-hex-optional) above, please take note of your Peer ID on the logs shown in monitoring window

#### 2. Stop your Q Node Run: ```bash service ceremonyclient stop ``` #### 3. Look at status of your Q Node Run: ```bash service ceremonyclient status ``` ## Managing your Quilibrium Node ### 3. Monitor trace/info logs Run: ``` sudo journalctl -u ceremonyclient.service -f --no-hostname -o cat ``` While the `ceremonyclient` system service is not started, nothing will be shown and that is okay
Just maintain this terminal window while you use another window to start your service (in next [Section XIII.1](#1-start-your-q-node)) ## Managing your Quilibrium Node ### 2. Getting your Node difficulty metric Getting your node difficulty metric is easy. Only run this code block below. :::info Replace the `Qm` below with your node's peer ID starting with Qm. ::: ```bash apt -y install base58 grpcurl -plaintext -max-msg-sz 5000000 localhost:8337 quilibrium.node.node.pb.NodeService.GetPeerManifests | less | grep -B 1 -A 16 $(echo -n Qm | base58 -d | base64) ``` The code block above should give you this kind of result. ![difficulty metric result](/difficulty-metric.png) ## Managing your Quilibrium Node ### 5. Upgrading to Quilibrium v2.1.0.0 (Bloom) For more better FAQ regarding the v2.1.0.0 (Bloom), please refer to the Quilibrium Discourse Forum ([link](https://quilibrium.discourse.group/t/comprehensive-2-0-faq/526)) :::warning REMEMBER TO BACKUP YOUR ENTIRE `.config` FOLDER ::: ### Complete upgrade script code block This code block upgrades your node to v2.1.0.0 (Bloom), by doing the following: 1. stopping the ceremonyclient service first 2. setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64, current\_version=2.0.3.4) as applicable 3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder 4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder 5. modifying the service configuration file 6. starting the service again :::warning The approach below will imply the following: * We do not require having `git` installed because we are not cloning the Github repo anymore. We will download the binary files directly from the Quilibrium releases site. * We do not require having `Go` installed because we are not building the binaries from source anymore. See statement above on downloading binaries directly. * You may however still want to have `Go` installed for building `grpcurl` ([link](/using-grpcurl#installation)) or other Go binaries. ::: ```bash # stop the service echo "1. stopping the ceremonyclient service first..." service ceremonyclient stop echo "... ceremonyclient service stopped" # setting release OS, arch and current version variables echo "2. setting release OS, arch and current version variables..." release_os="linux" release_arch="amd64" current_version="2.0.3.4" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\" and \$current_version set to \"$current_version\"" # deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder echo "3. deleting node (binaries, dgst and sig) files and re-download the same (but latest) required node files in the node folder..." cd ~/ceremonyclient/node rm rm -rf node-*-$release_os-$release_arch* echo "... deleted node (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" # deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder echo "4. deleting qclient (binary, dgst and sig) files and re-download the same (but latest) required qclient files in the client folder..." cd ~/ceremonyclient/client rm rm -rf qclient* echo "... deleted qclient (binaries, dgst and sig) files from node folder" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do clientversion=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./qclient-$clientversion-$release_os-$release_arch cd .. echo "... download of required qclient files done" # modifying the service configuration file echo "5. modifying the service configuration file..." sed -i "s/ExecStart=\/root\/ceremonyclient\/node\/node-$current_version-$release_os-$release_arch/ExecStart=\/root\/ceremonyclient\/node\/node-$version-$release_os-$release_arch/g" /lib/systemd/system/ceremonyclient.service systemctl daemon-reload echo "... replaced \"ExecStart=/root/ceremonyclient/node/node-$current_version-$release_os-$release_arch\" with \"ExecStart=/root/ceremonyclient/node/node-$version-$release_os-$release_arch\"" echo "... service configuration file updated" # start the service again echo "6. starting the service again..." cd ~ service ceremonyclient start echo "... service started" journalctl -u ceremonyclient.service -f --no-hostname -o cat ``` ### Success Screenshot :::info The image below is what you should see if successful ::: ![Success upgrade](/2-1-0-0-upgrade-success.png) ## Setting up your Node (v2.1.0-p2) ### 1. Secure your Node hardware (VPS) #### 1. Get a VPS running Ubuntu 22.04 ##### TOP RECOMMENDATION ##### Cherryservers After Cassie has done some intensive testing, and working with the folks over at CherryServers, We are happy to announce that they are offering customized server instances for Q node runners.

CherryServers is a Europe-based crypto-friendly bare metal and cloud provider. We are proud to be one of the few service providers who openly embrace web3 as we believe in the principles of free internet, decentralization, and the freedom of choice without being tied down to any particular vendor. With over 20 years of experience and a strong reputation, we have established several successful partnerships within the blockchain field. We're excited to announce our latest partnership with Quilibrium to assist their node running community by offering stable infrastructure to enable high performance node hosting. We are excited to offer the following configurations, which have been validated for Quilibrium node hosting:

Sign-up link: [link](https://www.cherryservers.com/?affiliate=5I763YKW)

* Cloud VDS 4: CPU: 4 x Intel Gold 6230R @ 2.10Ghz (8 vCores), RAM: 32GB, Disk Storage: NVMe 200GB, Backup: 50GB, Bandwidth: 1Gbps uplink, Egress Traffic: 10TB, Ingress unmetered, 96.12 USD/monthly
* E3-1240V3: CPU: E3-1240v3, 4c/8t - 3.4GHz, RAM: 16GB ECC DDRIII , Disk Storage: 2x SSD 250GB, OS Disk: SSD 250GB, Backup: 100GB, Bandwidth: 1Gbps uplink, Egress Traffic: 10TB, Ingress unmetered, 106.92 USD/monthly
* E3-1240V5: CPU: E3-1240v5, 4c/8t - 3.5GHz, RAM: 32GB ECC DDR4, Disk Storage: 2x SSD 250GB, OS Disk: SSD 250GB, Backup: 100GB, Bandwidth: 3Gbps uplink, Egress Traffic: 30TB, Ingress unmetered, 106.81 USD/monthly
* E5-1620V4: CPU: E5-1620v4, 4c/8t - 3.5GHz, RAM: 32GB ECC DDR4, Disk Storage: 2x SSD 250GB, OS Disk: SSD 250GB, Backup: 100GB, Bandwidth: 3Gbps uplink, Egress Traffic: 30TB, Ingress unmetered, 124.20 USD/monthly
* E5-1650V3: CPU: E5-1650v3, 6c/12t - 3.5GHz, RAM: 64GB Registered ECC DDR4, Disk Storage: 2x SSD 250GB, OS Disk: SSD 250GB, Backup: 100GB, Bandwidth: 1Gbps uplink, Egress Traffic: 30TB, Ingress unmetered, 125.66 USD/monthly
* E5-1650V4: CPU: E5-1650v4, 6c/12t - 3.6GHz, RAM: 64GB Registered ECC DDR4, Disk Storage: 2x SSD 500GB, OS Disk: SSD 500GB, Backup: 100GB, Bandwidth: 3Gbps uplink, Egress Traffic: 30TB, Ingress unmetered, 132.68 USD/monthly
* E5-1650V3: CPU: E5-1650v3, 6c/12t - 3.5GHz, RAM: 64GB Registered ECC DDR4, Disk Storage: 2x SSD 250GB, OS Disk: SSD 250GB, Backup: 100GB, Bandwidth: 1Gbps uplink, Egress Traffic: 30TB, Ingress unmetered, 125.66 USD/monthly
##### 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, > 50MBps symmetric bandwidth, ie 50 download, 50 upload > 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, but this has to be a dedicated machine. With Dusk, these minimum requirements will reduce significantly. #### 2. Connect to your VPS Downloading and install PuTTY: [http://putty.org/](http://putty.org/) or just use your Terminal if you are running MacOS or Linux
Put your IP address into terminal client & click open Click "Accept" Type "root" & click enter Type your password & click enter
SSH into your VPS
## Setting up your Node (v2.1.0-p2) ### 10. Safekeep the `Q Wallet` Private Key and Encryption Key [Return to step 1](/setup-node/setup-node-1)
:::important DO NOT FORGET TO DO THIS STEP. ::: #### 1. keys.yml Go to ceremonyclient/node folder.
```bash cd ~/ceremonyclient/node ``` Run: ```shell sudo vim .config/keys.yml ``` Copy the following lines on an external file or note on your personal desktop/laptop. ```shell default-proving-key: id: default-proving-key type: 0 privateKey: abcde258a29d0eabcde8eaed9741c404133c35f4d781d5c16dff83d4b55efghije77092b91308b6c5b03f39866e01891e643583e5fb00f3f81f3538e19bc25edb931c6ce5d30df1d76de2b4714d2256f49f8e3a141a114ff049d9b1f2c2d3bfc43ba027bac9077thisisafakeprivatekeyc6c5962c1975fe82980fac3b4aa85c1a8bd8cdf4f5163f01405abcde publicKey: abcde0486a744fc63thisisafakeprivatekeyd8df16af8e287f8bb7fbc9206e24cb7f054a53cacda84fca62337f9e2b3dca20f9121cbxxxxx ...rest of the keys.yml file ``` Press `shift` + `:q`, and press `enter` or `return` on the keyboard
#### 2. config.yml Go to ceremonyclient/node folder.
``` cd ~/ceremonyclient/node ``` Run: ```shell sudo vim .config/config.yml ``` Copy all text, found in the config.yml file, on an external file or note on your personal desktop/laptop. ```shell key: keyManagerType: file keyManagerFile: path: .config/keys.yml createIfMissing: false encryptionKey: abcde4fbef10d6b75c8a5d3xxxxx8c9298e0561c6xxxxxxef4ad345e279xxxxx ...rest of the config.yml file ``` Press `shift` + `:q`, and press `enter` or `return` on the keyboard
## Setting up your Node (v2.1.0-p2) ### 2. SSH for the first time to your new VPS [Return to step 1](/setup-node/setup-node-1)

To SSH into a VPS, run: ```bash ssh root@ ``` > The authenticity of host (\) can't be established.
> ED25519 key fingerprint is SHA256:xxxxxxx
> This key is not known by another names
> Are you sure you want to continue connecting (yes/no/\[fingerprint])? ```bash yes ``` > Warning: Permanently added '\' (ED25519) to the list of known hosts. > Connection closed by \ port 22. Enter the root password SSH into your VPS again: ```bash ssh root@ ``` Enter the root password. ## Setting up your Node (v2.1.0-p2) ### 3. Prerequisite software [Return to step 1](/setup-node/setup-node-1)
#### 1. Use root user for this installation Make sure you are using the root user as this guide is tailored #### 2. Update Run apt update to fetch the latest version of the package list from Ubuntu's software repository ```bash sudo apt -q update ``` #### 3. Install Git (Optional) :::info Installing `git` has become optional since v1.4.19-p1 release on June 15, 2024 due to the availability of binary files downloadable directly from the Quilibrium releases site. ::: ```bash sudo apt install git -y ``` ```bash git --version ``` It must show: > git version 2.34.1 #### 4. Install GO (Optional) :::info Installing `go` has become optional since v1.4.19-p1 release on June 15, 2024 due to the availability of binary files downloadable directly from the Quilibrium releases site. You may proceed with installing `go` only for building the grpcurl binary. For this, the Go version has to be go1.22.14. ::: ##### Download the distribution source ```bash wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz ``` OR ```bash wget https://go.dev/dl/go1.22.4.linux-arm64.tar.gz ``` The project support both AMD and ARM.

KNOWN ISSUE FOR CherryServers in Singapore region, For some of their IP addresses, Google.com blocks them and this will prevent you from downloading (wget) the go1.22.4 gzip file from the URL above. To solve this, unfortunately, the only way is to cancel your new VDS and order a new one so that you get a new Primary IP address. I know this because I experienced this when I purchased my Cloud VDS4. ##### Extract the zipped (gz) file ```bash tar -xvf go1.22.4.linux-amd64.tar.gz ``` ##### Move the GO folder to usr folder ```bash mv go /usr/local ``` ##### Delete (remove) the downloaded GO zipped file ```bash rm go1.22.4.linux-amd64.tar.gz ``` ##### Permanently set GO environment variables ```bash vim ~/.bashrc ``` Press `i` to start inserting text into \~/.bashrc file
Scroll until the end of the file, and insert the following in new lines at the end:
```bash GOROOT=/usr/local/go GOPATH=$HOME/go PATH=$GOPATH/bin:$GOROOT/bin:$PATH ``` Press `esc` to stop the insert-text mode
Press `shift` + `:wq`, and press `enter` or `return` on the keyboard
Run: ```bash source ~/.bashrc go version ``` It must show: > go version go1.22.4 linux/amd64 ## Setting up your Node (v2.1.0-p2) ### 4. Configure Linux network device settings [Return to step 1](/setup-node/setup-node-1)

Purpose: to optimize throughput (bandwidth) and latency for large parallel jobs typical of networks like Q
Run: ``` sudo vim /etc/sysctl.conf ``` Press `i` to start inserting text into /etc/sysctl.conf file
Scroll until the end of the file, and insert the following in new lines at the end:
``` # Increase buffer sizes for better network performance net.core.rmem_max=600000000 net.core.wmem_max=600000000 ``` Press `esc` to stop the insert-text mode
Press `shift` + `:wq`, and press `enter` or `return` on the keyboard
Run: ``` sudo sysctl -p ``` Reboot your VPS ``` reboot ``` You will be disconnected from your VPS as the VPS reboots
SSH into your VPS again: ``` ssh root@\ ``` Enter the root password
## Setting up your Node (v2.1.0-p2) ### 5. Configure your Node Network Firewall [Return to step 1](/setup-node/setup-node-1)

Run: ```bash sudo ufw enable ``` Type `y` and press `enter` or `return` on keyboard Run: ```shell sudo ufw allow 22 sudo ufw allow 8336 sudo ufw allow 443 sudo ufw status ``` Response for the status command should be: ```bash > To Action From > -- ------ ----- > 22 ALLOW Anywhere > 8336 ALLOW Anywhere > 443 ALLOW Anywhere > 22 (v6) ALLOW Anywhere (v6) > 8336 (v6) ALLOW Anywhere (v6) > 443 (v6) ALLOW Anywhere (v6) ``` ## Setting up your Node (v2.1.0-p2) ### 6. Setup your ceremonyclient [Return to step 1](/setup-node/setup-node-1)

#### Create an empty ceremonyclient directory ```bash echo "1. Creating the ceremonyclient directory for your new Quilibrium node..." mkdir ceremonyclient && cd ceremonyclient echo "... ceremonyclient directory created" ``` #### Setting release OS and arch variables * Please adjust the variable values below (default os=linux, arch=amd64) ```bash echo "2. Setting release OS and arch variables..." release_os="linux" release_arch="amd64" echo "... \$release_os set to \"$release_os\" and \$release_arch set to \"$release_arch\"" ``` #### Create node folder, and download all required node-related files (binaries, .dgst and \*.sig files) ```bash echo "3. Creating node folder, and downloading all required node-related files (binaries, .dgst and *.sig files)..." mkdir node && cd node echo "... node folder created" files=$(curl https://releases.quilibrium.com/release | grep $release_os-$release_arch) for file in $files; do version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done chmod +x ./node-$version-$release_os-$release_arch cd .. echo "... download of required node files done" ``` #### Create client folder, and download qclient binary ```bash echo "4. creating client folder, and downloading qclient binary..." mkdir client && cd client echo "... client folder created" files=$(curl https://releases.quilibrium.com/qclient-release | grep $release_os-$release_arch) for file in $files; do qclient_version=$(echo "$file" | cut -d '-' -f 2) if ! test -f "./$file"; then curl "https://releases.quilibrium.com/$file" > "$file" echo "... downloaded $file" fi done mv qclient-$qclient_version-$release_os-$release_arch qclient chmod +x ./qclient echo "... \"qclient-$qclient_version-$release_os-$release_arch\" renamed to \"qclient\"" cd .. echo "... download of required qclient files done" ``` ## Setting up your Node (v2.1.0-p2) ### 7. Create Ceremonyclient System Service (v2.1.0-p2) [Return to step 1](/setup-node/setup-node-1)

Doing this step allows your node to be run as a system service, whereas in case your node shuts down or gets signal killed for whatever reason, the service will enable auto-restarting your node.

The name of the system service we will make is called `ceremonyclient`
Run: ```bash sudo vim /lib/systemd/system/ceremonyclient.service ``` Press `i` to start inserting text into ceremonyclient.service file
Copy and paste the following lines inside the file ```text [Unit] Description=Ceremony Client Go App Service [Service] Type=simple Restart=always RestartSec=5s WorkingDirectory=/root/ceremonyclient/node Environment=GOEXPERIMENT=arenas ExecStart=/root/ceremonyclient/node/node-2.1.0.2-linux-amd64 [Install] WantedBy=multi-user.target ``` Press `esc` to stop the insert-text mode
Press `shift` + `:wq`, and press `enter` or `return` on the keyboard
## Setting up your Node (v2.1.0-p2) ### 8. Generate your `config.yml` and `keys.yml` files If you have a ceremony voucher hex file, do 8.A.
If you do not have one, do 8.B.
#### 8.A. Import your voucher hex (optional) [Return to step 1](/setup-node/setup-node-1)

Note: Only applicable for those who has an offline voucher (from April 2023 offline declaration for the Freedom of Internet ceremony).
If you do not have a voucher, skip this section and do [Section VI.B.](#vib-run--go-run--once-to-create-your-q-wallet-and-config-folder)
Run: ```bash sudo vim /root/voucher.hex ``` Press `i` to start inserting text into voucher.hex file

Copy-paste the 228-character voucher hex into the file

Press `esc` to stop the insert-text mode

Press `shift` + `:wq`, and press `enter` or `return` on the keyboard

Run: ```bash cd ~/ceremonyclient/node GOEXPERIMENT=arenas node-2.1.0.2-linux-amd64 -import-priv-key `cat /root/voucher.hex` ``` Take note of your Peer ID. The Peer ID may act as your `Q Wallet` later on.
It will be one of the last lines in the response, starts with 'Qm' with a label Peer ID.

Once you see the logs start to trail, you would want to stop the node for now because we will modify `config.yml` on the next step.
You need to open a new terminal window and SSH into your VPS again as root.

Run: ```bash ps aux | grep node ``` and look for the PID of the process whose name is similar to this syntax `/tmp/go-build1611759050/b001/exe/node`.

That's the `node` app. Once you know the PID of the `node` app, run: ```bash kill -9 ``` This will kill the process for the `node` app. You may proceed to the next section. #### 8.B. Start the ceremonyclient service as per normal, to Create your Q Wallet and `.config` folder [Return to step 1](/setup-node/setup-node-1)

Note: Only applicable if you skipped [6.A.](#6a-import-your-voucher-hex-optional), because you do not have an offline voucher. Run: ```bash service ceremonyclient start ```
As this will trigger for your Q Node to startup, all you really need right now is for the startup script to create you the `.config` folder inside `~/ceremonyclient/node` - to have the 2 files - `config.yml` and `keys.yml` created.

Once you see the logs start to trail, you would want to stop the node for now because we will modify `config.yml` on the next step.

You need to open a new terminal window and SSH into your VPS again as root.
Simply run: ```bash service ceremonyclient stop ``` ## Setting up your Node (v2.1.0-p2) ### 9. Configure config.yml [Return to step 1](/setup-node/setup-node-1) #### 1. Switch UDP to TCP for your Node Modify the `listenMultiaddr` field in `config.yml` file. ```bash sed -i 's/listenMultiaddr: \/ip4\/0.0.0.0\/udp\/8336\/quic/listenMultiaddr: \/ip4\/0.0.0.0\/tcp\/8336/g' ~/ceremonyclient/node/.config/config.yml ``` #### 2. Enable gRPC to enable gRPC Function Calls for your Node
Note: This interface, while read-only, is unauthenticated and not rate-limited. It is recommended that you only enable them if you are properly controlling access via firewall or only query via localhost (i.e. if port 8337 is used for gRPC calls, best not to allow it on your firewall configuration later and only trigger gRPC calls on localhost).

Modify the `listenGrpcMultiaddr` and `listenRESTMultiaddr` fields in `config.yml` file. ```bash sed -i 's/listenGrpcMultiaddr: ""/listenGrpcMultiaddr: \/ip4\/127.0.0.1\/tcp\/8337/g' ~/ceremonyclient/node/.config/config.yml sed -i 's/listenRESTMultiaddr: ""/listenRESTMultiaddr: \/ip4\/127.0.0.1\/tcp\/8338/g' ~/ceremonyclient/node/.config/config.yml ``` #### 3. Enable Stats Collection by Opt-In
Modify the `statsMultiaddr` field in `config.yml` file. ```bash sed -i 's/statsMultiaddr: ""/statsMultiaddr: "\/dns\/stats.quilibrium.com\/tcp\/443"/g' ~/ceremonyclient/node/.config/config.yml ``` ## Managing your Node (Docker) ### 1. Monitor trace/info logs Run: ```bash cd ~/ceremonyclient docker compose logs -f ``` ## Managing your Node (Docker) ### 2. Drop-in a shell inside the Q container [Return to step 1](/archived/manage-docker/manage-docker-1)
Run: ```bash cd ~/ceremonyclient docker compose exec -it node sh ``` ## Managing your Node (Docker) ### 3. Executing Commands in your Q Node [Return to step 1](/archived/manage-docker/manage-docker-1)
Executing commands inside your containerized Quilibrium node is easy.
Just prefix every command with `docker compose exec node`.

Examples are: #### Node Info ```bash docker compose exec node node -node-info ``` #### DB console ```bash docker compose exec node node -db-console ``` #### Quilibrium client ```bash docker compose exec node qclient help ``` ```bash docker compose exec node qclient token help ``` ```bash docker compose exec node qclient token balance ``` ```bash docker compose exec node qclient cross-mint ``` #### gRPCurl ##### List services ```bash docker compose exec node grpcurl -plaintext localhost:8337 list ``` ##### List methods ```bash docker compose exec node grpcurl -plaintext localhost:8337 list quilibrium.node.node.pb.NodeService ``` ##### Describe method ```bash docker compose exec node grpcurl -plaintext localhost:8337 describe quilibrium.node.node.pb.NodeService.GetNodeInfo ``` ##### Get Node Info ```bash docker compose exec node grpcurl -plaintext localhost:8337 quilibrium.node.node.pb.NodeService.GetNodeInfo ``` ##### Count all Q nodes ```bash docker compose exec node grpcurl -plaintext -max-msg-sz 5000000 localhost:8337 quilibrium.node.node.pb.NodeService.GetPeerInfo | grep peerId | wc -l ``` ## Managing your Node (Docker) ### 4. Upgrading your Q Node [Return to step 1](/archived/manage-docker/manage-docker-1)
#### 1. Stop and Remove the container ```bash cd ~/ceremonyclient docker compose down ``` This command not only stops the containers but also removes:
* Containers for services defined in the Compose file. * Networks defined in the networks section of the Compose file. * The default network, if one is used. #### 2. Remove the Docker image ```bash cd ~/ceremonyclient docker images ``` Note the Image ID of the Q node docker image, remove it. ```bash docker rmi ``` #### 3. Rebuild the docker image Do the step from [Setting up your Node (Docker)](/archived/setup-docker/setup-docker-5#2-build-the-docker-image) section. :::info Important: Remember to replace `1.4.17` with the latest version. ::: #### 4. Run the new docker image in a container. Do the step from [Setting up your Node (Docker)](/archived/setup-docker/setup-docker-7#7-run-the-quilibrium-docker-container) section. ## Setting up your Node (Docker) ### 1. Secure your Node hardware (VPS) #### 1. Get a VPS running Ubuntu 22.04 ##### TOP RECOMMENDATION ##### Cherryservers After Cassie has done some intensive testing, and working with the folks over at CherryServers, We are happy to announce that they are offering customized server instances for Q node runners.

CherryServers is a Europe-based crypto-friendly bare metal and cloud provider. We are proud to be one of the few service providers who openly embrace web3 as we believe in the principles of free internet, decentralization, and the freedom of choice without being tied down to any particular vendor. With over 20 years of experience and a strong reputation, we have established several successful partnerships within the blockchain field. We're excited to announce our latest partnership with Quilibrium to assist their node running community by offering stable infrastructure to enable high performance node hosting. We are excited to offer the following configurations, which have been validated for Quilibrium node hosting:

Sign-up link: [link](https://www.cherryservers.com/?affiliate=5I763YKW)

* Cloud VDS 4: CPU: 4 x Intel Gold 6230R @ 2.10Ghz (8 vCores), RAM: 32GB, Disk Storage: NVMe 200GB, Backup: 50GB, Bandwidth: 1Gbps uplink, Egress Traffic: 10TB, Ingress unmetered, 96.12 USD/monthly
* E3-1240V3: CPU: E3-1240v3, 4c/8t - 3.4GHz, RAM: 16GB ECC DDRIII , Disk Storage: 2x SSD 250GB, OS Disk: SSD 250GB, Backup: 100GB, Bandwidth: 1Gbps uplink, Egress Traffic: 10TB, Ingress unmetered, 106.92 USD/monthly
* E3-1240V5: CPU: E3-1240v5, 4c/8t - 3.5GHz, RAM: 32GB ECC DDR4, Disk Storage: 2x SSD 250GB, OS Disk: SSD 250GB, Backup: 100GB, Bandwidth: 3Gbps uplink, Egress Traffic: 30TB, Ingress unmetered, 106.81 USD/monthly
* E5-1620V4: CPU: E5-1620v4, 4c/8t - 3.5GHz, RAM: 32GB ECC DDR4, Disk Storage: 2x SSD 250GB, OS Disk: SSD 250GB, Backup: 100GB, Bandwidth: 3Gbps uplink, Egress Traffic: 30TB, Ingress unmetered, 124.20 USD/monthly
* E5-1650V3: CPU: E5-1650v3, 6c/12t - 3.5GHz, RAM: 64GB Registered ECC DDR4, Disk Storage: 2x SSD 250GB, OS Disk: SSD 250GB, Backup: 100GB, Bandwidth: 1Gbps uplink, Egress Traffic: 30TB, Ingress unmetered, 125.66 USD/monthly
* E5-1650V4: CPU: E5-1650v4, 6c/12t - 3.6GHz, RAM: 64GB Registered ECC DDR4, Disk Storage: 2x SSD 500GB, OS Disk: SSD 500GB, Backup: 100GB, Bandwidth: 3Gbps uplink, Egress Traffic: 30TB, Ingress unmetered, 132.68 USD/monthly
* E5-1650V3: CPU: E5-1650v3, 6c/12t - 3.5GHz, RAM: 64GB Registered ECC DDR4, Disk Storage: 2x SSD 250GB, OS Disk: SSD 250GB, Backup: 100GB, Bandwidth: 1Gbps uplink, Egress Traffic: 30TB, Ingress unmetered, 125.66 USD/monthly
##### 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, > 50MBps symmetric bandwidth, ie 50 download, 50 upload > 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, but this has to be a dedicated machine. With Dusk, these minimum requirements will reduce significantly. #### 2. Connect to your VPS Downloading and install PuTTY: [http://putty.org/](http://putty.org/) or just use your Terminal if you are running MacOS or Linux
Put your IP address into terminal client & click open Click "Accept" Type "root" & click enter Type your password & click enter
SSH into your VPS
## Setting up your Node (Docker) ### 2. SSH for the first time to your new VPS [Return to step 1](/archived/setup-docker/setup-docker-1)

To SSH into a VPS, run: ```bash ssh root@ ``` > The authenticity of host (\) can't be established.
> ED25519 key fingerprint is SHA256:xxxxxxx
> This key is not known by another names
> Are you sure you want to continue connecting (yes/no/\[fingerprint])? ```bash yes ``` > Warning: Permanently added '\' (ED25519) to the list of known hosts. > Connection closed by \ port 22. Enter the root password SSH into your VPS again: ```bash ssh root@ ``` Enter the root password. ## Setting up your Node (Docker) ### 3. Prerequisite software [Return to step 1](/archived/setup-docker/setup-docker-1)

#### 1. Use root user for this installation Make sure you are using the root user as this guide is tailored to root. #### 2. Update Run apt update to fetch the latest version of the package list from Ubuntu's software repository ```bash apt -q update ``` #### 3. Install Git ```bash apt install git -y ``` ```bash git --version ``` It must show: > git version 2.34.1 :::info Important: You have to install Docker Engine on your server. Do not install Docker Desktop. ::: #### 4. Install required apt packages Run: ```bash apt install apt-transport-https ca-certificates curl software-properties-common ``` #### 5. Add the GPG key for the official Docker repository ```bash curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # Add the repository to Apt sources: echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null apt update apt-cache policy docker-ce ``` #### 6. Install `docker-ce`, latest version ```bash apt install docker-ce ``` ## Setting up your Node (Docker) ### 4. Configure Linux network device settings [Return to step 1](/archived/setup-docker/setup-docker-1)

Purpose: to optimize throughput (bandwidth) and latency for large parallel jobs typical of networks like Q
Run: ``` sudo vim /etc/sysctl.conf ``` Press `i` to start inserting text into /etc/sysctl.conf file
Scroll until the end of the file, and insert the following in new lines at the end:
``` # Increase buffer sizes for better network performance net.core.rmem_max=600000000 net.core.wmem_max=600000000 ``` Press `esc` to stop the insert-text mode
Press `shift` + `:wq`, and press `enter` or `return` on the keyboard
Run: ``` sudo sysctl -p ``` Reboot your VPS ``` reboot ``` You will be disconnected from your VPS as the VPS reboots
SSH into your VPS again: ``` ssh root@\ ``` Enter the root password
## Setting up your Node (Docker) ### 5. Build the `node` Docker image [Return to step 1](/archived/setup-docker/setup-docker-1)

#### 1. Clone the `ceremonyclient` repo onto the `root` folder ```bash cd ~ git clone https://github.com/QuilibriumNetwork/ceremonyclient.git ``` #### 2. Build the docker image ```bash cd ~/ceremonyclient docker build --build-arg GIT_COMMIT=$(git log -1 --format=%h) -t quilibrium -t quilibrium:1.4.17 . ``` Use latest version instead of `1.4.17`. The image that is built is light and safe.
It is based on Alpine Linux with the Quilibrium node binary, no source code, nor the Go development environment.
The image also has the `qclient` app to manage your $QUIL tokens.
The image also has the `grpcurl` tool that can be used to query the gRPC interface. ## Setting up your Node (Docker) ### 6. Configure your Node Network Firewall [Return to step 1](/archived/setup-docker/setup-docker-1)

Run: ```bash ufw enable ``` Type `y` and press `enter` or `return` on keyboard Run: ```shell ufw allow 22 ufw allow 8336 ufw allow 443 ufw status ``` Response for the status command should be: ```bash > To Action From > -- ------ ----- > 22 ALLOW Anywhere > 8336 ALLOW Anywhere > 443 ALLOW Anywhere > 22 (v6) ALLOW Anywhere (v6) > 8336 (v6) ALLOW Anywhere (v6) > 443 (v6) ALLOW Anywhere (v6) ``` ## Setting up your Node (Docker) ### 7. Run the Quilibrium Docker container #### 1. Go to `node` folder and run Quilibrium Docker image inside a Docker container Make sure you are at the same repository root folder where [docker-compose.yml](https://github.com/QuilibriumNetwork/ceremonyclient/blob/main/docker-compose.yml) can be found. ```bash cd ~/ceremonyclient docker compose up -d ``` The `/.config` subfolder will be created under the current `node` folder, this is mapped inside the container. Make sure to create backups for both `config.yml` and `keys.yml`. ## About Quilibrium and Components ### Level 1: Communication Imagine our tree house club wanted to talk to other tree house clubs, how would we do it? Most of us have played the telephone game with tin cans and string, so imagine if you and all your friends set up a bunch of strings across the tree houses – now you can all talk to each other! Suddenly you can play games across the forts – Battleship, go fish, anything you can communicate. ![It starts with a message](/eli5-communication-1.png)
"It starts with a message"
But what if another tree house decided to attach a hidden string to your line and listen in? You write a secret codewords book, and give a unique one to each of the forts you want to communicate with – that way, only they can talk to you, anyone trying to listen in can't make sense of it. But games are often unique, and even if they don't know that CRAB PILOT BISCUIT BANJO = "you sunk my battleship!", they can pick up on your communication patterns to figure out what you're talking about, especially if those code words don't change with every use! So, you do two things: you make your codewords book really big (bigger than you'll ever need!), and you have a special word that says "this is the actual end of my message", then you fill in your message with extra random words so that every message you send over the tin can is exactly the same length. Now, nobody can tell what you're talking about. ![Crab Pilot Biscuit Banjo also sounds like a experimental folk noise band you'd hear at a dive bar.](/eli5-communication-2.png)
Crab Pilot Biscuit Banjo also sounds like a experimental folk noise band you'd hear at a dive bar.
But they do know who you're talking to, and when! So let's solve that problem. First, let's take our original message: we know who we want to send it to, but we want others to not know this. So we create a brand new word, totally unique to our tree house and the destination, that helps our friends find our message. Then, we take our message that we translated by codewords for the recipient, put this special destination on it, like putting an address on an envelope, and then use another set of codewords, for another tree house, to translate all of this again. We do this a few times, using the destination of the previous tree house as the new address, like putting an envelope inside another envelope, but with words. Now it has a final resting spot, that only our tree house and the intended tree house knows how to find. The intended tree house comes up with their own brand new word, also unique to our tree house and theirs, so that nobody can try to watch where messages "meet in the middle" to figure out who is talking to whom (**Envelope Encryption/Onion Routing**). ![Envelopes in envelopes in envelopes in envelopes in](/eli5-communication-3.png)
Envelopes in envelopes in envelopes in envelopes in
##### Reference * "ELI5: Quilibrium" on Paragraph, 17 May 2024 - [https://paragraph.xyz/@quilibrium.com/eli5-quilibrium](https://paragraph.xyz/@quilibrium.com/eli5-quilibrium) ## About Quilibrium and Components ### Level 3: Hypergraph Your cool treehouse network has evolved into quite the machine: envelopes shuttling along wires, locked chests and cameras and keys, but there's a lot of work people in the treehouse have to put in just to find where things are, and remembering all of that, keeping track of it all? !["Might as well do chores."](/eli5-hypergraph-1.png)
"Might as well do chores."
To fix this, each tree house has another small set of chests, these strictly hold the details of where your chests are, what's inside them, which key on the keyring to use, if something's on loan at a neighbor's tree house, or what your scores were for battleship. It's almost like a little treehouse inside your treehouse, just for you to ask questions about all of the above. The different ways all these things relate become scraps of paper that are stored in the chest when things change – your weekly Battleship tournaments between the other four tree houses on your cul-de-sac are now stored in a chest, and your mini treehouse chest tells you that this chest exists, its name, and that it is related to Battleship, you and the other four tree houses. Just like when you were proving your robot existed, this chest also takes strips of paper for proofs, but this time, you're using this process to look up the existence of other chests – useful for you, and anyone else who you allow to ask for this info. The relationships this info represents has taken this little network of tree houses and chests (a graph), and expanded it to include more than two points with one edge – you talk from tree house to tree house (graph network), but your info creates a collection of multiple points (**hypergraph store**). ![Adventures await!](/eli5-hypergraph-2.png)
Adventures await!
This simple solution suddenly makes this tree house network so much faster and fun – now things are back to the speed they were at the beginning, it no longer feels like a chore, and you keep all the benefits you added to the safety and privacy of your tree houses! ##### Reference * "ELI5: Quilibrium" on Paragraph, 17 May 2024 - [https://paragraph.xyz/@quilibrium.com/eli5-quilibrium](https://paragraph.xyz/@quilibrium.com/eli5-quilibrium) ## About Quilibrium and Components ### Level 2: Storage and Compute Each tree house has a lot of stuff in it, sometimes the same stuff others have, sometimes it's things only you have (like that cool four foot tall robot), but if others knew what you have, they might try to sneak into your tree house and steal it. What if you were staying over at a friend's tree house and wanted to show off your robot? How can you prove it's yours, or that you even have it, when you're away from your home base?
Let's take a moment and pretend that there is always someone at every tree house, so the next steps are possible. You could send a message back to your tree house and say "send the robot over to Bobby's tree house by bucket", and a bucket holding your robot would come flying over the wire, but there's only one of these, and you don't want to lose it in transit, like when the last baseball game sent a ball into Mrs. Benefield's yard and it was lost forever to her very angry dog. So instead, someone in your tree house takes a polaroid of your robot, and sends that over by envelopes inside of envelopes, but this time, actually using envelopes along with codewords, zipping from tree house to tree house, until it hits the one you're at. !["I think we're gonna need a bigger bucket."](/eli5-storageandcompute-1.png)
"I think we're gonna need a bigger bucket."
But that's just a photo. It could have been taken at any time. How do we know that was yours and not a photo you got from another tree house? To prove this, Bobby comes up with a few random words ("paraglider rabbit snake beach"), gives them to you, and you send a message back to your tree house: "send a photo of the robot over to Bobby's tree house, include 'paraglider rabbit snake beach' in the photo", and a few moments later, the envelope arrives, ready to prove you are indeed the coolest kid in the neighborhood.
But there's a small problem in this. If anyone can ask your tree house for things that you might have, they can figure out what you have. Let's imagine instead you are really organized, and have everything packed away in chests that are bolted to the floor. Each chest has its own key, and you have a big key ring you carry around with you so only you can open the chests (and so nobody can just climb into your tree house and walk away with your stuff!). This time, you send the key with no message of the contents inside the chest or which chest to open, only saying a few of the chests it might be in. Then your helper at your tree house will have to try out the chests until they find the right one, and send over the photo, along with closing the chest and returning your key. !["Smile for the camera!"](/eli5-storageandcompute-2.png)
"Smile for the camera!"
This would almost work, but now whoever is currently in your tree house knows which chest it was, and what's inside it. But we're close to the answer. Let's say instead, each chest actually has a camera inside it (with a flash, because, y'know, it's dark), a slot for a message to poke through so it can show up in the photo, and the camera actually puts the image in the envelopes for you. The key only activates this contraption, and you end up with an envelope (with the photo inside it), noting which chest it was. If the key wasn't meant for the chest, the photo looks like TV static. They have to try all of the chests you specified, get a bunch of envelopes back, and stuff them all (with the key) inside a bigger envelope, inside another envelope, and so on, and send that back. You get back all the envelopes, but you know which one is the right one, open it, and show the proof of your super cool robot (**Oblivious Transfer and Lookup**).
So you've got a super cool robot at your tree house, you proved it, but how do we know it's your robot, has been there for all six weeks you've been bragging, and not a friend's that was there at that exact point in time to help you look cool?
Let's revisit our tree house network. One way we can know that the tree houses are connected is if they all agree to a code phrase at a specific point in time. Let's say, every day, these tree houses send out a random word to prove this, that is the previous days word, encoded using the special code books, so now it's a new one. Each tree house does this, and once everyone has sent theirs, you sort the words in the order of each tree house owner's name, alphabetically. Now you have a big random phrase. And those chests all have slots for random phrases. And you have a key to take a photo of each item in each chest. So once a day, you create a big stack of envelopes, proving you have those items. So now, you can ask your tree house to send over a copy of those envelopes for six week's worth of time, and now you have your proof that those six weeks of bragging rights were rightfully yours (**Verifiable Delay Function, very simplified**).
But wait, couldn't you just save those words and do that all in one step to fake it? We change the process a little bit here. Instead of sending over those envelopes all at once, these envelopes are sent every day. Without the code to decode the contents of the envelope, it's just random noise, but when we're over at the other tree house, we have the power to decode the contents and prove how long it's really been. Now your six weeks of bragging rights are proven to every tree house in the network, and nobody even knows it until you decide to show it (**Proof of Meaningful Work**). ##### Reference * "ELI5: Quilibrium" on Paragraph, 17 May 2024 - [https://paragraph.xyz/@quilibrium.com/eli5-quilibrium](https://paragraph.xyz/@quilibrium.com/eli5-quilibrium) ## About Quilibrium and Components ### Level 1: Communication We've got a group of friends who like to meet once a week and catch up on the latest gossip, but you've all got really busy schedules with extra curriculars, so finding the right time to meet, and know if it's even worth meeting (last time Dave just wanted to drone on about his breakup and it was a huge bummer and totally his fault anyway) is challenging. Teachers are really strict, and if a cellphone is confiscated they're reading the conversation out loud, which was super embarrassing for Dave (man he's gotta stop it with the TMI).
One of the friends, Sally, is a math genius and heard about this crazy trick using the formulas we just learned about in algebra – those equations that go y = 18x + 2 and so on. Basically, if we all come up with our own random coefficients for the equation (the 18 and 2 in the equation), and each one of us is assigned a unique number that we plug in for x (and we all know each other's unique number for x), then we can share the y value for each person's x value to each person, individually (e.g. if my x = 4, everyone is going to give me their y value when x = 4).
Once everyone has their specific y values (samples), then we add up all of the ones we got to a single y value, and can team up, where any two of us can share our y values and find out what y equals when x is zero (because we're just solving the equation to find that last coefficient): y = Bx + C **y = 372, x = 4** :: 372=4B + C :: B = (372-C)/4 **y = 182, x = 2** :: 182=2B + C :: B = (182-C)/2 (182-C)/2 = (372-C)/4 182-C = 184-(C/2) -2 = C/2 C = -4 :: y = B(0) - 4 :: \*\*y = -4, x = 0 \*\*
Now that we all know what y is when x is zero, we have a secret number to encrypt our group messages with that nobody else knows.(**This is not actually safe, you need proper cryptography to do this right, but this is the underlying math concept that makes distributed key generation work**)
Of course, what if a teacher finds out the number? So we bump the secret number with every message, coming up with a new random non-zero number. If we get messages out of order, we can try the multiplication in a different order to figure what the message order was supposed to be, and so long as nobody keeps every previous message, there is no way for someone stealing our phone to figure out what the past messages were (**Forward Secrecy**). But once they have it, how do we stop them from learning our new messages?
We do that same math trick again, frequently. This provides something out of band that makes future messages unable to be decrypted by prying eyes that snagged a phone (**Future Secrecy**). Sally's math skills are scary.
But what if you wanted to just talk to one person, and you didn't want the rest of the group to know? This is where there's even more safety in numbers. The group conversation gives you a place to do an envelope technique, where you create a unique number for the pair of you to talk and encrypt it just for them, mark the message with the recipient, then take that whole message, encrypt it for someone else, mark it with their unique number, then take that whole message again, encrypt it for someone else, and mark it with their unique number, and send it to the outer-most recipient. (**Envelope Encryption/Onion Routing**) Each envelope has to be decrypted and sent before the recipient message is available to the recipient in the group, but it gives you a few degrees of removal before it appears in the group, and only the recipient can decrypt the final message.
Of course, if anyone watches the group activity, it wouldn't take much to figure out you're talking to that one person given who is sending messages around the same time as they appear in the group, especially if you end up using the same first hop by random chance, so you need one more indirection. Messages cannot make it to the group conversation until a specific number of them have been received by a final hop. In other words, the last hop has to batch them all and send them all at once. That final hop also has a responsibility to scramble the order of those messages when they relay them to the group chat. Thankfully, our algebra class just learned about matrices, and a square matrix equal to the number of messages with only one 1 at any given combination of row and column, rest are zeroes, will let you scramble the order efficiently (**Random Permutation Matrix, extremely simplified**). With this trick, there's no way to figure out who's talking to who by watching the timing of the group chat. ##### Reference * "ELI5: Quilibrium" on Paragraph, 17 May 2024 - [https://paragraph.xyz/@quilibrium.com/eli5-quilibrium](https://paragraph.xyz/@quilibrium.com/eli5-quilibrium) ## About Quilibrium and Components ### Level 3: Hypergraph This gossip ring has grown to the whole school by this point, even teachers are starting to use it! Sally realized that the prom question math trick applied to any kind of computer application by taking the entire application's code and turned it into the same random number exchange trick (**Garbled Circuits**) and built out a way for people to efficiently store their information privately, prove they still had it, and built even more complex tools, like a way to demonstrate that Kyle never helps on any group project he's assigned to by having each group member show what they individually contributed over the time of the project and how it collectively made the final group project by association. Empowered with the ability to build small, simple functions that could handle encrypted data like it was unencrypted, suddenly the whole school was sharing small app snippets they could mix and remix to make their own clique's chats livelier, embarrassing topics less embarrassing, or just cooler, and kept their privacy the whole time through (**Multi Party Computation**).
But this made for a lot of information to store, and worse, slow to find, so Sally went back to her math class learnings for one last insight, and thought: "all of this looks like a graph, but if we could encode a little more information about the vertexes, so that if there's more than two of them, we can still recall them all as one group like an edge, we could efficiently retrieve any piece of information we wanted!" Thankfully her math teacher was willing to throw a small college-level lesson her way, and introduced her to the concept of **Hypergraphs**, which confirmed her theory that such a thing is possible, easily encodable, and set her down the path of choosing a double major in Computer Science and Mathematics. ##### Reference * "ELI5: Quilibrium" on Paragraph, 17 May 2024 - [https://paragraph.xyz/@quilibrium.com/eli5-quilibrium](https://paragraph.xyz/@quilibrium.com/eli5-quilibrium) ## About Quilibrium and Components ### Level 2: Storage and Compute Let's say you want to ask Stacy to prom, but you're scared she might say no. She's part of your group chat, and knows how to send messages, but she could totally reveal your question and make fun of you and the embarrassment would be too much to handle! Sally's no quitter when it comes to cool math tricks, so she devised a plan: rather than just let people live in social purgatory, why not use some simple arithmetic to make it so everyone says who they'd ask out, but only if that person also says yes!
Algebra class has come in clutch again, and we've learned the concept of prime numbers, exponents, and modulo arithmetic (a.k.a. clock math), so we all have the right tools in the toolbox to pull off Sally's latest stunt. Here's how it works:
Sally comes up with two prime numbers (p, q), one much smaller than the other (**In cryptographic terms, this mathematical trick would require a 256 bit prime and a 3072 bit prime**) and the larger, subtracted by 1 (p-1), must be a multiple of the smaller (q). Then, a value (g) is calculated from the formula g = 2^((p-1)/q) modulo p. Sally shares p, q, and g with everyone in the group.
Now, everyone has to come up with their own random value (a) for each person, and use exponentiation and modular arithmetic to calculate a value they share (A):
A = g^a modulo p
Between all participants, they each send a message to the group with their A values for each person. Then, once everyone has sent their A values, each person calculates a new random value (b) and responds to each individual with a yes or no, but in a special way (B): * if no, B = g^b modulo p * if yes, B = A \* g^b modulo p
Receiving this B, the original sender of A must encrypt their answer with the following key * encrypt the response to B saying "no" with key = B^a modulo p * encrypt the response to B saying "yes" with key = (B/A)^a modulo p and send both values.
Receiving these encrypted messages, the sender of B must calculate a key = A^b modulo p, and attempt to decrypt both with the key (only one will work), and then they will have their answer. The sender of A remains blind to which choice B made, and B remains blind to whatever the other message said. A perfect way to avoid any embarrassment, except personally feeling let down in the worst case. (**Oblivious Transfer and Lookup**)
Now everyone in the group is super chill about properly deleting messages, but what if there was something that folks needed to hang onto for a certain period of time, and prove they still had it? That encrypted message may be super long, like another embarrassing TMI outburst from a former member of the group. We might want to hang onto that for old time's sake. How do we prove we still have it, and kept it this whole time?
Sally once again had a math approach for us all: turns out, squaring a special kind of number you'd see in that quadratic formula, that we all had a terrible sing song trick to remember, can't be done quickly. It is, as it turns out, very slow to do, slow enough, that you can use it to measure the progress of time, and with no shortcuts. Only once that value has been calculated, can you quickly verify it is correct. This trick only required a few more clock math moves plus the notion of imaginary numbers (numbers with a square root of a negative value), and it was to calculate what is called an **imaginary quadratic integer**. Using a formula to square these special kinds of numbers, we can just keep squaring, forever. The output values at given times allows us to produce two values, the output squared value for a given number of iterations (squarings), and an intermediate value produced over the series of squarings to quickly verify the output value and duration taken.
All we need is an input, and boy is that TMI outburst some input. Running this through the squaring function, we can prove how long it's been around by just taking an output sample of this math trick. (**Verifiable Delay Function**).
But maybe we have a lot of these that we're hanging onto, and proving all of that is simple, but it takes a lot of info to verify, because you need not only the proof output, but you need the whole TMI outburst being proven over. What if you want to prove you've held onto it, only show a small portion of it, yet still prove you still have the full message?
"Sally is burying us in math, maybe that's the next outburst", you think to yourself. But right on cue, Sally does have an answer: That trick we used earlier to create group keys has a similar trick for proving sections of a message. If you take equal, small chunks of the message, and treat it like a number, you can use that as a y value, it's chunk number as an x value, and produce a formula that lets you specify the chunk number to get the chunk of the message you want. Now you can take that formula, and prove time over those values (coefficients) instead, and use the output number to select a random chunk to reveal (**KZG Proof**) – you have both proof you've held onto the data for a given amount of time, and you can exclusively reveal any section of data you need or whether it's changed (**Proof of Meaningful Work**). "I swear to god if she says 'Polynomial' again..." (**Important note: KZG Proofs rely on an additional computational hardness component that is omitted from this ELIHS**) ##### Reference * "ELI5: Quilibrium" on Paragraph, 17 May 2024 - [https://paragraph.xyz/@quilibrium.com/eli5-quilibrium](https://paragraph.xyz/@quilibrium.com/eli5-quilibrium)