Prerequisites
- Monad version >=
0.12.x. id-secpandid-blskeys of the validator.node.tomlconfiguration file of the validator.KEYSTORE_PASSWORDvalue from the.envfile.
Instructions
- Follow the full node instructions to sync a full node to the tip of the network.
-
Backup existing configuration files on the full node from
/home/monad/monad-bft/configand move them to/opt/monad/backup./home/monad/monad-bft/config/node.toml/home/monad/monad-bft/config/id-secp/home/monad/monad-bft/config/id-bls
-
Copy
id-secp,id-blsandnode.tomlfrom the validator to the full node. -
From the full node, run the
monad-sign-name-recordutility to generate a name-record signature for the new IP address.
- From the full node, replace the
[peer_discovery]block innode.tomlwith the output of the above command (3 lines).
- The
self_record_seq_numis incremented each time the node undergoes a migration process. - This value is crucial as it is directly linked to the
self_name_record_sig, ensuring consistency and integrity of the node’s identity during transitions.
-
If the original validator had (other) custom configuration related to dedicated full nodes, e.g.
[[fullnode_dedicated.identities]], those will need to be added to the full node’snode.toml. To maintain connectivity with downstream nodes all downstream peers must update the name record for the validator in theirnode.tomlconfiguration. -
Ensure
enable_publisher = true,enable_client = trueandexpand_to_group = true. Inexpand_to_group = truemode, full nodes support relies on secondary raptorcast peers specified in the full node’snode.toml -
Double-check and ensure if the
beneficiary =values are copied from the validator’snode.tomlto full node’snode.toml. -
From the validator node, run
systemctlcommands to stop the services.
- Verify the validator services are stopped.
- Stop the full node services and restart the services as a validator.
- Verify the systemd services are running:
Restoring the original validator
If you would like to restore the original validator (A) to its original role, you will need to perform one of two procedures:- Re-sync A - this will result in some downtime based on the time to statesync / blocksync
- Copy the
node.tomlfrom node B to node A - From A, run
monad-sign-name-recordusing node B’snode.tomlwith incrementedself_record_seq_num - Update the corresponding two fields in
node.toml - From the temporary validator (B), stop the services.
- Soft or hard reset (A)
- Copy the
- Run A as a full node, then perform steps above
- For A, generate new keys
- Sign a new name record (see instructions above) and setup as a dedicated node to a validator, e.g. your temporary validator (B)
- Perform the steps above with roles reversed.

