GuidesAPI Reference
DocumentationLog In

Submitting deposit data

A primary task for an aspiring eth2 validator is to submit a transaction containing deposit data to the deposit contract on the eth1 network (currently Goerli). This deposit data is generated against the eth2 account’s validator’s key, the deposit value (32 ETH min), and the eth2 account’s withdrawal credentials.

How the deposit data is generated depends on how a user sets up their eth2 Validator.

Guidance for Pioneer Program

Summary

  • For programmatic deposits, use the ethereal utility
  • Raw deposit data may be submitted through MetaMask
  • For GUI-driven deposits, use mycrypto.com or similar front-ends that allow contract interaction
  • Deposits can be made from any eth1 account

Details

The data currently returned from our allocation endpoints is in the following form for each allocation.

{
  "depositData": {
    "formatted": {
      "pubkey": "0xa62c83ef873cc08c4d38ce2d0dd1959205133fc63357e23bbbcc66d62e4e10ae27a137b9fc06bcf804fa11825c64dda0",
      "withdrawal_credentials": "0x004ecc5fb99d95036129aec068d2de2129008237d966a0e682791850eca3cf17",
      "signature": "0xb6bc2b4fc389c067798868d780fb3e5a4d5b5d0ed18f63e0863d1b7d0a07eb44c9957096e5967b1f8bcba5a7094d3aa5121167b73079a0ea09540cc2e4f90f1dda83b54e6e4f35edcd7daa15854ce477d68429b50ef1287239379112dc10e098",
      "value": 32000000000,
      "deposit_data_root": "0x10a977949fb4867af508109a9e9c2fbf4ceb8e06c811673aeef4190f26135497",
      "version": 2
    },
    "raw": "0x22895118000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012010a977949fb4867af508109a9e9c2fbf4ceb8e06c811673aeef4190f261354970000000000000000000000000000000000000000000000000000000000000030a62c83ef873cc08c4d38ce2d0dd1959205133fc63357e23bbbcc66d62e4e10ae27a137b9fc06bcf804fa11825c64dda0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020004ecc5fb99d95036129aec068d2de2129008237d966a0e682791850eca3cf170000000000000000000000000000000000000000000000000000000000000060b6bc2b4fc389c067798868d780fb3e5a4d5b5d0ed18f63e0863d1b7d0a07eb44c9957096e5967b1f8bcba5a7094d3aa5121167b73079a0ea09540cc2e4f90f1dda83b54e6e4f35edcd7daa15854ce477d68429b50ef1287239379112dc10e098"
  },
  "message": "successfully imported account",
  "pubkey": "a62c83ef873cc08c4d38ce2d0dd1959205133fc63357e23bbbcc66d62e4e10ae27a137b9fc06bcf804fa11825c64dda0"
}

In the depositData key, the actual deposit data needed to activate your validator comes in two forms: formatted and raw.

The formatted data has keys which correspond directly to the DepositContract. The JSON value at the formatted key can be used directly with the ethereal command line tool, or values can be extracted and used with any interface that supports interacting with contracts.

The raw key contains deposit data in a form that can be used to programmatically generate a transaction which will need to be signed and submitted to the DepositContract address.

Working with Raw Deposit Data

Depositing Raw Data with MetaMask

The value at the raw key can be used to send the 32 ether deposit to the DepositContract with MetaMask. This method appears to be the most straightforward option.

If you do not have Hex Data enabled in MetaMask, go to Settings > Advanced > Show Hex Data to turn on sending Hex Data when sending a transaction. This is where you will submit the raw data.

Because the process of submitting the raw deposit data is simply sending it to the DepositContract address as a data payload with a value of 32 ETH, you can also use any programmatic tooling that supports Ethereum transactions such as web3.js, ethers.js, or geth.

Working with Formatted Deposit Data

Command Line Deposits

The ethereal utility provides a simple way to take the formatted JSON value and submit a transaction using either a local node or remote QT node. You must have Golang installed to use it.
What follows is a summary of usage.

GO111MODULE=on go get github.com/wealdtech/[email protected]

Extract the value at the formatted key. Here it has been saved to a file for clarity, but you may also get the value directly from the response.

#!/usr/bin/env bash

DEPOSITDATA=$(cat ./deposit-data-formatted.json)

ethereal beacon deposit \
      --network=goerli \
      --data="$DEPOSITDATA" \
      --privatekey=$PRIVKEY \
      --from=$FROM \
      --value="32 Ether"

You may also use passphrase instead of the private key if you are accessing an account accessible on a local node. For more options, see ethereal beacon deposit --help

GUI-driven Contract Interaction

My Ether Wallet (MEW) and mycrypto.com, among others, provide a browser-based GUI to interact with contracts. To use these tools, first identify the address of the DepositContract for the eth2 target network. Take care that the contract address is one that is deployed on the Goerli eth1 network. Extract the values from the JSON for keys matching the contract method calls. The value to send is 32 ether or 32000000000000000000 wei excluding gas.

Here is an example with mycrypto.com: