Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
ae97167
feat: integrate role-based access control for stETH withdrawal functi…
pankajjagtapp Mar 18, 2026
9d757ff
feat: add deployment and transaction scripts for EtherFiRestaker upgr…
pankajjagtapp Mar 18, 2026
771d2f3
chore: update the older scripts for compatability
pankajjagtapp Mar 18, 2026
7059fae
feat: add deposit functions for stETH and wstETH to liquifier for weETH
pankajjagtapp Mar 18, 2026
b714912
feat: implement deposit functions for stETH and wstETH in DepositAdap…
pankajjagtapp Mar 18, 2026
8d4c265
fix: simplify transfer call in depositWstETHForWeETH function by usin…
pankajjagtapp Mar 18, 2026
d817e34
test: increase tolerance in balance assertions for deposit functions …
pankajjagtapp Mar 18, 2026
2afe3b8
chore: update fs_permissions in foundry.toml to streamline access pat…
pankajjagtapp Mar 18, 2026
8ff8bc6
feat: enhance ClaimStEthWithdrawals script to automatically generate …
pankajjagtapp Mar 20, 2026
72a410a
feat: integrate EtherFiRateLimiter into EtherFiRestaker for withdrawa…
pankajjagtapp Mar 23, 2026
f83964b
fix: legacy sciprt/tests update
pankajjagtapp Mar 23, 2026
1d465ac
feat: implement rate limiter setup and verification in RestakerRolesT…
pankajjagtapp Mar 23, 2026
0430ab1
refactor: rename withdrawEther to _withdrawEther for clarity and enca…
pankajjagtapp Mar 23, 2026
860f2ae
feat: add EtherFiRedemptionManager deployment and upgrade logic to Re…
pankajjagtapp Mar 23, 2026
cabc3a8
feat: add configuration scripts for EtherFiRedemptionManager to facil…
pankajjagtapp Mar 24, 2026
58128b5
feat: update EtherFiRestaker deployment script and enhance RestakerRo…
pankajjagtapp Mar 24, 2026
23e0e6c
fix: adjust deposit logic in LiquidRefer to use actual transferred am…
pankajjagtapp Mar 25, 2026
b1f6a0c
feat: add functionality to sweep residual eETH dust to treasury after…
pankajjagtapp Mar 25, 2026
6828543
chore: remove outdated redemption manager configuration files and ass…
pankajjagtapp Mar 25, 2026
6fba2ab
refactor: remove role check from stEthRequestWithdrawal function to s…
pankajjagtapp Mar 25, 2026
cf92c75
feat: enhance RestakerRolesTransactions with depositIntoStrategy rate…
pankajjagtapp Mar 25, 2026
3958e5c
chore: fix some tests or skip tests for request execution layer trigg…
pankajjagtapp Mar 25, 2026
86f63f3
fix: update Redeemed event to include eEthAmountToReceiver for improv…
pankajjagtapp Mar 25, 2026
41f00dc
feat: update RestakerRolesTransactions with new redemption manager im…
pankajjagtapp Mar 25, 2026
70d7837
refactor: unify rate limiter constants in RestakerRolesTransactions f…
pankajjagtapp Mar 25, 2026
9e71bb9
feat: add LiquidRefer implementation and enhance RestakerRolesTransac…
pankajjagtapp Mar 25, 2026
df5cede
feat: implement redelegate function in EtherFiRestaker with associate…
pankajjagtapp Apr 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 1 addition & 8 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,9 @@ libs = ['lib']
fs_permissions = [
{ access = "read-write", path = "./out" },
{ access = "read-write", path = "./release" },
{ access = "read", path = "./test" },
{ access = "read-write", path = "./deployment" },
{ access = "read-write", path = "./operations" },
{ access = "read", path = "./script/el-exits/val-consolidations" },
{ access = "read", path = "./script/operator-management" },
{ access = "read-write", path = "./script/operations/auto-compound" },
{ access = "read-write", path = "./script/operations/consolidations" },
{ access = "read-write", path = "./script/operations/exits" },
{ access = "read-write", path = "./script/operations/utils" },
{ access = "read", path = "./script/operations/data" },
{ access = "read-write", path = "./script/operations" },
{ access = "read", path = "./" },
{ access = "read-write", path = "./script/upgrades" },
]
Expand Down
20 changes: 18 additions & 2 deletions script/operations/steth-management/ClaimStEthWithdrawals.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ pragma solidity ^0.8.27;
import "forge-std/Script.sol";
import "forge-std/console2.sol";
import {Deployed} from "../../deploys/Deployed.s.sol";
import {Utils} from "../../utils/utils.sol";
import {EtherFiRestaker} from "../../../src/EtherFiRestaker.sol";
import {ILidoWithdrawalQueue} from "../../../src/interfaces/ILiquifier.sol";

// forge script script/operations/steth-management/ClaimStEthWithdrawals.s.sol --fork-url $MAINNET_RPC_URL -vvvv

contract ClaimStEthWithdrawals is Script, Deployed {
contract ClaimStEthWithdrawals is Script, Deployed, Utils {

EtherFiRestaker constant etherFiRestaker = EtherFiRestaker(payable(ETHERFI_RESTAKER));

Expand Down Expand Up @@ -80,12 +81,27 @@ contract ClaimStEthWithdrawals is Script, Deployed {
hints
);

// 6. Write Safe transaction JSON automatically for claimable requests
address safeAddress = vm.envOr("SAFE_ADDRESS", ETHERFI_OPERATING_ADMIN);
string memory outputFile = vm.envOr("OUTPUT_FILE", string("claim-steth-withdrawals.json"));
writeSafeJson(
"script/operations/steth-management",
outputFile,
safeAddress,
address(etherFiRestaker),
0,
callData,
block.chainid
);

console2.log("");
console2.log("=== stEthClaimWithdrawals calldata ===");
console2.log("Target:", address(etherFiRestaker));
console2.logBytes(callData);
console2.log("Safe JSON file:", outputFile);
console2.log("Safe address:", safeAddress);

// 6. Simulate on fork as operating admin
// 7. Simulate on fork as operating admin
Comment thread
pankajjagtapp marked this conversation as resolved.
console2.log("");
console2.log("=== Simulating on fork ===");
uint256 lpBalanceBefore = LIQUIDITY_POOL.balance;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ contract ReauditFixesTransactions is Utils {

EtherFiNode newEtherFiNodeImplementation = new EtherFiNode(address(LIQUIDITY_POOL), address(ETHERFI_NODES_MANAGER), address(EIGENLAYER_POD_MANAGER), address(EIGENLAYER_DELEGATION_MANAGER), address(ROLE_REGISTRY));
EtherFiRedemptionManager newEtherFiRedemptionManagerImplementation = new EtherFiRedemptionManager(address(LIQUIDITY_POOL), address(EETH), address(WEETH), address(TREASURY), address(ROLE_REGISTRY), address(ETHERFI_RESTAKER), address(0x0));
EtherFiRestaker newEtherFiRestakerImplementation = new EtherFiRestaker(address(EIGENLAYER_REWARDS_COORDINATOR), address(ETHERFI_REDEMPTION_MANAGER));
EtherFiRestaker newEtherFiRestakerImplementation = new EtherFiRestaker(address(EIGENLAYER_REWARDS_COORDINATOR), address(ETHERFI_REDEMPTION_MANAGER), address(ROLE_REGISTRY), address(ETHERFI_RATE_LIMITER));
EtherFiRewardsRouter newEtherFiRewardsRouterImplementation = new EtherFiRewardsRouter(address(LIQUIDITY_POOL), address(TREASURY), address(ROLE_REGISTRY));
Liquifier newLiquifierImplementation = new Liquifier();
WithdrawRequestNFT newWithdrawRequestNFTImplementation = new WithdrawRequestNFT(address(WITHDRAW_REQUEST_NFT_BUYBACK_SAFE));
Expand Down
82 changes: 82 additions & 0 deletions script/upgrades/restaker-roles/deploy.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

import "forge-std/Script.sol";
import {EtherFiRestaker} from "../../../src/EtherFiRestaker.sol";
import {EtherFiRedemptionManager} from "../../../src/EtherFiRedemptionManager.sol";
import {LiquidRefer} from "../../../src/helpers/LiquidRefer.sol";
import {Utils} from "../../utils/utils.sol";

/**
* @title DeployEtherFiRestakerAndRedemptionManagerWithRoles
* @notice Deploys the new EtherFiRestaker implementation with per-function RoleRegistry roles
*
* Constructor now takes a third arg: _roleRegistry
*
* Command:
* forge script script/upgrades/restaker-roles/deploy.s.sol --fork-url $MAINNET_RPC_URL -vvvv
*/
contract DeployEtherFiRestakerAndRedemptionManagerWithRoles is Utils {
address public etherFiRestakerImpl;
address public redemptionManagerImpl;
address public liquidReferImpl;

// Salt derived from a short description of this change. to update this post final audit
bytes32 commitHashSalt = keccak256("restaker-roles-v2");

function run() public {
console2.log("================================================");
console2.log("=== Deploying EtherFiRestaker + EtherFiRedemptionManager (roles upgrade) ==");
console2.log("================================================");

vm.startBroadcast();

{
string memory contractName = "EtherFiRestaker";
bytes memory constructorArgs = abi.encode(
EIGENLAYER_REWARDS_COORDINATOR,
ETHERFI_REDEMPTION_MANAGER,
ROLE_REGISTRY,
ETHERFI_RATE_LIMITER
);
Comment thread
cursor[bot] marked this conversation as resolved.
Comment thread
cursor[bot] marked this conversation as resolved.
bytes memory bytecode = abi.encodePacked(
type(EtherFiRestaker).creationCode,
constructorArgs
);
etherFiRestakerImpl = deploy(contractName, constructorArgs, bytecode, commitHashSalt, true, mainnetCreate2Factory);
}
{
string memory contractName = "EtherFiRedemptionManager";
bytes memory constructorArgs = abi.encode(
LIQUIDITY_POOL,
EETH,
WEETH,
WITHDRAW_REQUEST_NFT_BUYBACK_SAFE,
ROLE_REGISTRY,
ETHERFI_RESTAKER,
PRIORITY_WITHDRAWAL_QUEUE
);
bytes memory bytecode = abi.encodePacked(
type(EtherFiRedemptionManager).creationCode,
constructorArgs
);
redemptionManagerImpl = deploy(contractName, constructorArgs, bytecode, commitHashSalt, true, mainnetCreate2Factory);
}
{
string memory contractName = "LiquidRefer";
bytes memory constructorArgs = "";
bytes memory bytecode = abi.encodePacked(
type(LiquidRefer).creationCode
);
liquidReferImpl = deploy(contractName, constructorArgs, bytecode, commitHashSalt, true, mainnetCreate2Factory);
}

vm.stopBroadcast();

console2.log("");
console2.log("=== Deployment Summary ===");
console2.log("EtherFiRedemptionManager Implementation:", redemptionManagerImpl);
console2.log("EtherFiRestaker Implementation:", etherFiRestakerImpl);
console2.log("LiquidRefer Implementation:", liquidReferImpl);
}
}
Loading
Loading