Skip to content

Instantly share code, notes, and snippets.

@goodylili
Last active July 8, 2024 14:50
Show Gist options
  • Save goodylili/3d179910c85b276740b1f5d6696567d6 to your computer and use it in GitHub Desktop.
Save goodylili/3d179910c85b276740b1f5d6696567d6 to your computer and use it in GitHub Desktop.
Possible updates to Simapp documentation from the Cosmos SDK
sidebar_position
1

SimApp

SimApp is a CLI application built using the Cosmos SDK for testing and educational purposes.

Running testnets with simd

Except stated otherwise, all participants in the testnet must follow through with each step.

1. Download and Setup

Download the Cosmos SDK and unzip it. You can do this manually (via the GitHub UI) or with the git clone command.

git clone github.com/cosmos/cosmos-sdk.git

Next, run this command to build the simd binary in the build directory.

make build

If you’ve run simd in the past, you may need to reset your database before starting up a new testnet. You can do that with this command:

# you need to provide the moniker and chain ID
$ ./simd init [moniker] --chain-id [chain-id]

The command should initialize a new working directory at the ~simapp location.

The moniker and chain-id can be anything but you need to use the same chain-id subsequently.

You can cut the hassles of specifying the directory by making the simd binary executable from all directories.

Open your bash profile file, add this command, and save the file.

export PATH=$PATH:</PATH/to/SIMAPP>
# replace </PATH/to/SIMAPP> with the path to the binary

Now, Running simd from any part of your computer should work.

2. Create a New Key

Execute this command to create a new key.

 ./simd keys add [key_name]

The command will create a new key with your chosen name.

⚠️ Save the output somewhere safe; you’ll need the address later.

3. Add Genesis Account

Add a genesis account to your testnet blockchain.

$ ./simd genesis add-genesis-account [key_name] [amount]

Where key_name is the same key name as before, and the amount is something like 10000000000000000000000000stake.

4. Add the Genesis Transaction

This creates the genesis transaction for your testnet chain.

$ ./simd genesis gentx [key_name] [amount] --chain-id [chain-id]

The amount should be at least 1000000000stake. When you start your node, providing too much or too little may result in errors.

5. Create the Genesis File

A participant must create the genesis file genesis.json with every participant's transaction.

You can do this by gathering all the Genesis transactions under config/gentx and then executing this command.

$ ./simd genesis collect-gentxs

The command will create a new genesis.json file that includes data from all the validators. The command will create a new genesis.json file, including data from all the validators

Once you've received the super genesis file, overwrite your original genesis.json file with the new super genesis.json.

Modify your config/config.toml (in the simapp working directory) to include the other participants as persistent peers:

# Comma-separated list of nodes to keep persistent connections to
persistent_peers = "[validator_address]@[ip_address]:[port],[validator_address]@[ip_address]:[port]"

You can find validator_address by executing:

$ ./simd comet show-node-id

The output will be the hex-encoded validator_address. The default port is 26656.

6. Start the Nodes

Finally, execute this command to start your nodes.

$ ./simd start

Now you have a small testnet that you can use to try out changes to the Cosmos SDK or CometBFT!

⚠️ NOTE: Sometimes, creating the network through the collect-gents will fail, and validators will start in a funny state (and then panic).

If this happens, you can try to create and start the network first with a single validator and then add additional validators using a create-validator transaction.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment