Validator migration guide

Follow this guide to become a validator on the Terra 2.0 chain. This guide walks you through making a gentx file that will be added to the validator chain. A gentx is a special transaction included in the genesis file that accomplishes three things:

  1. Registers your validator account as a validator operator account.

  2. Self-delegates the specified amount of LUNA tokens for staking.

  3. Links the validator operator account with a Tendermint node pubkey used to sign blocks.

All validators that want to be included in the Terra 2.0 chain must follow the steps below.


  • Terra 2.0 testnet: pisco-1

  • Terra 2.0 mainnet: phoenix-1

Timeline (Expected)

  • Fri May 27 2022 18:00:00 GMT+0900 (KST)

  • Thu May 27 2022 09:00:00 GMT+0000 (UTC)

    Share preultimate-genesis.json and start to collect gen_txs from the validators.

  • Sat May 28 2022 12:00:00 GMT+0900 (KST)

  • Sat May 28 2022 03:00:00 GMT+0000 (UTC)

    Finish collecting gen_txs and build & share genesis.json

  • Sat May 28 2022 15:00:00 GMT+0900 (KST)

  • Sat May 28 2022 06:00:00 GMT+0000 (UTC)

    Launch network


This section covers how to take the pre- and post-attack snapshots. The following steps need to be run on your existing validator’s machine.

1. Stop your columbus-5 node:

sudo systemctl stop terrad

2. Clone, checkout, and install the Terra Core Genesis state exporter:

git clone
cd core-genesis-exporter
make install

3. Verify the exporter binary version:

terrad version --long

Which will return the following:

terrad version --long
name: terra
server_name: terrad
version: ""
commit: 2565577ccf47d1b11a82d77500a0cb880080a70c
build_tags: netgo,ledger
go: go version go1.18 darwin/arm64

4. Take the pre-attack snapshot:

terrad export --height 7544910 > pre-attack-snapshot.json

5. Take the post-attack snapshot:

terrad export --height 7790000 > post-attack-snapshot.json

6. Verify the SHA256 hash of the (sorted) pre-attack & post-attack export snapshots:

# pre-attack
jq -S -c -M '' pre-attack-snapshot.json | shasum -a 256

# post-attack
jq -S -c -M '' post-attack-snapshot.json | shasum -a 256

Penultimate Genesis

The following steps need to be run on the same machine as your snapshot.

1. Clone and checkout genesis builder:

git clone

2. Move pre-attack and post-attack snapshots into genesis-tools:

mv ./pre-attack-snapshot.json ./post-attack-snapshot.json ./genesis-tools

3. Run genesis builder script:

# install dependency
pip3 install bech32
pip3 install python-dateutil

python3 ./src/ \
    ./genesis-template.json \
    ./pre-attack-snapshot.json \
    ./post-attack-snapshot.json \
    ./genesis-validators.json \
    --genesis-time=2022-05-28T06:00:00.000000Z \
    --chain-id=phoenix-1 \
    > penultimate-genesis.json

4. Verify the SHA256 of the (sorted) penultimate-genesis.json:

jq -S -c -M '' penultimate-genesis.json | shasum -a 256

Set up a new validator

Set up a new validator on a new machine by following the steps outlined in the full node tutorial.

After configuring your general settings, continue to the next section.


Complete the following steps on your new validator’s machine.

1. Checkout and install the Terra 2.0 core:

# checkout and install
git clone
cd core
git checkout v2.0.0
make install

2. Verify the binary version:

terrad version --long
core: v2.0.0
git commit: [placeholder]
go.sum hash: [placeholder]
build tags: netgo ledger

3. Prepare your environment:

# install or move penultimate-genesis.json to server

# move genesis to config location
mv ./penultimate-genesis.json ~/.terra/config/genesis.json

4. Execute GenTx:

terrad gentx validator 1000000uluna \
    --chain-id="phoenix-1" \
    --pubkey=$(terrad tendermint show-validator) \
    --security-contact="[email protected]" \
    --moniker=AAA \
    --details="Trusted security provider for Terra Network and projects building on Terra." \
    --identity="AAAAAAAAAAAA" \
    --commission-rate="0.1" \
    --commission-max-rate="0.2" \
    --commission-max-change-rate="0.01" \ 
    --node-id="validator-moniker" \

5. Upload the generated GenTx file to this repository’s gentx folder via PR:

ls ~/.terra/config/gentx/*

Collect GenTxs

The following steps need to be run on the same machine as your GenTx.

1. Download gentx files and change into the terra home config:

git clone
cd genesis-tools
mv ./gentx/* ~/.terra/config/gentx/

2. Execute collect-gentxs:

terrad collect-gentxs

3. Verify the SHA256 hash of the (sorted) final genesis:

jq -S -c -M '' ~/.terra/config/genesis.json | shasum -a 256

Launch Network

Execute the terrad binary on your new validator’s machine and wait until network launch:

sudo systemctl start terrad