Joining a Network
Joining Testnet
After installing canined
. You can join the testnet by following these steps:
canined init <alias> --chain-id=<chain-id>
chain-id
for testnet is currently lupulella-2
.
Then we want to replace our generated genesis file with the one used to start the network. We also need to set our peers and seeds.
For an updated list of peers & seeds, please check this page.
wget -O ~/.canine/config/genesis.json https://raw.githubusercontent.com/JackalLabs/jackal-chain-assets/main/testnet/genesis.json
export SEEDS="84f520678ef59ea02f942fa6323ec562ca5a3249@45.79.161.178:26656,cecc087977336da1e9ccd2c50097cd9e7d5e1874@141.95.33.39:26656"
sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/" ~/.canine/config/config.toml
As a validator, you’ll need to set a minimum gas price like so:
GAS="0.002ujkl"
sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"$GAS\"/" $HOME/.canine/config/app.toml
Joining Mainnet
jackal
user.
After installing canined
. You can join the mainnet by following these steps:
canined init "NODE_NAME" --chain-id=jackal-1
Then we want to replace our generated genesis file with the one used to start the network.
wget -O ~/.canine/config/genesis.json https://cdn.discordapp.com/attachments/1002389406650466405/1034968352591986859/updated_genesis2.json
SEEDS=$(wget https://raw.githubusercontent.com/JackalLabs/canine-mainnet-genesis/master/genesis/seeds.txt -q -O -)
PEERS=`curl -sL https://raw.githubusercontent.com/JackalLabs/canine-mainnet-genesis/master/genesis/peers.txt | sort -R | head -n $PEERCOUNT | awk '{print $1}' | paste -s -d, -`
GAS="0.002ujkl"
sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.canine/config/config.toml
Backing up key files
The created node_key.json
and priv_validator_key.json
cannot be recovered. These files must be backed up.
mkdir ~/key_backup
cp ~/.canine/config/node_key.json ~/key_backup
cp ~/.canine/config/priv_validator_key.json ~/key_backup
You should also keep an offline backup. Using a program like WinSCP
, you can easily copy these files to your personal desktop for safe storage/backup.
Syncing to Current Heightid=“syncing-to-current-height”>
Snapshot method
Get a snapshot here.
For the sake of this guide, the snapshot we download is named jackal.tar.lz4
If you plan on becoming a validator, before using the unsafe-reset-all
flag, always besure to back up your priv_validator_state.json
file.
canined unsafe-reset-all --keep-addr-book
lz4 -c -d jackal.tar.lz4 | tar -x -C $HOME/.canine
Then start the chain again.
State Sync Method
There are a couple of ways to go about doing state sync. First is the easier route. Visit Ping.pub for Jackals State Sync configuration settings.
Next, copy these settings from Ping.pub to your config.toml
in the [statesync]
section.
It should look similar to this:
#######################################################
### State Sync Configuration Options ###
#######################################################
[statesync]
# State sync rapidly bootstraps a new node by discovering, fetching, and restoring a state machine
# snapshot from peers instead of fetching and replaying historical blocks. Requires some peers in
# the network to take and serve state machine snapshots. State sync is not attempted if the node
# has any local state (LastBlockHeight > 0). The node will have a truncated block history,
# starting from the height of the snapshot.
enable = true
# RPC servers (comma-separated) for light client verification of the synced state machine and
# retrieval of state data for node bootstrapping. Also needs a trusted height and corresponding
# header hash obtained from a trusted source, and a period during which validators can be trusted.
#
# For Cosmos SDK-based chains, trust_period should usually be about 2/3 of the unbonding time (~2
# weeks) during which they can be financially punished (slashed) for misbehavior.
rpc_servers = "https://rpc.jackalprotocol.com:443,https://rpc.jackalprotocol.com:443"
trust_height = 333000
trust_hash = "1685850c2d115a86af9059bd3f36a4fbbb0e8ba7f37863d517b6d2f54116daca"
trust_period = "168h" # 2/3 of unbonding time
# Time to spend discovering snapshots before initiating a restore.
discovery_time = "15s"
# Temporary directory for state sync snapshot chunks, defaults to the OS tempdir (typically /tmp).
# Will create a new, randomly named directory within, and remove it when done.
temp_dir = ""
# The timeout duration before re-requesting a chunk, possibly from a different
# peer (default: 1 minute).
chunk_request_timeout = "10s"
# The number of concurrent chunk fetchers to run (default: 1).
chunk_fetchers = "42"
State syncing can take up to a few minutes to complete. Watch the logs to ensure it’s happening. When a snapshot is found, you will see output in your log that is similar to this:
1PM INF Discovered new snapshot format=1 hash="S.�h�F���\"\x1d6+\x1e���ޅ��`v@�ц�����" height=1810000 module=statesync
It will download, verify, and apply chuncks of blockchain data. When it finishes you will see it catching up to blocks
State Sync Method 2
The follow commandline code will edit your config.toml
with the proper information for state syncing to the most recent snapshot 3000 blocks and beyond.
STATE_SYNC_RPC=https://rpc.jackalprotocol.com:443
LATEST_HEIGHT=$(curl -s $STATE_SYNC_RPC/block | jq -r .result.block.header.height)
SYNC_BLOCK_HEIGHT=$(($LATEST_HEIGHT - 3000))
SYNC_BLOCK_HASH=$(curl -s "$STATE_SYNC_RPC/block?height=$SYNC_BLOCK_HEIGHT" | jq -r .result.block_id.hash)
sed -i.bak -e "s|^enable *=.*|enable = true|" $HOME/.canine/config/config.toml
sed -i.bak -e "s|^rpc_servers *=.*|rpc_servers = \"$STATE_SYNC_RPC,$STATE_SYNC_RPC\"|" \
$HOME/.canine/config/config.toml
sed -i.bak -e "s|^trust_height *=.*|trust_height = $SYNC_BLOCK_HEIGHT|" \
$HOME/.canine/config/config.toml
sed -i.bak -e "s|^trust_hash *=.*|trust_hash = \"$SYNC_BLOCK_HASH\"|" \
$HOME/.canine/config/config.toml
When you state sync, you can start with the latest version of canined
.
Versions for Sync
block height | canined version |
---|---|
45381 | 1.1.2 |
0 | 1.1.0 |
Starting the daemon
Start the daemon and sync to the current height.
sudo systemctl start jackal
sudo journalctl -u jackal -f
Watch the logs and ensure you are either state syncing correctly, or are syncing up to the current height.