FRAX admin can adjust fee rate to harm Napier and its users
FRAX admin can adjust fee rates to harm Napier and its users, preventing Napier users from withdrawing.\\nPer the contest page, the admins of the protocols that Napier integrates with are considered "RESTRICTED". This means that any issue related to FRAX's admin action that could negatively affect Napier protocol/users will be considered valid in this audit contest.\\nQ: Are the admins of the protocols your contracts integrate with (if any) TRUSTED or RESTRICTED? RESTRICTED\\nFollowing is one of the ways that FRAX admin can harm Napier and its users.\\nFRAX admin can set the fee to 100%.\\n```\\nFile: FraxEtherRedemptionQueue.sol\\n    /// @notice Sets the fee for redeeming\\n    /// @param _newFee New redemption fee given in percentage terms, using 1e6 precision\\n    function setRedemptionFee(uint64 _newFee) external {\\n        _requireSenderIsTimelock();\\n        if (_newFee > FEE_PRECISION) revert ExceedsMaxRedemptionFee(_newFee, FEE_PRECISION);\\n\\n        emit SetRedemptionFee({ oldRedemptionFee: redemptionQueueState.redemptionFee, newRedemptionFee: _newFee });\\n\\n        redemptionQueueState.redemptionFee = _newFee;\\n    }\\n```\\n\\nWhen the adaptor attempts to redeem the staked ETH from FRAX via the `enterRedemptionQueue` function, the 100% fee will consume the entire amount of the staked fee, leaving nothing for Napier's adaptor.\\n```\\nFile: FraxEtherRedemptionQueue.sol\\n    function enterRedemptionQueue(address _recipient, uint120 _amountToRedeem) public nonReentrant {\\n        // Get queue information\\n        RedemptionQueueState memory _redemptionQueueState = redemptionQueueState;\\n        RedemptionQueueAccounting memory _redemptionQueueAccounting = redemptionQueueAccounting;\\n\\n        // Calculations: redemption fee\\n        uint120 _redemptionFeeAmount = ((uint256(_amountToRedeem) * _redemptionQueueState.redemptionFee) /\\n            FEE_PRECISION).toUint120();\\n\\n        // Calculations: amount of ETH owed to the user\\n        uint120 _amountEtherOwedToUser = _amountToRedeem - _redemptionFeeAmount;\\n\\n        // Calculations: increment ether liabilities by the amount of ether owed to the user\\n        _redemptionQueueAccounting.etherLiabilities += uint128(_amountEtherOwedToUser);\\n\\n        // Calculations: increment unclaimed fees by the redemption fee taken\\n        _redemptionQueueAccounting.unclaimedFees += _redemptionFeeAmount;\\n\\n        // Calculations: maturity timestamp\\n        uint64 _maturityTimestamp = uint64(block.timestamp) + _redemptionQueueState.queueLengthSecs;\\n\\n        // Effects: Initialize the redemption ticket NFT information\\n        nftInformation[_redemptionQueueState.nextNftId] = RedemptionQueueItem({\\n            amount: _amountEtherOwedToUser,\\n            maturity: _maturityTimestamp,\\n            hasBeenRedeemed: false,\\n            earlyExitFee: _redemptionQueueState.earlyExitFee\\n        });\\n```\\n
Ensure that the protocol team and its users are aware of the risks of such an event and develop a contingency plan to manage it.
Users unable to withdraw their assets. Loss of assets for the victim.
```\\nFile: FraxEtherRedemptionQueue.sol\\n    /// @notice Sets the fee for redeeming\\n    /// @param _newFee New redemption fee given in percentage terms, using 1e6 precision\\n    function setRedemptionFee(uint64 _newFee) external {\\n        _requireSenderIsTimelock();\\n        if (_newFee > FEE_PRECISION) revert ExceedsMaxRedemptionFee(_newFee, FEE_PRECISION);\\n\\n        emit SetRedemptionFee({ oldRedemptionFee: redemptionQueueState.redemptionFee, newRedemptionFee: _newFee });\\n\\n        redemptionQueueState.redemptionFee = _newFee;\\n    }\\n```\\n