Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
42212d7
make more maintainable
vvalecha519 Sep 22, 2025
039b1c0
remvoe logs
vvalecha519 Sep 22, 2025
b72177c
fix test and steth transfer
vvalecha519 Sep 23, 2025
cfe2c6a
add more tests and better permissions
vvalecha519 Sep 23, 2025
edfb6fa
remove steth test
vvalecha519 Sep 23, 2025
531e4c9
fix permits and remove duplicate functions
vvalecha519 Sep 23, 2025
5081d4b
add more validation
vvalecha519 Sep 23, 2025
72b2dcf
clear out storage
vvalecha519 Sep 23, 2025
cfefe84
H1 fix
vvalecha519 Sep 29, 2025
6fe932b
allow rebase call from redemptionManager"
vvalecha519 Sep 30, 2025
17f4cbc
test difference in share price
vvalecha519 Sep 30, 2025
ad5df79
add more testing for H1 and assertions
vvalecha519 Sep 30, 2025
caab8ae
fix M1, L1, I1
vvalecha519 Sep 30, 2025
2015451
do not use rebase create new method
vvalecha519 Oct 3, 2025
9ff9264
fix: add staker fee distribution to stETH redemption flow
seongyun-ko Oct 3, 2025
fc7634e
fix test
vvalecha519 Oct 3, 2025
4151ea3
Merge pull request #299 from etherfi-protocol/syko/fix/steth-redempti…
vvalecha519 Oct 3, 2025
8e78450
add event and test 0 fees
vvalecha519 Oct 3, 2025
2e86eb8
remove permissions for redemption manager to rebase
vvalecha519 Oct 6, 2025
037da63
Merge pull request #297 from etherfi-protocol/vaibhav/instant-wd-stet…
vvalecha519 Oct 6, 2025
8585bb3
Implement deployment scripts for stETH withdrawals
pankajjagtapp Oct 6, 2025
2d85f68
Refactor stETH withdrawal scripts and add transaction handling
pankajjagtapp Oct 6, 2025
e63e5e1
fix: bytecode comparison logic in ContractCodeChecker
pankajjagtapp Oct 7, 2025
4909139
fix: Enhance stETH withdrawal transaction management and utility func…
pankajjagtapp Oct 7, 2025
4b66bed
feat: Update stETH withdrawal transaction script with new functionality
pankajjagtapp Oct 9, 2025
19cfcb2
refactor: bug fix in LiquidityPool constructor arguments in deploymen…
pankajjagtapp Oct 9, 2025
a8b0728
feat: Add helper function to verify Create2 address in Utils contract
pankajjagtapp Oct 9, 2025
0272826
fix: Update LiquidityPool implementation address and refine transacti…
pankajjagtapp Oct 9, 2025
b59d34c
feat: Add verification script for stETH withdrawals
pankajjagtapp Oct 9, 2025
c9b1738
fix: Update exit fee structure in stETH withdrawal transactions to 0
pankajjagtapp Oct 9, 2025
829fa6b
fix: Adjust bucket capacity and refill rate in stETH withdrawal trans…
pankajjagtapp Oct 9, 2025
df12790
initialize with stETH instead of weETH as output token
seongyun-ko Oct 9, 2025
f531483
fix: Changed output token from eETH to ETH
pankajjagtapp Oct 9, 2025
1eb6de6
temporary commit
pankajjagtapp Oct 10, 2025
6bcafec
feat: Add deployment configurations for `EtherFiRedemptionManager`, `…
pankajjagtapp Oct 10, 2025
961ecfb
fix: Updated token address from `EETH_PROXY` to `ETH` in `VerifyStETH…
pankajjagtapp Oct 10, 2025
bbf937e
feat: Add audit report for stETH withdrawals
pankajjagtapp Oct 14, 2025
57add77
chore: Remove outdated readme for stETH withdrawals
pankajjagtapp Oct 15, 2025
4645215
Merge pull request #300 from etherfi-protocol/pankaj/operations/deplo…
pankajjagtapp Oct 17, 2025
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
Binary file not shown.
16 changes: 16 additions & 0 deletions deployment/EtherFiRedemptionManager/2025-10-09-18-23-23.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"contractName": "EtherFiRedemptionManager",
"deploymentParameters": {
"factory": "0x356d1B83970CeF2018F2c9337cDdb67dff5AEF99",
"salt": "0x037da63f453b943e7bd96c155e0798003094e4a0000000000000000000000000",
"constructorArgs": {
"_liquidityPool": "0x308861A430be4cce5502d0A12724771Fc6DaF216",
"_eEth": "0x35fA164735182de50811E8e2E824cFb9B6118ac2",
"_weEth": "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee",
"_treasury": "0x0c83EAe1FE72c390A02E426572854931EefF93BA",
"_roleRegistry": "0x62247D29B4B9BECf4BB73E0c722cf6445cfC7cE9",
"_etherFiRestaker": "0x1B7a4C3797236A1C37f8741c0Be35c2c72736fFf"
}
},
"deployedAddress": "0xE3F384Dc7002547Dd240AC1Ad69a430CCE1e292d"
}
15 changes: 15 additions & 0 deletions deployment/EtherFiRedemptionManagerTemp/2025-10-09-18-23-23.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"contractName": "EtherFiRedemptionManagerTemp",
"deploymentParameters": {
"factory": "0x356d1B83970CeF2018F2c9337cDdb67dff5AEF99",
"salt": "0x037da63f453b943e7bd96c155e0798003094e4a0000000000000000000000000",
"constructorArgs": {
"_liquidityPool": "0x308861A430be4cce5502d0A12724771Fc6DaF216",
"_eEth": "0x35fA164735182de50811E8e2E824cFb9B6118ac2",
"_weEth": "0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee",
"_treasury": "0x0c83EAe1FE72c390A02E426572854931EefF93BA",
"_roleRegistry": "0x62247D29B4B9BECf4BB73E0c722cf6445cfC7cE9"
}
},
"deployedAddress": "0x590015FDf9334594B0Ae14f29b0dEd9f1f8504Bc"
}
12 changes: 12 additions & 0 deletions deployment/EtherFiRestaker/2025-10-09-18-23-23.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"contractName": "EtherFiRestaker",
"deploymentParameters": {
"factory": "0x356d1B83970CeF2018F2c9337cDdb67dff5AEF99",
"salt": "0x037da63f453b943e7bd96c155e0798003094e4a0000000000000000000000000",
"constructorArgs": {
"_rewardsCoordinator": "0x7750d328b314EfFa365A0402CcfD489B80B0adda",
"_etherFiRedemptionManager": "0xDadEf1fFBFeaAB4f68A9fD181395F68b4e4E7Ae0"
}
},
"deployedAddress": "0x71bEf55739F0b148E2C3e645FDE947f380C48615"
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
"contractName": "LiquidityPool",
"deploymentParameters": {
"factory": "0x356d1B83970CeF2018F2c9337cDdb67dff5AEF99",
"salt": "0x7972bd777a339ca98eff1677484aacc816b24d87000000000000000000000000",
"salt": "0x037da63f453b943e7bd96c155e0798003094e4a0000000000000000000000000",
"constructorArgs": {
}
},
"deployedAddress": "0x025911766aEF6fF0C294FD831a2b5c17dC299B3f"
"deployedAddress": "0xA5C1ddD9185901E3c05E0660126627E039D0a626"
}
4 changes: 2 additions & 2 deletions script/ContractCodeChecker.sol
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ contract ContractCodeChecker {
bytes memory localBytecode = address(localDeployed).code;
bytes memory onchainRuntimeBytecode = address(deployedImpl).code;

if (compareBytes(localBytecode, onchainRuntimeBytecode)) {
if (compareBytes(onchainRuntimeBytecode, localBytecode)) {
console2.log("-> Full Bytecode Match: Success\n");
} else {
console2.log("-> Full Bytecode Match: Fail\n");
Expand Down Expand Up @@ -126,7 +126,7 @@ contract ContractCodeChecker {
}

// Compare trimmed arrays byte-by-byte
if (compareBytes(trimmedLocal, trimmedOnchain)) {
if (compareBytes(trimmedOnchain, trimmedLocal)) {
console2.log("-> Partial Bytecode Match: Success\n");
} else {
console2.log("-> Partial Bytecode Match: Fail\n");
Expand Down
102 changes: 102 additions & 0 deletions script/stETH-withdrawals/deploy.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;

import "forge-std/Script.sol";
import {Utils} from "../utils/utils.sol";
import {EtherFiRedemptionManagerTemp} from "../../src/EtherFiRedemptionManagerTemp.sol";
import {EtherFiRestaker} from "../../src/EtherFiRestaker.sol";
import {EtherFiRedemptionManager} from "../../src/EtherFiRedemptionManager.sol";
import {LiquidityPool} from "../../src/LiquidityPool.sol";
import {ICreate2Factory} from "../utils/utils.sol";

contract DeployInstanstStETHWithdrawals is Script, Utils {
ICreate2Factory constant factory = ICreate2Factory(0x356d1B83970CeF2018F2c9337cDdb67dff5AEF99);
//--------------------------------------------------------------------------------------
//---------------------------- New Deployments -----------------------------------------
//--------------------------------------------------------------------------------------
address liquidityPoolImpl;
address etherFiRedemptionManagerTempImpl;
address etherFiRestakerImpl;
address etherFiRedemptionManagerImpl;

//--------------------------------------------------------------------------------------
//------------------------- Existing Users/Proxies -------------------------------------
//--------------------------------------------------------------------------------------
address constant rewardsCoordinator = 0x7750d328b314EfFa365A0402CcfD489B80B0adda; // Eigen Layer Rewards Coordinator - https://etherscan.io/address/0x7750d328b314effa365a0402ccfd489b80b0adda
address constant etherFiRedemptionManager = 0xDadEf1fFBFeaAB4f68A9fD181395F68b4e4E7Ae0;
address constant eETH = 0x35fA164735182de50811E8e2E824cFb9B6118ac2;
address constant weETH = 0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee;
address constant liquidityPool = 0x308861A430be4cce5502d0A12724771Fc6DaF216;
address constant roleRegistry = 0x62247D29B4B9BECf4BB73E0c722cf6445cfC7cE9;
address constant treasury = 0x0c83EAe1FE72c390A02E426572854931EefF93BA;
address constant etherFiRestaker = 0x1B7a4C3797236A1C37f8741c0Be35c2c72736fFf;

// TODO: update with final commit
bytes32 commitHashSalt = bytes32(bytes20(hex"037da63f453b943e7bd96c155e0798003094e4a0"));

function run() external {
vm.startBroadcast();

{
string memory contractName = "EtherFiRedemptionManagerTemp";
bytes memory constructorArgs = abi.encode(
address(liquidityPool),
address(eETH),
address(weETH),
address(treasury),
address(roleRegistry)
);
bytes memory bytecode = abi.encodePacked(
type(EtherFiRedemptionManagerTemp).creationCode,
constructorArgs
);
etherFiRedemptionManagerTempImpl = deploy(contractName, constructorArgs, bytecode, commitHashSalt, true, factory);
verify(etherFiRedemptionManagerTempImpl, bytecode, commitHashSalt, factory);
}

{
string memory contractName = "EtherFiRestaker";
bytes memory constructorArgs = abi.encode(
address(rewardsCoordinator),
address(etherFiRedemptionManager)
);
bytes memory bytecode = abi.encodePacked(
type(EtherFiRestaker).creationCode,
constructorArgs
);
etherFiRestakerImpl = deploy(contractName, constructorArgs, bytecode, commitHashSalt, true, factory);
verify(etherFiRestakerImpl, bytecode, commitHashSalt, factory);
}

{
string memory contractName = "EtherFiRedemptionManager";
bytes memory constructorArgs = abi.encode(
address(liquidityPool),
address(eETH),
address(weETH),
address(treasury),
address(roleRegistry),
address(etherFiRestaker)
);
bytes memory bytecode = abi.encodePacked(
type(EtherFiRedemptionManager).creationCode,
constructorArgs
);
etherFiRedemptionManagerImpl = deploy(contractName, constructorArgs, bytecode, commitHashSalt, true, factory);
verify(etherFiRedemptionManagerImpl, bytecode, commitHashSalt, factory);
}

{
string memory contractName = "LiquidityPool";
bytes memory constructorArgs = abi.encode(
);
bytes memory bytecode = abi.encodePacked(
type(LiquidityPool).creationCode,
constructorArgs
);
liquidityPoolImpl = deploy(contractName, constructorArgs, bytecode, commitHashSalt, true, factory);
verify(liquidityPoolImpl, bytecode, commitHashSalt, factory);
}
vm.stopBroadcast();
}
}
Loading
Loading