`CrossCurrencyfCashVault` Cannot Be Upgraded
`CrossCurrencyfCashVault` cannot be upgraded as it is missing the authorize upgrade method.\\nThe Cross Currency Vault is expected to be upgradeable as:\\nThis vault is similar to the other vaults (Boosted3TokenAuraVault and MetaStable2TokenAuraVault) provided by Notional that are upgradeable by default.\\nThe `BaseStrategyVault` has configured the storage gaps `uint256[45] private __gap` for upgrading purposes\\nClarified with the sponsor and noted that Cross Currency Vault should be upgradeable\\n`CrossCurrencyfCashVault` inherits from `BaseStrategyVault`. However, the `BaseStrategyVault` forget to inherit Openzepplin's `UUPSUpgradeable` contract. Therefore, it is missing the authorize upgrade method, and the contract cannot be upgraded.\\n```\\nabstract contract BaseStrategyVault is Initializable, IStrategyVault {\\n    using TokenUtils for IERC20;\\n    using TradeHandler for Trade;\\n\\n    /// @notice Hardcoded on the implementation contract during deployment\\n    NotionalProxy public immutable NOTIONAL;\\n    ITradingModule public immutable TRADING_MODULE;\\n    uint8 constant internal INTERNAL_TOKEN_DECIMALS = 8;\\n    \\n    ..SNIP..\\n    \\n    // Storage gap for future potential upgrades\\n    uint256[45] private __gap;\\n }\\n```\\n\\n```\\ncontract CrossCurrencyfCashVault is BaseStrategyVault {\\n    using TypeConvert for uint256;\\n    using TypeConvert for int256;\\n\\n    uint256 public constant SETTLEMENT_SLIPPAGE_PRECISION = 1e18;\\n\\n    struct DepositParams {\\n        // Minimum purchase amount of the lend underlying token, this is\\n        // based on the deposit + borrowed amount and must be set to a non-zero\\n        // value to establish a slippage limit.\\n        uint256 minPurchaseAmount;\\n        // Minimum annualized lending rate, can be set to zero for no slippage limit\\n        uint32 minLendRate;\\n        // ID of the desired DEX to trade on, _depositFromNotional will always trade\\n        // using an EXACT_IN_SINGLE trade which is supported by all DEXes\\n        uint16 dexId;\\n        // Exchange data depending on the selected dexId\\n        ..SNIP..\\n```\\n
It is recommended to Inherit Openzepplin's `UUPSUpgradeable` contract and implement the missing authorize upgrade method.\\n```\\n// Remove the line below\\n abstract contract BaseStrategyVault is Initializable, IStrategyVault {\\n// Add the line below\\n abstract contract BaseStrategyVault is Initializable, IStrategyVault, UUPSUpgradeable {\\n    using TokenUtils for IERC20;\\n    using TradeHandler for Trade;\\n\\n    /// @notice Hardcoded on the implementation contract during deployment\\n    NotionalProxy public immutable NOTIONAL;\\n    ITradingModule public immutable TRADING_MODULE;\\n    uint8 constant internal INTERNAL_TOKEN_DECIMALS = 8;\\n    \\n    ..SNIP..\\n    \\n// Add the line below\\n    function _authorizeUpgrade(\\n// Add the line below\\n        address /* newImplementation */\\n// Add the line below\\n    ) internal override onlyNotionalOwner {}    \\n    \\n    // Storage gap for future potential upgrades\\n    uint256[45] private __gap;\\n }\\n```\\n
If a critical bug is discovered within the Cross Currency Vault after launching that causes a loss of assets, the vault cannot be upgraded unlike the other balancer-related vaults to fix the bugs. All assets within the vault will be lost
```\\nabstract contract BaseStrategyVault is Initializable, IStrategyVault {\\n    using TokenUtils for IERC20;\\n    using TradeHandler for Trade;\\n\\n    /// @notice Hardcoded on the implementation contract during deployment\\n    NotionalProxy public immutable NOTIONAL;\\n    ITradingModule public immutable TRADING_MODULE;\\n    uint8 constant internal INTERNAL_TOKEN_DECIMALS = 8;\\n    \\n    ..SNIP..\\n    \\n    // Storage gap for future potential upgrades\\n    uint256[45] private __gap;\\n }\\n```\\n