Skip to content

Commit

Permalink
test: update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
failingtwice committed Nov 28, 2024
1 parent 29cde40 commit 137ced5
Show file tree
Hide file tree
Showing 15 changed files with 218 additions and 531 deletions.
4 changes: 2 additions & 2 deletions contracts/0.8.25/vaults/StVaultOwnerWithDashboard.sol
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ contract StVaultOwnerWithDashboard is AccessControlEnumerable {
* @notice Rebalances the vault by transferring ether
* @param _ether Amount of ether to rebalance
*/
function rebalanceVault(uint256 _ether) external virtual onlyRole(DEFAULT_ADMIN_ROLE) {
function rebalanceVault(uint256 _ether) external payable virtual onlyRole(DEFAULT_ADMIN_ROLE) fundAndProceed {
_rebalanceVault(_ether);
}

Expand Down Expand Up @@ -297,7 +297,7 @@ contract StVaultOwnerWithDashboard is AccessControlEnumerable {
* @param _ether Amount of ether to rebalance
*/
function _rebalanceVault(uint256 _ether) internal {
stakingVault.rebalance(_ether);
stakingVault.rebalance{value: msg.value}(_ether);
}

// ==================== Events ====================
Expand Down
12 changes: 6 additions & 6 deletions contracts/0.8.25/vaults/StVaultOwnerWithDelegation.sol
Original file line number Diff line number Diff line change
Expand Up @@ -138,15 +138,15 @@ contract StVaultOwnerWithDelegation is StVaultOwnerWithDashboard, IReportReceive
_grantRole(LIDO_DAO_ROLE, _defaultAdmin);

/**
* The node operator in the vault must be approved by Lido DAO.
* The vault owner (`DEFAULT_ADMIN_ROLE`) cannot change the node operator.
* Only Lido DAO can assign the Lido DAO role.
*/
_setRoleAdmin(OPERATOR_ROLE, LIDO_DAO_ROLE);
_setRoleAdmin(LIDO_DAO_ROLE, LIDO_DAO_ROLE);

/**
* Only Lido DAO can assign the Lido DAO role.
* The node operator in the vault must be approved by Lido DAO.
* The vault owner (`DEFAULT_ADMIN_ROLE`) cannot change the node operator.
*/
_setRoleAdmin(LIDO_DAO_ROLE, LIDO_DAO_ROLE);
_setRoleAdmin(OPERATOR_ROLE, LIDO_DAO_ROLE);

/**
* The operator role can change the key master role.
Expand Down Expand Up @@ -358,7 +358,7 @@ contract StVaultOwnerWithDelegation is StVaultOwnerWithDashboard, IReportReceive
* @notice Rebalances the vault by transferring ether.
* @param _ether Amount of ether to rebalance.
*/
function rebalanceVault(uint256 _ether) external override onlyRole(MANAGER_ROLE) {
function rebalanceVault(uint256 _ether) external payable override onlyRole(MANAGER_ROLE) fundAndProceed {
_rebalanceVault(_ether);
}

Expand Down
2 changes: 1 addition & 1 deletion contracts/0.8.25/vaults/StakingVault.sol
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ contract StakingVault is IStakingVault, IBeaconProxy, VaultBeaconChainDepositor,
}

// TODO: SHOULD THIS BE PAYABLE?
function rebalance(uint256 _ether) external {
function rebalance(uint256 _ether) external payable {
if (_ether == 0) revert ZeroArgument("_ether");
if (_ether > address(this).balance) revert InsufficientBalance(address(this).balance);
// TODO: should we revert on msg.value > _ether
Expand Down
150 changes: 0 additions & 150 deletions contracts/0.8.25/vaults/VaultDashboard.sol

This file was deleted.

97 changes: 55 additions & 42 deletions contracts/0.8.25/vaults/VaultFactory.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,89 +9,102 @@ import {IStakingVault} from "./interfaces/IStakingVault.sol";

pragma solidity 0.8.25;

interface IVaultStaffRoom {
struct VaultStaffRoomParams {
interface IStVaultOwnerWithDelegation {
struct InitializationParams {
uint256 managementFee;
uint256 performanceFee;
address manager;
address operator;
}

function OWNER() external view returns (bytes32);
function DEFAULT_ADMIN_ROLE() external view returns (bytes32);

function MANAGER_ROLE() external view returns (bytes32);

function OPERATOR_ROLE() external view returns (bytes32);

function LIDO_DAO_ROLE() external view returns (bytes32);

function initialize(address admin, address stakingVault) external;

function setManagementFee(uint256 _newManagementFee) external;

function setPerformanceFee(uint256 _newPerformanceFee) external;

function grantRole(bytes32 role, address account) external;

function revokeRole(bytes32 role, address account) external;
}

contract VaultFactory is UpgradeableBeacon {

address public immutable vaultStaffRoomImpl;
address public immutable stVaultOwnerWithDelegationImpl;

/// @param _owner The address of the VaultFactory owner
/// @param _stakingVaultImpl The address of the StakingVault implementation
/// @param _vaultStaffRoomImpl The address of the VaultStaffRoom implementation
constructor(address _owner, address _stakingVaultImpl, address _vaultStaffRoomImpl) UpgradeableBeacon(_stakingVaultImpl, _owner) {
if (_vaultStaffRoomImpl == address(0)) revert ZeroArgument("_vaultStaffRoom");

vaultStaffRoomImpl = _vaultStaffRoomImpl;
/// @param _stVaultOwnerWithDelegationImpl The address of the StVaultOwnerWithDelegation implementation
constructor(
address _owner,
address _stakingVaultImpl,
address _stVaultOwnerWithDelegationImpl
) UpgradeableBeacon(_stakingVaultImpl, _owner) {
if (_stVaultOwnerWithDelegationImpl == address(0)) revert ZeroArgument("_stVaultOwnerWithDelegation");

stVaultOwnerWithDelegationImpl = _stVaultOwnerWithDelegationImpl;
}

/// @notice Creates a new StakingVault and VaultStaffRoom contracts
/// @notice Creates a new StakingVault and StVaultOwnerWithDelegation contracts
/// @param _stakingVaultParams The params of vault initialization
/// @param _vaultStaffRoomParams The params of vault initialization
/// @param _initializationParams The params of vault initialization
function createVault(
bytes calldata _stakingVaultParams,
IVaultStaffRoom.VaultStaffRoomParams calldata _vaultStaffRoomParams
)
external
returns(IStakingVault vault, IVaultStaffRoom vaultStaffRoom)
{
if (_vaultStaffRoomParams.manager == address(0)) revert ZeroArgument("manager");
if (_vaultStaffRoomParams.operator == address(0)) revert ZeroArgument("operator");
IStVaultOwnerWithDelegation.InitializationParams calldata _initializationParams,
address _lidoAgent
) external returns (IStakingVault vault, IStVaultOwnerWithDelegation stVaultOwnerWithDelegation) {
if (_initializationParams.manager == address(0)) revert ZeroArgument("manager");
if (_initializationParams.operator == address(0)) revert ZeroArgument("operator");

vault = IStakingVault(address(new BeaconProxy(address(this), "")));

vaultStaffRoom = IVaultStaffRoom(Clones.clone(vaultStaffRoomImpl));
stVaultOwnerWithDelegation = IStVaultOwnerWithDelegation(Clones.clone(stVaultOwnerWithDelegationImpl));

//grant roles for factory to set fees and roles
vaultStaffRoom.initialize(address(this), address(vault));
stVaultOwnerWithDelegation.initialize(address(this), address(vault));

vaultStaffRoom.grantRole(vaultStaffRoom.MANAGER_ROLE(), _vaultStaffRoomParams.manager);
vaultStaffRoom.grantRole(vaultStaffRoom.OPERATOR_ROLE(), _vaultStaffRoomParams.operator);
vaultStaffRoom.grantRole(vaultStaffRoom.OWNER(), msg.sender);
stVaultOwnerWithDelegation.grantRole(stVaultOwnerWithDelegation.LIDO_DAO_ROLE(), _lidoAgent);
stVaultOwnerWithDelegation.grantRole(stVaultOwnerWithDelegation.MANAGER_ROLE(), _initializationParams.manager);
stVaultOwnerWithDelegation.grantRole(
stVaultOwnerWithDelegation.OPERATOR_ROLE(),
_initializationParams.operator
);
stVaultOwnerWithDelegation.grantRole(stVaultOwnerWithDelegation.DEFAULT_ADMIN_ROLE(), msg.sender);

vaultStaffRoom.grantRole(vaultStaffRoom.MANAGER_ROLE(), address(this));
vaultStaffRoom.setManagementFee(_vaultStaffRoomParams.managementFee);
vaultStaffRoom.setPerformanceFee(_vaultStaffRoomParams.performanceFee);
stVaultOwnerWithDelegation.grantRole(stVaultOwnerWithDelegation.MANAGER_ROLE(), address(this));
stVaultOwnerWithDelegation.setManagementFee(_initializationParams.managementFee);
stVaultOwnerWithDelegation.setPerformanceFee(_initializationParams.performanceFee);

//revoke roles from factory
vaultStaffRoom.revokeRole(vaultStaffRoom.MANAGER_ROLE(), address(this));
vaultStaffRoom.revokeRole(vaultStaffRoom.OWNER(), address(this));
stVaultOwnerWithDelegation.revokeRole(stVaultOwnerWithDelegation.MANAGER_ROLE(), address(this));
stVaultOwnerWithDelegation.revokeRole(stVaultOwnerWithDelegation.DEFAULT_ADMIN_ROLE(), address(this));
stVaultOwnerWithDelegation.revokeRole(stVaultOwnerWithDelegation.LIDO_DAO_ROLE(), address(this));

vault.initialize(address(vaultStaffRoom), _stakingVaultParams);
vault.initialize(address(stVaultOwnerWithDelegation), _stakingVaultParams);

emit VaultCreated(address(vaultStaffRoom), address(vault));
emit VaultStaffRoomCreated(msg.sender, address(vaultStaffRoom));
emit VaultCreated(address(stVaultOwnerWithDelegation), address(vault));
emit StVaultOwnerWithDelegationCreated(msg.sender, address(stVaultOwnerWithDelegation));
}

/**
* @notice Event emitted on a Vault creation
* @param owner The address of the Vault owner
* @param vault The address of the created Vault
*/
* @notice Event emitted on a Vault creation
* @param owner The address of the Vault owner
* @param vault The address of the created Vault
*/
event VaultCreated(address indexed owner, address indexed vault);

/**
* @notice Event emitted on a VaultStaffRoom creation
* @param admin The address of the VaultStaffRoom admin
* @param vaultStaffRoom The address of the created VaultStaffRoom
*/
event VaultStaffRoomCreated(address indexed admin, address indexed vaultStaffRoom);
* @notice Event emitted on a StVaultOwnerWithDelegation creation
* @param admin The address of the StVaultOwnerWithDelegation admin
* @param stVaultOwnerWithDelegation The address of the created StVaultOwnerWithDelegation
*/
event StVaultOwnerWithDelegationCreated(address indexed admin, address indexed stVaultOwnerWithDelegation);

error ZeroArgument(string);
}
Loading

0 comments on commit 137ced5

Please sign in to comment.