Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 45 additions & 34 deletions .gitbook/infra/join-a-network.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Join a network
updatedAt: "2025-10-30"
updatedAt: "2026-06-23"
---

This guide will walk you through the process of setting up a standalone network locally,
Expand Down Expand Up @@ -195,11 +195,15 @@ to ensure high uptime.

#### Install `injectived` and `peggo`

See the [Injective releases repo](https://github.com/InjectiveLabs/testnet/releases) for the most recent releases.
Use the [Injective core releases](https://github.com/InjectiveFoundation/injective-core/releases) for current binaries.
Non-validator node operators do not need to install `peggo`.

```bash
wget https://github.com/InjectiveLabs/testnet/releases/latest/download/linux-amd64.zip
# The live testnet currently runs v1.20.0-beta.2. Before installing, verify the
# version reported by a public testnet node and use the matching injective-core release.
curl -s https://testnet.sentry.lcd.injective.network/cosmos/base/tendermint/v1beta1/node_info | jq -r '.application_version.version'

wget https://github.com/InjectiveFoundation/injective-core/releases/download/v1.20.0-beta.2-1779837158/linux-amd64.zip
unzip linux-amd64.zip
sudo mv peggo /usr/bin
sudo mv injectived /usr/bin
Expand All @@ -221,27 +225,32 @@ Running the `init` command will create `injectived` default configuration files

#### Prepare Configuration to Join Testnet

You should now update the default configuration with the Testnet's genesis file and application config file,
as well as configure your persistent peers with seed nodes.
You should now update the default configuration with the Testnet genesis file,
minimum gas price, and seed nodes. Do not clone archived legacy testnet config repositories
for binaries or configuration.

```bash
git clone https://github.com/InjectiveLabs/testnet.git

# copy genesis file to config directory
# Copy the testnet genesis file to the node config directory.
aws s3 cp --no-sign-request s3://injective-snapshots/testnet/genesis.json .
mv genesis.json ~/.injectived/config/
Comment on lines +233 to 235

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify whether AWS CLI prerequisites are documented alongside this guide.
set -euo pipefail

TARGET=".gitbook/infra/join-a-network.mdx"

echo "== AWS command usages =="
rg -n --no-heading '\baws\s+s3\s+cp\b' "$TARGET"

echo
echo "== Nearby prerequisite/install references =="
rg -n --no-heading -C3 'awscli|aws cli|install aws|brew install aws|apt.*aws|yum.*aws|dnf.*aws' .gitbook/infra/join-a-network.mdx .gitbook/infra/**/*.mdx || true

echo
echo "Expected: at least one explicit prerequisite/install instruction for AWS CLI if aws commands are kept."

Repository: InjectiveLabs/injective-docs

Length of output: 421


🏁 Script executed:

# Check the file structure and prerequisites section
head -n 250 .gitbook/infra/join-a-network.mdx | tail -n 100

Repository: InjectiveLabs/injective-docs

Length of output: 4459


🏁 Script executed:

# Look for any prerequisites or installation sections in the file
rg -n 'prerequisite|requirement|before you|install|setup|preparation' .gitbook/infra/join-a-network.mdx -i

Repository: InjectiveLabs/injective-docs

Length of output: 1498


🏁 Script executed:

# Check if there are other related documentation files that might cover AWS CLI setup
fd -e mdx .gitbook/infra | head -20

Repository: InjectiveLabs/injective-docs

Length of output: 528


🏁 Script executed:

# List files in .gitbook/infra directory
fd . '.gitbook/infra' -e mdx

Repository: InjectiveLabs/injective-docs

Length of output: 3217


🏁 Script executed:

# Check the beginning of the file for any prerequisites section
head -n 100 .gitbook/infra/join-a-network.mdx

Repository: InjectiveLabs/injective-docs

Length of output: 5216


🏁 Script executed:

# Search for AWS CLI setup instructions in the entire .gitbook directory
rg -i 'aws.*install|install.*aws|aws.*prerequisite|apt.*awscli|brew.*awscli' .gitbook --type mdx

Repository: InjectiveLabs/injective-docs

Length of output: 194


🏁 Script executed:

# Search for AWS references in .gitbook directory (ignore file type restriction)
rg -i 'aws' .gitbook/infra --no-type -A 2 -B 2

Repository: InjectiveLabs/injective-docs

Length of output: 602


🏁 Script executed:

# Look at the section right before the AWS command (lines 200-240)
sed -n '200,240p' .gitbook/infra/join-a-network.mdx

Repository: InjectiveLabs/injective-docs

Length of output: 1911


🏁 Script executed:

# Check if there's a prerequisites or requirements section at the top of the file
sed -n '1,50p' .gitbook/infra/join-a-network.mdx

Repository: InjectiveLabs/injective-docs

Length of output: 2136


Add AWS CLI installation prerequisite before the S3 download step

The aws s3 cp command at line 234 requires AWS CLI to be preinstalled, but no installation instructions are documented. Users on fresh hosts will encounter a command-not-found error. Add an explicit prerequisite (e.g., apt-get install awscli for Linux, brew install awscli for macOS) before this step to ensure the guide succeeds on all platforms.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.gitbook/infra/join-a-network.mdx around lines 233 - 235, Add AWS CLI
installation instructions as a prerequisite step before the aws s3 cp command
that downloads the genesis file. Include installation commands for multiple
platforms (such as apt-get install awscli for Linux distributions and brew
install awscli for macOS) to ensure users on fresh hosts can successfully
execute the aws s3 cp command without encountering command-not-found errors.
Place these installation instructions in a new prerequisite section that appears
before the step containing the aws s3 cp --no-sign-request
s3://injective-snapshots/testnet/genesis.json command.


# copy config file to config directory
cp testnet/corfu/70001/app.toml ~/.injectived/config/app.toml
cp testnet/corfu/70001/config.toml ~/.injectived/config/config.toml
# Configure app.toml. The testnet validator guides use 500000000inj for transactions.
sed -i.bak -e 's/^minimum-gas-prices *=.*/minimum-gas-prices = "500000000inj"/' ~/.injectived/config/app.toml

# Configure a seed node. You can replace this with your own trusted seed or sentry node.
sed -i.bak -e 's/^seeds *=.*/seeds = "ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@testnet-seeds.polkachu.com:14356"/' ~/.injectived/config/config.toml
```

You can also run verify the checksum of the genesis checksum - a4abe4e1f5511d4c2f821c1c05ecb44b493eec185c0eec13b1dcd03d36e1a779
You can also verify the genesis checksum - a4abe4e1f5511d4c2f821c1c05ecb44b493eec185c0eec13b1dcd03d36e1a779

```bash
sha256sum ~/.injectived/config/genesis.json
```

If the seed node above is unavailable or your node has trouble finding peers,
use a current [Injective Testnet peer list](https://www.polkachu.com/testnets/injective/peers)
or your own sentry nodes in the `persistent_peers` field of `~/.injectived/config/config.toml`.

#### Configure `systemd` Service for `injectived`

Edit the config at `/etc/systemd/system/injectived.service`:
Expand All @@ -257,6 +266,7 @@ Edit the config at `/etc/systemd/system/injectived.service`:
Restart=always
RestartSec=5
User=root
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
Expand Down Expand Up @@ -308,8 +318,11 @@ See the [Injective core releases](https://github.com/InjectiveFoundation/injecti
Non-validator node operators do not need to install `peggo`.

```bash
# Replace the URL with the latest release from https://github.com/InjectiveFoundation/injective-core/releases
wget https://github.com/InjectiveFoundation/injective-core/releases/latest/download/linux-amd64.zip
# The live mainnet currently runs v1.20.0. Before installing, verify the
# version reported by a public mainnet node and use the matching injective-core release.
curl -s https://sentry.lcd.injective.network/cosmos/base/tendermint/v1beta1/node_info | jq -r '.application_version.version'

wget https://github.com/InjectiveFoundation/injective-core/releases/download/v1.20.0-1780128924/linux-amd64.zip

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the right version?

unzip linux-amd64.zip
sudo mv peggo /usr/bin
sudo mv injectived /usr/bin
Expand All @@ -331,32 +344,31 @@ Running the `init` command will create `injectived` default configuration files

#### Prepare Configuration to Join Mainnet

You should now update the default configuration with the Mainnet's genesis file and application config file,
as well as configure your persistent peers with seed nodes.
You should now update the default configuration with the Mainnet genesis file,
minimum gas price, seed nodes, and block commit timeout. Do not clone archived legacy mainnet config repositories
for node setup.

```bash
git clone https://github.com/InjectiveLabs/mainnet-config
# Copy the mainnet genesis file to the node config directory.
curl -L https://snapshots.polkachu.com/genesis/injective/genesis.json -o ~/.injectived/config/genesis.json

# copy genesis file to config directory
cp mainnet-config/10001/genesis.json ~/.injectived/config/genesis.json
# Configure app.toml. This is the default minimum gas price used by current Injective nodes.
sed -i.bak -e 's/^minimum-gas-prices *=.*/minimum-gas-prices = "160000000inj"/' ~/.injectived/config/app.toml

# copy config file to config directory
cp mainnet-config/10001/app.toml ~/.injectived/config/app.toml
# Configure seed nodes and the mainnet block commit timeout.
sed -i.bak -e 's/^seeds *=.*/seeds = "ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@seeds.polkachu.com:14356,ebc272824924ea1a27ea3183dd0b9ba713494f83@injective-mainnet-seed.autostake.com:26726,1846e76e14913124a07e231586d487a0636c0296@tenderseed.ccvalidators.com:26007"/' ~/.injectived/config/config.toml
sed -i.bak -e 's/^timeout_commit *=.*/timeout_commit = "300ms"/' ~/.injectived/config/config.toml
```

You can also run verify the checksum of the genesis checksum - 573b89727e42b41d43156cd6605c0c8ad4a1ce16d9aad1e1604b02864015d528
You can also verify the genesis checksum - 573b89727e42b41d43156cd6605c0c8ad4a1ce16d9aad1e1604b02864015d528

```bash
sha256sum ~/.injectived/config/genesis.json
```

Then update the `seeds` field in `~/.injectived/config/config.toml` with the contents of `mainnet-config/10001/seeds.txt`
and update the `timeout_commit` to `300ms`.

```bash
cat mainnet-config/10001/seeds.txt
nano ~/.injectived/config/config.toml
```
If the seed nodes above are unavailable or your node has trouble finding peers,
use a current [Injective Mainnet peer list](https://www.polkachu.com/live_peers/injective)
or your own sentry nodes in the `persistent_peers` field of `~/.injectived/config/config.toml`.

#### Configure `systemd` Service for `injectived`

Expand All @@ -373,6 +385,7 @@ Edit the config at `/etc/systemd/system/injectived.service`:
Restart=always
RestartSec=5
User=root
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
Expand Down Expand Up @@ -415,12 +428,10 @@ _To be added soon_
1. [Polkachu](https://polkachu.com/tendermint_snapshots/injective).
2. [HighStakes](https://tools.highstakes.ch/files/injective.tar.gz).
3. [Imperator](https://www.imperator.co/services/chain-services/mainnets/injective).
4. [Bware Labs](https://bwarelabs.com/snapshots).
5. [AutoStake](https://autostake.com/networks/injective/#validator).
4. [AutoStake](https://autostake.com/networks/injective/#validator).

Should the Injective `mainnet-config seeds.txt` list not work (the node fails to sync blocks),
ChainLayer, Polkachu, and Autostake maintain peer lists (can be used in the `persistent_peers` field in `config.toml`)
or addressbooks (for faster peer discovery).
If the configured seeds do not work or the node fails to sync blocks,
ChainLayer, Polkachu, and Autostake maintain peer lists that can be used in the `persistent_peers` field in `config.toml`.

**Support**

Expand Down