Underlying delta is calculated on internal token balance
The underlying delta is calculated on the internal token balance, which might cause inconsistency with tokens of varying decimals.\\n```\\nFile: TreasuryAction.sol\\n    function _executeRebalance(uint16 currencyId) private {\\n        IPrimeCashHoldingsOracle oracle = PrimeCashExchangeRate.getPrimeCashHoldingsOracle(currencyId);\\n        uint8[] memory rebalancingTargets = _getRebalancingTargets(currencyId, oracle.holdings());\\n        (RebalancingData memory data) = REBALANCING_STRATEGY.calculateRebalance(oracle, rebalancingTargets);\\n\\n        (/* */, uint256 totalUnderlyingValueBefore) = oracle.getTotalUnderlyingValueStateful();\\n\\n        // Process redemptions first\\n        Token memory underlyingToken = TokenHandler.getUnderlyingToken(currencyId);\\n        TokenHandler.executeMoneyMarketRedemptions(underlyingToken, data.redeemData);\\n\\n        // Process deposits\\n        _executeDeposits(underlyingToken, data.depositData);\\n\\n        (/* */, uint256 totalUnderlyingValueAfter) = oracle.getTotalUnderlyingValueStateful();\\n\\n        int256 underlyingDelta = totalUnderlyingValueBefore.toInt().sub(totalUnderlyingValueAfter.toInt());\\n        require(underlyingDelta.abs() < Constants.REBALANCING_UNDERLYING_DELTA);\\n    }\\n```\\n\\nThe `underlyingDelta` is denominated in internal token precision (1e8) and is computed by taking the difference between `totalUnderlyingValueBefore` and `totalUnderlyingValueAfter` in Line 300 above.\\nNext, the `underlyingDelta` is compared against the `Constants.REBALANCING_UNDERLYING_DELTA` (10_000=0.0001) to ensure that the rebalance did not exceed the acceptable delta threshold.\\nHowever, the same `Constants.REBALANCING_UNDERLYING_DELTA` is used across all tokens such as ETH, DAI, and USDC. As a result, the delta will not be consistent with tokens of varying decimals.
Consider using the external token balance and scale `Constants.REBALANCING_UNDERLYING_DELTA` to the token's decimals.
Using the internal token precision (1e8) might result in an over-sensitive trigger for tokens with fewer decimals (e.g. 1e6) as they are scaled up and an under-sensitive one for tokens with more decimals (e.g. 1e18) as they are scaled down, leading to inconsistency across different tokens when checking against the `Constants.REBALANCING_UNDERLYING_DELTA`.\\nThis also means that the over-sensitive one will trigger a revert more easily and vice versa.
```\\nFile: TreasuryAction.sol\\n    function _executeRebalance(uint16 currencyId) private {\\n        IPrimeCashHoldingsOracle oracle = PrimeCashExchangeRate.getPrimeCashHoldingsOracle(currencyId);\\n        uint8[] memory rebalancingTargets = _getRebalancingTargets(currencyId, oracle.holdings());\\n        (RebalancingData memory data) = REBALANCING_STRATEGY.calculateRebalance(oracle, rebalancingTargets);\\n\\n        (/* */, uint256 totalUnderlyingValueBefore) = oracle.getTotalUnderlyingValueStateful();\\n\\n        // Process redemptions first\\n        Token memory underlyingToken = TokenHandler.getUnderlyingToken(currencyId);\\n        TokenHandler.executeMoneyMarketRedemptions(underlyingToken, data.redeemData);\\n\\n        // Process deposits\\n        _executeDeposits(underlyingToken, data.depositData);\\n\\n        (/* */, uint256 totalUnderlyingValueAfter) = oracle.getTotalUnderlyingValueStateful();\\n\\n        int256 underlyingDelta = totalUnderlyingValueBefore.toInt().sub(totalUnderlyingValueAfter.toInt());\\n        require(underlyingDelta.abs() < Constants.REBALANCING_UNDERLYING_DELTA);\\n    }\\n```\\n