From 2cdb39debf80bb2f05737a90e0b45c704df643e5 Mon Sep 17 00:00:00 2001 From: Riccardo Persiani Date: Tue, 20 May 2025 16:34:53 +0200 Subject: [PATCH] feat(SSVBasedApps.sol): add interface for views --- src/core/SSVBasedApps.sol | 9 +-- src/core/interfaces/ISSVBasedApps.sol | 9 ++- src/core/interfaces/IViews.sol | 91 +++++++++++++++++++++++++++ test/modules/ProtocolManager.t.sol | 2 +- 4 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 src/core/interfaces/IViews.sol diff --git a/src/core/SSVBasedApps.sol b/src/core/SSVBasedApps.sol index 31b81362..abcee281 100644 --- a/src/core/SSVBasedApps.sol +++ b/src/core/SSVBasedApps.sol @@ -59,10 +59,7 @@ import { ProtocolStorageLib } from "@ssv/src/core/libraries/ProtocolStorageLib.s contract SSVBasedApps is ISSVBasedApps, UUPSUpgradeable, - Ownable2StepUpgradeable, - IBasedAppManager, - IStrategyManager, - IProtocolManager + Ownable2StepUpgradeable { // *************************** // ** Section: Initializers ** @@ -343,9 +340,7 @@ contract SSVBasedApps is _delegateTo(SSVCoreModules.SSV_PROTOCOL_MANAGER); } - function updateDisabledFeatures( - uint32 disabledFeatures - ) external onlyOwner { + function updateDisabledFeatures(uint32 value) external onlyOwner { _delegateTo(SSVCoreModules.SSV_PROTOCOL_MANAGER); } diff --git a/src/core/interfaces/ISSVBasedApps.sol b/src/core/interfaces/ISSVBasedApps.sol index 93950c25..52e70357 100644 --- a/src/core/interfaces/ISSVBasedApps.sol +++ b/src/core/interfaces/ISSVBasedApps.sol @@ -4,16 +4,21 @@ pragma solidity 0.8.29; import { IStrategyManager } from "@ssv/src/core/interfaces/IStrategyManager.sol"; import { IBasedAppManager } from "@ssv/src/core/interfaces/IBasedAppManager.sol"; import { IProtocolManager } from "@ssv/src/core/interfaces/IProtocolManager.sol"; +import { IViews } from "@ssv/src/core/interfaces/IViews.sol"; import { SSVCoreModules } from "@ssv/src/core/libraries/CoreStorageLib.sol"; import { ProtocolStorageLib } from "@ssv/src/core/libraries/ProtocolStorageLib.sol"; -interface ISSVBasedApps { +interface ISSVBasedApps is + IStrategyManager, + IBasedAppManager, + IProtocolManager, + IViews +{ event ModuleUpdated(SSVCoreModules indexed moduleId, address moduleAddress); function getModuleAddress( SSVCoreModules moduleId ) external view returns (address); - function getVersion() external pure returns (string memory version); function initialize( address owner_, IBasedAppManager ssvBasedAppManger_, diff --git a/src/core/interfaces/IViews.sol b/src/core/interfaces/IViews.sol new file mode 100644 index 00000000..b1d30776 --- /dev/null +++ b/src/core/interfaces/IViews.sol @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity 0.8.29; + +interface IViews { + function delegations( + address account, + address receiver + ) external view returns (uint32); + function totalDelegatedPercentage( + address delegator + ) external view returns (uint32); + function registeredBApps( + address bApp + ) external view returns (bool isRegistered); + function strategies( + uint32 strategyId + ) external view returns (address strategyOwner, uint32 fee); + function ownedStrategies( + address owner + ) external view returns (uint32[] memory strategyIds); + function strategyAccountShares( + uint32 strategyId, + address account, + address token + ) external view returns (uint256); + function strategyTotalBalance( + uint32 strategyId, + address token + ) external view returns (uint256); + function strategyTotalShares( + uint32 strategyId, + address token + ) external view returns (uint256); + function strategyGeneration( + uint32 strategyId, + address token + ) external view returns (uint256); + function obligations( + uint32 strategyId, + address bApp, + address token + ) external view returns (uint32 percentage, bool isSet); + function bAppTokens( + address bApp, + address token + ) + external + view + returns ( + uint32 currentValue, + bool isSet, + uint32 pendingValue, + uint32 effectTime + ); + function accountBAppStrategy( + address account, + address bApp + ) external view returns (uint32); + function feeUpdateRequests( + uint32 strategyId + ) external view returns (uint32 percentage, uint32 requestTime); + function withdrawalRequests( + uint32 strategyId, + address account, + address token + ) external view returns (uint256 shares, uint32 requestTime); + function obligationRequests( + uint32 strategyId, + address token, + address bApp + ) external view returns (uint32 percentage, uint32 requestTime); + function slashingFund( + address account, + address token + ) external view returns (uint256); + + // External Protocol Views + function maxPercentage() external pure returns (uint32); + function ethAddress() external pure returns (address); + function maxShares() external view returns (uint256); + function maxFeeIncrement() external view returns (uint32); + function feeTimelockPeriod() external view returns (uint32); + function feeExpireTime() external view returns (uint32); + function withdrawalTimelockPeriod() external view returns (uint32); + function withdrawalExpireTime() external view returns (uint32); + function obligationTimelockPeriod() external view returns (uint32); + function obligationExpireTime() external view returns (uint32); + function disabledFeatures() external view returns (uint32); + function tokenUpdateTimelockPeriod() external view returns (uint32); + function getVersion() external pure returns (string memory); +} diff --git a/test/modules/ProtocolManager.t.sol b/test/modules/ProtocolManager.t.sol index c9457716..21538d45 100644 --- a/test/modules/ProtocolManager.t.sol +++ b/test/modules/ProtocolManager.t.sol @@ -220,7 +220,7 @@ contract ProtocolManagerTest is Setup, Ownable2StepUpgradeable { } /// @notice By default, no features should be disabled - function testDefaultDisabledFeaturesIsZero() public { + function testDefaultDisabledFeaturesIsZero() public view { assertEq( proxiedManager.disabledFeatures(), 0,