From 058da837d67450e85312811993e1de69a5af0748 Mon Sep 17 00:00:00 2001 From: johnnyonline Date: Wed, 21 Aug 2024 12:39:03 +0300 Subject: [PATCH 1/5] feat: wip --- script/commands/DepositToYnLSDe.sol | 169 ++++++++++++++++------------ 1 file changed, 98 insertions(+), 71 deletions(-) diff --git a/script/commands/DepositToYnLSDe.sol b/script/commands/DepositToYnLSDe.sol index 76f9b201c..bf297608a 100644 --- a/script/commands/DepositToYnLSDe.sol +++ b/script/commands/DepositToYnLSDe.sol @@ -2,110 +2,137 @@ // SPDX-License-Identifier: BSD 3-Clause License pragma solidity ^0.8.24; -import {StakingNodesManager} from "src/StakingNodesManager.sol"; -import {StakingNode} from "src/StakingNode.sol"; -import {RewardsReceiver} from "src/RewardsReceiver.sol"; -import {stdJson} from "lib/forge-std/src/StdJson.sol"; -import {RewardsDistributor} from "src/RewardsDistributor.sol"; -import {ynETH} from "src/ynETH.sol"; -import {Script} from "lib/forge-std/src/Script.sol"; -import {Utils} from "script/Utils.sol"; -import {ActorAddresses} from "script/Actors.sol"; -import {console} from "lib/forge-std/src/console.sol"; -import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; -import {ContractAddresses} from "script/ContractAddresses.sol"; -import { IwstETH } from "src/external/lido/IwstETH.sol"; -import { IynEigen } from "src/interfaces/IynEigen.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; +import {IwstETH} from "../../src/external/lido/IwstETH.sol"; +import {IynEigen} from "../../src/interfaces/IynEigen.sol"; -import { BaseYnEigenScript } from "script/BaseYnEigenScript.s.sol"; +import {ContractAddresses} from "../ContractAddresses.sol"; +import "../BaseYnEigenScript.s.sol"; contract DepositStETHToYnLSDe is BaseYnEigenScript { - IERC20 public stETH; + + address public broadcaster; Deployment deployment; ActorAddresses.Actors actors; ContractAddresses.ChainAddresses chainAddresses; + uint256 public constant AMOUNT = 0.01 ether; + function tokenName() internal override pure returns (string memory) { return "YnLSDe"; } - function getWstETH(address _broadcaster, uint256 amount) internal returns (uint256) { - - stETH = IERC20(chainAddresses.lsd.STETH_ADDRESS); - console.log("stETH contract loaded:", address(stETH)); - - - console.log("Allocating ether to contract:", amount); - vm.deal(address(this), amount); - console.log("Depositing ether to stETH contract"); - (bool sent, ) = address(stETH).call{value: amount}(""); - require(sent, "Failed to send Ether"); - IwstETH wstETH = IwstETH(chainAddresses.lsd.WSTETH_ADDRESS); - console.log("Approving wstETH contract to spend stETH"); - stETH.approve(address(wstETH), amount); - console.log("Wrapping stETH to wstETH"); - wstETH.wrap(amount); - uint256 wstETHBalance = wstETH.balanceOf(_broadcaster); - console.log("Balance of wstETH:", wstETHBalance); - return wstETHBalance; - } - function run() external { ContractAddresses contractAddresses = new ContractAddresses(); chainAddresses = contractAddresses.getChainAddresses(block.chainid); - deployment = loadDeployment(); actors = getActors(); uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - - address _broadcaster = vm.addr(deployerPrivateKey); - - // solhint-disable-next-line no-console - console.log("Default Signer Address:", _broadcaster); - // solhint-disable-next-line no-console + broadcaster = vm.addr(deployerPrivateKey); + console.log("Default Signer Address:", broadcaster); console.log("Current Block Number:", block.number); - // solhint-disable-next-line no-console console.log("Current Chain ID:", block.chainid); + address token = _getTokenAddress(vm.prompt("Token (`sfrxETH`, `wstETH`, `mETH` and `rETH` (holesky only))")); + uint256 path = vm.parseUint(vm.prompt("Path (`0` for deposit or `1` for send")); + vm.startBroadcast(deployerPrivateKey); - uint256 amount = 0.01 ether; + uint256 _amount = _getToken(token); + if (path == 0) { + _deposit(_amount, token); // deposit to ynEIGEN + } else if (path == 1) { + _send(_amount, token); // send to broadcaster + } else { + revert("Invalid path"); + } + + vm.stopBroadcast(); + + console.log("Deposit successful"); + } - - IwstETH wstETH = IwstETH(chainAddresses.lsd.WSTETH_ADDRESS); + function _getTokenAddress(string memory n) internal returns (address) { + if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("sfrxETH"))) { + return chainAddresses.lsd.SFRXETH_ADDRESS; + } else if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("wstETH"))) { + return chainAddresses.lsd.STETH_ADDRESS; + } else if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("mETH"))) { + return chainAddresses.lsd.METH_ADDRESS; + } else if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("rETH")) && block.chainid == 17000) { + return chainAddresses.lsd.RETH_ADDRESS; + } else { + revert("Invalid token name"); + } + } - uint256 wstETHBalance = getWstETH(_broadcaster, amount); + function _getToken(address token) internal returns (uint256 _amount) { + if (token == chainAddresses.lsd.SFRXETH_ADDRESS) { + _amount = _getSFRXETH(); + } else if (token == chainAddresses.lsd.STETH_ADDRESS) { + _amount = _getWSTETH(); + } else if (token == chainAddresses.lsd.METH_ADDRESS) { + _amount = _getMETH(); + } else if (token == chainAddresses.lsd.RETH_ADDRESS) { + _amount = _getRETH(); + } else { + revert("Invalid token address"); + } + } - console.log("Depositing wstETH into ynEigen"); - IynEigen ynEigen = IynEigen(deployment.ynEigen); - wstETH.approve(address(deployment.ynEigen), wstETHBalance); + function _getSFRXETH() internal returns (uint256) { + IfrxMinter frxMinter = IfrxMinter(0xbAFA44EFE7901E04E39Dad13167D089C559c1138); // @todo - holesky? + frxMinter.submitAndDeposit{value: AMOUNT}(broadcaster); + IERC4626 sfrxETH = IERC4626(chainAddresses.lsd.SFRXETH_ADDRESS); + IERC20 frxETH = IERC4626(chainAddresses.lsd.FRXETH_ADDRESS); // @todo + frxETH.approve(address(sfrxETH), AMOUNT); + return sfrxETH.deposit(AMOUNT, broadcaster); + } - // deposit half of it. - ynEigen.deposit(IERC20(address(wstETH)), wstETHBalance / 2, _broadcaster); - - - - // //Send wstETH to the specified address + function _getWSTETH() internal returns (uint256) { + (bool sent, ) = chainAddresses.lsd.STETH_ADDRESS.call{value: AMOUNT}(""); + require(sent, "Failed to send Ether"); - // address recipient = _broadcaster; - // uint256 amountToSend = wstETHBalance / 2; - - // console.log("Sending wstETH to:", recipient); - // console.log("Amount to send:", amountToSend); - - // bool success = wstETH.transfer(recipient, amountToSend); - // require(success, "Failed to transfer wstETH"); - - // console.log("wstETH transfer successful"); + uint256 _stETHBalance = IERC20(chainAddresses.lsd.STETH_ADDRESS).balanceOf(broadcaster); + IERC20(chainAddresses.lsd.STETH_ADDRESS).approve(chainAddresses.lsd.WSTETH_ADDRESS, _stETHBalance); + return IwstETH(chainAddresses.lsd.WSTETH_ADDRESS).wrap(_stETHBalance); + } - vm.stopBroadcast(); + // function _getMETH() internal returns (uint256) { // @todo + // ImETHStaking mETHStaking = ImETHStaking(0xe3cBd06D7dadB3F4e6557bAb7EdD924CD1489E8f); + // IERC20 mETH = IERC20(chainAddresses.lsd.METH_ADDRESS); - console.log("Deposit successful"); + // uint256 ethRequired = mETHStaking.mETHToETH(amount) + 1 ether; + // vm.deal(address(this), ethRequired); + // mETHStaking.stake{value: ethRequired}(amount); + + // require(mETH.balanceOf(address(this)) >= amount, "Insufficient mETH balance after staking"); + // mETH.transfer(receiver, amount); + + // return amount; + // } + + // function _getRETH() internal returns (uint256) { // @todo + // uint256 ethRequired = AMOUNT * 1e18 / IrETH(chainAddresses.lsd.RETH_ADDRESS).getExchangeRate(); + // // NOTE: only works if pool is not at max capacity (it may be) + // IRocketPoolDepositPool(0xDD3f50F8A6CafbE9b31a427582963f465E745AF8).deposit{value: ethRequired}(); // @todo - holesky? + + // require(IERC20(chainAddresses.lsd.RETH_ADDRESS).balanceOf(address(this)) >= amount, "Insufficient rETH balance after deposit"); + // IERC20(chainAddresses.lsd.RETH_ADDRESS).transfer(receiver, amount); + // } + + function _deposit(uint256 amount, address token) internal { // @todo - if token is wsteth/oeth use deposit adapter + IERC20(token).approve(chainAddresses.ynEigen.YNEIGEN_ADDRESS, amount); + IynEigen(chainAddresses.ynEigen.YNEIGEN_ADDRESS).deposit(IERC20(token), amount, user); } -} + // function _send(uint256 amount, address token) internal { // @todo + + // } +} \ No newline at end of file From 01fa7d4ef24a95942fe72d9ad1d7da3dbac0c29f Mon Sep 17 00:00:00 2001 From: johnnyonline Date: Thu, 22 Aug 2024 00:14:25 +0700 Subject: [PATCH 2/5] feat: pre tests --- lib/forge-std | 2 +- script/commands/DepositToYnLSDe.sol | 73 ++++++++++++++-------------- src/external/mantle/ImETHStaking.sol | 1 + 3 files changed, 39 insertions(+), 37 deletions(-) diff --git a/lib/forge-std b/lib/forge-std index 2f1126975..bf6606142 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 2f112697506eab12d433a65fdc31a639548fe365 +Subproject commit bf6606142994b1e47e2882ce0cd477c020d77623 diff --git a/script/commands/DepositToYnLSDe.sol b/script/commands/DepositToYnLSDe.sol index bf297608a..0d8daf32f 100644 --- a/script/commands/DepositToYnLSDe.sol +++ b/script/commands/DepositToYnLSDe.sol @@ -7,11 +7,17 @@ import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; import {IwstETH} from "../../src/external/lido/IwstETH.sol"; import {IynEigen} from "../../src/interfaces/IynEigen.sol"; +import {ImETHStaking} from "../../src/external/mantle/ImETHStaking.sol"; +import {IfrxMinter} from "../../src/external/frax/IfrxMinter.sol"; import {ContractAddresses} from "../ContractAddresses.sol"; import "../BaseYnEigenScript.s.sol"; +interface IRocketPoolDepositPool { + function deposit() external payable; +} + contract DepositStETHToYnLSDe is BaseYnEigenScript { address public broadcaster; @@ -59,7 +65,7 @@ contract DepositStETHToYnLSDe is BaseYnEigenScript { } function _getTokenAddress(string memory n) internal returns (address) { - if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("sfrxETH"))) { + if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("sfrxETH")) && block.chainid == 1) { return chainAddresses.lsd.SFRXETH_ADDRESS; } else if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("wstETH"))) { return chainAddresses.lsd.STETH_ADDRESS; @@ -86,53 +92,48 @@ contract DepositStETHToYnLSDe is BaseYnEigenScript { } } + // NOTE: not deployed on holesky function _getSFRXETH() internal returns (uint256) { - IfrxMinter frxMinter = IfrxMinter(0xbAFA44EFE7901E04E39Dad13167D089C559c1138); // @todo - holesky? - frxMinter.submitAndDeposit{value: AMOUNT}(broadcaster); - IERC4626 sfrxETH = IERC4626(chainAddresses.lsd.SFRXETH_ADDRESS); - IERC20 frxETH = IERC4626(chainAddresses.lsd.FRXETH_ADDRESS); // @todo - frxETH.approve(address(sfrxETH), AMOUNT); - return sfrxETH.deposit(AMOUNT, broadcaster); + IfrxMinter(0xbAFA44EFE7901E04E39Dad13167D089C559c1138).submitAndDeposit{value: AMOUNT}(broadcaster); + IERC4626 frxeth = IERC4626(0x5E8422345238F34275888049021821E8E08CAa1f); + frxeth.approve(chainAddresses.lsd.SFRXETH_ADDRESS, AMOUNT); + return IERC4626(chainAddresses.lsd.SFRXETH_ADDRESS).deposit(AMOUNT, broadcaster); } function _getWSTETH() internal returns (uint256) { + uint256 balanceBefore = IERC20(chainAddresses.lsd.STETH_ADDRESS).balanceOf(broadcaster); (bool sent, ) = chainAddresses.lsd.STETH_ADDRESS.call{value: AMOUNT}(""); require(sent, "Failed to send Ether"); - uint256 _stETHBalance = IERC20(chainAddresses.lsd.STETH_ADDRESS).balanceOf(broadcaster); - IERC20(chainAddresses.lsd.STETH_ADDRESS).approve(chainAddresses.lsd.WSTETH_ADDRESS, _stETHBalance); - return IwstETH(chainAddresses.lsd.WSTETH_ADDRESS).wrap(_stETHBalance); + uint256 amount = IERC20(chainAddresses.lsd.STETH_ADDRESS).balanceOf(broadcaster) - balanceBefore; + IERC20(chainAddresses.lsd.STETH_ADDRESS).approve(chainAddresses.lsd.WSTETH_ADDRESS, amount); + return IwstETH(chainAddresses.lsd.WSTETH_ADDRESS).wrap(amount); } - // function _getMETH() internal returns (uint256) { // @todo - // ImETHStaking mETHStaking = ImETHStaking(0xe3cBd06D7dadB3F4e6557bAb7EdD924CD1489E8f); - // IERC20 mETH = IERC20(chainAddresses.lsd.METH_ADDRESS); - - // uint256 ethRequired = mETHStaking.mETHToETH(amount) + 1 ether; - // vm.deal(address(this), ethRequired); - // mETHStaking.stake{value: ethRequired}(amount); - - // require(mETH.balanceOf(address(this)) >= amount, "Insufficient mETH balance after staking"); - // mETH.transfer(receiver, amount); - - // return amount; - // } - - // function _getRETH() internal returns (uint256) { // @todo - // uint256 ethRequired = AMOUNT * 1e18 / IrETH(chainAddresses.lsd.RETH_ADDRESS).getExchangeRate(); - // // NOTE: only works if pool is not at max capacity (it may be) - // IRocketPoolDepositPool(0xDD3f50F8A6CafbE9b31a427582963f465E745AF8).deposit{value: ethRequired}(); // @todo - holesky? + function _getMETH() internal returns (uint256) { + ImETHStaking mETHStaking = block.chainid == 1 + ? ImETHStaking(0xe3cBd06D7dadB3F4e6557bAb7EdD924CD1489E8f) + : ImETHStaking(0xbe16244EAe9837219147384c8A7560BA14946262); + IERC20 mETH = IERC20(chainAddresses.lsd.METH_ADDRESS); + uint256 _balanceBefore = mETH.balanceOf(broadcaster); + mETHStaking.stake{value: AMOUNT}(mETHStaking.ethToMETH(AMOUNT)); + return mETH.balanceOf(broadcaster) - _balanceBefore; + } - // require(IERC20(chainAddresses.lsd.RETH_ADDRESS).balanceOf(address(this)) >= amount, "Insufficient rETH balance after deposit"); - // IERC20(chainAddresses.lsd.RETH_ADDRESS).transfer(receiver, amount); - // } + function _getRETH() internal returns (uint256) { // NOTE: only holesky + IRocketPoolDepositPool depositPool = IRocketPoolDepositPool(0x320f3aAB9405e38b955178BBe75c477dECBA0C27); + uint256 _balanceBefore = IERC20(chainAddresses.lsd.RETH_ADDRESS).balanceOf(broadcaster); + // NOTE: only works if pool is not at max capacity (it may be) + depositPool.deposit{value: AMOUNT}(); + return IERC20(chainAddresses.lsd.RETH_ADDRESS).balanceOf(broadcaster) - _balanceBefore; + } - function _deposit(uint256 amount, address token) internal { // @todo - if token is wsteth/oeth use deposit adapter + function _deposit(uint256 amount, address token) internal { IERC20(token).approve(chainAddresses.ynEigen.YNEIGEN_ADDRESS, amount); - IynEigen(chainAddresses.ynEigen.YNEIGEN_ADDRESS).deposit(IERC20(token), amount, user); + IynEigen(chainAddresses.ynEigen.YNEIGEN_ADDRESS).deposit(IERC20(token), amount, broadcaster); } - // function _send(uint256 amount, address token) internal { // @todo - - // } + function _send(uint256 amount, address token) internal { + IERC20(token).transfer(actors.eoa.DEFAULT_SIGNER, amount); + } } \ No newline at end of file diff --git a/src/external/mantle/ImETHStaking.sol b/src/external/mantle/ImETHStaking.sol index 1468c9dca..128d7f638 100644 --- a/src/external/mantle/ImETHStaking.sol +++ b/src/external/mantle/ImETHStaking.sol @@ -5,5 +5,6 @@ import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.s interface ImETHStaking is IERC20 { function mETHToETH(uint256 mETHAmount) external view returns (uint256); + function ethToMETH(uint256 ethAmount) external view returns (uint256); function stake(uint256 minMETHAmount) external payable; } \ No newline at end of file From d63a2d3efcba294df6afd5519bb50ceb7ff70517 Mon Sep 17 00:00:00 2001 From: johnnyonline Date: Thu, 22 Aug 2024 00:41:32 +0700 Subject: [PATCH 3/5] feat: tests layout --- ...ositToYnLSDe.sol => DepositToYnLSDe.s.sol} | 22 +++++++++---------- .../ynEIGEN/DepositToYnLSDeScript.t.sol | 21 ++++++++++++++++++ 2 files changed, 32 insertions(+), 11 deletions(-) rename script/commands/{DepositToYnLSDe.sol => DepositToYnLSDe.s.sol} (90%) create mode 100644 test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol diff --git a/script/commands/DepositToYnLSDe.sol b/script/commands/DepositToYnLSDe.s.sol similarity index 90% rename from script/commands/DepositToYnLSDe.sol rename to script/commands/DepositToYnLSDe.s.sol index 0d8daf32f..01d9713be 100644 --- a/script/commands/DepositToYnLSDe.sol +++ b/script/commands/DepositToYnLSDe.s.sol @@ -18,7 +18,7 @@ interface IRocketPoolDepositPool { function deposit() external payable; } -contract DepositStETHToYnLSDe is BaseYnEigenScript { +contract DepositToYnLSDe is BaseYnEigenScript { address public broadcaster; @@ -32,7 +32,13 @@ contract DepositStETHToYnLSDe is BaseYnEigenScript { return "YnLSDe"; } - function run() external { + function run() public { + address token = _getTokenAddress(vm.prompt("Token (`sfrxETH`, `wstETH`, `mETH` and `rETH` (holesky only))")); + uint256 path = vm.parseUint(vm.prompt("Path (`0` for deposit or `1` for send")); + run(path, token); + } + + function run(uint256 path, address token) public { ContractAddresses contractAddresses = new ContractAddresses(); chainAddresses = contractAddresses.getChainAddresses(block.chainid); @@ -45,9 +51,6 @@ contract DepositStETHToYnLSDe is BaseYnEigenScript { console.log("Current Block Number:", block.number); console.log("Current Chain ID:", block.chainid); - address token = _getTokenAddress(vm.prompt("Token (`sfrxETH`, `wstETH`, `mETH` and `rETH` (holesky only))")); - uint256 path = vm.parseUint(vm.prompt("Path (`0` for deposit or `1` for send")); - vm.startBroadcast(deployerPrivateKey); uint256 _amount = _getToken(token); @@ -68,7 +71,7 @@ contract DepositStETHToYnLSDe is BaseYnEigenScript { if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("sfrxETH")) && block.chainid == 1) { return chainAddresses.lsd.SFRXETH_ADDRESS; } else if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("wstETH"))) { - return chainAddresses.lsd.STETH_ADDRESS; + return chainAddresses.lsd.WSTETH_ADDRESS; } else if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("mETH"))) { return chainAddresses.lsd.METH_ADDRESS; } else if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("rETH")) && block.chainid == 17000) { @@ -81,7 +84,7 @@ contract DepositStETHToYnLSDe is BaseYnEigenScript { function _getToken(address token) internal returns (uint256 _amount) { if (token == chainAddresses.lsd.SFRXETH_ADDRESS) { _amount = _getSFRXETH(); - } else if (token == chainAddresses.lsd.STETH_ADDRESS) { + } else if (token == chainAddresses.lsd.WSTETH_ADDRESS) { _amount = _getWSTETH(); } else if (token == chainAddresses.lsd.METH_ADDRESS) { _amount = _getMETH(); @@ -94,10 +97,7 @@ contract DepositStETHToYnLSDe is BaseYnEigenScript { // NOTE: not deployed on holesky function _getSFRXETH() internal returns (uint256) { - IfrxMinter(0xbAFA44EFE7901E04E39Dad13167D089C559c1138).submitAndDeposit{value: AMOUNT}(broadcaster); - IERC4626 frxeth = IERC4626(0x5E8422345238F34275888049021821E8E08CAa1f); - frxeth.approve(chainAddresses.lsd.SFRXETH_ADDRESS, AMOUNT); - return IERC4626(chainAddresses.lsd.SFRXETH_ADDRESS).deposit(AMOUNT, broadcaster); + return IfrxMinter(0xbAFA44EFE7901E04E39Dad13167D089C559c1138).submitAndDeposit{value: AMOUNT}(broadcaster); } function _getWSTETH() internal returns (uint256) { diff --git a/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol b/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol new file mode 100644 index 000000000..373200751 --- /dev/null +++ b/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: BSD 3-Clause License +pragma solidity ^0.8.24; + +import "../../../script/commands/DepositToYnLSDe.s.sol"; + +import "forge-std/Test.sol"; +import "forge-std/console.sol"; + +contract DepositToYnLSDeScript is DepositToYnLSDe, Test { + + function testSfrxETHDeposit() public { + // return; + run(); + } + + // function testSfrxETHSend() + // function testMETHDeposit + // function testMETHSend + // function testRETHDeposit + // function testRETHSend +} \ No newline at end of file From e885cf4628869ddfeaefbd50aee87db7a68d8b78 Mon Sep 17 00:00:00 2001 From: johnnyonline Date: Thu, 22 Aug 2024 15:17:44 +0700 Subject: [PATCH 4/5] feat: tests --- script/commands/DepositToYnLSDe.s.sol | 23 ++++++++---- .../ynEIGEN/DepositToYnLSDeScript.t.sol | 36 +++++++++++++++---- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/script/commands/DepositToYnLSDe.s.sol b/script/commands/DepositToYnLSDe.s.sol index 01d9713be..f54fec6e1 100644 --- a/script/commands/DepositToYnLSDe.s.sol +++ b/script/commands/DepositToYnLSDe.s.sol @@ -20,36 +20,37 @@ interface IRocketPoolDepositPool { contract DepositToYnLSDe is BaseYnEigenScript { + bool public shouldInit = true; + address public broadcaster; Deployment deployment; ActorAddresses.Actors actors; ContractAddresses.ChainAddresses chainAddresses; - uint256 public constant AMOUNT = 0.01 ether; + uint256 public constant AMOUNT = 0.1 ether; function tokenName() internal override pure returns (string memory) { return "YnLSDe"; } function run() public { + + if (shouldInit) _init(); + address token = _getTokenAddress(vm.prompt("Token (`sfrxETH`, `wstETH`, `mETH` and `rETH` (holesky only))")); uint256 path = vm.parseUint(vm.prompt("Path (`0` for deposit or `1` for send")); run(path, token); } function run(uint256 path, address token) public { - - ContractAddresses contractAddresses = new ContractAddresses(); - chainAddresses = contractAddresses.getChainAddresses(block.chainid); - deployment = loadDeployment(); - actors = getActors(); - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); broadcaster = vm.addr(deployerPrivateKey); console.log("Default Signer Address:", broadcaster); console.log("Current Block Number:", block.number); console.log("Current Chain ID:", block.chainid); + console.log("Token Address:", token); + console.log("Path:", path); vm.startBroadcast(deployerPrivateKey); @@ -110,6 +111,7 @@ contract DepositToYnLSDe is BaseYnEigenScript { return IwstETH(chainAddresses.lsd.WSTETH_ADDRESS).wrap(amount); } + // NOTE: fails if AMOUNT < 0.1 ether function _getMETH() internal returns (uint256) { ImETHStaking mETHStaking = block.chainid == 1 ? ImETHStaking(0xe3cBd06D7dadB3F4e6557bAb7EdD924CD1489E8f) @@ -136,4 +138,11 @@ contract DepositToYnLSDe is BaseYnEigenScript { function _send(uint256 amount, address token) internal { IERC20(token).transfer(actors.eoa.DEFAULT_SIGNER, amount); } + + function _init() internal { + ContractAddresses contractAddresses = new ContractAddresses(); + chainAddresses = contractAddresses.getChainAddresses(block.chainid); + deployment = loadDeployment(); + actors = getActors(); + } } \ No newline at end of file diff --git a/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol b/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol index 373200751..af09739ac 100644 --- a/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol +++ b/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol @@ -8,14 +8,36 @@ import "forge-std/console.sol"; contract DepositToYnLSDeScript is DepositToYnLSDe, Test { + function setUp() public { + shouldInit = false; + _init(); + } + function testSfrxETHDeposit() public { - // return; - run(); + if (block.chainid != 1) return; + run(0, chainAddresses.lsd.SFRXETH_ADDRESS); + } + + function testSfrxETHSend() public { + if (block.chainid != 1) return; + run(1, chainAddresses.lsd.SFRXETH_ADDRESS); + } + + function testMETHDeposit() public { + run(0, chainAddresses.lsd.METH_ADDRESS); } - // function testSfrxETHSend() - // function testMETHDeposit - // function testMETHSend - // function testRETHDeposit - // function testRETHSend + function testMETHSend() public { + run(1, chainAddresses.lsd.METH_ADDRESS); + } + + function testRETHDeposit() public { + if (block.chainid != 17000) return; + run(0, chainAddresses.lsd.RETH_ADDRESS); + } + + function testRETHSend() public { + if (block.chainid != 17000) return; + run(1, chainAddresses.lsd.RETH_ADDRESS); + } } \ No newline at end of file From 5d969fd0be4573bf1b526b9f7a908f75940d5bad Mon Sep 17 00:00:00 2001 From: johnnyonline Date: Thu, 22 Aug 2024 15:29:46 +0700 Subject: [PATCH 5/5] fix: ci --- script/commands/DepositToYnLSDe.s.sol | 4 +++- test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/script/commands/DepositToYnLSDe.s.sol b/script/commands/DepositToYnLSDe.s.sol index f54fec6e1..6efadadb2 100644 --- a/script/commands/DepositToYnLSDe.s.sol +++ b/script/commands/DepositToYnLSDe.s.sol @@ -20,6 +20,8 @@ interface IRocketPoolDepositPool { contract DepositToYnLSDe is BaseYnEigenScript { + uint256 public privateKey; // dev: assigned in test setup + bool public shouldInit = true; address public broadcaster; @@ -44,7 +46,7 @@ contract DepositToYnLSDe is BaseYnEigenScript { } function run(uint256 path, address token) public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + uint256 deployerPrivateKey = privateKey == 0 ? vm.envUint("PRIVATE_KEY") : privateKey; broadcaster = vm.addr(deployerPrivateKey); console.log("Default Signer Address:", broadcaster); console.log("Current Block Number:", block.number); diff --git a/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol b/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol index af09739ac..f5ba4e88d 100644 --- a/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol +++ b/test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol @@ -9,6 +9,10 @@ import "forge-std/console.sol"; contract DepositToYnLSDeScript is DepositToYnLSDe, Test { function setUp() public { + address _deployer; + (_deployer, privateKey) = makeAddrAndKey("deployer"); + vm.deal({ account: _deployer, newBalance: 100 ether }); + shouldInit = false; _init(); }