Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

script for deploying and verifying yneigen #158

Merged
Merged
Changes from 15 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
ac9bca5
added folders
MrDeadCe11 Aug 23, 2024
162d1f9
base deployer, setting up bash script
MrDeadCe11 Aug 23, 2024
da6df02
getting the bash script to start working
MrDeadCe11 Aug 23, 2024
3b036f0
script is setup and base deployer is tested
MrDeadCe11 Aug 23, 2024
3dda0ac
missing files
MrDeadCe11 Aug 23, 2024
1a69d68
script for deploying and verifying yneigen
dan13ram Aug 24, 2024
1a59226
script for deploying and verifying yneigen
dan13ram Aug 24, 2024
22433c7
foundry.toml fix
MrDeadCe11 Aug 24, 2024
22ca977
Merge branch 'feat/YnEigenScript' of https://github.com/raid-guild/yi…
MrDeadCe11 Aug 24, 2024
13b6e54
added cast wallet deployment
MrDeadCe11 Aug 24, 2024
99bf480
missing files
MrDeadCe11 Aug 24, 2024
aa836c0
missing files
MrDeadCe11 Aug 24, 2024
0cd27cb
finished bash script
MrDeadCe11 Aug 24, 2024
a7b2eef
Merge branch 'feat/YnEigen-Deployer' into feat/YnEigenScript
MrDeadCe11 Aug 24, 2024
54cd443
Merge pull request #1 from raid-guild/feat/YnEigenScript
MrDeadCe11 Aug 24, 2024
f6c3bcb
update env sample
MrDeadCe11 Aug 24, 2024
41305a4
Merge branch 'feat/YnEigen-Deployer' of https://github.com/raid-guild…
MrDeadCe11 Aug 24, 2024
89a9d0f
removed private key from the deployment script to use cast wallet
MrDeadCe11 Aug 24, 2024
902f423
added folders
MrDeadCe11 Aug 23, 2024
9057e58
base deployer, setting up bash script
MrDeadCe11 Aug 23, 2024
b21f09d
getting the bash script to start working
MrDeadCe11 Aug 23, 2024
f43667a
script is setup and base deployer is tested
MrDeadCe11 Aug 23, 2024
0241b3f
missing files
MrDeadCe11 Aug 23, 2024
89a3755
foundry.toml fix
MrDeadCe11 Aug 24, 2024
46efb0c
update env sample
MrDeadCe11 Aug 24, 2024
737b3f4
script for deploying and verifying yneigen
dan13ram Aug 24, 2024
4374aa2
added cast wallet deployment
MrDeadCe11 Aug 24, 2024
1632605
missing files
MrDeadCe11 Aug 24, 2024
25f9e96
missing files
MrDeadCe11 Aug 24, 2024
2e225d7
finished bash script
MrDeadCe11 Aug 24, 2024
d8443df
removed private key from the deployment script to use cast wallet
MrDeadCe11 Aug 24, 2024
50c153a
fixed old forge scripts + updated ynEigen make script to not require …
dan13ram Aug 25, 2024
833a55a
updated make script to also broadcast and verify
MrDeadCe11 Aug 26, 2024
d240a94
Merge branch 'feat/YnEigen-Deployer' of https://github.com/raid-guild…
MrDeadCe11 Aug 26, 2024
3ee0768
updated make script to also broadcast and verify
MrDeadCe11 Aug 26, 2024
537ac36
added verify only script to make file
MrDeadCe11 Aug 27, 2024
08134a0
added verify to bash script
MrDeadCe11 Aug 27, 2024
05b5814
rebaned original YnLSDe-17000 to YnLSDe-17000-original.json
MrDeadCe11 Aug 27, 2024
eea4473
fixed bash cases
MrDeadCe11 Aug 27, 2024
8fceacd
working factory but over the size limit
dan13ram Aug 25, 2024
8415a75
refactored scripts
dan13ram Aug 25, 2024
41139e5
refactor ynEigenViewer to support initialization
dan13ram Aug 25, 2024
b6cd0a4
minor fix for ynEigenViewer
dan13ram Aug 25, 2024
bc3da91
read account name from .env
dan13ram Aug 27, 2024
c2dd3fb
Merge pull request #2 from raid-guild/feat/ynEigen-Factory
dan13ram Aug 27, 2024
72b0da4
fixed make file
dan13ram Aug 27, 2024
334c850
Revert "refactor ynEigenViewer to support initialization"
dan13ram Aug 27, 2024
498985f
use generic rpc_url, remove unwanted files
dan13ram Aug 27, 2024
c08e7a4
revert ContractAddresses.sol
dan13ram Aug 27, 2024
6af03e4
fixed assets in inputJson for ynLSDe
MrDeadCe11 Aug 27, 2024
c86dc0c
moved YNEigenStructs and YnEigenFactory to the script/YnEigen folder …
MrDeadCe11 Aug 27, 2024
55aa1d9
added missing files
MrDeadCe11 Aug 27, 2024
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
190 changes: 0 additions & 190 deletions deployments/MockOETH-17000.json

This file was deleted.

4 changes: 2 additions & 2 deletions deployments/YnLSDe-1.json
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@
"UNPAUSE_ADMIN": "0xfcad670592a3b24869C0b51a6c6FDED4F95D6975",
"YNDev": "0xa08F39d30dc865CC11a49b6e5cBd27630D6141C3",
"YnSecurityCouncil": "0xfcad670592a3b24869C0b51a6c6FDED4F95D6975",
"implementation-YnLSDe": "0x143a5c73bFc78842a95705db242774fc7Fa5c3B3",
"implementation-YnLSDe": "0x3688bAce1C507b368b5061F97cB48037f0Df6b2f",
"implementation-assetRegistry": "0x84dA5aB890B0a3314deEd0BeBd2463309a755EAc",
"implementation-eigenStrategyManager": "0xE2343a850394ee1b1e33b16Da5bD73B076D6Fa81",
"implementation-rateProvider": "0xAEDC83F607126b4D2437F79285e2C635685BBA01",
@@ -23,7 +23,7 @@
"proxy-eigenStrategyManager": "0x92D904019A92B0Cafce3492Abb95577C285A68fC",
"proxy-rateProvider": "0xb658Cf6F4C232Be5c6035f2b42b96393089F20D9",
"proxy-tokenStakingNodesManager": "0x6B566CB6cDdf7d140C59F84594756a151030a0C3",
"proxy-ynEigenDepositAdapter": "0x9e72155d301a6555dc565315be72D295c76753c0",
"proxy-ynEigenDepositAdapter": "0xA9CD5a5199177b704287e379e85af95F0f061Bf2",
"proxy-ynEigenViewer": "0x9B933D84Fac0782F3B275D76B64a0DBf6FBEf28F",
"proxyAdmin-YnLSDe": "0x1bfF798A6072597c401f7C83A6a1096Ae5F0aFf7",
"proxyAdmin-assetRegistry": "0xDf92BE359fB53846cCdaC8FFF1884314533949C7",
4 changes: 2 additions & 2 deletions deployments/YnLSDe-17000.json
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@
"implementation-eigenStrategyManager": "0xc599064e66FB509FD49B5083896649a742066758",
"implementation-rateProvider": "0x94009d1296dc2e6370Aa34c94BEDFeD55f96a276",
"implementation-tokenStakingNodesManager": "0xAD89Fd40BE78811E279C89FF15DC3B831785192D",
"implementation-ynEigenDepositAdapter": "0x6A8A62bD2E8fd57477B73cdecdF03EeA27Bc27b9",
"implementation-ynEigenDepositAdapter": "0x7af5cc12cee35dee9ccd0aa4d5e1772eb45b2046",
"implementation-ynEigenViewer": "0x85bB85b81Db2f9b446e9100057420AE5DE7232E4",
"proxy-YnLSDe": "0x071bdC8eDcdD66730f45a3D3A6F794FAA37C75ED",
"proxy-assetRegistry": "0xaD31546AdbfE1EcD7137310508f112039a35b6F7",
@@ -25,7 +25,7 @@
"proxy-tokenStakingNodesManager": "0x5c20D1a85C7d9acB503135a498E26Eb55d806552",
"proxy-ynEigenDepositAdapter": "0x7d0c1F604571a1c015684e6c15f2DdEc432C5e74",
"proxy-ynEigenViewer": "0xECCE549926637E974Ca5739a8827E612682415E7",
"proxyAdmin-YnLSDe": "0x31456Eef519b7ab236e3638297Ed392390bf304F",
"proxyAdmin-YnLSDe": "0x92Df7b6001EF4cFe40B6b425bC4a358c05f27624",
"proxyAdmin-assetRegistry": "0x4248392db8Ee31aA579822207d059A28A38c4510",
"proxyAdmin-eigenStrategyManager": "0x010c60d663fddDAA076F0cE63f6692f0b5605fE5",
"proxyAdmin-rateProvider": "0x401af3714dc0c0d28f752dbdd70cf423c667246e",

Large diffs are not rendered by default.

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions script/BaseYnEigenScript.s.sol
Original file line number Diff line number Diff line change
@@ -55,16 +55,16 @@ contract BaseYnEigenScript is BaseScript {
ContractAddresses.ChainAddresses public chainAddresses;

address internal _deployer;
uint256 internal _chainId;
string internal _network;

constructor() {
_deployer = vm.envAddress("DEPLOYER_ADDRESS");

actors = getActors();
chainAddresses = getChainAddresses();
}

function _initDeployer() internal {
_deployer = msg.sender; // set by --sender when running the script
}

function _loadJson(string memory _path) internal {
string memory path = string(abi.encodePacked(vm.projectRoot(), "/", _path));
string memory json = vm.readFile(path);
131 changes: 131 additions & 0 deletions script/commands/DepositToYnLSDe.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@

// SPDX-License-Identifier: BSD 3-Clause License
pragma solidity ^0.8.24;

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 {ImETHStaking} from "../../src/external/mantle/ImETHStaking.sol";
import {IfrxMinter} from "../../src/external/frax/IfrxMinter.sol";

import {ContractAddresses as ContractAddressesOld} from "../../test/utils/ContractAddresses.sol";

import "../BaseYnEigenScript.s.sol";

interface IRocketPoolDepositPool {
function deposit() external payable;
}

contract DepositToYnLSDe is BaseYnEigenScript {
uint256 public privateKey; // dev: assigned in test setup

address public broadcaster;

uint256 public constant AMOUNT = 0.1 ether;

ContractAddressesOld.ChainAddresses chainAddressesOld = (new ContractAddressesOld()).getChainAddresses(block.chainid);

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 {
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);
console.log("Current Chain ID:", block.chainid);
console.log("Token Address:", token);
console.log("Path:", path);

vm.startBroadcast(deployerPrivateKey);

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");
}

function _getTokenAddress(string memory n) internal view returns (address) {
if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("sfrxETH")) && block.chainid == 1) {
return chainAddressesOld.lsd.SFRXETH_ADDRESS;
} else if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("wstETH"))) {
return chainAddressesOld.lsd.WSTETH_ADDRESS;
} else if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("mETH"))) {
return chainAddressesOld.lsd.METH_ADDRESS;
} else if (keccak256(abi.encodePacked(n)) == keccak256(abi.encodePacked("rETH")) && block.chainid == 17000) {
return chainAddressesOld.lsd.RETH_ADDRESS;
} else {
revert("Invalid token name");
}
}

function _getToken(address token) internal returns (uint256 _amount) {
if (token == chainAddressesOld.lsd.SFRXETH_ADDRESS) {
_amount = _getSFRXETH();
} else if (token == chainAddressesOld.lsd.WSTETH_ADDRESS) {
_amount = _getWSTETH();
} else if (token == chainAddressesOld.lsd.METH_ADDRESS) {
_amount = _getMETH();
} else if (token == chainAddressesOld.lsd.RETH_ADDRESS) {
_amount = _getRETH();
} else {
revert("Invalid token address");
}
}

// NOTE: not deployed on holesky
function _getSFRXETH() internal returns (uint256) {
return IfrxMinter(0xbAFA44EFE7901E04E39Dad13167D089C559c1138).submitAndDeposit{value: AMOUNT}(broadcaster);
}

function _getWSTETH() internal returns (uint256) {
uint256 balanceBefore = IERC20(chainAddressesOld.lsd.STETH_ADDRESS).balanceOf(broadcaster);
(bool sent, ) = chainAddressesOld.lsd.STETH_ADDRESS.call{value: AMOUNT}("");
require(sent, "Failed to send Ether");

uint256 amount = IERC20(chainAddressesOld.lsd.STETH_ADDRESS).balanceOf(broadcaster) - balanceBefore;
IERC20(chainAddressesOld.lsd.STETH_ADDRESS).approve(chainAddressesOld.lsd.WSTETH_ADDRESS, amount);
return IwstETH(chainAddressesOld.lsd.WSTETH_ADDRESS).wrap(amount);
}

// NOTE: fails if AMOUNT < 0.1 ether
function _getMETH() internal returns (uint256) {
ImETHStaking mETHStaking = block.chainid == 1
? ImETHStaking(0xe3cBd06D7dadB3F4e6557bAb7EdD924CD1489E8f)
: ImETHStaking(0xbe16244EAe9837219147384c8A7560BA14946262);
IERC20 mETH = IERC20(chainAddressesOld.lsd.METH_ADDRESS);
uint256 _balanceBefore = mETH.balanceOf(broadcaster);
mETHStaking.stake{value: AMOUNT}(mETHStaking.ethToMETH(AMOUNT));
return mETH.balanceOf(broadcaster) - _balanceBefore;
}

function _getRETH() internal returns (uint256) { // NOTE: only holesky
IRocketPoolDepositPool depositPool = IRocketPoolDepositPool(0x320f3aAB9405e38b955178BBe75c477dECBA0C27);
uint256 _balanceBefore = IERC20(chainAddressesOld.lsd.RETH_ADDRESS).balanceOf(broadcaster);
// NOTE: only works if pool is not at max capacity (it may be)
depositPool.deposit{value: AMOUNT}();
return IERC20(chainAddressesOld.lsd.RETH_ADDRESS).balanceOf(broadcaster) - _balanceBefore;
}

function _deposit(uint256 amount, address token) internal {
IERC20(token).approve(chainAddressesOld.ynEigen.YNEIGEN_ADDRESS, amount);
IynEigen(chainAddressesOld.ynEigen.YNEIGEN_ADDRESS).deposit(IERC20(token), amount, broadcaster);
}

function _send(uint256 amount, address token) internal {
IERC20(token).transfer(actors.eoa.DEFAULT_SIGNER, amount);
}
}
81 changes: 0 additions & 81 deletions script/commands/DepositToYnLSDe.sol

This file was deleted.

1 change: 1 addition & 0 deletions script/ynEigen/YnEigenScript.s.sol
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@ import {console} from "lib/forge-std/src/console.sol";

contract YnEigenScript is YnEigenDeployer, YnEigenVerifier {
function run(string memory _filePath) public {
_initDeployer();
_loadJson(_filePath);
_validateNetwork();

1 change: 1 addition & 0 deletions src/external/mantle/ImETHStaking.sol
Original file line number Diff line number Diff line change
@@ -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;
}
2 changes: 2 additions & 0 deletions src/ynEIGEN/ynEigenViewer.sol
Original file line number Diff line number Diff line change
@@ -21,10 +21,12 @@ contract ynEigenViewer {
uint256 totalBalance;
}

/* solhint-disable immutable-vars-naming */
AssetRegistry public immutable assetRegistry;
IynEigen public immutable ynEIGEN;
ITokenStakingNodesManager public immutable tokenStakingNodesManager;
IRateProvider public immutable rateProvider;
/* solhint-enable immutable-vars-naming */

uint256 public constant DECIMALS = 1_000_000;
uint256 public constant UNIT = 1 ether;
28 changes: 0 additions & 28 deletions test/integration/Roles.t.sol
Original file line number Diff line number Diff line change
@@ -131,34 +131,6 @@ contract RolesTest is IntegrationBaseTest {
assertTrue(executionLayerReceiver.hasRole(WITHDRAWER_ROLE, newRewardsDistributor));
assertFalse(executionLayerReceiver.hasRole(WITHDRAWER_ROLE, address(rewardsDistributor)));
}

// function testRoleChangeYnLSD() public {
// address newStakingAdmin = address(0xABC);
// bytes32 STAKING_ADMIN_ROLE = keccak256("STAKING_ADMIN_ROLE");
// bytes32 LSD_RESTAKING_MANAGER_ROLE = keccak256("LSD_RESTAKING_MANAGER_ROLE");
// bytes32 LSD_STAKING_NODE_CREATOR_ROLE = keccak256("LSD_STAKING_NODE_CREATOR_ROLE");

// assertTrue(ynlsd.hasRole(ynlsd.DEFAULT_ADMIN_ROLE(), actors.admin.ADMIN));
// assertTrue(ynlsd.hasRole(STAKING_ADMIN_ROLE, actors.admin.STAKING_ADMIN));
// assertTrue(ynlsd.hasRole(LSD_RESTAKING_MANAGER_ROLE, actors.ops.LSD_RESTAKING_MANAGER));
// assertTrue(ynlsd.hasRole(LSD_STAKING_NODE_CREATOR_ROLE, actors.ops.STAKING_NODE_CREATOR));

// vm.startPrank(actors.admin.ADMIN);
// ynlsd.grantRole(STAKING_ADMIN_ROLE, newStakingAdmin);
// ynlsd.revokeRole(STAKING_ADMIN_ROLE, actors.admin.STAKING_ADMIN);
// ynlsd.grantRole(LSD_RESTAKING_MANAGER_ROLE, newStakingAdmin);
// ynlsd.revokeRole(LSD_RESTAKING_MANAGER_ROLE, actors.ops.LSD_RESTAKING_MANAGER);
// ynlsd.grantRole(LSD_STAKING_NODE_CREATOR_ROLE, newStakingAdmin);
// ynlsd.revokeRole(LSD_STAKING_NODE_CREATOR_ROLE, actors.ops.STAKING_NODE_CREATOR);
// vm.stopPrank();

// assertTrue(ynlsd.hasRole(STAKING_ADMIN_ROLE, newStakingAdmin));
// assertTrue(ynlsd.hasRole(LSD_RESTAKING_MANAGER_ROLE, newStakingAdmin));
// assertTrue(ynlsd.hasRole(LSD_STAKING_NODE_CREATOR_ROLE, newStakingAdmin));
// assertFalse(ynlsd.hasRole(STAKING_ADMIN_ROLE, actors.admin.STAKING_ADMIN));
// assertFalse(ynlsd.hasRole(LSD_RESTAKING_MANAGER_ROLE, actors.ops.LSD_RESTAKING_MANAGER));
// assertFalse(ynlsd.hasRole(LSD_STAKING_NODE_CREATOR_ROLE, actors.ops.STAKING_NODE_CREATOR));
// }
}


44 changes: 44 additions & 0 deletions test/integration/ynEIGEN/DepositToYnLSDeScript.t.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// 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 setUp() public {
address _deployer;
(_deployer, privateKey) = makeAddrAndKey("deployer");
vm.deal({ account: _deployer, newBalance: 100 ether });
}

function testSfrxETHDeposit() public {
if (block.chainid != 1) return;
run(0, chainAddressesOld.lsd.SFRXETH_ADDRESS);
}

function testSfrxETHSend() public {
if (block.chainid != 1) return;
run(1, chainAddressesOld.lsd.SFRXETH_ADDRESS);
}

function testMETHDeposit() public {
run(0, chainAddressesOld.lsd.METH_ADDRESS);
}

function testMETHSend() public {
run(1, chainAddressesOld.lsd.METH_ADDRESS);
}

function testRETHDeposit() public {
if (block.chainid != 17000) return;
run(0, chainAddressesOld.lsd.RETH_ADDRESS);
}

function testRETHSend() public {
if (block.chainid != 17000) return;
run(1, chainAddressesOld.lsd.RETH_ADDRESS);
}
}
Loading