{
    "Function": "slitherConstructorConstantVariables",
    "File": "src/contracts/middleware/VoteWeigherBaseStorage.sol",
    "Parent Contracts": [
        "src/contracts/interfaces/IVoteWeigher.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"
    ],
    "High-Level Calls": [],
    "Internal Calls": [],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "abstract contract VoteWeigherBaseStorage is Initializable, IVoteWeigher {\n    /**\n     * @notice In weighing a particular strategy, the amount of underlying asset for that strategy is\n     * multiplied by its multiplier, then divided by WEIGHTING_DIVISOR\n     */\n    struct StrategyAndWeightingMultiplier {\n        IStrategy strategy;\n        uint96 multiplier;\n    }\n\n    /// @notice Constant used as a divisor in calculating weights.\n    uint256 internal constant WEIGHTING_DIVISOR = 1e18;\n    /// @notice Maximum length of dynamic arrays in the `strategiesConsideredAndMultipliers` mapping.\n    uint8 internal constant MAX_WEIGHING_FUNCTION_LENGTH = 32;\n    /// @notice Constant used as a divisor in dealing with BIPS amounts.\n    uint256 internal constant MAX_BIPS = 10000;\n\n    /// @notice The address of the Delegation contract for EigenLayer.\n    IDelegationManager public immutable delegation;\n    \n    /// @notice The address of the StrategyManager contract for EigenLayer.\n    IStrategyManager public immutable strategyManager;\n\n    /// @notice The address of the Slasher contract for EigenLayer.\n    ISlasher public immutable slasher;\n\n    /// @notice The ServiceManager contract for this middleware, where tasks are created / initiated.\n    IServiceManager public immutable serviceManager;\n\n    /// @notice Number of quorums that are being used by the middleware.\n    uint256 public immutable NUMBER_OF_QUORUMS;\n\n    /**\n     * @notice mapping from quorum number to the list of strategies considered and their\n     * corresponding multipliers for that specific quorum\n     */\n    mapping(uint256 => StrategyAndWeightingMultiplier[]) public strategiesConsideredAndMultipliers;\n\n    /**\n     * @notice This defines the earnings split between different quorums. Mapping is quorumNumber => BIPS which the quorum earns, out of the total earnings.\n     * @dev The sum of all entries, i.e. sum(quorumBips[0] through quorumBips[NUMBER_OF_QUORUMS - 1]) should *always* be 10,000!\n     */\n    mapping(uint256 => uint256) public quorumBips;\n\n    constructor(\n        IStrategyManager _strategyManager,\n        IServiceManager _serviceManager,\n        uint8 _NUMBER_OF_QUORUMS\n    ) {\n        // sanity check that the VoteWeigher is being initialized with at least 1 quorum\n        require(_NUMBER_OF_QUORUMS != 0, \"VoteWeigherBaseStorage.constructor: _NUMBER_OF_QUORUMS == 0\");\n        strategyManager = _strategyManager;\n        delegation = _strategyManager.delegation();\n        slasher = _strategyManager.slasher();\n        serviceManager = _serviceManager;\n        NUMBER_OF_QUORUMS = _NUMBER_OF_QUORUMS;\n        // disable initializers so that the implementation contract cannot be initialized\n        _disableInitializers();\n    }\n}"
}