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

[SI][Vaults] feat: Dashboard UX updates #915

Merged
merged 43 commits into from
Jan 29, 2025
Merged

Conversation

DiRaiks
Copy link
Contributor

@DiRaiks DiRaiks commented Jan 9, 2025

A short summary of the changes.

Context

General

  • Fixed file imports.

Dashboard Contract

  • Added LidoLocator for retrieving stETH and wstETH contract addresses.
  • Implemented initial approval for stETH to wstETH.
  • Renamed getMintableShares to projectedMintableShares.
  • Updated mintWstETH to utilize the initial approval of stETH.
  • Updated burnWstETH to align with changes in the _burn method.
  • Updated burnWithPermit to align with changes in the _burn method.
  • Updated burnWstETHWithPermit to align with changes in the _burn method.
  • renamed burn -> burnShares
  • renamed mint -> mintShares
  • Refactored burn/fund methods to accommodate changes in _burn/_fund:
    • _fund now takes value as an argument.
    • _burn now accepts _sender and _amountOfShares as arguments.
      • Depending on the _sender type, either transferShares or transferSharesFrom is executed.
      • transferShares is used if the operation originates from the Dashboard contract to avoid additional stETH approvals.

Delegation Contract

  • Updated constructor interface to align with changes in the Dashboard contract.
  • Adjusted fund/burn methods to account for updates to _burn/_fund in the Dashboard contract.

Testing

  • Added tests for Permit functionality when the shares-to-stETH ratio is not 1:1 (e.g., 1 share = 0.5 stETH, 1 share = 2 stETH).
  • Added tests to verify LidoLocator setup in the constructor.

Additional Notes

  • The Permit mechanism with stETH during rebalancing of the shares-to-stETH ratio will still use the value of stETH tokens. As a result, the values passed to the burnWithPermit method and those signed in the Permit may differ. To address this, the StETHPermit contract would need updates, but this could introduce unnecessary overhead.

Problem

What problem this PR solves, link relevant issue if it exists

Solution

Your proposed solution

@DiRaiks DiRaiks requested a review from a team as a code owner January 9, 2025 09:49
contracts/0.8.25/vaults/Dashboard.sol Outdated Show resolved Hide resolved
contracts/0.8.25/vaults/Dashboard.sol Outdated Show resolved Hide resolved
test/0.8.25/vaults/dashboard/dashboard.test.ts Outdated Show resolved Hide resolved
contracts/0.8.25/vaults/Dashboard.sol Outdated Show resolved Hide resolved
contracts/0.8.25/vaults/Dashboard.sol Outdated Show resolved Hide resolved
test/0.8.25/vaults/dashboard/dashboard.test.ts Outdated Show resolved Hide resolved
test/0.8.25/vaults/dashboard/dashboard.test.ts Outdated Show resolved Hide resolved
test/0.8.25/vaults/delegation/delegation.test.ts Outdated Show resolved Hide resolved
Copy link

github-actions bot commented Jan 10, 2025

badge

Hardhat Unit Tests Coverage Summary

Filename                                                       Stmts    Miss  Cover    Missing
-----------------------------------------------------------  -------  ------  -------  ------------------------------------------------------------------------------
contracts/0.4.24/Lido.sol                                        201       6  97.01%   741, 746, 787-789, 946-947
contracts/0.4.24/StETH.sol                                        79       0  100.00%
contracts/0.4.24/StETHPermit.sol                                  15       0  100.00%
contracts/0.4.24/lib/Packed64x4.sol                                5       0  100.00%
contracts/0.4.24/lib/SigningKeys.sol                              36       0  100.00%
contracts/0.4.24/lib/StakeLimitUtils.sol                          37       0  100.00%
contracts/0.4.24/nos/NodeOperatorsRegistry.sol                   512       0  100.00%
contracts/0.4.24/oracle/LegacyOracle.sol                          72       0  100.00%
contracts/0.4.24/utils/Pausable.sol                                9       0  100.00%
contracts/0.4.24/utils/Versioned.sol                               5       0  100.00%
contracts/0.6.12/WstETH.sol                                       17       0  100.00%
contracts/0.8.25/Accounting.sol                                   90       5  94.44%   117-120, 346, 372
contracts/0.8.25/interfaces/IDepositContract.sol                   0       0  100.00%
contracts/0.8.25/interfaces/ILido.sol                              0       0  100.00%
contracts/0.8.25/interfaces/IOracleReportSanityChecker.sol         0       0  100.00%
contracts/0.8.25/interfaces/IPostTokenRebaseReceiver.sol           0       0  100.00%
contracts/0.8.25/interfaces/IStakingRouter.sol                     0       0  100.00%
contracts/0.8.25/interfaces/IWithdrawalQueue.sol                   0       0  100.00%
contracts/0.8.25/utils/AccessControlVoteable.sol                  29       0  100.00%
contracts/0.8.25/utils/PausableUntilWithRoles.sol                  3       0  100.00%
contracts/0.8.25/vaults/Dashboard.sol                             90       6  93.33%   473-489
contracts/0.8.25/vaults/Delegation.sol                            39       0  100.00%
contracts/0.8.25/vaults/Permissions.sol                           27       0  100.00%
contracts/0.8.25/vaults/StakingVault.sol                         101       0  100.00%
contracts/0.8.25/vaults/VaultFactory.sol                          32       0  100.00%
contracts/0.8.25/vaults/VaultHub.sol                             144     102  29.17%   111-124, 180-269, 284-350, 382-431, 443-451, 457-487, 501
contracts/0.8.25/vaults/interfaces/IStakingVault.sol               0       0  100.00%
contracts/0.8.4/WithdrawalsManagerProxy.sol                       61       0  100.00%
contracts/0.8.9/BeaconChainDepositor.sol                          21       2  90.48%   48, 51
contracts/0.8.9/Burner.sol                                        72       0  100.00%
contracts/0.8.9/DepositSecurityModule.sol                        128       0  100.00%
contracts/0.8.9/EIP712StETH.sol                                   16       0  100.00%
contracts/0.8.9/LidoExecutionLayerRewardsVault.sol                16       0  100.00%
contracts/0.8.9/LidoLocator.sol                                   20       0  100.00%
contracts/0.8.9/OracleDaemonConfig.sol                            28       0  100.00%
contracts/0.8.9/StakingRouter.sol                                316       0  100.00%
contracts/0.8.9/WithdrawalQueue.sol                               88       0  100.00%
contracts/0.8.9/WithdrawalQueueBase.sol                          146       0  100.00%
contracts/0.8.9/WithdrawalQueueERC721.sol                         89       0  100.00%
contracts/0.8.9/WithdrawalVault.sol                               21       0  100.00%
contracts/0.8.9/lib/Math.sol                                       4       0  100.00%
contracts/0.8.9/lib/PositiveTokenRebaseLimiter.sol                22      22  0.00%    88-172
contracts/0.8.9/lib/UnstructuredRefStorage.sol                     2       0  100.00%
contracts/0.8.9/oracle/AccountingOracle.sol                      190       2  98.95%   154-155
contracts/0.8.9/oracle/BaseOracle.sol                             89       1  98.88%   397
contracts/0.8.9/oracle/HashConsensus.sol                         263       1  99.62%   1005
contracts/0.8.9/oracle/ValidatorsExitBusOracle.sol                91      91  0.00%    96-461
contracts/0.8.9/proxy/OssifiableProxy.sol                         17       0  100.00%
contracts/0.8.9/sanity_checks/OracleReportSanityChecker.sol      218      56  74.31%   195, 232, 273-324, 413-441, 495-507, 558-561, 569, 578, 586, 697, 702-747, 802
contracts/0.8.9/utils/DummyEmptyContract.sol                       0       0  100.00%
contracts/0.8.9/utils/PausableUntil.sol                           31       0  100.00%
contracts/0.8.9/utils/Versioned.sol                               11       0  100.00%
contracts/0.8.9/utils/access/AccessControl.sol                    23       0  100.00%
contracts/0.8.9/utils/access/AccessControlEnumerable.sol           9       0  100.00%
contracts/common/utils/PausableUntil.sol                          29       1  96.55%   33
contracts/testnets/sepolia/SepoliaDepositAdapter.sol              21      21  0.00%    49-100
TOTAL                                                           3585     316  91.19%

Diff against master

Filename                                                       Stmts    Miss  Cover
-----------------------------------------------------------  -------  ------  --------
contracts/0.4.24/Lido.sol                                        -11      +6  -2.99%
contracts/0.4.24/StETH.sol                                        +7       0  +100.00%
contracts/0.8.25/Accounting.sol                                  +90      +5  +94.44%
contracts/0.8.25/interfaces/IDepositContract.sol                   0       0  +100.00%
contracts/0.8.25/interfaces/ILido.sol                              0       0  +100.00%
contracts/0.8.25/interfaces/IOracleReportSanityChecker.sol         0       0  +100.00%
contracts/0.8.25/interfaces/IPostTokenRebaseReceiver.sol           0       0  +100.00%
contracts/0.8.25/interfaces/IStakingRouter.sol                     0       0  +100.00%
contracts/0.8.25/interfaces/IWithdrawalQueue.sol                   0       0  +100.00%
contracts/0.8.25/utils/AccessControlVoteable.sol                 +29       0  +100.00%
contracts/0.8.25/utils/PausableUntilWithRoles.sol                 +3       0  +100.00%
contracts/0.8.25/vaults/Dashboard.sol                            +90      +6  +93.33%
contracts/0.8.25/vaults/Delegation.sol                           +39       0  +100.00%
contracts/0.8.25/vaults/Permissions.sol                          +27       0  +100.00%
contracts/0.8.25/vaults/StakingVault.sol                        +101       0  +100.00%
contracts/0.8.25/vaults/VaultFactory.sol                         +32       0  +100.00%
contracts/0.8.25/vaults/VaultHub.sol                            +144    +102  +29.17%
contracts/0.8.25/vaults/interfaces/IStakingVault.sol               0       0  +100.00%
contracts/0.8.9/Burner.sol                                        +1       0  +100.00%
contracts/0.8.9/LidoLocator.sol                                   +2       0  +100.00%
contracts/0.8.9/lib/PositiveTokenRebaseLimiter.sol                 0     +22  -100.00%
contracts/0.8.9/sanity_checks/OracleReportSanityChecker.sol      -14     +56  -25.69%
contracts/common/utils/PausableUntil.sol                         +29      +1  +96.55%
TOTAL                                                           +569    +198  -4.90%

Results for commit: 067f38b

Minimum allowed coverage is 90%

♻️ This comment has been updated with latest results

@DiRaiks DiRaiks changed the title [Vaults] feat: Dashboard UX updates [SI][Vaults] feat: Dashboard UX updates Jan 13, 2025
Copy link
Member

@folkyatina folkyatina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to fix rounding error and add mint/burn StETH

contracts/0.8.25/vaults/Dashboard.sol Outdated Show resolved Hide resolved
contracts/0.8.25/vaults/Dashboard.sol Show resolved Hide resolved
contracts/0.8.25/vaults/Dashboard.sol Outdated Show resolved Hide resolved
contracts/0.8.25/vaults/Dashboard.sol Outdated Show resolved Hide resolved
contracts/0.8.25/vaults/Dashboard.sol Outdated Show resolved Hide resolved
contracts/0.8.25/vaults/Dashboard.sol Outdated Show resolved Hide resolved
PermitInput calldata _permit
)
external
virtual
onlyRole(DEFAULT_ADMIN_ROLE)
trustlessPermit(address(STETH), msg.sender, address(this), _permit)
{
_burn(_tokens);
_burn(msg.sender, _amountOfShares);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
_burn(msg.sender, _amountOfShares);
_burnFrom(msg.sender, _amountOfShares);

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Comment on lines 415 to 416
uint256 _amount;
if (_token == address(0)) revert ZeroArgument("_token");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
uint256 _amount;
if (_token == address(0)) revert ZeroArgument("_token");
if (_token == address(0)) revert ZeroArgument("_token");
uint256 _amount;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

contracts/0.8.25/vaults/Dashboard.sol Outdated Show resolved Hide resolved
@@ -357,48 +374,44 @@ contract Dashboard is AccessControlEnumerable {
return;
}
}
revert("Permit failure");
revert Erc20Error(token, "Permit failure");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed this error

Copy link
Contributor

@TheDZhon TheDZhon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍 except for some insignificant changes

IWETH9 public immutable WETH;

/// @notice ETH address convention per EIP-7528
address public constant ETH = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
address public constant ETH = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
address public constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

@@ -109,6 +111,10 @@ contract Dashboard is AccessControlEnumerable {
vaultHub = VaultHub(stakingVault.vaultHub());
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's add an admin argument to avoid using msg.sender inside the contract

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe a bit later will be done by @failingtwice

@@ -109,6 +111,10 @@ contract Dashboard is AccessControlEnumerable {
vaultHub = VaultHub(stakingVault.vaultHub());
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);

// reduces gas cost for `burnWsteth`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// reduces gas cost for `burnWsteth`
// reduces gas cost for `mintWsteth`

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

// reduces gas cost for `burnWsteth`
// dashboard will hold STETH during this tx
STETH.approve(address(WSTETH), type(uint256).max);

emit Initialized();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we emit args of the init?

@@ -180,11 +186,11 @@ contract Dashboard is AccessControlEnumerable {

/**
* @notice Returns the maximum number of shares that can be minted with deposited ether.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* @notice Returns the maximum number of shares that can be minted with deposited ether.
* @notice Returns the maximum number of shares that can be minted with funded ether.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

function recoverERC721(address _token, uint256 _tokenId) external onlyRole(DEFAULT_ADMIN_ROLE) {
if (_token == address(0)) revert ZeroArgument("_token");

IERC721(_token).transferFrom(address(this), msg.sender, _tokenId);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
IERC721(_token).transferFrom(address(this), msg.sender, _tokenId);
IERC721(_token).safeTransferFrom(address(this), msg.sender, _tokenId);

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -540,4 +621,7 @@ contract Dashboard is AccessControlEnumerable {

/// @notice Error when the contract is already initialized.
error AlreadyInitialized();

/// @notice Error interacting with an ERC20 token
error Erc20Error(address token, string reason);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

too generic

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's move this one to 0.8.25 and take recovery lib from CSM

await expect(result).to.emit(steth, "Transfer").withArgs(wsteth, dashboard, weiStethDown); // unwrap wsteth to steth
await expect(result).to.emit(wsteth, "Transfer").withArgs(dashboard, ZeroAddress, weiShare); // burn wsteth
// transfer shares to hub
await expect(result).to.emit(steth, "Transfer").withArgs(dashboard, hub, weiStethDownDown);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧠

contracts/0.8.25/vaults/Dashboard.sol Fixed Show fixed Hide fixed
contracts/0.8.25/vaults/Dashboard.sol Dismissed Show dismissed Hide dismissed
contracts/0.8.25/vaults/Dashboard.sol Fixed Show fixed Hide fixed
@Jeday Jeday requested a review from TheDZhon January 23, 2025 08:23

WETH.transferFrom(msg.sender, address(this), _wethAmount);
WETH.withdraw(_wethAmount);
function fundByWeth(uint256 _amountWETH) external virtual onlyRole(DEFAULT_ADMIN_ROLE) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
function fundByWeth(uint256 _amountWETH) external virtual onlyRole(DEFAULT_ADMIN_ROLE) {
function fundWithWeth(uint256 _amountWETH) external virtual onlyRole(DEFAULT_ADMIN_ROLE) {

or

Suggested change
function fundByWeth(uint256 _amountWETH) external virtual onlyRole(DEFAULT_ADMIN_ROLE) {
function fundWeth(uint256 _amountWETH) external virtual onlyRole(DEFAULT_ADMIN_ROLE) {

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Copy link
Contributor

@TheDZhon TheDZhon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, mind sync with the auth changes needed

contracts/0.8.25/vaults/Dashboard.sol Fixed Show fixed Hide fixed
contracts/0.8.25/vaults/Dashboard.sol Fixed Show fixed Hide fixed
contracts/0.8.25/vaults/Dashboard.sol Fixed Show fixed Hide fixed
contracts/0.8.25/vaults/Dashboard.sol Fixed Show fixed Hide fixed
function mintStETH(
address _recipient,
uint256 _amountStETH
) external payable virtual onlyRole(DEFAULT_ADMIN_ROLE) fundAndProceed {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we still need virtual onlyRole(DEFAULT_ADMIN_ROLE) here?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no, fixed

function burnSharesWithPermit(
uint256 _amountShares,
PermitInput calldata _permit
) external virtual onlyRole(DEFAULT_ADMIN_ROLE) safePermit(address(STETH), msg.sender, address(this), _permit) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we still need role?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

@@ -41,19 +41,31 @@ contract VaultHub__MockForDashboard {
emit Mock__VaultDisconnected(vault);
}

function mintSharesBackedByVault(address /* vault */, address recipient, uint256 amount) external {
function mintSharesBackedByVault(address vault, address recipient, uint256 amount) external {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
function mintSharesBackedByVault(address vault, address recipient, uint256 amount) external {
function mintSharesBackedByVault(address _vault, address _recipient, uint256 _shares) external {

Copy link
Contributor

@TheDZhon TheDZhon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🍏 LGTM, except only a few conceptual changes not blocking DevNet-3 probably.

What is blocking for real — is the test coverage.

// SPDX-License-Identifier: GPL-3.0
// SPDX-FileCopyrightText: 2024 Lido <info@lido.fi>

// See contracts/COMPILERS.md
pragma solidity 0.8.25;

import {Permissions} from "./Permissions.sol";
import {OwnableUpgradeable} from "contracts/openzeppelin/5.2/upgradeable/access/OwnableUpgradeable.sol";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not used ⚠️

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed


// See contracts/COMPILERS.md
pragma solidity 0.8.25;

import {Permissions} from "./Permissions.sol";
import {OwnableUpgradeable} from "contracts/openzeppelin/5.2/upgradeable/access/OwnableUpgradeable.sol";
import {IERC20} from "@openzeppelin/contracts-v5.2/token/ERC20/IERC20.sol";
import {IERC20Permit} from "@openzeppelin/contracts-v5.2/token/ERC20/extensions/IERC20Permit.sol";
import {Clones} from "@openzeppelin/contracts-v5.2/proxy/Clones.sol";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not used ⚠️

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

import {IERC20Permit} from "@openzeppelin/contracts-v5.2/token/ERC20/extensions/IERC20Permit.sol";
import {ILido as IStETH} from "contracts/0.8.25/interfaces/ILido.sol";
import {ILidoLocator} from "contracts/common/interfaces/ILidoLocator.sol";
import {IStakingVault} from "contracts/0.8.25/vaults/interfaces/IStakingVault.sol";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not used ⚠️

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2025 copyright

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe namespace should be 'vaults.Permissions.X'

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

* @param _permit data required for the stETH.permit() method to set the allowance
*/
function burnWithPermit(
uint256 _tokens,
function burnStethWithPermit(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
function burnStethWithPermit(
function burnStETHWithPermit(

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

* @param _token Address of the token to recover or 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee for ether
* @param _recipient Address of the recovery recipient
*/
function recoverERC20(address _token, address _recipient) external onlyRole(DEFAULT_ADMIN_ROLE) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
function recoverERC20(address _token, address _recipient) external onlyRole(DEFAULT_ADMIN_ROLE) {
function recoverERC20(address _token, uint256 _amount, address _recipient) external onlyRole(DEFAULT_ADMIN_ROLE) {

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

keccak256("Vault.Delegation.CuratorRole") ⇒ keccak256("vaults.Delegation.CuratorRole") and so on

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's remove msg.sender from initialization

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vote -> multiConfirmationRole (everywhere)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

contracts/0.8.25/vaults/Dashboard.sol Dismissed Show dismissed Hide dismissed
contracts/0.8.25/vaults/Dashboard.sol Dismissed Show dismissed Hide dismissed
contracts/0.8.25/vaults/Dashboard.sol Dismissed Show dismissed Hide dismissed
contracts/0.8.25/vaults/Dashboard.sol Dismissed Show dismissed Hide dismissed
contracts/0.8.25/vaults/Dashboard.sol Dismissed Show dismissed Hide dismissed
@Jeday Jeday merged commit b3bdc1f into feat/vaults Jan 29, 2025
9 checks passed
@Jeday Jeday deleted the feat/dashboard-ux-updates branch January 29, 2025 10:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants