DoS in BBLeverage and SGLLeverage due to using wrong leverage executor interface
A DoS takes place due to utilizing a wrong interface in the leverage modules.\\n`BBLeverage.sol` and `SGLLeverage.sol` use a wrong interface to interact with the `leverageExecutor` contract. This will make the `sellCollateral()` and `buyCollateral()` functions always fail and render the `BBLeverage.sol` and `SGLLeverage.sol` unusable.\\nAs we can see in the following snippets, when these contracts interact with the `leverageExecutor` to call its `getAsset()` and `getCollateral()` functions, they do it passing 6 parameters in each of the functions:\\n```\\n// BBLeverage.sol\\n\\nfunction buyCollateral(address from, uint256 borrowAmount, uint256 supplyAmount, bytes calldata data) \\n        external\\n        optionNotPaused(PauseType.LeverageBuy)\\n        solvent(from, false)\\n        notSelf(from)  \\n        returns (uint256 amountOut) \\n    { \\n        // rest of code\\n\\n        \\n        { \\n            amountOut = leverageExecutor.getCollateral( \\n                collateralId, \\n                address(asset),\\n                address(collateral),\\n                memoryData.supplyShareToAmount + memoryData.borrowShareToAmount,\\n                calldata_.from,\\n                calldata_.data\\n            );\\n        }\\n        // rest of code\\n    }\\n    \\n    function sellCollateral(address from, uint256 share, bytes calldata data)\\n        external\\n        optionNotPaused(PauseType.LeverageSell)\\n        solvent(from, false)\\n        notSelf(from)\\n        returns (uint256 amountOut)\\n    {\\n       // rest of code\\n\\n        amountOut = leverageExecutor.getAsset(\\n            assetId, address(collateral), address(asset), memoryData.leverageAmount, from, data\\n        ); \\n\\n        // rest of code\\n    }  \\n```\\n\\nHowever, the leverage executor's `getAsset()` and `getCollateral()` functions have just 4 parameters, as seen in the `BaseLeverageExecutor.sol` base contract used to build all leverage executors:\\n```\\n// BaseLeverageExecutor.sol\\n\\n/**\\n     * @notice Buys an asked amount of collateral with an asset using the ZeroXSwapper.\\n     * @dev Expects the token to be already transferred to this contract.\\n     * @param assetAddress asset address.\\n     * @param collateralAddress collateral address.\\n     * @param assetAmountIn amount to swap.\\n     * @param data SLeverageSwapData.\\n     */\\n    function getCollateral(address assetAddress, address collateralAddress, uint256 assetAmountIn, bytes calldata data)\\n        external\\n        payable\\n        virtual\\n        returns (uint256 collateralAmountOut)\\n    {}\\n\\n    /**\\n     * @notice Buys an asked amount of asset with a collateral using the ZeroXSwapper.\\n     * @dev Expects the token to be already transferred to this contract.\\n     * @param collateralAddress collateral address.\\n     * @param assetAddress asset address.\\n     * @param collateralAmountIn amount to swap.\\n     * @param data SLeverageSwapData.\\n     */\\n    function getAsset(address collateralAddress, address assetAddress, uint256 collateralAmountIn, bytes calldata data)\\n        external\\n        virtual\\n        returns (uint256 assetAmountOut)\\n    {}\\n```\\n
Update the interface used in BBLeverage.sol and SGLLeverage.sol and pass the proper parameters so that calls can succeed.
High. Calls to the leverage modules will always fail, rendering these features unusable.
```\\n// BBLeverage.sol\\n\\nfunction buyCollateral(address from, uint256 borrowAmount, uint256 supplyAmount, bytes calldata data) \\n        external\\n        optionNotPaused(PauseType.LeverageBuy)\\n        solvent(from, false)\\n        notSelf(from)  \\n        returns (uint256 amountOut) \\n    { \\n        // rest of code\\n\\n        \\n        { \\n            amountOut = leverageExecutor.getCollateral( \\n                collateralId, \\n                address(asset),\\n                address(collateral),\\n                memoryData.supplyShareToAmount + memoryData.borrowShareToAmount,\\n                calldata_.from,\\n                calldata_.data\\n            );\\n        }\\n        // rest of code\\n    }\\n    \\n    function sellCollateral(address from, uint256 share, bytes calldata data)\\n        external\\n        optionNotPaused(PauseType.LeverageSell)\\n        solvent(from, false)\\n        notSelf(from)\\n        returns (uint256 amountOut)\\n    {\\n       // rest of code\\n\\n        amountOut = leverageExecutor.getAsset(\\n            assetId, address(collateral), address(asset), memoryData.leverageAmount, from, data\\n        ); \\n\\n        // rest of code\\n    }  \\n```\\n