Staking Guide

Simplifying Non-Custodial Staking

Staking ETH using the Batch Contract

The ETH Staking contract currently supports only one deposit transaction at a time. Clients looking to stake large amounts of ETH would have to make many transactions in multiples of 32 ETH (e.g., Staking 3200 ETH would require 100 transactions of 32 ETH deposits to be made individually) This can be simplified by using a Batch contract which can club 100 deposits (3200 ETH) into a single transaction for the user.

Use Luganodes’ Node Provisioning APIs to stake ETH. The steps are as follows:

  1. Sign up using the Signup API with your organisation details to receive your API key.

  2. Initiate the provision of nodes by calling the Provision Request API with batch parameter as true. The API triggers the creation of nodes by Luganodes in the background. Allow some time (~4 mins for 100 validators) for the creation of deposit details required for transaction signing before calling the next API

  3. Retrieve the unsigned transaction object depositInput, by calling the Get Validator Objects API. Use depositInput as transaction data to execute the deposit transaction on the Batch Contract address mentioned below

Batch Contract Address (Holesky)

0x0F583DB70ebb99C8E7A3d23d500CcaE68c604D79

Batch Contract Address (Mainnet)

0x0F583DB70ebb99C8E7A3d23d500CcaE68c604D79

The batch contract used is a forked version of Stakefish's contract that has been audited by Runtime Verification Inc.

  1. Post deposit, allow approximately 15-24 hours for the protocol to verify details and queue your validators for activation (the activation time itself will depend on the number of validators awaiting activation in the network)

  2. Use the Get User Validator and Provision ID API to check your validators’ status at any point in this process.

Refer to the sequence diagram below for a detailed guide on batch contract staking:

Staking ETH without the Batch Contract

Clients can stake their ETH without using the batch contract and directly interacting with the Beacon deposit contract

Use Luganodes’ Node Provisioning APIs to stake ETH. The steps are as follows:

  1. Sign up using the Signup API with your organisation details to receive your API key.

  2. Initiate the provision of nodes by calling the Provision Request API with batch parameter as false. The API triggers the creation of nodes by Luganodes in the background. Allow some time (~4 mins for 100 validators) to create the deposit details required for transaction signing before calling the next API.

  3. Retrieve unsigned transaction objects, specifically depositInput in the result array by calling the Get Validator Objects API. Use depositInput as transaction data to execute the deposit transaction on the Beacon deposit contract mentioned below. Each transaction should be made individually based on the number of validators being set up (e.g., Setting up 100 validators would require 100 transactions to be signed).

Beacon Deposit Contract (Mainnet)

0x00000000219ab540356cBB839Cbe05303d7705Fa

Beacon Deposit Contract (Holesky)

0x4242424242424242424242424242424242424242

  1. Post deposit, allow approximately 15-24 hours for the protocol to verify details and queue your validators for activation (the activation time will depend on the number of validators awaiting activation in the network).

  2. Use the Get Validator and Provision ID API to check your validators’ status at any point in this process.

Refer to the sequence diagram below for a detailed guide on non-batched contract staking:

Users can get the raw deposit data using the Get Deposit Details API. They can use this data to initiate a deposit transaction on the Beacon deposit contract. The steps are as follows

  1. Sign up using the Signup API with your organisation details to receive your API key.

  2. Initiate the provision of nodes by calling the Provision Request API with batch=false (batch will have to be false here as deposit data will have to be shared separately for individual validators). The API triggers the creation of nodes by Luganodes in the background. Allow some time (~4 mins for 100 validators) for the creation of deposit details required for transaction signing before calling the next API

  3. Call the Deposit Details API to generate the raw deposit data which would include the following: signature, deposit message root, deposit data root, fork version. These would be essential to generate the input required for the deposit transaction.

  4. Post deposit, allow approximately 15-24 hours for the protocol to verify details and queue your validators for activation (the activation time itself will depend on the number of validators awaiting activation in the network)

  5. Use the Get Validator and Provision ID API to check your validators’ status at any point in this process.

Exiting an Ethereum Validator

  1. A signed challenge must be created that contains the validators' information signed by the withdrawal key or the controller key. The script to generate this signed challenge can be found here.

  2. Call the Exit API with a signed challenge to initiate the validator exit. Refer to the Exit API documentation.

  3. After exiting, use the Get Validator and Provision ID API to check the status of your validators

Last updated