# Chainbridge Setup Guide To setup a production chainbridge for zero.exchange we will need to setup: 1) an Avalanche node 2) an Ethereum node (optional) 3) a Chainbridge relayer Skip sections 1 and 2 for now and just go to step 3 ## 1) Setup Avalanche Node The full guide can be found here: https://docs.avax.network/build/get-started Once you have it running on your server, create a systemctl script with the following: `vi /etc/systemd/system/` and save the following script as avalanche.service: ``` [Unit] Description=Avalanche node After=network.target [Service] Type=simple Restart=always RestartSec=1 ExecStart=/root/avalanchego --public-ip=167.99.178.42 --http-port=9650 [Install] WantedBy=default.target ``` This should ensure the avalanche node is always running, even after crashes or system reboots. ## 2) Optional: Run an Ethereum node Currently, the setup uses infura.io or other ethereum node hosting providers for reliability. ## 3) Setup ChainBridge Relayer Clone the repo and install dependencies ``` git clone https://github.com/zeroexchange/gondola sudo apt update sudo apt install make sudo apt install build-essential wget -c https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local vi ~/.profile export PATH=$PATH:/usr/local/go/bin source ~/.profile ``` Configure chainbridge with the following commands: ``` make build # Generate a new public/private key and make a note of the public address cd build && ./chainbridge accounts import --privateKey <your ethereum private key here> vi /build/config.json ``` Change the "from" field on both chains to the public key you just imported, and note the KEYSTORE_PASSWORD you just entered for the next step. ``` ./build/chainbridge ``` then create a systemctl script with the following: ``` vi /etc/systemd/system/chainbridge.service ``` and save the following script as chainbridge.service: ``` [Unit] Description=Chainbridge Relayer [Service] User=root TimeoutStartSec=0 Type=simple KillMode=process WorkingDirectory=/root/gondola/build ExecStart=/root/gondola/build/chainbridge Restart=always RestartSec=2 Environment="KEYSTORE_PASSWORD=<your keystore password here>" [Install] WantedBy=multi-user.target ``` This should ensure the avalanche node is always running, even after crashes or system reboots. ``` systemctl enable chainbridge systemctl start chainbridge ``` You can check if it is running properly with ``` journalctl -u chainbridge.service -b ``` ## Run the services and confirm it is operating correctly Run the Avalanche service: ``` systemctl enable avalanche systemctl start avalanche ``` Test avalanche is running correctly with ``` curl -X POST --data '{ "jsonrpc":"2.0", "id" :1, "method" :"info.isBootstrapped", "params": { "chain":"X" } }' -H 'content-type:application/json;' 127.0.0.1:9650/ext/info ``` this should return isBootstrapped: true in the json response (might take some time to get synced). Once this is true, run the chainbridge service: