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:
- Generating their public and private keys
- Submitting their public keys and addresses to the network coordinator
- Generating their pre-genesis transactions
- Signing their pre-genesis transactions
- Submitting their pre-genesis transactions to the network coordinator
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:
ALIAS="<your-key-alias>"
namadaw --pre-genesis key gen --alias $ALIAS
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.
In order to print the keys, the user can run the following command:
# 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.
# 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:
[<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:
The $ALIAS
variable is the alias of the pre-genesis keys that were generated in the Generating keys step.
#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 --aliases $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.
Derived established account address: tnam1q8lsztqqhpjxdwzw88mqqc2mun7dvpxvas3v2dxk
It is useful to save this address for later use.
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:
[[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 --aliases
flags to the command:
# 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 --aliases $ALIAS1 --aliases $ALIAS2 --aliases $ALIAS3
The command will ouptut the generated address of the multisignature account.
Derived established account address: tnam1q8qvns6ndpff03wmszkhgepk2r8f9ws68ugktfml
The corresponding transactions.toml
file should look something like this:
[[established_account]]
vp = "vp_user"
threshold = 1
public_keys = ["tpknam1qr872zwdvw4u4nkpl0ykmvhyvxw7j0u6g7ymz03d7he0jr3szkuwczddjp2", "tpknam1qpz5n0u49s6s5jx4nyycyw0w288yfq96p3lvwxkedxyw77y0vd53sqmryce"]
Generate a pre-genesis validator account
This step will require the balances.toml
file to have been published by the network coordinator.
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:
# 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
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.
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:
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:
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.