Skip to content

Commit

Permalink
Merge pull request #215 from anoma/bengt/genesis-flow
Browse files Browse the repository at this point in the history
Genesis flow docs
  • Loading branch information
bengtlofgren authored Dec 5, 2023
2 parents 78fc6f8 + 684e050 commit 03b9d0a
Show file tree
Hide file tree
Showing 19 changed files with 341 additions and 52 deletions.
4 changes: 2 additions & 2 deletions packages/docs/pages/networks/testnets.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ If you find a bug, please submit an issue with the `bug` [issue template](https:

1. [Environment setup](./testnets/environment-setup.mdx)
2. [Pre-genesis instructions](./testnets/pre-genesis.mdx)
3. [Pre-genesis validator setup](../operators/validators/genesis-validator-setup.mdx)
3. [Pre-genesis validator setup](../operators/validators/validator-setup.mdx)
4. [Pre-genesis validator apply](./testnets/genesis-validator-apply.mdx)
5. [Running your genesis validator](../operators/validators/run-your-genesis-validator.mdx)
5. [Running your genesis validator](../operators/validators/validator-setup.mdx#start-validating)
6. [Running a full node](../operators/ledger/running-a-full-node.mdx)
7. [Becoming a validator post-genesis](./testnets/post-genesis-validator.mdx)

Expand Down
2 changes: 1 addition & 1 deletion packages/docs/pages/networks/testnets/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

### **Q: How do I join as a validator post-genesis?**

**A:** Joining as a validator post genesis can be done following [these instructions](../../operators/validators/post-genesis-validator-setup.mdx).
**A:** Joining as a validator post genesis can be done following [these instructions](../../operators/validators/validator-setup.mdx).

### **Q: How do I use the Faucet?**

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Before a testnet launches, you can apply to be a genesis validator.

### Set up

Follow [this guide](../../operators/validators/genesis-validator-setup.mdx#pre-genesis) on how to generate your "pre-genesis" validator files.
Follow [this guide](../../operators/validators/validator-setup.mdx#pre-genesis) on how to generate your "pre-genesis" validator files.

After this, you'll have a `validator.toml` file, the contents of which will look something like the following:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Depending on whether you are a genesis validator, you can join the latest testne
## Joining as a genesis validator
Joining the testnet validator is identical to that of a mainnet validator.

For this reason, please refer to [these docs](../../operators/validators/run-your-genesis-validator.mdx).
For this reason, please refer to [these docs](../../operators/validators/validator-setup.mdx#start-validating).

## Joining as a full node
If you are not a genesis validator, please follow the steps for [joining as a full node](../../operators/ledger/running-a-full-node.mdx).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

After genesis, you can still join the network as a user and become a validator through self-bonding.

After [joining the network as a full node](../../operators/ledger/running-a-full-node.mdx), you must [create a validator account](../../operators/validators/post-genesis-validator-setup.mdx).
After [joining the network as a full node](../../operators/ledger/running-a-full-node.mdx), you must [create a validator account](../../operators/validators/validator-setup.mdx).

After this has been completed, you will need to increase your validator's `bonded-stake`, which can be done by self-bonding tokens sourced from the faucet.

Expand Down
3 changes: 2 additions & 1 deletion packages/docs/pages/networks/testnets/testnet-history.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,8 @@ mkdir backup-pregenesis && cp -r .namada/pre-genesis backup-pregenesis/
rm -r .namada/public-testnet-3.0.81edd4d6eb6
rm .namada/public-testnet-3.0.81edd4d6eb6.toml
```
WARNING: Do not delete the entire `.namada` folder, as it contains your pre-genesis keys. If this is accidentally done, you will have to copy over the backup-pregenesis file. See [these instructions](../../operators/validators/run-your-genesis-validator.mdx) for more details
WARNING: Do not delete the entire `.namada` folder, as it contains your pre-genesis keys. If this is accidentally done, you will have to copy over the backup-pregenesis file.

3. Rejoin the network
```bash copy
export CHAIN_ID="public-testnet-3.0.81edd4d6eb6"
Expand Down
2 changes: 1 addition & 1 deletion packages/docs/pages/operators.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ The guide assumes that you have already installed the node and are familiar with

- [Running a full node](./operators/ledger.mdx)
- [Running a validator node](./operators/validators.mdx)
- [Setting up a local network](./operators/local-network.mdx)
- [Setting up a local network](./operators/networks/local-network.mdx)
2 changes: 1 addition & 1 deletion packages/docs/pages/operators/_meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"hardware": "Hardware requirements",
"ledger": "Running a full node",
"validators": "Validators",
"local-network": "Setting up a local network",
"networks": "Starting a network",
"ibc": "IBC Relayers",
"troubleshooting": "Troubleshooting"
}
8 changes: 8 additions & 0 deletions packages/docs/pages/operators/networks.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Starting Namada networks

This guide will explore setting up Namada networks.

It is broken into the following sections:

* [Decentralised network setup](./networks/genesis-flow.mdx)
* [Local network setup](./networks/local-network.mdx)
4 changes: 4 additions & 0 deletions packages/docs/pages/operators/networks/_meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"genesis-flow": "Setting up a decentralised network",
"local-network": "Setting up a local network"
}
15 changes: 15 additions & 0 deletions packages/docs/pages/operators/networks/genesis-flow.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Setting up a decentarlised Namada network

Setting up a decentralised Namada network requires coordination between two distinct parties:

1. [The network coordinator](./genesis-flow/coordinator.mdx#the-network-coordinator)
2. [The pre-genesis network participants](./genesis-flow/participants.mdx#pre-genesis-network-participants)

This process is also called the **genesis ceremony**.







Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"coordinator": "The network coordinator",
"participants": "Pre-genesis participants"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { Steps } from 'nextra-theme-docs'

## The network coordinator

The network coordinator is responsible for:

0. [Setup](#setup)
1. [Collecting pre-genesis public keys](#collecting-pre-genesis-public-keys)
2. [Allocating pre-genesis NAM balances](#allocating-pre-genesis-nam-balances)
3. [Collecting pre-genesis transactions](#collecting-pre-genesis-transactions)
4. [Generating the genesis block](#generating-the-genesis-block)

### Setup

The genesis ceremony preperation includes creating a coordinated location for the pre-genesis network participants to submit their public keys. The network coordinator is responsible for setting up this location. Conventionally, the network coordinator will host a git repository that allows the pre-genesis network participants to submit their public keys. The network coordinator must ensure that the git repository is publicly accessible and that the pre-genesis network participants are able to submit their public keys in a secure manner.

Further, the network coordinator is responsible for making clear timelines for the various steps in the genesis ceremony. The network coordinator must ensure that the pre-genesis network participants are aware of the timelines and that they are able to submit their public keys, transactions, and be online in due time.

<Steps>

### Collecting pre-genesis public keys

The ceremony begins by the network coordinator collecting the public keys of the pre-genesis network participants. The network coordinator must ensure that the total number of pre-genesis public keys collected is equal to the total number of pre-genesis network participants.

Conventionally, the network coordinator hosts a git repository that allows the pre-genesis network participants to submit their public keys. The network coordinator must ensure that the git repository is publicly accessible and that the pre-genesis network participants are able to submit their public keys in a secure manner.

### Allocating pre-genesis NAM balances

Once the participants have [submitted their keys and addresses](./participants.mdx#submitting-keys-and-addresses) the network coordinator must allocate balances to these addresses/public keys. The coordinator will often have prior identity information associated with desired balances, which they will then associate with the public keys and addresses in order to set the correct balances in `balances.toml`. The coordinaotor must also ensure that the total pre-genesis NAM balances allocated to the pre-genesis network participants is equal to the total NAM supply.

After this is completed, the network coordinator will publish the `balances.toml` file that contains the pre-genesis NAM balances allocated to the pre-genesis network participants. The `balances.toml` file should be published in the same location as the pre-genesis public keys were submitted.


### Collecting pre-genesis transactions

Once the participants have [submitted their keys and addresses](./participants.mdx#submitting-keys-and-addresses) the network coordinator must collect the signed pre-genesis transactions from the pre-genesis network participants. The network coordinator must ensure that the total number of pre-genesis transaction files collected is equal to the total number of pre-genesis network participants.

The network coordinator then aggregates these transaction files into one file and saves it as the `transactions.toml` file to be used in the generation of the genesis block.

The `transactions.toml` file is validated by the network coordinator to ensure that each transaction has been correctly signed by each pre-genesis network participant. The network coordinator must ensure that the `transactions.toml` file is valid before proceeding to the next step.

### Generating the genesis block

Once the network coordinator has collected the pre-genesis public keys, allocated pre-genesis NAM balances, and collected pre-genesis transactions, the network coordinator is ready to generate the genesis block.


</Steps>
204 changes: 204 additions & 0 deletions packages/docs/pages/operators/networks/genesis-flow/participants.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
import { Callout } from 'nextra-theme-docs'
import { Steps } from 'nextra-theme-docs'


## Pre-genesis network participants

The pre-genesis network participants are the entities that are participating in the genesis ceremony. The pre-genesis network participants are responsible for:
1. [Generating their public and private keys](#generating-keys)
2. [Submitting their public keys and addresses to the network coordinator](#submitting-keys-and-addresses)
3. [Generating their pre-genesis transactions](#generating-transactions)
4. [Signing their pre-genesis transactions](#signing-transactions)
5. [Submitting their pre-genesis transactions to the network coordinator](#submitting-transactions)

<Steps>

### Generating keys

Before the genesis ceremony begins, the pre-genesis network participants must generate their public and private keys. The pre-genesis network participants must ensure that their private keys are kept secret and that their public keys are submitted to the network coordinator in due time.

This can be done through the namada cli:

```bash
ALIAS="<your-key-alias>"
namadac gen key --alias $ALIAS --pre-genesis
```

After the user has entered their passwords and written down their mnemonic phrase, the namada cli will save the keys to the `pre-genesis` folder inside the [base directory](../../ledger/base-directory.mdx).

In order to print the keys, the user can run the following command:

```bash
# Not recommended in production since it will print the private key to the terminal (which can be recovered)
cat $BASE_DIR/pre-genesis/wallet.toml
```

It is the public keys that the pre-genesis network participants must submit to the network coordinator.

```toml
# Example wallet.toml
[public_keys]
bengt = "ED25519_PK_PREFIXtpknam1qq2vscpcvhdwht9tldj9ntxnknandhnerhzd6d42xqzukw2kpcfpudh3dl2"

...

[addresses]
bengt = "tnam1qq97eqvv4lam8ds00j9em2s2f0r8e7r60qw9fdfq"
```

It is then the right hand side of each of these fields that is submitted to the network coordinator, i.e `ED25519_PK_PREFIXtpknam1qq2vscpcvhdwht9tldj9ntxnknandhnerhzd6d42xqzukw2kpcfpudh3dl2` and `tnam1qq97eqvv4lam8ds00j9em2s2f0r8e7r60qw9fdfq` in the example above.

The network coordinator should specify the schema in which the pre-genesis network participants should submit their public keys and addresses. A toml file with the following schema is recommended:

```toml
[<pre-genesis-participant-alias>]
"public-key" = "ED25519_PK_PREFIXtpknam1qpjs6jrjuu5cj508ys7ezee4r40v8as6vz4j3ddc9qm68nfhf5n7clp4xse"
"address" = "tnam1qq5skuga54tfs7422hzz8sqvk3s6lhe2dg32jjhd"
```

### Submitting keys and addresses

After the network coordinator has published the location (conventionally a git repository) for the pre-genesis network participants to submit their public keys, the participants are expected to submit their generated public keys (and their corresponding addresses) to the network coordinator in due time. The deadline will be set by the network coordinator.

### Generating transactions

Participants are also responsible for generating the genesis-block transactions that set the initial state of the blockchain, including initialising genesis validator accounts and bonding to them. However, it is only possible to make transactions that require value once the balances of the keys become agreed upon (once the `balances.toml` file has been published).

#### Generate an established account

In order to generate a pre-genesis validator account, the pre-genesis network participants must first generate an established account. This can be done through the namada cli:

<Callout>
The `$ALIAS` variable is the alias of the pre-genesis keys that were generated in the [Generating keys](#generating-keys) step.
</Callout>

```bash
#Ensure $BASE_DIR is set to the base directory
TX_FILE_PATH="$BASE_DIR/pre-genesis/transactions.toml"
namadac utils init-genesis-established-account --path $TX_FILE_PATH --alias $ALIAS

# You can change the `--path` argument to any file path, but the recommended is `$BASE_DIR/pre-genesis/transactions.toml`
```

The command will ouptut the generated address of the established account.

```text
Derived established account address: tnam1q8lsztqqhpjxdwzw88mqqc2mun7dvpxvas3v2dxk
```

It is useful to save this address for later use.

```bash
ESTABLISHED_ACCOUNT_ADDRESS=tnam1q8lsztqqhpjxdwzw88mqqc2mun7dvpx
```

This will generate a `transactions.toml` file that contains the pre-genesis transaction that will establish the account. The `transactions.toml` file should look something like this:

```toml
[[established_account]]
vp = "vp_user"
threshold = 1
public_keys = ["tpknam1qr872zwdvw4u4nkpl0ykmvhyvxw7j0u6g7ymz03d7he0jr3szkuwczddjp2"]
```

#### Generate a pre-genesis multisignature account

In order to generate a pre-genesis multisignature account, simply add multiple `--alias` flags to the command:

```bash
# Ensure $BASE_DIR is set to the base directory
# Assuming that the values of $ALIAS1, $ALIAS2, and $ALIAS3 are the aliases of the pre-genesis keys that were generated in the [Generating keys](#generating-keys) step.
TX_FILE_PATH="$BASE_DIR/pre-genesis/transactions.toml"
namadac utils init-genesis-established-account --path $TX_FILE_PATH --alias $ALIAS1 --alias $ALIAS2 --alias $ALIAS3
```

The command will ouptut the generated address of the multisignature account.


```text
Derived established account address: tnam1q8qvns6ndpff03wmszkhgepk2r8f9ws68ugktfml
```

The corresponding `transactions.toml` file should look something like this:

```toml
[[established_account]]
vp = "vp_user"
threshold = 1
public_keys = ["tpknam1qr872zwdvw4u4nkpl0ykmvhyvxw7j0u6g7ymz03d7he0jr3szkuwczddjp2", "tpknam1qpz5n0u49s6s5jx4nyycyw0w288yfq96p3lvwxkedxyw77y0vd53sqmryce"]
```

#### Generate a pre-genesis validator account

<Callout type='info'>
This step will require the `balances.toml` file to have been published by the network coordinator.
</Callout>

Once the pre-genesis network participants have generated respective pre-genesis established accounts, they can generate their pre-genesis validator accounts. This can be done through the namada cli:

```bash
# Ensure $BASE_DIR is set to the base directory
# Ensure $ESTABLISHED_ACCOUNT_ADDRESS is set
# Ensure $TX_FILE_PATH is set

EMAIL="<your-email>"
SELF_BOND_AMOUNT=1000000 # Set this to the amount of NAM you want to self-bond
VALIDATOR_ALIAS="<your-validator-alias>"
namadac utils init-genesis-validator \
--address $ESTABLISHED_ACCOUNT_ADDRESS \
--alias $VALIDATOR_ALIAS \
--net-address "127.0.0.1:26656" \
--commission-rate 0.05 \
--max-commission-rate-change 0.01 \
--self-bond-amount $SELF_BOND_AMOUNT \
--email $EMAIL \
--path $TX_FILE_PATH
```

<Callout type="info">

The `SELF_BOND_AMOUNT` must be less than or equal to the amount of NAM allocated to the pre-genesis keys in the `balances.toml` that was published by the network coordinator. It will correspond to the self-bonded stake of the validator account at genesis.

The `--net-address` specifies the network address of the validator node given by "IP:PORT". It is also possible to use DNS names instead of IP:PORT addresses.

The `--alias` flag is the moniker name of the validator account.

The `--commission-rate` and `--max-commision-rate` flags are the commission rate and the maximum permitted commission rate change of the validator account per epoch. See the validator docsfor more info.

The `--email` flag is the email address of the validator account. This is used for the validator account to receive notifications from the network coordinator and other participants.

The `--address` flag is the Namada address of the account.

The `--path` flag is the path to the `transactions.toml` file that will be appended to, and requires the established account to already be initialised under.

</Callout>

The above command will append the necessary transactions to the `transactions.toml` file. The `transactions.toml` file should look something like this:

Successful execution will output the new validator address:

```text
Validator account address: tnam1q8lsztqqhpjxdwzw88mqqc2mun7dvpxvas3v2dxk
```

### Signing transactions

Once the `transactions.toml` file has been generated, the pre-genesis network participants must sign the transactions. This can be done through the namada cli:

```bash
namadac utils sign-genesis-txs \
--path $TX_FILE_PATH \
--output $BASE_DIR/pre-genesis/signed-transactions.toml \
--alias $VALIDATOR_ALIAS # This is only necessary if a validator account was generated, otherwise leave out the flag entirely
```

The above command will output a `signed-transactions.toml` file that contains the signed transactions.


### Submitting transactions

Once all pre-genesis transactions have been generated and signed, the pre-genesis network participants must submit their transactions to the network coordinator in due time. The deadline will be set by the network coordinator. This will involve simply submitting the `signed-transactions.toml` file to the network coordinator at the agreed upon location.

By convention, a directory for each pre-genesis network participant is created in the git repository. The `signed-transactions.toml` file is then submitted to the respective directory.

</Steps>
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import Expandable from "../../components/Expandable";
import Expandable from "../../../components/Expandable";

# Spinning up a local network

## Prerequisites

Namada must be installed [from source](../introduction/install/source.mdx) in order to run a local network.
Namada must be installed [from source](../../introduction/install/source.mdx) in order to run a local network.

There is a script that has been written specifically for this purpose, which can be found under `MakeFile` in the root directory.

Expand Down
4 changes: 2 additions & 2 deletions packages/docs/pages/operators/validators.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ In addition, the validator node must meet the [minimum hardware requirements](./

#### Steps

See these steps for [setting up a genesis validator](./validators/genesis-validator-setup.mdx).
See these steps for [setting up a genesis validator](./validators/validator-setup.mdx).

See these steps for [setting up a post-genesis validator](./validators/post-genesis-validator-setup.mdx).
See these steps for [setting up a post-genesis validator](./validators/validator-setup.mdx).
Loading

0 comments on commit 03b9d0a

Please sign in to comment.