EigenLayer FAQ

What is EigenLayer?

EigenLayer is a protocol built on top of Ethereum designed to enhance the economic utility of staked ETH by allowing users to leverage their existing Ethereum stakes to secure additional protocols and applications without requiring additional collateral.

By doing so, EigenLayer aims to create a marketplace of decentralised trust connecting restakers, operators and builders. This initiative offers additional advantages to ETH holders, aiming to make the blockchain landscape more interconnected and efficient, thereby enriching the overall Ethereum experience.

Is EigenLayer supported by Kiln?

Yes.

The Kiln Dashboard supports native ETH restaking (multiples of 32 ETH) exclusively for our enterprise customers.

The Kiln dApp, Kiln Ledger Live dApp and Kiln Safe dApp support the deposit of liquid staking tokens into EigenLayer token pools.

Kiln dApp also supports native restaking (multiples of 32 ETH).

How can I restake my ETH?

There are two ways to restake your ETH:

  1. Direct restaking: deploy and Eigenlayer Pod contract and deposit validators through it. In this case the withdrawal credentials of the validator will be the eigenpod address. This can be done from the Kiln dashboard directly (see demo below)

  2. Liquid restaking: deposit of liquid staking tokens to EigenLayer token pools is supported in the Kiln dApp, Kiln Ledger Live dApp and Kiln Safe dApp.

Why would I restake my ETH/LSTs prior to the launch of AVSs?

There are three main reasons users currently choose to Native restake or Liquid restake:

  • Signal public support to the Eigenlayer protocol.

  • (only Native Restaking) - Already have Validators running with the withdrawal credentials pointing to an Eigenpod to be first in line when AVSs launch, without having to unstake + restake which would be subject to queues

What happens to my ETH when I restake?

Restaked ETH, whether direct or liquid, earns the same rewards as standard staking. However, with the next mainnet phase scheduled for launch in Q2, restakers will have the option to delegate their restaked ETH to Eigenlayer Operators such as Kiln, which operate various protocols for Eigenlayer.

These protocols, known as Actively Validated Services (AVS), derive economic security from the contributions of restaked ETH. In exchange, AVS rewards restakers according to their specific tokenomics.

By delegating to an operator that runs multiple AVSs, a restaker can anticipate multiple sources of rewards from ETH staking and from each AVS, which usually pays with its own token.

What are the benefits of restaking?

The main benefit to restaking is the increase in economic utility of your staked position. Your ETH is used to secure other applications, chains and services that require a form of consensus. This helps strengthen the ecosystem while increasing your rewards you earn by locking your coins.

What are the risks associated with restaking?

When restaking, a validator is exposed to both Ethereum and EigenLayer penalties. If it behaves against one network’s consensus rules, it will face slashing. While restaking generates additional rewards, it also implies additional risks that need to be taken into account.

Additionally, your validator’s withdrawal credentials is set to an eigenpod smart contract which is upgradeable by Eigenlayer.

If I restake will I still earn ETH rewards?

Yes, your ETH is still used to secure the Ethereum chain and will continue to earn native staking rewards.

How do I access my ETH rewards when I restake?

For direct restaking, EL rewards are accrued to the fee recipient address set by the validator and CL rewards by claiming your EigenPod balance.

How can I unstake my validator when I restake?

The process of unstaking is similar to the standard procedure for exiting an Ethereum validator. However, the unstaked amount will be sent to the Eigenpod address and must be claimed by the staker (Eigenpod owner) once available. A validator can be exited at any time, but there is a 7 days locking period once the validator is fully exited. So the delay after an exit request is:

  • Exit Queue delay (see “Exit queue length” here)

  • Skimming delay (see “Withdrawal queue length” here)

  • + an extra 7 days of locking delay

What are the risks associated with EigenLayer restaking?

Risks are highlighted by EigenLayer here, it is important to know that your funds will go through the EigenLayer smart contracts and can be impacted in case of a hack or malicious upgrade on the contracts.

EigenLayer also details its security here, additional information are:

  1. Audits

EigenLayer Smart Contracts have been audited by 2 different auditors:

Important issues have been fixed and reviewed properly.

A $2m bug bounty is also live since December 2023, there have not been communication if there was any findings and if they were addressed properly.

  1. Testing

Unit test - coverage is > 95% on main contracts
| File                                                         | % Lines            | % Statements       | % Branches       | % Funcs          |
|--------------------------------------------------------------|--------------------|--------------------|------------------|------------------|
| script/BecomeOperator.s.sol                                  | 0.00% (0/5)        | 0.00% (0/6)        | 100.00% (0/0)    | 0.00% (0/1)      |
| script/DepositAndDelegate.s.sol                              | 0.00% (0/16)       | 0.00% (0/19)       | 0.00% (0/2)      | 0.00% (0/1)      |
| script/EigenLayerParser.sol                                  | 0.00% (0/11)       | 0.00% (0/11)       | 100.00% (0/0)    | 0.00% (0/1)      |
| script/M1_Deploy.s.sol                                       | 0.00% (0/152)      | 0.00% (0/174)      | 0.00% (0/108)    | 0.00% (0/6)      |
| script/middleware/DeployOpenEigenLayer.s.sol                 | 0.00% (0/31)       | 0.00% (0/34)       | 0.00% (0/4)      | 0.00% (0/1)      |
| script/milestone/M2Deploy.s.sol                              | 0.00% (0/164)      | 0.00% (0/183)      | 0.00% (0/88)     | 0.00% (0/8)      |
| script/testing/M2_Deploy_From_Scratch.s.sol                  | 0.00% (0/145)      | 0.00% (0/167)      | 0.00% (0/92)     | 0.00% (0/6)      |
| script/upgrade/GoerliUpgrade1.s.sol                          | 0.00% (0/16)       | 0.00% (0/25)       | 100.00% (0/0)    | 0.00% (0/1)      |
| script/utils/ExistingDeploymentParser.sol                    | 0.00% (0/23)       | 0.00% (0/25)       | 0.00% (0/2)      | 0.00% (0/1)      |
| script/whitelist/ERC20PresetMinterPauser.sol                 | 60.00% (3/5)       | 60.00% (3/5)       | 16.67% (1/6)     | 50.00% (2/4)     |
| script/whitelist/Staker.sol                                  | 0.00% (0/3)        | 0.00% (0/3)        | 100.00% (0/0)    | 0.00% (0/1)      |
| script/whitelist/delegationFaucet/DelegationFaucet.sol       | 82.76% (24/29)     | 86.36% (38/44)     | 66.67% (8/12)    | 100.00% (9/9)    |
| script/whitelist/delegationFaucet/DelegationFaucetStaker.sol | 100.00% (3/3)      | 100.00% (3/3)      | 100.00% (0/0)    | 100.00% (1/1)    |
| script/whitelist/delegationFaucet/DeployDelegationFaucet.sol | 0.00% (0/15)       | 0.00% (0/16)       | 100.00% (0/0)    | 0.00% (0/2)      |
| src/contracts/core/DelegationManager.sol                     | 96.97% (192/198)   | 96.25% (231/240)   | 82.98% (78/94)   | 92.11% (35/38)   |
| src/contracts/core/Slasher.sol                               | 100.00% (0/0)      | 100.00% (0/0)      | 100.00% (0/0)    | 4.55% (1/22)     |
| src/contracts/core/StrategyManager.sol                       | 97.44% (76/78)     | 96.47% (82/85)     | 82.14% (23/28)   | 95.00% (19/20)   |
| src/contracts/libraries/BeaconChainProofs.sol                | 95.35% (41/43)     | 94.44% (51/54)     | 55.00% (22/40)   | 91.67% (11/12)   |
| src/contracts/libraries/BytesLib.sol                         | 0.00% (0/50)       | 0.00% (0/50)       | 0.00% (0/22)     | 0.00% (0/14)     |
| src/contracts/libraries/EIP1271SignatureUtils.sol            | 100.00% (3/3)      | 100.00% (3/3)      | 100.00% (6/6)    | 100.00% (1/1)    |
| src/contracts/libraries/Endian.sol                           | 100.00% (3/3)      | 100.00% (9/9)      | 100.00% (0/0)    | 100.00% (1/1)    |
| src/contracts/libraries/Merkle.sol                           | 66.67% (20/30)     | 65.91% (29/44)     | 20.00% (2/10)    | 60.00% (3/5)     |
| src/contracts/libraries/StructuredLinkedList.sol             | 0.00% (0/45)       | 0.00% (0/61)       | 0.00% (0/14)     | 0.00% (0/19)     |
| src/contracts/permissions/Pausable.sol                       | 100.00% (19/19)    | 100.00% (20/20)    | 87.50% (7/8)     | 100.00% (8/8)    |
| src/contracts/permissions/PauserRegistry.sol                 | 100.00% (8/8)      | 100.00% (8/8)      | 100.00% (4/4)    | 100.00% (4/4)    |
| src/contracts/pods/DelayedWithdrawalRouter.sol               | 98.18% (54/55)     | 98.59% (70/71)     | 92.86% (13/14)   | 92.31% (12/13)   |
| src/contracts/pods/EigenPod.sol                              | 100.00% (132/132)  | 100.00% (161/161)  | 78.57% (44/56)   | 100.00% (26/26)  |
| src/contracts/pods/EigenPodManager.sol                       | 100.00% (74/74)    | 100.00% (93/93)    | 93.75% (45/48)   | 93.75% (15/16)   |
| src/contracts/strategies/StrategyBase.sol                    | 88.57% (31/35)     | 87.72% (50/57)     | 100.00% (8/8)    | 73.33% (11/15)   |
| src/contracts/strategies/StrategyBaseTVLLimits.sol           | 100.00% (11/11)    | 100.00% (11/11)    | 100.00% (6/6)    | 100.00% (5/5)    |
| src/contracts/utils/UpgradeableSignatureCheckingUtils.sol    | 0.00% (0/5)        | 0.00% (0/7)        | 0.00% (0/2)      | 0.00% (0/3)      |
| src/test/EigenLayerDeployer.t.sol                            | 0.00% (0/71)       | 0.00% (0/77)       | 100.00% (0/0)    | 0.00% (0/4)      |
| src/test/EigenLayerTestHelper.t.sol                          | 0.00% (0/133)      | 0.00% (0/173)      | 0.00% (0/20)     | 0.00% (0/13)     |
| src/test/EigenPod.t.sol                                      | 100.00% (1/1)      | 100.00% (1/1)      | 100.00% (0/0)    | 100.00% (1/1)    |
| src/test/harnesses/EigenPodHarness.sol                       | 100.00% (9/9)      | 100.00% (14/14)    | 100.00% (0/0)    | 100.00% (7/7)    |
| src/test/harnesses/EigenPodManagerWrapper.sol                | 100.00% (2/2)      | 100.00% (3/3)      | 100.00% (0/0)    | 100.00% (2/2)    |
| src/test/harnesses/PausableHarness.sol                       | 100.00% (1/1)      | 100.00% (1/1)      | 100.00% (0/0)    | 100.00% (1/1)    |
| src/test/integration/IntegrationBase.t.sol                   | 0.00% (0/249)      | 0.00% (0/382)      | 0.00% (0/40)     | 0.00% (0/49)     |
| src/test/integration/IntegrationChecks.t.sol                 | 0.00% (0/43)       | 0.00% (0/45)       | 0.00% (0/8)      | 0.00% (0/8)      |
| src/test/integration/IntegrationDeployer.t.sol               | 0.00% (0/143)      | 0.00% (0/193)      | 0.00% (0/16)     | 0.00% (0/11)     |
| src/test/integration/TimeMachine.t.sol                       | 90.91% (10/11)     | 91.67% (11/12)     | 100.00% (0/0)    | 100.00% (4/4)    |
| src/test/integration/User.t.sol                              | 95.92% (141/147)   | 95.63% (197/206)   | 50.00% (8/16)    | 94.74% (18/19)   |
| src/test/integration/mocks/BeaconChainMock.t.sol             | 100.00% (164/164)  | 100.00% (200/200)  | 62.07% (18/29)   | 100.00% (18/18)  |
| src/test/integration/mocks/BeaconChainOracleMock.t.sol       | 100.00% (2/2)      | 100.00% (2/2)      | 100.00% (0/0)    | 100.00% (2/2)    |
| src/test/mocks/BeaconChainOracleMock.sol                     | 25.00% (2/8)       | 25.00% (2/8)       | 100.00% (0/0)    | 15.38% (2/13)    |
| src/test/mocks/DelayedWithdrawalRouterMock.sol               | 100.00% (0/0)      | 100.00% (0/0)      | 100.00% (0/0)    | 9.09% (1/11)     |
| src/test/mocks/DelegationManagerMock.sol                     | 20.00% (3/15)      | 18.75% (3/16)      | 100.00% (0/0)    | 11.63% (5/43)    |
| src/test/mocks/Dummy.sol                                     | 0.00% (0/1)        | 0.00% (0/1)        | 100.00% (0/0)    | 0.00% (0/1)      |
| src/test/mocks/ERC20Mock.sol                                 | 52.78% (19/36)     | 52.63% (20/38)     | 16.67% (3/18)    | 61.54% (8/13)    |
| src/test/mocks/ERC20_OneWeiFeeOnTransfer.sol                 | 41.43% (29/70)     | 42.86% (33/77)     | 23.33% (7/30)    | 43.48% (10/23)   |
| src/test/mocks/ERC20_SetTransferReverting_Mock.sol           | 100.00% (3/3)      | 100.00% (2/2)      | 100.00% (2/2)    | 100.00% (2/2)    |
| src/test/mocks/ETHDepositMock.sol                            | 0.00% (0/4)        | 0.00% (0/4)        | 100.00% (0/0)    | 33.33% (1/3)     |
| src/test/mocks/EigenPodManagerMock.sol                       | 25.00% (3/12)      | 22.22% (4/18)      | 100.00% (0/0)    | 16.00% (4/25)    |
| src/test/mocks/EigenPodMock.sol                              | 100.00% (0/0)      | 100.00% (0/0)      | 100.00% (0/0)    | 13.64% (3/22)    |
| src/test/mocks/EmptyContract.sol                             | 0.00% (0/1)        | 0.00% (0/1)        | 100.00% (0/0)    | 0.00% (0/1)      |
| src/test/mocks/LiquidStakingToken.sol                        | 0.00% (0/5)        | 0.00% (0/5)        | 0.00% (0/2)      | 0.00% (0/3)      |
| src/test/mocks/Reenterer.sol                                 | 81.25% (13/16)     | 82.35% (14/17)     | 66.67% (4/6)     | 75.00% (3/4)     |
| src/test/mocks/Reverter.sol                                  | 100.00% (1/1)      | 100.00% (1/1)      | 100.00% (0/0)    | 100.00% (1/1)    |
| src/test/mocks/SlasherMock.sol                               | 0.00% (0/4)        | 0.00% (0/4)        | 100.00% (0/0)    | 0.00% (0/19)     |
| src/test/mocks/StrategyManagerMock.sol                       | 44.44% (4/9)       | 44.44% (4/9)       | 50.00% (1/2)     | 26.32% (5/19)    |
| src/test/unit/DelegationUnit.t.sol                           | 0.00% (0/99)       | 0.00% (0/133)      | 100.00% (0/0)    | 0.00% (0/20)     |
| src/test/unit/EigenPod-PodManagerUnit.t.sol                  | 0.00% (0/18)       | 0.00% (0/19)       | 100.00% (0/0)    | 0.00% (0/1)      |
| src/test/unit/EigenPodManagerUnit.t.sol                      | 0.00% (0/18)       | 0.00% (0/19)       | 100.00% (0/0)    | 0.00% (0/4)      |
| src/test/unit/EigenPodUnit.t.sol                             | 0.00% (0/16)       | 0.00% (0/16)       | 100.00% (0/0)    | 0.00% (0/2)      |
| src/test/unit/StrategyManagerUnit.t.sol                      | 0.00% (0/84)       | 0.00% (0/114)      | 0.00% (0/10)     | 0.00% (0/6)      |
| src/test/utils/EigenLayerUnitTestBase.sol                    | 0.00% (0/6)        | 0.00% (0/7)        | 100.00% (0/0)    | 0.00% (0/1)      |
| src/test/utils/EigenLayerUnitTestSetup.sol                   | 0.00% (0/10)       | 0.00% (0/10)       | 100.00% (0/0)    | 0.00% (0/1)      |
| src/test/utils/Operators.sol                                 | 0.00% (0/12)       | 0.00% (0/24)       | 0.00% (0/2)      | 0.00% (0/7)      |
| src/test/utils/Owners.sol                                    | 0.00% (0/11)       | 0.00% (0/20)       | 100.00% (0/0)    | 0.00% (0/6)      |
| src/test/utils/ProofParsing.sol                              | 0.00% (0/67)       | 0.00% (0/109)      | 100.00% (0/0)    | 0.00% (0/26)     |
| src/test/utils/SignatureCompaction.sol                       | 0.00% (0/8)        | 0.00% (0/11)       | 0.00% (0/6)      | 0.00% (0/3)      |
| src/test/utils/Utils.sol                                     | 0.00% (0/4)        | 0.00% (0/5)        | 100.00% (0/0)    | 0.00% (0/1)      |
| Total                                                        | 37.69% (1101/2921) | 37.28% (1374/3686) | 35.19% (310/881) | 38.25% (262/685) |
Integration tests - covering the main user series of interactions with Eigen contracts with fuzzing
  • Deposit Deposit Queue Complete

  • Deposit Delegate Queue Complete

  • Deposit Delegate Redelegate Complete

  • Deposit Delegate Undelegate Complete

  • Deposit Delegate Update Balance

  • Deposit Queue Complete

  • Deposit Register QueueWithdrawal Complete

Formal verification - using certora
  1. Governance

Splitted between 3 multisigs:

  • operations multisig: can do upgrades and pause / timelock: 3 of 5 multisig controlled by Eigenlayer

  • pauser multisig: pauser role (1 of 9 multisig) for emergency reaction, cannot unpause

  • community multisig: 9 of 13 can perform upgrades and replace the operations multisig

    Tim Beiko - Ethereum Foundation
    Viktor Bunin - Coinbase
    Uma Roy - Succinct
    Brian Retford - RISC Zero
    Pramod Viswanath - Witness Chain
    Swapnil Raj - Nethermind
    Dimitry Ukhanov - P2P
    Tarun Chitra - Robot Ventures
    Anna Rose - ZK Validator
    Curtis Spencer - Electric Capital
    Yuan Han Li - Blockchain Capital
    Ben Rodriguez - Coinbase Cloud
    Rob Pellecchia - Figment Capital

I have another question

Please contact the Kiln team via your shared Slack/Telegram channel or email us at support@kiln.fi.

Last updated