# DAWN Chain (cluster)

## Requirements

* Go 1.13

## Deployment of smart contract

### Set-up

```bash
# Into the Project Directory=>

cd testnet-contracts/

# Create .env with sample environment variables
cp .env.example .env

# Add environment variable MNEMONIC from your MetaMask account in .env file.

# Add environment variable INFURA_PROJECT_ID from your Infura account in .env file.
```

### Running the bridge on the Ropsten testnet

`cd testnet-contracts/`

Now run the following commands..

```bash
# Deploy contract to ropsten network
yarn migrate --network ropsten

# Get contract's address
yarn peggy:address --network ropsten
```

## Set up the nodes and validators

### node-1

Open a terminal and run the following commands. Let's call it as `terminal-1`

```bash
# Install tools (golangci-lint v1.18)
make tools-clean
make tools

# Install the app into your $GOBIN
make install

# Now you should be able to run the following commands, confirming the build is successful:
fbd help
fbcli help
fbrelayer help
```

## Running and testing the application

First, initialise a chain and create accounts.

```bash
# Initialize the genesis.json file that will help you to bootstrap the network
fbd init node1 --chain-id=fbchain

# Create a key to hold your validator account and for another test account
fbcli keys add validator1
# Enter password

fbcli keys add testuser
# Enter password

# Edit the genesis.json file for customised stake denom
# on terminal go to folder ~/.fbd/config/genesis.json
# Edit the staking section having bond_denom key from "stake" to "fbx"
# Save and close the file.


# Initialize the genesis account and transaction
fbd add-genesis-account $(fbcli keys show validator1 -a) 1000000000fbx,1000000000fbc

# Create genesis transaction
fbd gentx --name validator1 --amount 1000000fbx
# Enter password

# Collect genesis transaction
fbd collect-gentxs

#Add Customisation to genesis file
# on terminal go to folder ~/.fbd/config/genesis.json
Replace '"staking"' section with the json mentioned in customised_genesis.json (which is in Project Directory)

# Now its safe to start `fbd`
fbd start
```

## Start the `relayer` service

For automated relaying, there is a relayer service that can be run that will automatically watch and relay events (local web socket and deployed address parameters may vary).

Open a new terminal and run the following commands. Let's call it as terminal-2

```bash
# Check fbrelayer connection to ebd
fbrelayer status

# Start fbrelayer on the contract's deployed address with [PEGGY_DEPLOYED_ADDRESS]

fbrelayer init wss://ropsten.infura.io/ws [PEGGY_DEPLOYED_ADDRESS] LogLock\(bytes32,address,bytes,address,string,uint256,uint256\) validator1 --chain-id=fbchain
# Enter password and press enter
# You should see a message like: Started ethereum websocket with provider: wss://ropsten.infura.io/ws \ Subscribed to contract events on address: [PEGGY_DEPLOYED_ADDRESS]
# The relayer will now watch the contract on Ropsten and create a claim whenever it detects a lock event.

#Using the application from rest-server

fbcli rest-server --trust-node
```

### node-2

Now, on terminal-1, run the following commands

```bash
# Install tools (golangci-lint v1.18)
make tools-clean
make tools

# Install the app into your $GOBIN
make install

# Now you should be able to run the following commands, confirming the build is successful:
fbd help
fbcli help
fbrelayer help
```

## Running and testing the application

```bash
# Initialize the genesis.json file with another moniker and same namechain
fbd init node2 --chain-id=fbchain

# Create a key to hold your validator account and for another test account
fbcli keys add validator2
# Enter password

overwrite ~/.fbd/config/genesis.json with first nodes genesis.json

#change persistent_peers
#run `fbcli status` on first node to get id.
go to ~/.fbd/config/config.toml
persistent_peers = "<id_of_node1>@<ip>:<26656>"


# Now its safe to start `fbd`
fbd start
```

### node-1

```bash
# Then, wait 10 seconds and from first node send tokens to valdator2 address for testing
fbcli tx send validator1 <validator2> 10000fbx --chain-id=fbchain --yes
run "fbcli keys show validator2" on second node to get validator2 address.
```

###

### terminal-2

```bash
# Next, setup the staking module prerequisites
# First, create a validator and stake
fbcli tx staking create-validator \
  --amount=1000fbx \
  --pubkey=$(fbd tendermint show-validator) \
  --moniker="node2" \
  --chain-id=fbchain \
  --commission-rate="0.10" \
  --commission-max-rate="0.20" \
  --commission-max-change-rate="0.01" \
  --min-self-delegation="1" \
  --gas=200000 \
  --gas-prices="0.001fbx" \
  --from=validator2
```

### terminal-3&#x20;

#### Start the Relayer service

For automated relaying, there is a relayer service that can be run that will automatically watch and relay events (local web socket and deployed address parameters may vary).

```bash
# Check fbrelayer connection to ebd
fbrelayer status

# Start fbrelayer on the contract's deployed address with [PEGGY_DEPLOYED_ADDRESS]

fbrelayer init wss://ropsten.infura.io/ws [PEGGY_DEPLOYED_ADDRESS] LogLock\(bytes32,address,bytes,address,string,uint256,uint256\) validator2 --chain-id=fbchain
# Enter password and press enter
# You should see a message like: Started ethereum websocket with provider: wss://ropsten.infura.io/ws \ Subscribed to contract events on address: [PEGGY_DEPLOYED_ADDRESS]
# The relayer will now watch the contract on Ropsten and create a claim whenever it detects a lock event.

#Using the application from rest-server

fbcli rest-server --trust-node
```

### node-3

#### Terminal-1

```bash
# Install tools (golangci-lint v1.18)
make tools-clean
make tools

# Install the app into your $GOBIN
make install

# Now you should be able to run the following commands, confirming the build is successful:
fbd help
fbcli help
fbrelayer help
```

## Running and testing the application

First, initialize a chain and create accounts.

```bash
# Initialize the genesis.json file with another moniker and same namechain
fbd init node3 --chain-id=fbchain

# Create a key to hold your validator account and for another test account
fbcli keys add validator3
# Enter password

overwrite ~/.fbd/config/genesis.json with first nodes genesis.json

#change persistent_peers

go to ~/.fbd/config/config.toml
persistent_peers = "id@first_node_ip:26656, id@second_node_ip:26659"
run "fbcli status" on first node to get first_node id.
run "fbcli status" on second node to get second_node id.

# Now its safe to start `fbd`
fbd start
```

#### From node-1

```bash
# Then, wait 10 seconds and from first node send tokens to valdator3 address for testing
fbcli tx send validator1 <validator3> 10000fbx --chain-id=fbchain --yes
run "fbcli keys show validator3" on third node to get validator3 address.
```

#### Terminal-2

```bash
# Next, setup the staking module prerequisites
# First, create a validator and stake
fbcli tx staking create-validator \
  --amount=900fbx \
  --pubkey=$(fbd tendermint show-validator) \
  --moniker="node3" \
  --chain-id=fbchain \
  --commission-rate="0.10" \
  --commission-max-rate="0.20" \
  --commission-max-change-rate="0.01" \
  --min-self-delegation="1" \
  --gas=200000 \
  --gas-prices="0.001fbx" \
  --from=validator3
```

## Start the Relayer service

For automated relaying, there is a relayer service that can be run that will automatically watch and relay events (local web socket and deployed address parameters may vary). On terminal-3, run the following commands

```bash
# Check fbrelayer connection to ebd
fbrelayer status

# Start fbrelayer on the contract's deployed address with [PEGGY_DEPLOYED_ADDRESS]

fbrelayer init wss://ropsten.infura.io/ws [PEGGY_DEPLOYED_ADDRESS] LogLock\(bytes32,address,bytes,address,string,uint256,uint256\) validator3 --chain-id=fbchain
# Enter password and press enter
# You should see a message like: Started ethereum websocket with provider: wss://ropsten.infura.io/ws \ Subscribed to contract events on address: [PEGGY_DEPLOYED_ADDRESS]
# The relayer will now watch the contract on Ropsten and create a claim whenever it detects a lock event.

#Using the application from rest-server

fbcli rest-server --trust-node
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.dawn.org/start/dawn-chain.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
