Withdraw your validator
After the Agora Withdrawal upgrade (August 23, 2023, 01:05:53 AM (UTC)), you will be able to withdraw your staked BOA on validator nodes in two ways:
Partial (earnings) withdrawal: This option lets you withdraw your earnings (that is, all value staked above 40,000 BOA) and continue validating.
Full withdrawal: This option lets you liquidate your entire stake and earnings, effectively liquidating your validator node(s) and exiting the network.
In this how-to, you'll learn how to perform both types of withdrawals. Familiarity with Agora wallets, mnemonic phrases, and command lines is expected.
Prerequisites
Your validator mnemonic: You'll use this to authorize your validator withdrawal request(s).
Access to a beacon node: You'll need to connect your validator to a beacon node in order to submit your withdrawal request. Visit our quickstart for instructions if you need them.
The agora-chain installed: The agora-chain is agora nodes and tool provided by the Agora research team.
Time to focus: This is a time-consuming procedure making a mistake can be expensive. Be vigilant against scammers; never share your mnemonic; take your time; ping us on Telegram if you have any questions.
We'll install other dependencies as we go.
Option 1: Partial (earnings) withdrawals
This section walks you through the process of performing a partial validator withdrawal, allowing you to withdraw staked balances above 40,000 BOA for each of your active Agora validators.
Step 1: Prepare your withdrawal credentials
Retrieve your validator’s withdrawal_credentials from the deposit_data-XXX.json
file that was generated when you first used the staking launchpad. The withdrawal_credentials
value looks like this:
If you don't have the deposit_data-XXX.json
file, you can retrieve your withdrawal_credentials
by sending a request to your synced beacon node via Agora-cl API and providing your validator index or public key:
Your withdrawal credentials will be visible in the response to this request - look for withdrawal_credentials
.
Example output with placeholder values:
Step 2: run the agora-deposit-cli in an offline
environment with your mnemonic to generate the blstoexecutionchange
message(s)
offline
environment with your mnemonic to generate the blstoexecutionchange
message(s)In this step, you submit a signed request to the Agora network using the Agora-chain tool provided by the BOSagora project.
Agora-chain installation instructions
If you already have a node running or installed using Agora-chain, you can skip the instructions below.
Linux / Mac
Windows
CAUTION
We recommend doing this next step without an Internet connection to be maximally secure. Either turn off the internet before introducing your mnemonic for signing or migrate to an air-gapped environment to continue the following steps.
Now that the Agora-chain's deposit-cli tool is executable, you can then use it to generate your signed BLS to Execution request. You need to use your mnemonic for this step, so doing it offline is key and ensuring you do not paste your mnemonic anywhere else than necessary.
Here’s the command to get started with the process. This command will not submit your signed message to the network yet, and will only generate the data needed for the next steps.
'folder' is where the SignedBLSToExecutionChange data is stored. The default folder is ./bls_to_execution_changes
By calling the command above, you should go through an interactive process that will ask you for the following information:
Your language. You can see the different options available, where English is one of the options, among others.
The network you wish to perform this operation for. example:
mainnet
,testnet
ordevnet
.Enter your mnemonic next
Next, you will be asked for the starting index you used to create your validators (read more about hd wallets here). For most users, this will be 0 unless you created validators from a non default index.
INFO
Inside the original deposit.json
file used for staking you can count each validator's public key in sequential order starting from 0. The validator starting index is the index of the first validator key you would like to withdraw (i.e. validator key 1 has an index of 0, validator key 2 has an index of 1 etc.). For most stakers, the validator starting index should be set to 0 for withdrawing all their validator keys, however the validator starting index will be different if you choose to skip withdrawing some validators. There are other niche cases where the mnemonic is used for deposit generation multiple times, resulting in a different validator starting index. Validators spanning across different mnemonics will need to be counted separately with starting index as 0 on each of them.
You will then be asked the validator indices for the validators you wish to generate the message for. You can find your validator indices on block explorers such as https://www.agorascan.io/ or in your Agora-cl validator client logs. For example, the validator with public key
0x800b1496d4532bbf3404de63619b779bad95dba69396e5d5c4eb64c7aa4a9a1a77229ec8783ad114a14d2eda2a3483ca
on https://www.agorascan.io/ has validator index 20, which you can verify by navigating to its page.
INFO
Validator indices need to be provided sequentially without skipped indices in the order of original creation. You can typically find the order in your original deposit.json
file. The generate-bls-to-execution-change
command needs to be repeated in cases where multiple validator keys that are not in sequential order need to be withdrawn, and will require either merging of the output files or multiple blstoexecutionchange
submissions. In the case of validators requiring different withdrawal addresses you will need to also repeat this process using the validator start index of the validator that the different withdrawal address.
Next you will be asked for your withdrawal credentials, which you should now have if you followed this guide
Next you will be asked for the BOA address you wish to use to receive your withdrawn funds. This needs to be checksummed, and you can get it from your wallet or a block explorer. You cannot change this once it is set on-chain, so triple check it before proceeding.
Below is an example of running through the interactive process explained above:
Step 3: verify the blstoexecutionchange
message(s) that the corresponding validator will set to the chosen BOA address
blstoexecutionchange
message(s) that the corresponding validator will set to the chosen BOA addressOnce you complete the above, you’ll have a file contained in the bls_to_execution_changes/
folder of your agora-deposit-cli. It will represent a list of BLS to execution messages that have been signed with your private keys and are ready to submit to Agora. Here’s what a sample file of these looks like. Example output with placeholder values:
The above demonstrates two different validators withdrawing - one with validator index 838
, the other with validator index 20303
.
CAUTION
Make sure the validator_index
corresponds to the correct chosen to_execution_address
. Once this message is accepted on submission you will not be able to change it again!
Move the generated bls_to_execution_changes-*.json
file to an online environment that has access to a synced beacon node for the next step.
Step 4: submit your signed blstoexecutionchange
message(s) to the Agora network using Agora-chain
blstoexecutionchange
message(s) to the Agora network using Agora-chainThis step requires access to a synchronized Agora-cl node.
You can use the ./agora.sh validator withdraw
command, which will ask for terms of service acceptance and confirmation of command by providing additional flags, and also a path to the bls_to_execution_changes file from the previous step.
INFO
default Agora node REST <node-url>
is http://localhost:3500
aka http://127.0.0.1:3500
Open a terminal in the location where you installed the agora-chain. Some users will need to give permissions to be executable. Linux users can do this by right clicking the file, going to permissions, and clicking the Allow executing file as program
checkmark. This may be different for each operating system.
Linux / Mac
Windows
'folder' is where the SignedBLSToExecutionChange data is stored. The default folder is ./bls_to_execution_changes
This will extract data from the bls_to_execution_changes-*.json
call the Beacon API endpoint on the synced Beacon Node and validate if the request was included.
Step 5: Confirm submission
On successful submission, the SignedBLStoExecutionChange
messages are included in the pool waiting to be included in a block.
The withdrawal will be initiated by using the execution address you provided, and your validators’ withdrawal credentials will change to look something like this:
where the BOA address of your choosing will be found within.
Step 6: Confirm your withdrawal
You can track your withdrawal on an Agora Proof of Stake Block Scanner. Some examples listed below and will be based on network.
you can also confirm the withdrawal_credentials
updated by querying your local Agora-cl node.
and you should see a response that contains withdrawal credentials that should have changed to the 0x01
format which includes your BOSagora execution address.
Done: Receiving partial withdrawals after withdrawal_credentials
are updated is automatic, but will take time.
withdrawal_credentials
are updated is automatic, but will take time.Once your withdrawal_credentials
field on the validator is updated to the 0x01
prefix all withdrawal actions are complete. Withdrawals of earnings over 40,000 BOA will be automatically sent to the chosen BOSagora address when a block proposer includes your validator in its block. Note that a maximum of 16 validators can have their balances withdrawn per block so delay times may vary before seeing the values appear in the BOA address.
Option 2: Full withdrawals
To fully withdraw a validator and its earnings, your validator needs to also be exited in addition to having its withdrawal credentials changed.
Please follow our exiting-a-validator how-to.
Refer to the above option 1: partial withdrawal guidance to change your validator's withdrawal credentials.
CAUTION
Instructions for setting your withdrawal address do not need to be repeated if withdrawal_credentials are updated to the 0x01
prefix.
Done: Receiving full withdrawals after withdrawal_credentials
are updated and the validator is fully exited is automatic, but will take time.
withdrawal_credentials
are updated and the validator is fully exited is automatic, but will take time.Once the validator is both exited as well as having its withdrawal_credentials
changed to the 0x01
prefix, the validator will automatically have its full balance withdrawn into the chosen Agora BOA address when a block proposer includes your validator in its block. Note that a maximum of 16 validators can have their balances withdrawn per block so delay times may vary before seeing the values appear in the BOA address.
CAUTION
Slashed or involuntarily exited validators will still need to go through the process of updating withdrawal_credentials
to fully withdraw its remaining balance.
Last updated