-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: Add new section "Running a Node" (#7701)
* docs: Add new section "Running a Node" * Add running-node * Add docker compose * Update title * Typos * Wording * Fix links * Update docs/run-node/keyring.md Co-authored-by: Cory <[email protected]> * Update docs/run-node/run-node.md Co-authored-by: Robert Zaremba <[email protected]> * Address reviews * rc2 * Update docs/run-node/keyring.md Co-authored-by: Cory <[email protected]> * Address more comments * Reviews * Fix run node * Fix todo Co-authored-by: Cory <[email protected]> Co-authored-by: Robert Zaremba <[email protected]> Co-authored-by: Alessio Treglia <[email protected]>
- Loading branch information
1 parent
f87e7b3
commit 71166c8
Showing
7 changed files
with
198 additions
and
179 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<!-- | ||
order: false | ||
parent: | ||
order: 5 | ||
--> | ||
|
||
# Running a Node | ||
|
||
This folder contains documentation on how to run a node and interact with it. | ||
|
||
1. [Setting up the keyring](./keyring.md) | ||
2. [Running a Node](./run-node.md) | ||
3. [Interacting with a Node](./interact-node.md) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<!-- | ||
order: 3 | ||
--> | ||
|
||
# Interacting with the Node | ||
|
||
## Pre-requisite Readings | ||
|
||
- [Running a Node](./run-node.md) {prereq} | ||
|
||
## Via CLI | ||
|
||
Now that your chain is running, it is time to try sending tokens from the first account you created to a second account. In a new terminal window, start by running the following query command: | ||
|
||
```bash | ||
simd query account $MY_VALIDATOR_ADDRESS --chain-id my-test-chain | ||
``` | ||
|
||
You should see the current balance of the account you created, equal to the original balance of `stake` you granted it minus the amount you delegated via the `gentx`. Now, create a second account: | ||
|
||
```bash | ||
simd keys add recipient | ||
|
||
# Put the generated address in a variable for later use. | ||
RECIPIENT=$(simd keys show recipient -a) | ||
``` | ||
|
||
The command above creates a local key-pair that is not yet registered on the chain. An account is created the first time it receives tokens from another account. Now, run the following command to send tokens to the `recipient` account: | ||
|
||
```bash | ||
simd tx send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000stake --chain-id my-test-chain | ||
|
||
# Check that the recipient account did receive the tokens. | ||
simd query account $RECIPIENT --chain-id my-test-chain | ||
``` | ||
|
||
Finally, delegate some of the stake tokens sent to the `recipient` account to the validator: | ||
|
||
```bash | ||
simd tx staking delegate $(simd keys show my_validator --bech val -a) 500stake --from recipient --chain-id my-test-chain | ||
|
||
# Query the total delegations to `validator`. | ||
simd query staking delegations-to $(simd keys show my_validator --bech val -a) --chain-id my-test-chain | ||
``` | ||
|
||
You should see two delegations, the first one made from the `gentx`, and the second one you just performed from the `recipient` account. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
<!-- | ||
order: 2 | ||
--> | ||
|
||
# Running a Node | ||
|
||
Now that the application is ready and the keyring populated, it's time to see how to run the blockchain node. In this section, the application we are running is called [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/v0.40.0-rc2/simapp), and its corresponding CLI binary `simd`. {synopsis} | ||
|
||
## Pre-requisite Readings | ||
|
||
- [Anatomy of an SDK Application](../basics/app-anatomy.md) {prereq} | ||
- [Setting up the keyring](./keyring.md) {prereq} | ||
|
||
## Initialize the Chain | ||
|
||
::: warning | ||
Make sure you can build your own binary, and replace `simd` with the name of your binary in the snippets. | ||
::: | ||
|
||
Before actually running the node, we need to initialize the chain, and most importantly its genesis file. This is done with the `init` subcommand: | ||
|
||
```bash | ||
# The argument <moniker> is the custom username of your node, it should be human-readable. | ||
simd init <moniker> --chain-id my-test-chain | ||
``` | ||
|
||
The command above creates all the configuration files needed for your node to run, as well as a default genesis file, which defines the initial state of the network. All these configuration files are in `~/.simapp` by default, but you can overwrite the location of this folder by passing the `--home` flag. | ||
|
||
The `~/.simapp` folder has the following structure: | ||
|
||
```bash | ||
. # ~/.simapp | ||
|- data # Contains the databases used by the node. | ||
|- config/ | ||
|- app.toml # Application-related configuration file. | ||
|- config.toml # Tendermint-related configuration file. | ||
|- genesis.json # The genesis file. | ||
|- node_key.json # Private key to use for node authentication in the p2p protocol. | ||
|- priv_validator_key.json # Private key to use as a validator in the consensus protocol. | ||
``` | ||
|
||
Before starting the chain, you need to populate the state with at least one account. To do so, first [create a new account in the keyring](./keyring.md#adding-keys-to-the-keyring) named `my_validator` (feel free to choose another name). | ||
|
||
Now that you have created a local account, go ahead and grant it some `stake` tokens in your chain's genesis file. Doing so will also make sure your chain is aware of this account's existence: | ||
|
||
```bash | ||
simd add-genesis-account $(simd keys show my_validator -a) 100000000stake --chain-id my-test-chain | ||
``` | ||
|
||
Recall that `$MY_VALIDATOR_ADDRESS` is a variable that holds the address of the `my_validator` key in the [keyring](./keyring.md#adding-keys-to-the-keyring). Also note that the tokens in the SDK have the `{amount}{denom}` format: `amount` is is a 18-digit-precision decimal number, and `denom` is the unique token identifier with its denomination key (e.g. `atom` or `uatom`). Here, we are granting `stake` tokens, as `stake` is the token identifier used for staking in [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/v0.40.0-rc2/simapp). For your own chain with its own staking denom, that token identifier should be used instead. | ||
|
||
Now that your account has some tokens, you need to add a validator to your chain. Validators are special full-nodes that participate in the consensus process (implemented in the [underlying consensus engine](../intro/sdk-app-architecture.md#tendermint)) in order to add new blocks to the chain. Any account can declare its intention to become a validator operator, but only those with sufficient delegation get to enter the active set (for example, only the top 125 validator candidates with the most delegation get to be validators in the Cosmos Hub). For this guide, you will add your local node (created via the `init` command above) as a validator of your chain. Validators can be declared before a chain is first started via a special transaction included in the genesis file called a `gentx`: | ||
|
||
```bash | ||
# Create a gentx. | ||
simd gentx --name my_validator --amount 100000stake --chain-id my-test-chain | ||
|
||
# Add the gentx to the genesis file. | ||
simd collect-gentxs --chain-id my-test-chain | ||
``` | ||
|
||
A `gentx` does three things: | ||
|
||
1. Registers the `validator` account you created as a validator operator account (i.e. the account that controls the validator). | ||
2. Self-delegates the provided `amount` of staking tokens. | ||
3. Link the operator account with a Tendermint node pubkey that will be used for signing blocks. If no `--pubkey` flag is provided, it defaults to the local node pubkey created via the `simd init` command above. | ||
|
||
For more information on `gentx`, use the following command: | ||
|
||
```bash | ||
simd gentx --help | ||
``` | ||
|
||
## Run a Localnet | ||
|
||
Now that everything is set up, you can finally start your node: | ||
|
||
```bash | ||
simd start | ||
``` | ||
|
||
You should see blocks come in. | ||
|
||
The previous command allow you to run a single node. This is enough for the next section on interacting with this node, but you may wish to run multiple nodes at the same time, and see how consensus happens between them. | ||
|
||
The naive way would be to run the same commands again in separate terminal windows. This is possible, however in the SDK, we leverage the power of [Docker Compose](https://docs.docker.com/compose/) to run a localnet. If you need inspiration on how to set up your own localnet with Docker Compose, you can have a look at the SDK's [`docker-compose.yml`](https://github.com/cosmos/cosmos-sdk/blob/v0.40.0-rc2/docker-compose.yml). | ||
|
||
## Next {hide} | ||
|
||
Read about the [Interacting with your Node](./interact-node.md) {hide} |
Oops, something went wrong.