These docs are for v1.0. Click to read the latest docs for v2.0.

Our batch smart contract

Our batch contract enables you to fund up to 250 validators in a single transaction instead of having to create, sign, and broadcast one transaction per validator. It's better UX and it's battle tested: including our old batch smart contract, over 1 million ETH has been staked with us via our batch contracts.

Addresses

If your custodian requires it, please whitelist these addresses on Testnet and Mainnet respectively:

  • Goerli contract:0x94a2da805867c962148d3832d9afc512034a62c5 (View on Etherscan).
  • Holesky contract: 0xA627f94a8F94E4713d38F52aC3a6377B0a111d47 (View on Etherscan.
  • Mainnet contract: 0xf0075b3cf8953d3e23b0ef65960913fd97eb5227 (View on Etherscan).

Audit

Our contract has been audited by Halborn. Read the report here.

Why we recommend setting your own gas limit

Setting the gas limit for a transaction is considered an advanced feature, and libraries such as Ethers normally do a great job of estimating the right gas limit to use for any transaction. However, ethers and other libraries sometimes use too low of a gas limit for ETH staking transactions. Using too low of a gas limit may result in wasted gas on several transaction attempts due to your transactions running out of gas, so use this guide to prevent transaction issues.

How to modify the gas limit

Funding a large number of validators is likely to require a lot of gas, in which case you should use the table below for reference.

📘

Gas cost = gas price * gas usage

# of ValidatorsSuggested Gas LimitEstimated Cost in Gwei (assuming gas price of 25 gwei and 100% gas usage)
1123,1423,078,550
10431,54310,788,575
501,893,65747,341,425
1003,700,26092,506,500
1505,534,921138,373,025
2007,367,352184,183,800
2509,164,722229,118,050

An alternative to referencing this table is using a gas multiplier. Ethers has a method for estimating gas here. Implementing a gas multiplier can be as simple as:

const estimatedGas = await contract.estimateGas.method(args);
const tx = await contract.method(args, { gasLimit: 1.2 * estimatedGas });

Important notes

  1. A higher gas limit may mean the transaction will take longer to execute, but ultimately will prevent having to waste extra gas in multiple transaction attempts if the gas limit is set too low.
  2. Setting a high gas limit does not mean higher fees, it just means less likelihood of an out of gas reversion! Any unused gas in a transaction will be returned to the sender's address.

References

What is Gas?

Ethers Docs

Ethereum Gas Tracker