You can interact with the batchDeposit function of the contract to deposit multiple validator keys deposit data, with the multiple of 32 ETH as transaction value.
We recommend you use it to send N deposit data with N * 32 ETH where N < 150.[^1]
> send N deposit data with N * 32 ETH where N < 150
>Warning
> Batch sizes should therefore not exceed 4_800 ETH (150 Validators)
>Note
> Gas costs for batch deposit of 100 is Gas: 3049083
Submit deposit
In Phase 0, all incoming validator deposits originate from the Ethereum proof-of-work chain defined by DEPOSIT_CHAIN_ID and DEPOSIT_NETWORK_ID. Deposits are made to the deposit contract located at DEPOSIT_CONTRACT_ADDRESS.
Let amount be the amount in Gwei to be deposited by the validator where amount >= MIN_DEPOSIT_AMOUNT.
Set deposit_data.pubkey to validator's pubkey.
Set deposit_data.withdrawal_credentials to withdrawal_credentials.
Set deposit_data.amount to amount.
Let deposit_message be a DepositMessage with all the DepositData contents except the signature.
Let signature be the result of bls.Sign of the compute_signing_root(deposit_message, domain) with domain=compute_domain(DOMAIN_DEPOSIT). (Warning: Deposits must be signed with GENESIS_FORK_VERSION, calling compute_domain without a second argument defaults to the correct version).
Let deposit_data_root be hash_tree_root(deposit_data).
Send a transaction on the Ethereum proof-of-work chain to DEPOSIT_CONTRACT_ADDRESS executing def deposit(pubkey: bytes[48], withdrawal_credentials: bytes[32], signature: bytes[96], deposit_data_root: bytes32) along with a deposit of amount Gwei.
Note: Deposits made for the same pubkey are treated as for the same validator. A singular Validator will be added to state.validators with each additional deposit amount added to the validator's balance. A validator can only be activated when total deposits for the validator pubkey meet or exceed MAX_EFFECTIVE_BALANCE.
Process deposit
Deposits cannot be processed into the beacon chain until the proof-of-work block in which they were deposited or any of its descendants is added to the beacon chain state.eth1_data. This takes a minimum of ETH1_FOLLOW_DISTANCE Eth1 blocks (~8 hours) plus EPOCHS_PER_ETH1_VOTING_PERIOD epochs (~6.8 hours). Once the requisite proof-of-work block data is added, the deposit will normally be added to a beacon chain block and processed into the state.validators within an epoch or two. The validator is then in a queue to be activated.
We can coordinate at 14:30 UTC/GMT+8 Taipei Standard Time That is 8:30 AM CEST UTC+02 (Central European Time)
Depositing
In the event log you can see the data of
DepositEvents
withwithdrawal_credentials
being where withdrawals will be sent to.https://etherscan.io/address/0x617c8dE5BdE54ffbb8d92716CC947858cA38f582|0x617c8dE5BdE54ffbb8d92716CC947858cA38f582 https://etherscan.io/address/0x617c8dE5BdE54ffbb8d92716CC947858cA38f582
https://app.safe.global/home?safe=eth:0x617c8dE5BdE54ffbb8d92716CC947858cA38f582
Signers (4/6) eth:
0xC66C8aa97065f327fe94B6c845ACd7E5aA6f6117
eth:0x285b7EEa81a5B66B62e7276a24c1e0F83F7409c1
eth:0xCe883e3531de09968853e2C56E705CfF9E113364
eth:0x13aB2941254ae3c22DFa6E6a83A3ff8C090dD6bD
eth:0xc163A9a7615e4d3Bde785328168b75879bE65047
eth:0xA0766B65A4f7B1da79a1AF79aC695456eFa28644
Batch Deposit
You can interact with the batchDeposit function of the contract to deposit multiple validator keys deposit data, with the multiple of 32 ETH as transaction value. We recommend you use it to send N deposit data with N * 32 ETH where N < 150.[^1]
> send N deposit data with N * 32 ETH where N < 150
>Warning > Batch sizes should therefore not exceed 4_800 ETH (150 Validators)
>Note > Gas costs for batch deposit of 100 is Gas: 3049083
Submit deposit
In Phase 0, all incoming validator deposits originate from the Ethereum proof-of-work chain defined by
DEPOSIT_CHAIN_ID
andDEPOSIT_NETWORK_ID
. Deposits are made to the deposit contract located atDEPOSIT_CONTRACT_ADDRESS
.To submit a deposit:
deposit_data
, aDepositData
SSZ object.amount
be the amount in Gwei to be deposited by the validator whereamount >= MIN_DEPOSIT_AMOUNT
.deposit_data.pubkey
to validator'spubkey
.deposit_data.withdrawal_credentials
towithdrawal_credentials
.deposit_data.amount
toamount
.deposit_message
be aDepositMessage
with all theDepositData
contents except thesignature
.signature
be the result ofbls.Sign
of thecompute_signing_root(deposit_message, domain)
withdomain=compute_domain(DOMAIN_DEPOSIT)
. (Warning: Deposits must be signed withGENESIS_FORK_VERSION
, callingcompute_domain
without a second argument defaults to the correct version).deposit_data_root
behash_tree_root(deposit_data)
.DEPOSIT_CONTRACT_ADDRESS
executingdef deposit(pubkey: bytes[48], withdrawal_credentials: bytes[32], signature: bytes[96], deposit_data_root: bytes32)
along with a deposit ofamount
Gwei.Note: Deposits made for the same
pubkey
are treated as for the same validator. A singularValidator
will be added tostate.validators
with each additional deposit amount added to the validator's balance. A validator can only be activated when total deposits for the validatorpubkey
meet or exceedMAX_EFFECTIVE_BALANCE
.Process deposit
Deposits cannot be processed into the beacon chain until the proof-of-work block in which they were deposited or any of its descendants is added to the beacon chain
state.eth1_data
. This takes a minimum ofETH1_FOLLOW_DISTANCE
Eth1 blocks (~8 hours) plusEPOCHS_PER_ETH1_VOTING_PERIOD
epochs (~6.8 hours). Once the requisite proof-of-work block data is added, the deposit will normally be added to a beacon chain block and processed into thestate.validators
within an epoch or two. The validator is then in a queue to be activated.https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/deposit-contract.md#withdrawal-credentials
DEPOSIT_CONTRACT_ADDRESS:
0x00000000219ab540356cBB839Cbe05303d7705Fa
https://github.com/ethereum/consensus-specs/blob/f1aabcd718eba26f83210b2545c9bfaa6531ea15/configs/mainnet.yaml#L99
Slack Message