2024-11-07 15:33:40 +00:00
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
pragma solidity ^0.8.19;
|
|
|
|
|
|
|
|
|
|
import {Harberg} from "../../src/Harberg.sol";
|
|
|
|
|
import {Stake} from "../../src/Stake.sol";
|
|
|
|
|
import {UUPSUpgradeable} from "@openzeppelin/proxy/utils/UUPSUpgradeable.sol";
|
|
|
|
|
import {Initializable} from "@openzeppelin/proxy/utils/Initializable.sol";
|
|
|
|
|
|
2025-02-01 21:49:15 +01:00
|
|
|
contract MockOptimizer is Initializable, UUPSUpgradeable {
|
2025-07-08 10:33:10 +02:00
|
|
|
Harberg private harberg;
|
|
|
|
|
Stake private stake;
|
2024-11-07 15:33:40 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @dev The caller account is not authorized to perform an operation.
|
|
|
|
|
*/
|
|
|
|
|
error UnauthorizedAccount(address account);
|
|
|
|
|
|
2025-07-08 10:33:10 +02:00
|
|
|
function initialize(address _harberg, address _stake) public initializer {
|
|
|
|
|
_changeAdmin(msg.sender);
|
|
|
|
|
harberg = Harberg(_harberg);
|
|
|
|
|
stake = Stake(_stake);
|
2024-11-07 15:33:40 +00:00
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* @dev Throws if called by any account other than the admin.
|
|
|
|
|
*/
|
2025-07-08 10:33:10 +02:00
|
|
|
|
2024-11-07 15:33:40 +00:00
|
|
|
modifier onlyAdmin() {
|
|
|
|
|
_checkAdmin();
|
|
|
|
|
_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @dev Throws if the sender is not the admin.
|
|
|
|
|
*/
|
|
|
|
|
function _checkAdmin() internal view virtual {
|
|
|
|
|
if (_getAdmin() != msg.sender) {
|
|
|
|
|
revert UnauthorizedAccount(msg.sender);
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-07-08 10:33:10 +02:00
|
|
|
|
2024-11-07 15:33:40 +00:00
|
|
|
function _authorizeUpgrade(address newImplementation) internal override onlyAdmin {}
|
|
|
|
|
|
2024-11-13 16:37:23 +01:00
|
|
|
function calculateSentiment(uint256, uint256) public pure returns (uint256 sentimentValue) {
|
2024-11-07 15:33:40 +00:00
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// @notice Computes the staker sentiment based on the proportion of the authorized stake that is currently staked.
|
|
|
|
|
/// @return sentiment A number between 0 and 200 indicating the market sentiment.
|
2024-11-13 16:37:23 +01:00
|
|
|
function getSentiment() external view returns (uint256 sentiment) {
|
2024-11-07 15:33:40 +00:00
|
|
|
uint256 percentageStaked = stake.getPercentageStaked();
|
2025-07-08 10:33:10 +02:00
|
|
|
uint256 averageTaxRate = stake.getAverageTaxRate();
|
2024-11-07 15:33:40 +00:00
|
|
|
sentiment = calculateSentiment(averageTaxRate, percentageStaked);
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-06 10:08:59 +02:00
|
|
|
/// @notice Returns mock liquidity parameters for testing
|
|
|
|
|
/// @return capitalInefficiency Mock capital inefficiency (50%)
|
2025-07-08 10:33:10 +02:00
|
|
|
/// @return anchorShare Mock anchor share (50%)
|
2025-07-06 10:08:59 +02:00
|
|
|
/// @return anchorWidth Mock anchor width (50)
|
|
|
|
|
/// @return discoveryDepth Mock discovery depth (50%)
|
|
|
|
|
function getLiquidityParams()
|
|
|
|
|
external
|
|
|
|
|
pure
|
2025-07-08 10:33:10 +02:00
|
|
|
returns (uint256 capitalInefficiency, uint256 anchorShare, uint24 anchorWidth, uint256 discoveryDepth)
|
2025-07-06 10:08:59 +02:00
|
|
|
{
|
2025-07-08 10:33:10 +02:00
|
|
|
capitalInefficiency = 5 * 10 ** 17; // 50%
|
|
|
|
|
anchorShare = 5 * 10 ** 17; // 50%
|
|
|
|
|
anchorWidth = 50; // 50
|
|
|
|
|
discoveryDepth = 5 * 10 ** 17; // 50%
|
2025-07-06 10:08:59 +02:00
|
|
|
}
|
2024-11-07 15:33:40 +00:00
|
|
|
}
|