+---------------------+ +-------------------------+| | | || local host | ansible | remote host || (control machine) +------------------> (validator node) || | | |+---------------------+ +-------------------------+
Check if you already have a keypair:
ls -la ~/.ssh
if you get an error that the directory does not exist or the directory is empty, follow the instructions below. If you already have key pair, you can skip the rest of this section.
Generate new ssh key-pair
ssh-keygen -t rsa -b 4096 -C "firstname.lastname@example.org"
insert your email address and a strong password. By default, keys will be saved to
~/.ssh/ and named
id_rsa with your public key being
Check that you have python 2 version >= 2.6.5 or python 3 version >= 3.3 installed
if not - install using appropriate binary from here
Check that you have ansible version >= 2.3 installed
if not - follow this guide to install ansible. For example, you can use
pip to do it:
sudo pip install ansible
Check that you have git installed
if not - install it following instructions here
Node setup is at your discretion - criteria are included in the following instructions.
Non-AWS Instructions: Create a node yourself with your favorite hosting provider (e.g. AWS/Azure/OVH/etc).
AWS Instructions: Use our automated playbooks to create a node on AWS (requires creating an account on AWS).
clone repository with ansible playbooks and checkout branch corresponding to xDai:
git clone https://github.com/poanetwork/deployment-playbooks.gitcd deployment-playbooksgit checkout dai
prepare files with ssh keys (replace
id_rsa.pub with your key name)
cat ~/.ssh/id_rsa.pub > files/admins.pubcp files/admins.pub files/ssh_validator.pub
create file with configuration settings:
cat group_vars/all.yml.network group_vars/validator.yml.example > group_vars/all.yml
group_vars/all.yml file in your favorite text editor, e.g.
Provide the following configuration parameters:
NODE_FULLNAME - enter your organization name (this will be publicly visible)
NODE_ADMIN_EMAIL - enter your public email (this will be publicly visible)
NETSTATS_SERVER - ask an existing validator (e.g. POA) to provide you with correct url of the netstats server
NETSTATS_SECRET - ask an existing validators (e.g. POA) to share the netstats secret code with you or look it up in the private part of the forum if you already have access. Do not share it with non-validators or people outside of xDai network
MINING_KEYFILE - insert content of your mining keystore file here, enclosed in single brackets (content of json keystore file for your mining key). The result should look similar to this:
MINING_ADDRESS - insert your mining key address, e.g.
MINING_KEYPASS - insert passphrase from keystore file
nano, to save file and exit, use CTRL+X and then Y
1) create a file named
hosts from the hosts.example file (again, using
nano as an example)
cp hosts.example hostsnano hosts
Add only the following content - other fields can be deleted / commented out. (replace 192.0.2.1 with your node's actual ip address):
2) run ansible playbook, replace path of
--key-file argument with your desired SSH key
ansible-playbook -i hosts validator.yml -K --key-file "~/.ssh/id_rsa"
3) open https://dai-netstat.poa.network and check that your node appears on the list and has >0 peers. Wait until it synchronizes with the rest of the blockchain (block number and block hash should match the rest of the network).
After the approval vote has been finalized by the current validators, you will provide a description of your organization (metadata). To set your metadata for the first time, go to https://validators.poa.network/poa-dapps-validators/set, connect to xDai chain, and select your VOTING key.
Select I’m a Company and provide the full company name and contact email address. Then click Update metadata and sign the transaction.
Once this is complete, open https://blockscout.com/poa/dai and find a block generated by you (your mining key) in the last few blocks. This will be the final confirmation that your node is running and mining blocks. Unless you are also on boarding as a bridge validator, the process is complete!