# 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
:::

## 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
:::

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
```

## 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.
:::

### Signs of success
:::info
The image below is what you should see if successful
:::

### 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
```

## 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
:::

### 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
```

## 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
:::

### 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
```

## 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
:::

### 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
```

## 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
:::

### 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
```

## 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
:::

### 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
```

## 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
:::

### 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
```

## 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
:::

### 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
```

## 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
:::

### 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
:::

### 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
:::

### 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
:::

### 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
:::

### 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
:::

### 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
:::

### 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
:::

### Quick FAQ
:::info
The image below is a screenshot from the Quilibrium Telegram groupchat
:::

### 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
:::

### Quick FAQ
:::info
The image below is a screenshot from the Quilibrium Telegram groupchat
:::

### 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
:::

### Quick FAQ
:::info
The image below is a screenshot from the Quilibrium Telegram groupchat
:::

### 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
:::

### Quick FAQ
:::info
The image below is a screenshot from the Quilibrium Telegram groupchat
:::

### 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
:::

## 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.

#### 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.

#### 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.

#### 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.

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"
:::

#### 3. Click `Claim` button.
Click the `Claim` button next displayed to your connected wallet, as shown below (example used with coinbase wallet).

:::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!

## 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.
:::

### Signs of success
:::info
The image below is what you should see if successful
:::

### 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
```

## 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
:::

### 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
```

## 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
:::

### 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
```

## 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 the `Activate +` blue button found on the upper-right corner of the page.

Wait until the `Included Backup Storage 100 GB` gets displayed on the Plan field on the pop-up dialog that appears. Then click `Activate`.

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 π.

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`)
:::

After entering your password, this will automatically proceed with the steps described above.

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.

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.

## 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.

## 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
:::

## 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:
* 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:
* 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"
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.
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
##### 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."
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!
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."
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!"
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)