Create your validator
/become-validator/ registers a new validator on the chain. It is one transaction, and several of the things you type into it can never be changed afterwards, so it is worth filling in slowly.
Run a validator covers what the job actually is. This page covers the form.
Before you open it
The page lists four requirements, and all four are hard.
- A running node. Synced, with its consensus address, vote address and BLS proof to hand. The form registers a node; it does not set one up.
- Self-delegation. At least the minimum the page shows, from your own wallet, plus enough left over for fees.
- A one-time burn. 3,500 L2P is destroyed when the validator is created, on top of your self-delegation. It does not go to anyone and it never comes back.
- Permanent settings. Your maximum commission rate and maximum change rate are fixed at creation, for the life of the validator.
Your wallet has to be connected. If its balance is below the minimum the page says so before you type anything.
Basic information
| Field | Rules |
|---|---|
| Validator Name | 3 to 9 characters, starts with a capital, letters and digits only. Must not already be taken |
| Website URL | Optional, and has to be a real URL if you fill it in |
| Description | Optional. It is stored on-chain, so every extra sentence costs gas. Keep it short |
The name is checked against the existing set while you type, and the form says so if it is in use.
Addresses
Three values, all produced on the machine your validator runs on. Getting them wrong is the most common reason a registration fails.
| Field | Format | Where it comes from |
|---|---|---|
| Consensus Address | 0x and 40 hex characters |
The account your node signs blocks with |
| Vote Address | 0x and 96 hex characters |
Your node's BLS public key |
| BLS Proof | 0x and 192 hex characters |
A signature proving you own that BLS key |
The consensus address is an ordinary account, created the same way as any other. The other two need a few commands, and they are worth doing slowly.
Making the vote address and the BLS proof, step by step
Blocks are not only produced, they are also voted on, and votes are signed with a different kind of key than ordinary transactions. That key is a BLS key. Its public half is what the chain calls your vote address, and because anyone could type in somebody else's public key, the chain also wants proof that you hold the private half. That proof is the BLS proof.
You make both with geth, the same program your node runs. Do this on the node itself, and give yourself ten quiet minutes.
1. Get the two things you need first
Your wallet address. The address you will connect to this site when you press Submit. Not the consensus address, and not an address belonging to anyone else. The chain ties the proof to this exact address, so if you generate the proof for one address and create the validator from another, the chain rejects it.
The chain id, which is 12216 for L2 Protocol.
2. Put your password in a file
The commands read the password from a file rather than from the screen. Pick a strong one and write it into a file:
echo 'your-strong-password-here' > bls-password.txt
This password protects the key that signs on behalf of your validator. Keep the file readable only by you, back the password up somewhere safe, and do not reuse a password from anywhere else.
3. Create the BLS account
geth bls account new --blspassword ./bls-password.txt --datadir ./node-data
Point --datadir at your node's data directory. The first time, this also creates a BLS wallet inside it, at node-data/bls/wallet. When it finishes it says the account was created.
4. Read out your vote address
geth bls account list --blspassword ./bls-password.txt --datadir ./node-data
It prints something like:
[BLS public key] 0x8a7c...ff21
That public key is your vote address. Copy the whole thing.
Paste it exactly as printed, 0x and all. The field expects 0x followed by 96 hex characters, which is 98 in total.
5. Generate the proof
Now sign a statement that ties your BLS key to your wallet address on this chain. Use the wallet address from step 1 and the public key from step 4, in that order:
geth bls account generate-proof \
--blspassword ./bls-password.txt \
--datadir ./node-data \
--chain-id 12216 \
0xYourWalletAddress \
0x8a7cYourBlsPublicKey
It prints one line:
Proof: 0x91b2...c40d
Everything after Proof: is your BLS proof, 0x included this time. Copy it exactly as printed.
6. Fill in the form
| Field | What to paste |
|---|---|
| Vote Address | The public key from step 4, exactly as printed |
| BLS Proof | The proof from step 5, exactly as printed |
The site checks the proof against the chain while you type, so you find out immediately rather than after paying for a failed transaction.
If it says the proof failed
Work down this list before regenerating anything.
Wrong address in step 5. The proof has to be made for the wallet you will connect here. This is by far the most common cause.
Wrong chain id. It has to be 12216. A proof made for another chain is a valid signature over the wrong statement.
Something was retyped instead of pasted. Both fields keep the 0x exactly as the commands print it.
Something was pasted incompletely. After the 0x, the vote address is 96 characters and the proof is 192. A copy that came through a chat window is worth redoing.
A different key. If you have created more than one BLS account, the list command shows them all, and the proof must be generated for the same key you are submitting.
If all five check out and it still refuses, ask in the community channels before you regenerate keys. Nothing is lost by asking, and a new key means redoing the whole procedure.
Look after the key
The BLS keystore in your data directory, and the password that unlocks it, are what let your validator vote. Back both up, keep the backup offline, and do not put either in a shared repository or a chat message. Losing them means your validator cannot vote; leaking them means somebody else can vote in its name, which is the kind of thing that gets a validator slashed.
Commission
Three percentages, each between 0.01 and 50, with at most two decimals.
Rate is what you charge your delegators today. You can change it later, within the two limits below.
Max Rate is the ceiling you are allowing yourself, forever. It cannot be lowered later and it cannot be raised later. Delegators read it as the worst case, so a modest number is a selling point.
Max Change Rate is the most you may raise the rate in one step. Also permanent. It is what tells a delegator they will not wake up to a commission that tripled overnight.
Pick these two the way you would sign a contract, because that is what they are.
Self delegation
The amount of your own L2P you are bonding to your own validator. It has to be at least the minimum shown, and it has to leave room in your balance for the transaction fee. The form checks both and says which one failed.
Self-delegation is not a formality. It is the stake that gets cut first when your validator is slashed, and delegators look at it to see how much you have riding on your own behaviour.
The warning under the field is the burn: the chain destroys a fixed amount at creation, on top of what you are bonding. Read the figure off the form, and budget for it separately from the minimum.
Submitting
Submit sends one transaction to the staking contract carrying your addresses, your BLS proof, the three commission rates, your name and description, with the self-delegation attached as its value. Your wallet asks you to approve it.
When it goes through your validator appears in the list on the front page, and its own profile page exists from that moment. It starts Inactive: being registered is not the same as being elected. You join the set when your total stake puts you in the top validators, and the cap on that is the Elected validators figure on the front page.
If you get stuck
Registering a validator is the longest form on any of our sites, and the keys behind it are unforgiving. If a step does not do what this page says it should, stop and open a ticket at support.l2protocol.com rather than regenerating keys and hoping. Include what you ran and what it printed, minus anything secret, and see Open a ticket for what makes that quick to answer.