SimApp
is a CLI application built using the Cosmos SDK for testing and educational purposes.
Want to spin up a quick testnet with your friends? Follow these steps. Unless stated otherwise, all participants in the testnet must follow through with each step.
Download IBC-go and unzip it. You can do this manually (via the GitHub UI) or with the git clone command:
git clone github.com/cosmos/ibc-go.git
Next, run this command to build the simd
binary in the build
directory:
make build
Use the following command and skip all the next steps to configure your SimApp node:
make init-simapp
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 must use the same chain-id
subsequently.
Execute this command to create a new key:
./simd keys add [key_name]
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
.
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
. Providing too much or too little may result in errors when you start your node.
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. We sometimes call this the "super genesis file" to distinguish it from single-validator genesis files.
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.
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 thecollect-gentxs
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.