Staking ETH

In order to stake ETH with Bloq, follow the steps in this guide.
Staking in Ethereum requires infrastructure, Ether, and carefully following some steps to become a validator and start earning Ether.
While provides a step by step guide on how to become a validator, the Bloq platform makes it simpler by providing the infrastructure needed and an API to allow the users easily create validators and start staking.
There are two staking flows (of which only 1 has to be followed):
  • Option 1: Using an Ethereum 1.0 withdrawal address.
  • Option 2: Using a mnemonic and Ethereum 2.0 addresses.


  • A minimum balance of 32 ETH in the PoS Ethereum chain per validator to create.
  • To use the Bloq API, an Ethereum PoW account is required for authentication purposes. Visit to authenticate your account.

Option 1: Using an Ethereum 1.0 withdrawal address

Prepare for creating a validator

Before starting, ensure you have control on 3 Ethereum 1.0 addresses:
  1. 1.
    A funding address with at least 32 ETH plus an extra amount to pay for transaction fees.
  2. 2.
    A withdrawal address to receive the 32 ETH back (when withdrawals are enabled).
  3. 3.
    A fee address to collect the transaction fees (when this is enabled after the merge).
Be very careful when selecting and inputting the withdrawal address. The withdrawal address cannot be changed later and losing access to the withdrawal keys will result in loss of access to tokens.

Create a validator

To create a validator using the addresses previously defined, call the BloqStake API with the authentication token (created using the steps outlined in, the withdrawal address, and the fee address.
curl -X POST \
-H 'Authorization: Bearer <AUTH_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"withdrawalAddress": "<WITHDRAW_ADDRESS>",
"feeAddress": "<FEE_ADDRESS>"
The response to the call will include the data required to create the 32 ETH deposit transaction:
"balance": "0",
"chain": "mainnet",
"pubkey": "91adb75d3347747a2d143d204adaaa3eb6edaf136c3429ff796c6f825c956916f4494d433ec94615184ddc3abe8697b2",
"status": "pending",
"depositData": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012066c8e8eecc24c7c2fd0d1eabf608207069492414be53d3c8bc4c23c7e7d2459b000000000000000000000000000000000000000000000000000000000000003091adb75d3347747a2d143d204adaaa3eb6edaf136c3429ff796c6f825c956916f4494d433ec94615184ddc3abe8697b200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000f12bf2780ee9e15dff6ddedd3e0216e754a3d52f25bd9532fd71f78787d80e00000000000000000000000000000000000000000000000000000000000000608816e587d36f04837113260fcb8a71509e4db3b1459b1dff6d3bd9c91169458a6f34b2763d2b53071709eb01924bcf92061bd85fe022b698875f760e2573500816beb173d98c0dc27f133a60c423a5317c88183db5bcd3e04ea50add2dcf9888"

Initiate the deposit

With the depositData provided, create, sign and transmit the transaction to the Ethereum PoW network. Using web3.js, doing so will look like this:
to: '0x00000000219ab540356cbb839cbe05303d7705fa', // Ethereum Foundation Eth 2.0 deposit contract
data: '<DEPOSIT_DATA>',
value: '32000000000000000000'
Once the transaction is confirmed, the Beacon chain will process it and issue the 32 ETH in the PoS chain. Then the validator will start attesting new blocks.

Option 2: Using a mnemonic and Ethereum 2.0 addresses

Prepare the deposit

Go to the Deposit page on, skip the execution and consensus clients downloads and get the client:
  1. 1.
    Download the latest version of the staking-deposit-cli from their GitHub repository's releases page.
    If the platform is Linux-Intel, the command would be:
  2. 2.
    After the file is downloaded, verify the checksum matches the values published in GitHub:
    echo "936f3d127a8b88dfe2a5e9e947112cc29631f50ff4c011ce34625df27ca6a2ae staking_deposit-cli-ce8cbb6-linux-amd64.tar.gz" | shasum -a 256 --check
  3. 3.
    Once checked, extract the contents and rename the folder for convenience:
    tar -xvf staking_deposit-cli-ce8cbb6-linux-amd64.tar.gz
    rm staking_deposit-cli-ce8cbb6-linux-amd64.tar.gz
    mv staking_deposit-cli-ce8cbb6-linux-amd64 staking_deposit-cli
Then create the validator keys by following these steps:
  1. 1.
    Create a new mnemonic with the deposit tool:
    cd staking_deposit-cli
    ./deposit new-mnemonic --chain mainnet
    Modifier --chain mainnet is mandatory for mainnet, otherwise the deposit will be invalid.
    It is also possible to generate the validator keys from an existing mnemonic. Use this command, if:
    • the mnemonic was already generated with this CLI before,
    • an existing mnemonic that was generated elsewhere should be used instead, or
    • the keystore files were lost and need to be recovered/regenerated.
    ./deposit existing-mnemonic
  2. 2.
    Follow the prompts and pick a validator keystore password, this password encrypts the keystore files. Keep the mnemonic and validator keystore password safe (and offline). See these steps in Generate key pairs in (must skip previous steps in order to see this section).

Initiate the deposit

In the deposit page, confirm the checkbox 'I am keeping my key(s) safe and have written down my mnemonic phrase.' and proceed to the upload deposit data screen.
  1. 1.
    Upload the deposit_data-[timestamp].json found in the validator_keys directory.
  2. 2.
    Then, connect MetaMask to the site, review and accept terms and confirm the transactions (there's one deposit transaction of 32 ETH for each validator).
  3. 3.
    Once the transaction goes through, check the link and track the status of the deposit. It should be accepted in about 24 hours, and once accepted, will give information about the validator.

Create a new validator

The final step is to create a validator using the validator keystore and password previously created by calling the BloqStake API with the authentication token, the validator keystore contents, and validator keystore password.
curl -X POST \
-H 'Authorization: Bearer <AUTH_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"keystore": "<VALIDATOR-KEYSTORE>",
The response will include the pubkey of the validator and other status information. That key can be used to check the status in the website.