Staking Guide
Simplifying Non-Custodial Staking
Last updated
Simplifying Non-Custodial Staking
Last updated
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:
Sign up using the Signup API with your organisation details to receive your API key.
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
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)
0x3570E6b2A89C7F407aE54b61c39a2aEb5D57Ce22
Batch Contract Address (Mainnet)
0x33c10a5518a881ABfe318758646bB8C7cE613704
The batch contract used is a forked version of Kiln's contract that has been audited by Runtime Verification Inc.
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)
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:
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:
Sign up using the Signup API with your organisation details to receive your API key.
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.
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
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).
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
Sign up using the Signup API with your organisation details to receive your API key.
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
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.
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)
Use the Get Validator and Provision ID API to check your validators’ status at any point in this process.
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.
Call the Exit API with a signed challenge to initiate the validator exit. Refer to the Exit API documentation.
After exiting, use the Get Validator and Provision ID API to check the status of your validators