Run Waterfall Node Mainnet in Docker
Updates
What is new in the first fork on Mainnet? July 13th at 8:00 UTC, at slot 216,000, which corresponds to epoch 6,750
Features
- Added Mainnet settings
- Updated License to Apache 2.0
- Mass activation of validators
- Reduced transaction fees for Mainnet
Fixes
- Synchronization error when there are forks
- Error in clearing votes for optimistic finalization when there is more than one committee
Optimization/Refactoring
- For convenience, added block hash in Era (previously only state root was available)
- Optimized working with the validator list in various places
- Optimized validation of attestations that arrived before the block
- Optimized optimistic consensus
- Other optimizations made during stress testing
Video manual
Install Docker
You need to install Docker, which will allow you to perform further steps consistently across any operating system. You can install Docker for your operating system using the following links:
Requirements
Hardware Requirements
1 Validator 1 Node
Minimum Requirements
- CPU (Cores):**
2.0
- Memory (GiB):**
4.0
- SSD Disk (GiB):**
256.0
- Bandwidth (Mb/s):**
20.0
- Traffic approximately
1.0
TB per month
Recommended Requirements
- CPU (Cores):**
4.0
- Memory (GiB):**
8.0
- SSD Disk (GiB):**
512.0
- Bandwidth (Mb/s):**
20.0
- Traffic approximately
1.0
TB per month
32 Validators 1 Node
Minimum Requirements
- CPU (Cores):**
4.0
- Memory (GiB):**
8.0
- SD Disk (GiB):**
256.0
- Bandwidth (Mb/s):**
20.0
- Traffic approximately
1.0
TB per month
Recommended Requirements
- CPU (Cores):**
8.0
- Memory (GiB):**
16.0
- SSD Disk (GiB):**
512.0
- Bandwidth (Mb/s):**
20.0
- Traffic approximately
1.0
TB per month
256 Validators 1 Node
Minimum Requirements
- CPU (Cores):**
8.0
- Memory (GiB):**
16.0
- SSD Disk (GiB):**
256.0
- Bandwidth (Mb/s):**
20.0
- Traffic approximately
1.0
TB per month
Recommended Requirements
- CPU (Cores):**
16.0
- Memory (GiB):**
32.0
- SSD Disk (GiB):**
512.0
- Bandwidth (Mb/s):**
20.0
- Traffic approximately
1.0
TB per month
Windows
- For the Windows operating system, you need to use all of the commands in the PowerShell terminal.
MacOS on arm
We recommend enabling the following settings:
Login to private registry
The source code for Waterfall is currently closed (it will be opened after a security audit), so the source code and images are stored in a private repository. To access the private Docker image registry, you need to log in. Execute the following command in the terminal:
docker login -u public -p glpat-XPaM8ZrD-jZ4TzRn-Nfj registry.waterfall.network
Pull image
Download image from the private registry, where you logged in on the previous step. Use the latest Docker image that contains all the necessary software to run the node. To do this, you need to execute the following command in the terminal:
docker pull registry.waterfall.network/waterfall/protocol/docker:mainnet
Synchronize the time on your computer
Please synchronize the time on your computer for correct validator operation and proper node functionality.
sudo sntp -sS time.apple.com
How to sync faster?
If you don't want to sync from the genesis block, you can download a network state:
- Go home directory
cd ~
- You should not have a
~/.wf
directory. - Download backup (~25G).
wget https://storage.waterfall.network/snapshots/mainnet/wf-1958880.tar
- Extract archive
tar -xf wf-1958880
- Check results
> ls ~/.wf coordinator gwat > ls ~/.wf/coordinator beaconchaindata > ls ~/.wf/coordinator/beaconchaindata beaconchain.db > ls ~/.wf/gwat gwat > ls ~/.wf/gwat/gwat LOCK chaindata lightchaindata nodes triecache
Run Node
Execute the following command in the terminal:
cd ~
Executing the following command in the terminal:
docker run --platform linux/amd64 --name wf -d --rm -p 4000:4000 -p 13000:13000 -p 12000:12000/udp -p 30303:30303 -p 9545:9545 -p 9546:9546 -v $PWD/.wf/logs:/opt/wf/data/logs -v $PWD/.wf/gwat:/opt/wf/data/gwat -v $PWD/.wf/coordinator:/opt/wf/data/coordinator registry.waterfall.network/waterfall/protocol/docker:mainnet
- the generation of coordinator and verifier keys
- keys are imported into the node wallets
- the node starts up
- The database data is stored in the home directory
~/.wf
Ports
Port/protocol | Firewall rule | Reason/caveats |
---|---|---|
8545/TCP | Block all traffic. | This is the JSON-RPC port for your execution node's Query API. You (and apps) can use this port to check verifier node status, query verifier-layer blockdag data, and even submit transactions. This port generally shouldn't be exposed to the outside world |
3500/TCP | Block all traffic. | This is the JSON-RPC port for your coordinator node's Query API. You (and apps) can use this port to check coordinator node status and query consensus-layer chain data. This port generally shouldn't be exposed to the outside world. |
4000/TCP | Block all traffic. | Your validator uses this port to connect to your coordinator node via gRPC. Inbound and outbound traffic should be allowed through this port only if your local validator is connecting to a remote coordinator node. |
*/UDP+TCP | Allow outbound traffic. | To discover peers, Coordinator's node dials out through random ports. Allowing outbound TCP/UDP traffic from any port will help Coordinator find peers. |
13000/TCP | Allow inbound and outbound traffic. | After we discover peers, we dial them through this port to establish an ongoing connection for libp2p and through which all gossip/p2p request and responses will flow. |
12000/UDP | Allow inbound and outbound traffic. | Your coordinator node exposes this UDP port so that other Waterfall nodes can discover your node, request blockdag data, and provide blockdag data. |
30303/TCP+UDP | Allow inbound and outbound traffic. | 30303/TCP is your verifier node's listener port, while 30303/UDP is its discovery port. This rule lets your verifier node connect to other peers. Note that some clients use 30301 by default. |
9545/TCP | Block all traffic. | Verifier JSON-RPC API Endpoint |
9546/TCP | Block all traffic. | Verifier Websocket API Endpoint |
If you want to change the ports, add the following environment variables
GWAT_COMMANDS="--port 30304 --http.port 9445 --ws.port 9446"
COORDINATOR_COMMANDS="--rpc-port 4001 --p2p-tcp-port 13001 --p2p-udp-port 12001"
docker run --platform linux/amd64 --name wf -d --rm -e GWAT_COMMANDS="--port 30304 --http.port 9445 --ws.port 9446" -e COORDINATOR_COMMANDS="--rpc-port 4001 --p2p-tcp-port 13001 --p2p-udp-port 12001" -p 4001:4001 -p 13001:13001 -p 12001:12001/udp -p 30304:30304 -p 9445:9445 -p 9446:9446 -v $PWD/.wf/logs:/opt/wf/data/logs -v $PWD/.wf/gwat:/opt/wf/data/gwat -v $PWD/.wf/coordinator:/opt/wf/data/coordinator registry.waterfall.network/waterfall/protocol/docker:mainnet
Check status
You can check the status of the node by executing the following command in the terminal:
docker exec -it wf /opt/wf/sh/status.sh
Main:
The Coordinator Node isn't running
- the Coordinator node is not running, it is still startingThe Coordinator node is syncing. Distance: 9294
- the Coordinator node is synchronizing, synchronization occurs when Distance will be equal to 0The Verifier Node isn't running
- the Verifier node is synchronizing- The Verifier node is synchronizing:
The Verifier node is syncing. Status { currentBlock: 0, currentSlot: 15738, finalizedSlot: 0, highestBlock: 0, knownStates: 0, maxDagSlot: 0, pulledStates: 0, startingBlock: 0 }
The node is synchronized.
- the node is synchronized.Node ID: a6032d0be6164bb2d534c4b5a34ff71d11be9f6af927fdaafc3b700f914a958a
- Node IDCoordinator peers: 5
- number of connected nodes with coordinatorsVerifier peers: 10
- number of connected nodes with verifiersKeys weren't generated
- this means that the keys are still being generated and the node has not yet started
-
Validator #<validators index>
Coordinator public key: 0xad7aac64a8ab9507a3b06ac46a30d48d89c8bfb4f36d402cfa4e5817ecc37cb01dfd339295f99565367af78aa727a2c1
- the coordinator's public key, which holds the stake and earns in the coordinating network.Verifier address: 0x2cd4289d5d5246ccb557a493e65a2ac94914b8b0
- the verifier's address, that creates blocks in the BlockDAG network and gets rewards for it.Withdrawal address: 0x2cd4289d5d5246ccb557a493e65a2ac94914b8b0
- The address that can send a deactivation transaction and take the rewards and stake of the coordinator and verifier.The coordinator has not been activated
- indicates that either the transaction with the stake has not been sent, or this transaction has not yet been processed.Coordinator status: active_ongoing
- coordinator status:pending_initialized
- When the first deposit is processed, but not enough funds are available (or it is not yet the end of the first epoch) to get the coordinator into the activation queue.pending_queued
- When the coordinator is waiting to get activated, and it has enough funds, etc. While in the queue, the coordinator activation epoch keeps changing until it gets to the front and makes it through (finalization is a requirement here too).active_ongoing
- When the coordinator is still attesting, and has not initiated any exit.active_exiting
- When the coordinator is still active, but has filed a voluntary request to exit.active_slashed
- When the coordinator is still active, but has a slashed status and is scheduled to exit.exited_unslashed
- When the coordinator has reached a regular exit epoch, not being slashed, and no longer has to attest, but cannot withdraw yet.exited_slashed
- When the coordinator has reached a regular exit epoch, but was slashed, and has to wait for a longer withdrawal period.withdrawal_possible
- After the coordinator has exited, and is later permitted to move funds, and is truly out of the system.withdrawal_done
- funds have actually been moved
Stake: 32000.000000000 WATER
- the stake that was sentCoordinator balance: 32000.038794846 WATER
- the coordinator balance, along with the stakeVerifier balance: 0.000000000000000000 WATER
- the verifier balance
-
The Coordinator node needs to synchronize. The
Distance
field should decrease when you run the status command next time - The Verifier node needs to synchronize. The
FinalizedSlot
field is catching up to theCurrentSlot
when you run the status command next time.
Usually, the synchronization process takes hours and depends on your hardware, internet speed and other factors.
Onboarding
If the node is running and synchronized (See the result of the status command – The node is synchronized), you can add and activate the validator by taking the following steps:
- Install Metamask according to the instructions
Metamask configuration
- Install Metamask according to the instructions
- For convenience, switch to a wide window scale
- Go to the Settings
- Click on Network tab and button "Add a network"
- Click "add a network manually"
-
add a new network in Metamask by specifying the following parameters:
- Network Name:
Waterfall
- RPC URL:
https://rpc.waterfall.network/
- Chain ID:
181
- Currency symbol:
WATER
- Block Explorer URL: https://explorer.waterfall.network
- Network Name:
-
If you want to run a Node, go to the advanced settings in MetaMask and enable the option to display the data field when sending a transaction.
- Create an account address in Metamask if you don't have one already
- Get 32000 WATER for your account.
- Generate keys if you don't have already mnemonic phrases to add a new first validator to your node by running the following command in the terminal:
Attention
Please note that activation time can range from one to two hours. It's normal for the validator not to change status immediately.
docker exec -it wf /opt/wf/sh/add.sh new-mnemonic <withdrawals address>
Example 1:
docker exec -it wf /opt/wf/sh/add.sh new-mnemonic 0x30c35895FE0f7768A261b5326e4332cBb4556Ba3
Save next phrases to restore keys in future:
hint deer steak absorb strategy despair bread element fine twice device frozen genuine poem buyer reason agree trip stumble leisure notable country belt sad
Generated new Validator #0:
Coordinator public key: 0xa873ba1a96c1b722c01212aae708f2dcd798a74aa04cb72554b35284e05ca3a5de6df353982f615c5e291a7be5c4d24f
Verifier address: 0x11e99f25514656b9530efdeaf16f685aa0bad1ad
Withdrawal address: 0xee22555a22a7fd2eba102f6200695f75ab28c4b6
Signature: 0x8288fcf30ca8345e193f3ba956620531c18db6264eec8bcba25b985842c10266d84c5c83d09ec2965e746f11c9e33694084d443362ed0a4a3e9a7e01bd8b726315aef4e58cff65e5cdf8a31029866bc5c6f2da70ce5c80e59b38b79d07f5fe47
Send tx by Metamask to activate Validator:
To: 0x6671Ed1732b6b5AF82724A1d1A94732D1AA37aa6
Value: 32000 WATER
Data: 0xf401b2696ae5c88b88fb0709082367f5c9db256a4db9abecf4c9045e58151ad51126ea0ce7cbff76fa4524cfb66395ba168b41f4bbc7feb1ed211d97adab2137c837f586026641f4bbc7feb1ed211d97adab2137c837f5860266adfca54d3ed084d4d64faa112031cc32732ad7980cd3e3905489ea8ff91f4591cb38b0062e4e41375a1a3a22fdc7b4ae0ee19dd1f2dca01d36cccad73c9208dee5e7d94f07b5c355b7c62be306347d80f4cebf03eb048aef9bae2f529208a909
docker exec -it wf /opt/wf/sh/add.sh existing-mnemonic "<mnemonic>" <withdrawals address>
Example 1:
docker exec -it wf /opt/wf/sh/add.sh existing-mnemonic "hint deer steak absorb strategy despair bread element fine twice device frozen genuine poem buyer reason agree trip stumble leisure notable country belt sad" 0x30c35895FE0f7768A261b5326e4332cBb4556Ba3
Generated new Validator #1:
Coordinator public key: 0xab317784df7c9bcc4d0d85a9475593b3e71164a46f3a40c02af73e1d8422b525f53120c77b5cca0b7ad8bee52d696159
Verifier address: 0xb68a027ffb5089ed1573a301cfa4d1e2f273094c
Withdrawal address: 0x30c35895fe0f7768a261b5326e4332cbb4556ba3
Signature: 0x8288fcf30ca8345e193f3ba956620531c18db6264eec8bcba25b985842c10266d84c5c83d09ec2965e746f11c9e33694084d443362ed0a4a3e9a7e01bd8b726315aef4e58cff65e5cdf8a31029866bc5c6f2da70ce5c80e59b38b79d07f5fe47
Send tx by Metamask to activate Validator:
To: 0x6671Ed1732b6b5AF82724A1d1A94732D1AA37aa6
Value: 32000 WATER
Data: 0xf401ab317784df7c9bcc4d0d85a9475593b3e71164a46f3a40c02af73e1d8422b525f53120c77b5cca0b7ad8bee52d696159b68a027ffb5089ed1573a301cfa4d1e2f273094c30c35895fe0f7768a261b5326e4332cbb4556ba3b40601fa62c2682e498ac4005592097e0b1dd840884f6b4bcfdf55db99b6768cce98f1f9c5b3032a447bb9ea79a01297094bbeccdac4a86720969496a916c11416b0fd757345dc6c37b509d537729216278f4b6496808a73b879614f2ad5d9ab
docker exec -it wf /opt/wf/sh/deposit.sh <validators index>
docker exec -it wf /opt/wf/sh/deposit.sh 0
Send tx by Metamask to activate Validator:
To: 0x6671Ed1732b6b5AF82724A1d1A94732D1AA37aa6
Value: 32000 WATER
Data: 0xf401b2696ae5c88b88fb0709082367f5c9db256a4db9abecf4c9045e58151ad51126ea0ce7cbff76fa4524cfb66395ba168b41f4bbc7feb1ed211d97adab2137c837f586026641f4bbc7feb1ed211d97adab2137c837f5860266adfca54d3ed084d4d64faa112031cc32732ad7980cd3e3905489ea8ff91f4591cb38b0062e4e41375a1a3a22fdc7b4ae0ee19dd1f2dca01d36cccad73c9208dee5e7d94f07b5c355b7c62be306347d80f4cebf03eb048aef9bae2f529208a909
Example:
docker exec -it wf /opt/wf/sh/status.sh
Main:
The node is synchronized.
Node ID: a6032d0be6164bb2d534c4b5a34ff71d11be9f6af927fdaafc3b700f914a958a
Coordinator peers: 46
Verifier peers: 21
Validator #0:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Can Withdraw: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives rewards: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Can Exit: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives stake: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Compare with state: true
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32009.661205673 WATER
Verifier status: active
Verifier balance: 0.07782009910185 WATER
Offboarding
Withdraw
Attention
Please note that withdrawal processing time can take up to an hour. It's normal for coins not to be withdrawn immediately.
To withdraw your rewards, run the following command:
docker exec -it wf /opt/wf/sh/withdraw.sh <validators index> <amount in WATTER>
Example:
docker exec -it wf /opt/wf/sh/status.sh
Main:
The node is synchronized.
Node ID: a6032d0be6164bb2d534c4b5a34ff71d11be9f6af927fdaafc3b700f914a958a
Coordinator peers: 46
Verifier peers: 21
Validator #0:
Coordinator public key: 0x8c9c6c673f3ac2e83a068a951ba10d43d5f3f5e15bfc286ea757d8dc741bde89e4f5d5d78222fb6da6b43aed605f195a
Verifier address: 0x2fe17381e59a1f7ce553faa2a50965244346d996
Can Withdraw: 0x375509c85678c61b4e5d4457f8ecde1ebf32f273
Receives rewards: 0x375509c85678c61b4e5d4457f8ecde1ebf32f273=100%
Can Exit: 0x375509c85678c61b4e5d4457f8ecde1ebf32f273
Receives stake: 0x375509c85678c61b4e5d4457f8ecde1ebf32f273=100%
Compare with state: true
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32052.400717288 WATER
Verifier status: active
Verifier balance: 0.817104889002045 WATER
Validator #1:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Can Withdraw: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives rewards: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Can Exit: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives stake: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Compare with state: true
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32046.366402458 WATER
Verifier status: active
Verifier balance: 0.6614708423657251 WATER
docker exec -it wf /opt/wf/sh/withdraw.sh 0 6.703440448
TxHash: "0xa603a6b66a5f2f3d27185a70c3ce25ebccf610e81438be17a0bd51ec8857b87f"
docker exec -it wf /opt/wf/sh/withdraw.sh 1 3.327661056
Send tx by Metamask:
From: 0x30c35895fe0f7768a261b5326e4332cbb4556ba3
To: 0x6671Ed1732b6b5AF82724A1d1A94732D1AA37aa6
Value: 0 WATER
Data: 0xf406b68a027ffb5089ed1573a301cfa4d1e2f273094c2e2e3a1987c80000
docker exec -it wf /opt/wf/sh/status.sh
Main:
The node is synchronized.
Node ID: a6032d0be6164bb2d534c4b5a34ff71d11be9f6af927fdaafc3b700f914a958a
Coordinator peers: 45
Verifier peers: 20
Validator #0:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Withdrawal address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Signature: 0x86ed581ab410a918f2f73e9b9b43c667b7fec3d3d9600afa9b0d1b63d1fe07c92d6b0a0c777b989d7e235785da5e371c07e76218e13c9cbf954e378a355219a53dae50c0aae1743ebd811e9d1d882d7ae0f6565ea415fa3f6aab8da4cce35156
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32000.822642907 WATER
Verifier status: active
Verifier balance: 6.7043843461431 WATER
Validator #1:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Withdrawal address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Signature: 0x86ed581ab410a918f2f73e9b9b43c667b7fec3d3d9600afa9b0d1b63d1fe07c92d6b0a0c777b989d7e235785da5e371c07e76218e13c9cbf954e378a355219a53dae50c0aae1743ebd811e9d1d882d7ae0f6565ea415fa3f6aab8da4cce35156
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32001.129999961 WATER
Verifier status: active
Verifier balance: 0.00187384655518272 WATER
Transfer
To transfer the rewards to yourself, run the following command:
docker exec -it wf /opt/wf/sh/transfer.sh <validators index> <to address> <amount in WATER>
Example:
docker exec -it wf /opt/wf/sh/status.sh
Main:
The node is synchronized.
Node ID: a6032d0be6164bb2d534c4b5a34ff71d11be9f6af927fdaafc3b700f914a958a
Coordinator peers: 45
Verifier peers: 20
Validator #0:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Withdrawal address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Signature: 0x86ed581ab410a918f2f73e9b9b43c667b7fec3d3d9600afa9b0d1b63d1fe07c92d6b0a0c777b989d7e235785da5e371c07e76218e13c9cbf954e378a355219a53dae50c0aae1743ebd811e9d1d882d7ae0f6565ea415fa3f6aab8da4cce35156
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32008.067323867 WATER
Verifier status: active
Verifier balance: 6.704829048469139 WATER
Validator #1:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Withdrawal address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Signature: 0x86ed581ab410a918f2f73e9b9b43c667b7fec3d3d9600afa9b0d1b63d1fe07c92d6b0a0c777b989d7e235785da5e371c07e76218e13c9cbf954e378a355219a53dae50c0aae1743ebd811e9d1d882d7ae0f6565ea415fa3f6aab8da4cce35156
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32001.350212825 WATER
Verifier status: active
Verifier balance: 0.00187384655518272 WATER
docker exec -it wf /opt/wf/sh/transfer.sh 0 0x4d76c92aa070c5fbdef46b309737cf1b42eb07ca 6.7
TxHash: "0x90228c83b80b26128405bda59a9b80a89e7ceeba5cb6b406e06e37649e10f866"
docker exec -it wf /opt/wf/sh/status.sh
Main:
The node is synchronized.
Node ID: a6032d0be6164bb2d534c4b5a34ff71d11be9f6af927fdaafc3b700f914a958a
Coordinator peers: 45
Verifier peers: 20
Validator #0:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Can Withdraw: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives rewards: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Can Exit: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives stake: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Compare with state: true
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32008.091791963 WATER
Verifier status: active
Verifier balance: 0.00444734614309968 WATER
Validator #1:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Can Withdraw: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives rewards: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Can Exit: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives stake: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Compare with state: true
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32001.374680921 WATER
Verifier status: active
Verifier balance: 0.00187384655518272 WATER
Exit
Attention
Please note that deactivation time can range from one to two hours. It's normal for the validator not to change status immediately.
To deactivate the validator, run the following command:
docker exec -it wf /opt/wf/sh/exit.sh <validators index>
Example:
docker exec -it wf /opt/wf/sh/status.sh
Main:
The node is synchronized.
Node ID: a6032d0be6164bb2d534c4b5a34ff71d11be9f6af927fdaafc3b700f914a958a
Coordinator peers: 5
Verifier peers: 10
Validator #0:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Can Withdraw: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives rewards: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Can Exit: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives stake: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Compare with state: true
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32008.140728155 WATER
Verifier status: active
Verifier balance: 0.00444734614309968 WATER
Validator #1:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Can Withdraw: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives rewards: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Can Exit: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives stake: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Compare with state: true
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32001.399149017 WATER
Verifier status: active
Verifier balance: 0.00187384655518272 WATER
docker exec -it wf /opt/wf/sh/exit.sh 0
TxHash: "0xe94baf143ee61ed30671cf7b53681fa02206d1b79799acdb59a83f3ec0127815"
docker exec -it wf /opt/wf/sh/exit.sh 1
Send tx by Metamask:
From: 0x30c35895fe0f7768a261b5326e4332cbb4556ba3
To: 0x6671Ed1732b6b5AF82724A1d1A94732D1AA37aa6
Value: 0 WATER
Data: 0xf403ab317784df7c9bcc4d0d85a9475593b3e71164a46f3a40c02af73e1d8422b525f53120c77b5cca0b7ad8bee52d696159b68a027ffb5089ed1573a301cfa4d1e2f273094c
docker exec -it wf /opt/wf/sh/status.sh
Main:
The node is synchronized.
Node ID: a6032d0be6164bb2d534c4b5a34ff71d11be9f6af927fdaafc3b700f914a958a
Coordinator peers: 45
Verifier peers: 20
Validator #0:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Can Withdraw: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives rewards: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Can Exit: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives stake: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Compare with state: true
Coordinator status: active_exiting
Stake: 32000.000000000 WATER
Coordinator balance: 32008.336472923 WATER
Verifier status: active
Verifier balance: 0.00404528635967088 WATER
Validator #1:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Can Withdraw: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives rewards: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Can Exit: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives stake: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Compare with state: true
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32001.594893785 WATER
Verifier status: active
Verifier balance: 0.00261501709858272 WATER
docker exec -it wf /opt/wf/sh/status.sh
Main:
The node is synchronized.
Node ID: a6032d0be6164bb2d534c4b5a34ff71d11be9f6af927fdaafc3b700f914a958a
Coordinator peers: 45
Verifier peers: 20
Validator #0:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Can Withdraw: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives rewards: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Can Exit: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives stake: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Compare with state: true
Coordinator status: withdrawal_possible
Stake: 32000.000000000 WATER
Coordinator balance: 32008.336472923 WATER
Verifier status: exited
Verifier balance: 0.00404528635967088 WATER
Validator #1:
Coordinator public key: 0x835d0fb507d0d5eee36bcadc3417f1c815db89fbf62f3efa1b2cee0c4d7a9611a76ab406a55e0b375d07dbaef9403111
Verifier address: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Can Withdraw: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives rewards: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Can Exit: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3
Receives stake: 0x460599e56f1f97d1dc2551b0eebd5203f8c2f6a3=100%
Compare with state: true
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32001.594893785 WATER
Verifier status: active
Verifier balance: 0.00261501709858272 WATER
Delegate function
- Now you need to specify one volume
docker run --platform linux/amd64 --name wf -d --rm -p 4000:4000 -p 13000:13000 -p 12000:12000/udp -p 30303:30303 -p 9545:9545 -p 9546:9546 -v $PWD/.wf:/opt/wf/data registry.waterfall.network/waterfall/protocol/docker:mainnet
- On Linux, you can run the node this way, opening all ports but closing the API ports from public access
docker run --platform linux/amd64 --name wf -d --rm --network host -e GWAT_COMMANDS="--http.addr=127.0.0.1 --ws.addr=127.0.0.1" -v $PWD/.wf:/opt/wf/data registry.waterfall.network/waterfall/protocol/docker:mainnet
- A directory named "config" has appeared, containing a file with information about public keys and delegation rules. This file is updated when you generate new keys.
- During key generation, you can specify a file with delegation rules that is located in the "config" directory. You can store several different files there and choose which one to use when creating keys. Examples:
docker exec -it wf /opt/wf/sh/add.sh existing-mnemonic "my mnemonick" 0xee22555a22A7fd2eBA102f6200695F75ab28C4b6 delegating_stake.json
A file will appear in the folder and you can use the command to view the rules:
cat ~/.wf/config/delegating_stake.json
{
"rules": {
"profit_share": {
"0xee22555a22A7fd2eBA102f6200695F75ab28C4b6": 90,
"0x30c35895FE0f7768A261b5326e4332cBb4556Ba3": 10
},
"stake_share": {
"0xee22555a22A7fd2eBA102f6200695F75ab28C4b6": 100
},
"exit": [
"0xee22555a22A7fd2eBA102f6200695F75ab28C4b6",
"0x30c35895FE0f7768A261b5326e4332cBb4556Ba3"
],
"withdrawal": [
"0xee22555a22A7fd2eBA102f6200695F75ab28C4b6",
"0x30c35895FE0f7768A261b5326e4332cBb4556Ba3"
]
}
}
Exit/withdraw
Also, during withdraw/exit, the addresses are displayed, indicating who can do it, Examples:
docker exec -it wf /opt/wf/sh/exit.sh 1
Send tx by Metamask:
From: 0xee22555a22A7fd2eBA102f6200695F75ab28C4b6,0x30c35895FE0f7768A261b5326e4332cBb4556Ba3
To: 0xc3653BD746859b94839c3bA0a8020fEbEc009714
Value: 0 WATER
Data: 0xf403852e9616f719ce3f7bd9e48eae911c5a49a3f514a6141f5ca39c853cb9e7e71fb2abc060f09f0038436eb8bd2370f8379efc6c79ce9a565751861cf4c8fc46f8b5946d5b
docker exec -it wf /opt/wf/sh/withdraw.sh 1 0
Send tx by Metamask:
From: 0xee22555a22A7fd2eBA102f6200695F75ab28C4b6,0x30c35895FE0f7768A261b5326e4332cBb4556Ba3
To: 0xc3653BD746859b94839c3bA0a8020fEbEc009714
Value: 0 WATER
Data: 0xf4069efc6c79ce9a565751861cf4c8fc46f8b5946d5b
docker exec -it wf /opt/wf/sh/status.sh 1
Main:
The node is synchronized.
Node ID: 11b43da29924415f025f8ffcd40787821d6267d6e5f7da9aad9504e2852bbe6c
Coordinator peers: 10
Verifier peers: 10
Validator #1:
Coordinator public key: 0x852e9616f719ce3f7bd9e48eae911c5a49a3f514a6141f5ca39c853cb9e7e71fb2abc060f09f0038436eb8bd2370f837
Verifier address: 0x9efc6c79ce9a565751861cf4c8fc46f8b5946d5b
Can Withdraw: 0xee22555a22a7fd2eba102f6200695f75ab28c4b6,0x30c35895fe0f7768a261b5326e4332cbb4556ba3
Receives rewards: 0x30c35895FE0f7768A261b5326e4332cBb4556Ba3=10%, 0xee22555a22A7fd2eBA102f6200695F75ab28C4b6=90%
Can Exit: 0xee22555a22a7fd2eba102f6200695f75ab28c4b6,0x30c35895fe0f7768a261b5326e4332cbb4556ba3
Receives stake: 0xee22555a22A7fd2eBA102f6200695F75ab28C4b6=100%
Compare with state: true
Coordinator status: active_ongoing
Stake: 32000.000000000 WATER
Coordinator balance: 32176.127425672 WATER
Verifier status: active
Verifier balance: 1.931608903886312 WATER
Import key
- Generate keys by wf-cli (instruction)
- Copy keys to config dir eg:
.wf/config/keys-123 ├── coordinator │ ├── validator_keys │ └── password.txt ├── gwat │ ├── keystore │ ├── address.txt │ └── password.txt
- Run import
or
docker exec -it wf /opt/wf/sh/import.sh keys-123 delegating_stake.json
The system will responddocker exec -it wf /opt/wf/sh/import.sh keys-123
After this, execute the status command in the terminal to determine that your validator is running. Example:INFO local-keymanager: Successfully imported validator key(s) publicKeys=0xac1a2e7717a4,0x8c45f4a9af030x802c5a574ae8 Done. 3 Validators have been imported.
In response, you will get the following result:docker exec -it wf /opt/wf/sh/status.sh
Validator #3: Coordinator public key: 0xac1a2e7717a4d1bf0eef76c7643f14da845182bd1f0b3525bbe32b24cd5b087b5e11ef87150348a0004e7f766e135aca Verifier address: 0x2dddfd7ba0777cbc9d6f8315e7a3cd248d2e2173 Can Withdraw: 0x3ae40befc1638ea949823a5cbac74898a123db3b Receives rewards: 0x3ae40befc1638ea949823a5cbac74898a123db3b=100% Can Exit: 0x3ae40befc1638ea949823a5cbac74898a123db3b Receives stake: 0x3ae40befc1638ea949823a5cbac74898a123db3b=100% Compare with state: unknown The coordinator has not been activated Verifier status: pending_activation Verifier balance: 0 WATER Validator #4: Coordinator public key: 0x8c45f4a9af036224b1d971d200150b76a54d4be0aa980466f5f97d8a18f257393630597ff7fe42b2df83f030332abf1d Verifier address: 0xff61b51a8f9a24904b55540b238ba7268b166c40 Can Withdraw: 0x3ae40befc1638ea949823a5cbac74898a123db3b Receives rewards: 0x3ae40befc1638ea949823a5cbac74898a123db3b=100% Can Exit: 0x3ae40befc1638ea949823a5cbac74898a123db3b Receives stake: 0x3ae40befc1638ea949823a5cbac74898a123db3b=100% Compare with state: unknown The coordinator has not been activated Verifier status: pending_activation Verifier balance: 0 WATER Validator #5: Coordinator public key: 0x802c5a574ae813c506108f7b58ab9dc3b3820c1e859883b3661f0eb42e2c2b55a44924d8b4fdc34898a8ac2d7a86134b Verifier address: 0x4657133d2624a3379f94c6c9838a443928d49daf Can Withdraw: 0x3ae40befc1638ea949823a5cbac74898a123db3b Receives rewards: 0x3ae40befc1638ea949823a5cbac74898a123db3b=100% Can Exit: 0x3ae40befc1638ea949823a5cbac74898a123db3b Receives stake: 0x3ae40befc1638ea949823a5cbac74898a123db3b=100% Compare with state: unknown The coordinator has not been activated Verifier status: pending_activation Verifier balance: 0 WATER
Stop Node
To stop the node, execute the following command in the terminal:
docker stop wf
Reinstall Node
- Stop Node (see instructions above)
- Remove data in home directory
~/.wf
by executing the following command in the terminal:rm -R ~/.wf
- Pull image (see instructions above)
- Run Node (see instructions above) and other steps in instructions above
Upgrade node
- Stop Node
docker stop wf
- Pull image
docker pull registry.waterfall.network/waterfall/protocol/docker:mainnet
- Run Node (see instructions above)
Execute the following command in the terminal:
Executing the following command in the terminal:
cd ~
docker run --platform linux/amd64 --name wf -d --rm -p 4000:4000 -p 13000:13000 -p 12000:12000/udp -p 30303:30303 -p 9545:9545 -p 9546:9546 -v $PWD/.wf/logs:/opt/wf/data/logs -v $PWD/.wf/gwat:/opt/wf/data/gwat -v $PWD/.wf/coordinator:/opt/wf/data/coordinator registry.waterfall.network/waterfall/protocol/docker:mainnet
Transfer validators to another computer
⚡ Disclaimer: The request may not be valid.
- On the new computer, launch the node and wait for full synchronization.
- On the old computer, delete all validators with the following command.
docker exec -it wf /opt/wf/sh/rm.sh
Now you can restore validators with the following command 'docker exec -it wf /opt/wf/sh/restore.sh "<mnemonic>"'
- Make sure that there are no validators
docker exec -it wf /opt/wf/sh/status.sh
Main: The node is synchronized. Node ID: a6032d0be6164bb2d534c4b5a34ff71d11be9f6af927fdaafc3b700f914a958a Coordinator peers: 46 Verifier peers: 21 Keys weren't generated
- On the new computer, run the procedure to restore validators.
Example:
docker exec -it wf /opt/wf/sh/restore.sh "<mnemonic>"
docker exec -it wf /opt/wf/sh/restore.sh "hint deer steak absorb strategy despair bread element fine twice device frozen genuine poem buyer reason agree trip stumble leisure notable country belt sad"
Restored Validator #0: Coordinator public key: 0xb2696ae5c88b88fb0709082367f5c9db256a4db9abecf4c9045e58151ad51126ea0ce7cbff76fa4524cfb66395ba168b Verifier address: 0x41f4bbc7feb1ed211d97adab2137c837f5860266 Withdrawal address: 0x41f4bbc7feb1ed211d97adab2137c837f5860266 Restored Validator #1: Coordinator public key: 0xab317784df7c9bcc4d0d85a9475593b3e71164a46f3a40c02af73e1d8422b525f53120c77b5cca0b7ad8bee52d696159 Verifier address: 0xb68a027ffb5089ed1573a301cfa4d1e2f273094c Withdrawal address: 0x30c35895fe0f7768a261b5326e4332cbb4556ba3 2 Validators were restored.
Deploy Smart-Contract
To deploy smart-contract read instructions
Common Issues and Solutions
-
If the peers of the Coordinating node disappeared during synchronization, please restart the Docker
-
Is there an instruction for Linux? For the Linux platform, please install Docker using the instructions. Afterwards, follow our standard installation instruction.
-
What are the minimum hardware requirements? The minimum hardware requirements include a CPU with at least 2 cores and 4 GB of RAM. Faster hardware (mainly CPU and RAM) is preferable for better performance. The number of Validators you have should match the hardware resources you possess, and a faster internet speed is also essential. The HDD size doesn't increase when you add additional Validators.
-
How many Validators can I run on a one node(one PC)? For now, we guarantee stable work for 16 Validators on 1 node.
-
Can I run 2 nodes on 2 PCs with the same IP. Yes, you can.
-
Why is the synchronization taking so long? The synchronization process is time-consuming due to its comprehensive nature, involving the download of the entire network state.
-
Why Verifier balance is 0? Time must pass for the coordinator's balance to change after 4 eras. This will take approximately an hour.
-
Is it possible for my node to incur penalties? If your node is not running and not synchronized (e.g., your PC is off or in sleep mode, the connection is interrupted, or you turned off the SSD with a snapshot), you will receive penalties. If your clock is significantly behind or ahead, the information you receive from other network participants may be invalid. As a result, your validator will not function correctly and will incur penalties.