# Validator Onboarding

**Contents**

[#syncing-node](#syncing-node "mention")\
[#create-validator-transaction](#create-validator-transaction "mention")\
[#seda-key-file-without-encryption](#seda-key-file-without-encryption "mention")

### Syncing Node

{% hint style="info" %}
If you use Horcrux signing service, make sure to use v3.3.0 or greater since several validators have reported unstable signing with an older version.
{% endhint %}

{% hint style="info" %}
We advise you to close the RPC ports if you are running a validator node.
{% endhint %}

In order to create your validator, first make sure your node fully synced to the latest block height of the network.

You can check by using the following command:

```
curl -s localhost:26657/status | jq .result | jq .sync_info
```

In the output of the above command make sure catching\_up is false

```
“catching_up”: false
```

### Create-Validator Transaction

Create a `validator.json` file and fill in the parameters of the create-validator transaction:

```
{
    "pubkey": $(sedad tendermint show-validator),
    "amount": "1000000000000000000000000000000000aseda", 
    "moniker": "the moniker for your validator",
    "identity": "optional identity signature (ex. UPort or Keybase) This key will be used by block explorers to identify the validator.",
    "website": "validator's (optional) website",
    "security": "validator's (optional) security contact email",
    "details": "validator's (optional) details",
    "commission-rate": "0.1",
    "commission-max-rate": "0.2",
    "commission-max-change-rate": "0.01",
    "min-self-delegation": "1" 
}
```

Starting with `v1.0.0`, SEDA Chain requires validators to generate SEDA Keys and register their public keys to perform signing duties beyond consensus signing. SEDA Keys currently consist of a single secp256k1 key used to sign batches.

The create-validator transaction will automatically generate SEDA Keys, save the key file, and register the public keys. Before executing the transaction, check the relevant app configurations and modify them in `app.toml` as necessary.

```
sedad config get app seda.enable-seda-signer 
sedad config get app seda.allow-unencrypted-seda-keys
sedad config get app seda.seda-key-file # path to key file from node directory

# You must enable SEDA signer.
sedad config set app seda.enable-seda-signer true
# We recommend that you encrypt your SEDA key file.
sedad config set app seda.allow-unencrypted-seda-keys false
```

We recommend that you fully set up the node(s) for validation with SEDA key signer before sending the create-validator transaction. To accomplish this, run the create-validator transaction with the `--generate-only` flag to generate a SEDA key file without actually sending a transaction.

```
sedad tx staking create-validator validator.json \
    --from <wallet-name> --chain-id <chain-id> \
    --gas auto --gas-prices 10000000000aseda --gas-adjustment 2.0 \
    --generate-only
```

Take note of the encryption key for the SEDA key file. This encryption key should be set as an environment variable `SEDA_KEYS_ENCRYPTION_KEY` in the node environment. In a basic setup, this means stopping the node, executing the export command, and re-starting the node so that the environment variable gets picked up by the node.

```
export SEDA_KEYS_ENCRYPTION_KEY=ajfUfrdnrFRkej9OXTDb1IMdrIWkDN3P7CWKz5It20I=+g9ZQ=
sedad start
```

If you are using systemctl to run the node, add the environment variable by editing the service file, reload the daemon, then restart the node service.&#x20;

If the signer has been set up correctly, the following message should appear in the log:

```
3:34PM INF successfully loaded SEDA signer module=server
```

{% hint style="warning" %}
Since the SEDA key file is used by the SEDA signer at the application layer of the chain, if you're using Horcrux, you must copy the SEDA key file to all your sentry nodes. Make sure that the signer is correctly loaded by checking the success log message on each sentry node.
{% endhint %}

Once your validation setup is ready, send a create-validator transaction with the `--key-file` flag pointing to the SEDA key file and the `--key-file-custom-encryption-key` flag. The latter flag will prompt you to enter the encryption key.

```
sedad tx staking create-validator validator.json \
    --from <wallet-name> --chain-id <chain-id> \
    --gas auto --gas-prices 10000000000aseda --gas-adjustment 2.0 \
    --key-file ~/.sedad/config/seda_keys.json \
    --key-file-custom-encryption-key
```

You can find your validator operator address using the following command, which you can advertise to receive delegations:

```
sedad keys show <wallet-name> --bech val -a
```

### SEDA Key File Without Encryption

Although we advise against this approach, you may generate and use the SEDA key file without encryption.

First, change the `allow-unencrypted-seda-keys` configuration under the `[seda]` section of the `app.toml` file to `true`. Alternatively, run the following command:

```
sedad config set app seda.allow-unencrypted-seda-keys true
```

Then, run the create-validator transaction with the `--key-file-no-encryption` flag.

```
sedad tx staking create-validator validator.json \
    --from <wallet-name> --chain-id <chain-id> \
    --gas auto --gas-prices 10000000000aseda --gas-adjustment 2.0 \
    --key-file-no-encryption
```
