Submitting Eth Deposit Data
A primary task for an aspiring eth 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 eth account’s validator’s key, the deposit value (32 ETH min), and the eth account’s withdrawal credentials.
How the deposit data is generated depends on how a user sets up their eth 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/ethereal@latest
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 eth 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: