Add Validator
Theory walkthrough of adding a validator with ValidatorManager
Adding a Validator
We’re adding a validator in a PoA setup where the ValidatorManager contract is owned by your connected wallet and deployed on your L1. The process has two L1 calls with a P-Chain registration in between.
Phase 1: Initiation (L1)
First we will call initiateValidatorRegistration(nodeID, blsPublicKey, remainingBalanceOwner, disableOwner, weight) on ValidatorManager.
Under the hood, the contract:
- Validates sizes and formats (20-byte
nodeID, 48-byteblsPublicKey, owners, churn limits) - Builds a
RegisterL1ValidatorMessagewith a bounded expiry - Computes a unique
validationID - Stores pending state mapping
nodeID → validationID - Interacts with ICOM to create a warp message that can be submitted to the P-Chain
Phase 2: P-Chain Processing
We then will sign and submit the RegisterL1ValidatorMessage warped response we got from the last step to the P-Chain, this executes a RegisterL1ValidatorTx, and upon success signs and returns an L1ValidatorRegistrationMessage warped response.
The P-Chain processes the following message structure:
Phase 3: Completion (L1)
We finally will call the completeValidatorRegistration(messageIndex), where we will pass the message index of the response we received in step 2. The contract verifies it, activates the validator, sets the start time, and emits CompletedValidatorRegistration.
Anyone can call completeValidatorRegistration(messageIndex) with the signed message.
Appendix: Adding Validator Flow
Is this guide helpful?


