EigenLayer Restaking Integration
EigenLayer integration — not just "plug in a library". It's embedding your protocol or application in the restaking ecosystem: either as AVS using EigenLayer security, or as application helping users restake their ETH.
Integration Scenarios
Scenario 1: Your Protocol as AVS You're building oracle network, bridge, DA layer. Instead of your validator set — EigenLayer operators provide your security.
Scenario 2: DeFi Application with EigenLayer Deposits You're building lending protocol or AMM and want to accept restaked ETH or LRT as collateral.
Scenario 3: Wallet/Portfolio App Add restaking capability for your users directly in interface.
Technical Interfaces
Deposit via EigenLayer Contracts
// Deposit LST (e.g., stETH) in EigenLayer StrategyManager
IStrategyManager strategyManager = IStrategyManager(EIGENLAYER_STRATEGY_MANAGER);
IERC20 stETH = IERC20(STETH_ADDRESS);
// Approve
stETH.approve(address(strategyManager), amount);
// Deposit
strategyManager.depositIntoStrategy(
IStrategy(STETH_STRATEGY), // Strategy for stETH
stETH,
amount
);
Delegation
After deposit, staker delegates their shares to operator:
IDelegationManager delegationManager = IDelegationManager(EIGENLAYER_DELEGATION_MANAGER);
delegationManager.delegateTo(
operatorAddress,
approverSignatureAndExpiry, // If operator is permissioned
approverSalt
);
EigenPod for Native ETH Restaking
For native ETH stakers (not LST):
IEigenPodManager eigenPodManager = IEigenPodManager(EIGENPOD_MANAGER);
// Create EigenPod
eigenPodManager.createPod();
// Address of created pod
address podAddress = eigenPodManager.ownerToPod(msg.sender);
Validator's withdrawal credentials set to EigenPod address. Now ETH rewards counted as restaked.
Reading On-Chain State
For portfolio applications — need to show restaking position state:
import { ethers } from 'ethers';
const strategyManagerABI = [...]; // ABI from @eigenlayer/eigenlayer-contracts
const strategyManager = new ethers.Contract(
STRATEGY_MANAGER_ADDRESS,
strategyManagerABI,
provider
);
// Get user shares in specific strategy
const shares = await strategyManager.stakerStrategyShares(
userAddress,
stETH_STRATEGY_ADDRESS
);
// Convert shares to underlying token amount
const strategy = new ethers.Contract(stETH_STRATEGY_ADDRESS, strategyABI, provider);
const underlyingAmount = await strategy.sharesToUnderlying(shares);
The Graph for Indexing
EigenLayer subgraph available for quick querying historical data:
query GetOperatorDelegations($operatorId: String!) {
operator(id: $operatorId) {
totalShares
delegators {
staker {
id
}
shares
strategy {
id
}
}
avss {
avs {
id
metadataURI
}
}
}
}
EigenLayer integration in existing application — 2-6 weeks depending on integration depth.







