For DePIN/Validator Node provider
Steps to run a Witness Chain PoL Watchtower Client
Prerequisites
Before you begin, ensure you have the following
Docker (version 23.0.0 or above, refer: https://docs.docker.com/desktop/install/linux-install/)
Instance comparable to a t2 micro (1 vcpu, 1GB RAM and 5GB harddisk)
Running your Watchtower client
There are two aspects in setting up the watchtower,
Registration: so the challengers are aware of it
Running: so the challengers can engage with it
Here's how to get the watchtowers successfully running
Key Points to consider before proceeding...
Ports to be opened if using public IP:
Incoming ports to be opened (TCP & UDP ):
11112
22223
33334
33335
33336
44445
44446
44447
55556
Outgoing ports: Allow all
Setting up the Watchtower
You can provide the private key (for example, generated from Metamask) which will be used by the Witnesschain's PoL Watchtower client.
Use ECDSA Keypairs
Registering the Watchtower Key
Download and install the witness CLI:
curl -sSfL https://witnesschain-com.github.io/install-dcl-cli | bash
After the installation is completed, verify the cli is installed correctly and upto date ( WitnessChain version v0.0.12)
witness-cli --version
Then proceed to register your watchtower key on WitnessChain's Layer 2 Chain: Use the KeyPair that you would have exported or created using Metamask or any other wallet.
witness-cli registerWatchtower --mainnet --watchtower-private-key <your-watchtower-private-key-without-0x-prefix>
Setting up the Watchtower keys and the config file
You can pass the required configuration to the docker container env via a file or directly with
-e
flag in the run command (read more). Prepare a configuration filewatchtower.env
with the following entries as example shown below:
latitude=37.01511676489697
longitude=-79.0392271449855
radius=1000
privateKey=<my_super_secret_private_key>
walletPublicKey=<my_open_public_address>
keyType=ethereum
saveResultsInDatabase=false
submitResultsToContract=true
rpcUrl=https://rpc.witnesschain.com
projectName=<my_DePIN_project_name/my_validator_network_name>
Explanation:
"latitude": 37.015, // Required. Latitude of the machine running the challenger client "longitude": -79.039, // Required. Longitude of the machine running the challenger client "radius": 1000 // Required. Range in KM
privateKey
is your PoL signing key (Watchtower Key)walletPublicKey
is the PoL watchtower address (eth address)havePublicIPv4Address
(andhavePublicIPv6Address
) set them to true if you have a public IPv4 (or IPv6)havePrivateIPv4Address
(andhavePrivateIPv6Address
) set them to true if you want to force the use of private IPsaveResultsInDatabase
saves the login, session, and challenge related data in a.sqlite
file within the containerprojectName
tags the watchtower with the project - examples include "spheron", "akash", "pingpong", "eigenlayer", etc. This is an optional field
3. Running the watchtower
Once you have the watchtower.env
ready, the watchtower client can be started with
docker run -d \
--network=host \
--name pol-watchtower \
--env-file ./watchtower.env \
witnesschain/infinity-watch:1.0.2
you can verify that the challenger is running by looking at the container status
docker ps
Explanation:
docker run -d
: Runs the container in detached mode (in the background).--network=host Uses the host's network stack.
--name pol-watchtower Names the container as 'pol-watchtower'.
witnesschain/infinity-watch:1.0.2 The name of the Docker image to run.
you can verify that the watchtower is running by looking at the container status
docker ps
Post Setup
Once the setting up and registration is successful, you can check the logs from the watchtower client ready for challenges. (docker logs -f pol-watchtower
). Congratulations, you are now a part of our Infinity watch family!
Troubleshooting
As the only prerequisite is docker, make sure you are running atleast version 23.0.0 or above for the commands mentioned in the doc to work. The days might be rainy or snowy, but we've got umbrellas and sweaters! Join our Discord or Telegram—we're happy to help. :D
Last updated