Platform: Code4rena
Start Date: 02/08/2022
Pot Size: $50,000 USDC
Total HM: 12
Participants: 69
Period: 5 days
Judge: gzeon
Total Solo HM: 5
Id: 150
League: ETH
Rank: 4/69
Findings: 3
Award: $3,550.66
🌟 Selected for report: 0
🚀 Solo Findings: 0
https://github.com/code-423n4/2022-08-mimo/blob/main/contracts/actions/MIMORebalance.sol#L129#L132 https://github.com/code-423n4/2022-08-mimo/blob/main/contracts/actions/MIMOLeverage.sol#L130 https://github.com/code-423n4/2022-08-mimo/blob/main/contracts/actions/MIMOEmptyVault.sol#L96
User's may accidentally overpay in register()
/ renew()
and the excess will be paid to the vault creator
require( a.vaultsData().vaultCollateralBalance(rbData.vaultId) >= flashloanRepayAmount, Errors.CANNOT_REPAY_FLASHLOAN );
require(collateralBalanceAfter >= flashloanRepayAmount, Errors.CANNOT_REPAY_FLASHLOAN);
require(flashloanRepayAmount <= vaultCollateral.balanceOf(address(this)), Errors.CANNOT_REPAY_FLASHLOAN);
Consider changing >=
to ==
require( a.vaultsData().vaultCollateralBalance(rbData.vaultId) == flashloanRepayAmount, Errors.CANNOT_REPAY_FLASHLOAN );
require(collateralBalanceAfter == flashloanRepayAmount, Errors.CANNOT_REPAY_FLASHLOAN);
require(flashloanRepayAmount == vaultCollateral.balanceOf(address(this)), Errors.CANNOT_REPAY_FLASHLOAN);
#0 - RayXpub
2022-08-10T12:12:46Z
Valid only for MIMOEmptyVault
as Rebalance will leave excess in vault, Leverage will deposit it it back. Also duplicate of #18
🌟 Selected for report: IllIllI
Also found by: 0x1f8b, 0xDjango, 0xNazgul, 0xc0ffEE, 8olidity, Bnke0x0, Chom, CodingNameKiki, Deivitto, Dravee, Funen, JC, JohnSmith, NoamYakov, ReyAdmirado, Rohan16, Rolezn, Sm4rty, SooYa, TomFrenchBlockchain, TomJ, Waze, __141345__, ajtra, ak1, aysha, bin2chen, bobirichman, brgltd, bulej93, c3phas, delfin454000, durianSausage, erictee, fatherOfBlocks, gogo, horsefacts, hyh, ladboy233, mics, natzuu, nxrblsrpr, oyc_109, rbserver, samruna, sikorico, simon135, tofunmi, wagmi
88.166 USDC - $88.17
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 29):
function initialize() external initializer {
File: 2022-08-mimo/contracts/proxy/MIMOProxyFactory.sol (line 47):
proxy.initialize();
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxy.sol (line 17):
function initialize() external;
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxy.sol (line 2):
pragma solidity ^0.8.4;
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxyFactory.sol (line 2):
pragma solidity ^0.8.4;
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxyRegistry.sol (line 2):
pragma solidity ^0.8.4;
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 38):
receive() external payable {}
File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 153):
return _getAmounts(_automatedVaults[vaultId], vaultState, toCollateral);
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedAction.sol (line 108):
return (vaultRatio);
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 146):
return results;
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 47):
require(proxy != address(0), Errors.INVALID_AGGREGATOR);
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 48):
require(router != address(0), Errors.INVALID_AGGREGATOR);
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 59):
revert(add(32, response), returndata_size)
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 62):
revert(Errors.AGGREGATOR_CALL_FAILED);
File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 129-132):
require( a.vaultsData().vaultCollateralBalance(rbData.vaultId) >= flashloanRepayAmount, Errors.CANNOT_REPAY_FLASHLOAN );
File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 130):
require(collateralBalanceAfter >= flashloanRepayAmount, Errors.CANNOT_REPAY_FLASHLOAN);
File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 96):
require(flashloanRepayAmount <= vaultCollateral.balanceOf(address(this)), Errors.CANNOT_REPAY_FLASHLOAN);
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 95):
revert(add(32, response), returndata_size)
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 138):
revert(add(32, response), returndata_size)
File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 180):
uint256 targetRatio = autoVault.targetRatio + 1e15; // add 0.1% to account for rounding
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 30):
minGasReserve = 5_000;
Event
is missing indexed
fields:-File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedAction.sol (line 22):
event ManagerSet(address manager, bool isManager);
File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedAction.sol (line 23):
event ManagementSet(uint256 vaultId, ManagedVault managedVault);
File: 2022-08-mimo/contracts/actions/automated/interfaces/IMIMOAutoAction.sol (line 25):
event AutomationSet(uint256 vaultId, AutomatedVault autoVault);
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxy.sol (line 11):
event Execute(address indexed target, bytes data, bytes response);
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxyFactory.sol (line 11):
event DeployProxy(address indexed deployer, address indexed owner, address proxy);
File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedAction.sol (line 13):
bool isManaged;
File: 2022-08-mimo/contracts/actions/automated/interfaces/IMIMOAutoAction.sol (line 9):
bool isAutomated;
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 78):
bool success;
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 108):
bool permission
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxy.sol (line 67):
bool permission
public
functions not called by the contract should be declared external
instead:-File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 54):
function execute(address target, bytes calldata data) public payable override returns (bytes memory response) {
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 104-109):
function setPermission( address envoy, address target, bytes4 selector, bool permission ) public override {
File: 2022-08-mimo/contracts/proxy/MIMOProxyFactory.sol (line 45):
function deployFor(address owner) public override returns (IMIMOProxy proxy) {
File: 2022-08-mimo/contracts/proxy/MIMOProxyRegistry.sol (line 45):
function deployFor(address owner) public override returns (IMIMOProxy proxy) {
File: 2022-08-mimo/contracts/actions/MIMOVaultActions.sol (line 3):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/MIMOFlashloan.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/automated/MIMOAutoAction.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/automated/interfaces/IMIMOAutoAction.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/automated/interfaces/IMIMOAutoRebalance.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/interfaces/IMIMOEmptyVault.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/interfaces/IMIMOFlashloan.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/interfaces/IMIMOLeverage.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/interfaces/IMIMOProxyAction.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/interfaces/IMIMORebalance.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/interfaces/IMIMOSwap.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/interfaces/IMIMOVaultActions.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedAction.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedRebalance.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedAction.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedRebalance.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 2):
pragma solidity 0.8.4;
File: 2022-08-mimo/contracts/proxy/MIMOProxyFactory.sol (line 2):
pragma solidity >=0.8.4;
File: 2022-08-mimo/contracts/proxy/MIMOProxyRegistry.sol(line 2):
pragma solidity >=0.8.4;
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxy.sol (line 2):
pragma solidity >=0.8.4;
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxyFactory.sol (line 2):
pragma solidity ^0.8.4;
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxyRegistry.sol (line 2):
pragma solidity ^0.8.4;
File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 11):
import "../../libraries/WadRayMath.sol";
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedAction.sol(line 7):
import "../../libraries/WadRayMath.sol";
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedRebalance.sol (line 10):
import "../../libraries/WadRayMath.sol";
using for
with a list of free functions):-File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/MIMOFlashloan.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/MIMOVaultActions.sol (line 3):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedAction.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedRebalance.sol (line 2):
pragma solidity 0.8.10;
File: 2022-08-mimo/contracts/proxy/MIMOProxyFactory.sol (line 2):
pragma solidity >=0.8.4;
File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedAction.sol (line 11):
interface IMIMOManagedAction {
File: 2022-08-mimo/contracts/actions/interfaces/IMIMOFlashloan.sol (line 10):
interface IMIMOFlashloan {
File: 2022-08-mimo/contracts/actions/interfaces/IMIMOProxyAction.sol (line 4):
interface IMIMOProxyAction {
File: 2022-08-mimo/contracts/actions/interfaces/IMIMOSwap.sol (line 6):
interface IMIMOSwap {
File: 2022-08-mimo/contracts/actions/interfaces/IMIMOVaultActions.sol (line 8):
interface IMIMOVaultActions {
File: 2022-08-mimo/contracts/actions/automated/interfaces/IMIMOAutoAction.sol (line 7):
interface IMIMOAutoAction {
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxy.sol (line 6):
interface IMIMOProxy {
File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxyFactory.sol (line 8):
interface IMIMOProxyFactory {
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedAction.sol (line 10):
interface IMIMOProxyRegistry {
File: 2022-08-mimo/contracts/actions/MIMOVaultActions.sol (line 19-21):
IVaultsCore public immutable core; IVaultsDataProvider public immutable vaultsData; IERC20 public immutable stablex;
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 19-20):
IAddressProvider public immutable a; IDexAddressProvider public immutable dexAP;
File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 17):
IMIMOProxyRegistry public immutable proxyRegistry;
File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 17):
IMIMOProxyRegistry public immutable proxyRegistry;
File: 2022-08-mimo/contracts/actions/MIMOFlashloan.sol (line 18):
IPool public immutable lendingPool;
File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 17):
IMIMOProxyRegistry public immutable proxyRegistry;
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedRebalance.sol (line 20):
address public immutable mimoRebalance;
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedAction.sol (line 12-13):
IAddressProvider public immutable a; IMIMOProxyRegistry public immutable proxyRegistry;
File: 2022-08-mimo/contracts/actions/automated/MIMOAutoAction.sol (line 12-13):
IAddressProvider public immutable a; IMIMOProxyRegistry public immutable proxyRegistry;
File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 27):
address public immutable mimoRebalance;
File: 2022-08-mimo/contracts/proxy/MIMOProxyFactory.sol (line 16):
address public immutable mimoProxyBase;
🌟 Selected for report: Dravee
Also found by: 0x040, 0x1f8b, 0xDjango, 0xNazgul, 0xSmartContract, 0xc0ffEE, Aymen0909, Bnke0x0, Chom, CodingNameKiki, Deivitto, Fitraldys, Funen, IllIllI, JC, JohnSmith, NoamYakov, ReyAdmirado, Rolezn, TomJ, Waze, ajtra, bearonbike, bobirichman, brgltd, c3phas, durianSausage, fatherOfBlocks, gogo, ignacio, jag, joestakey, ladboy233, mics, oyc_109, rbserver, samruna, sikorico, simon135
40.7442 USDC - $40.74
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 132):
for (uint256 i = 0; i < targets.length; i++) {
++i
costs less gas than i++
, especially when it’s used in for-loops (--i/i-- too):-File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 132):
for (uint256 i = 0; i < targets.length; i++) {
File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 153):
return _getAmounts(_automatedVaults[vaultId], vaultState, toCollateral);
File: 2022-08-mimo/contracts/actions/managed/MIMOManagedAction.sol (line 108):
return (vaultRatio);
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 146):
return results;
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 132):
for (uint256 i = 0; i < targets.length; i++) {
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 47):
require(proxy != address(0), Errors.INVALID_AGGREGATOR);
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 48):
require(router != address(0), Errors.INVALID_AGGREGATOR);
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 59):
revert(add(32, response), returndata_size)
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 62):
revert(Errors.AGGREGATOR_CALL_FAILED);
File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 129-132):
require( a.vaultsData().vaultCollateralBalance(rbData.vaultId) >= flashloanRepayAmount, Errors.CANNOT_REPAY_FLASHLOAN );
File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 130):
require(collateralBalanceAfter >= flashloanRepayAmount, Errors.CANNOT_REPAY_FLASHLOAN);
File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 96):
require(flashloanRepayAmount <= vaultCollateral.balanceOf(address(this)), Errors.CANNOT_REPAY_FLASHLOAN);
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 95):
revert(add(32, response), returndata_size)
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 138):
revert(add(32, response), returndata_size)
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 47):
require(proxy != address(0), Errors.INVALID_AGGREGATOR);
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 48):
require(router != address(0), Errors.INVALID_AGGREGATOR);
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 59):
revert(add(32, response), returndata_size)
File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 62):
revert(Errors.AGGREGATOR_CALL_FAILED);
File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 129-132):
require( a.vaultsData().vaultCollateralBalance(rbData.vaultId) >= flashloanRepayAmount, Errors.CANNOT_REPAY_FLASHLOAN );
File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 130):
require(collateralBalanceAfter >= flashloanRepayAmount, Errors.CANNOT_REPAY_FLASHLOAN);
File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 96):
require(flashloanRepayAmount <= vaultCollateral.balanceOf(address(this)), Errors.CANNOT_REPAY_FLASHLOAN);
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 95):
revert(add(32, response), returndata_size)
File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 138):
revert(add(32, response), returndata_size)
1. File: 2022-08-mimo/contracts/actions/MIMOVaultActions.sol (line 3): `pragma solidity 0.8.10;` 2. File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 2): `pragma solidity 0.8.10;` 3. File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 2): `pragma solidity 0.8.10;` 4. File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 2): `pragma solidity 0.8.10;` 5. File: 2022-08-mimo/contracts/actions/MIMOFlashloan.sol (line 2): `pragma solidity 0.8.10;` 6. File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 2): `pragma solidity 0.8.10;` 7. File: 2022-08-mimo/contracts/actions/automated/MIMOAutoAction.sol (line 2): `pragma solidity 0.8.10;` 8. File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 2): `pragma solidity 0.8.10;` 9. File: 2022-08-mimo/contracts/actions/automated/interfaces/IMIMOAutoAction.sol (line 2): `pragma solidity 0.8.10;` 10. File: 2022-08-mimo/contracts/actions/automated/interfaces/IMIMOAutoRebalance.sol (line 2): `pragma solidity 0.8.10;` 11. File: 2022-08-mimo/contracts/actions/interfaces/IMIMOEmptyVault.sol (line 2): `pragma solidity 0.8.10;` 12. File: 2022-08-mimo/contracts/actions/interfaces/IMIMOFlashloan.sol (line 2): `pragma solidity 0.8.10;` 13. File: 2022-08-mimo/contracts/actions/interfaces/IMIMOLeverage.sol (line 2): `pragma solidity 0.8.10;` 14. File: 2022-08-mimo/contracts/actions/interfaces/IMIMOProxyAction.sol (line 2): `pragma solidity 0.8.10;` 15. File: 2022-08-mimo/contracts/actions/interfaces/IMIMORebalance.sol (line 2): `pragma solidity 0.8.10;` 16. File: 2022-08-mimo/contracts/actions/interfaces/IMIMOSwap.sol (line 2): `pragma solidity 0.8.10;` 17. File: 2022-08-mimo/contracts/actions/interfaces/IMIMOVaultActions.sol (line 2): `pragma solidity 0.8.10;` 18. File: 2022-08-mimo/contracts/actions/managed/MIMOManagedAction.sol (line 2): `pragma solidity 0.8.10;` 19. File: 2022-08-mimo/contracts/actions/managed/MIMOManagedRebalance.sol (line 2): `pragma solidity 0.8.10;` 20. File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedAction.sol (line 2): `pragma solidity 0.8.10;` 21. File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedRebalance.sol (line 2): `pragma solidity 0.8.10;` 22. File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 2): `pragma solidity 0.8.4;` 23. File: 2022-08-mimo/contracts/proxy/MIMOProxyFactory.sol (line 2): `pragma solidity >=0.8.4;` 24. File: 2022-08-mimo/contracts/proxy/MIMOProxyRegistry.sol(line 2): `pragma solidity >=0.8.4;` 25. File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxy.sol (line 2): `pragma solidity >=0.8.4;` 26. File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxyFactory.sol (line 2): `pragma solidity ^0.8.4;` 27. File: 2022-08-mimo/contracts/proxy/interfaces/IMIMOProxyRegistry.sol (line 2): `pragma solidity ^0.8.4;`
>=
costs less gas than >
:-1. File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 135): `if (fee > 0) {`
1. File: 2022-08-mimo/contracts/proxy/MIMOProxyFactory.sol (line 19): `uint256 public constant override VERSION = 1;`
1. File: 2022-08-mimo/contracts/actions/MIMOFlashloan.sol (line 44): `) external virtual override returns (bool) {}` 2. File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 38): ` receive() external payable {}`
1. File: 2022-08-mimo/contracts/actions/automated/MIMOAutoAction.sol (line 74): `function _getVaultStats(uint256 vaultId) internal view returns (uint256 vaultRatio, VaultState memory vaultState) {` 2. File: 2022-08-mimo/contracts/actions/managed/MIMOManagedAction.sol (line 92): `function _getVaultRatio(uint256 vaultId) internal view returns (uint256) {`
1. File: 2022-08-mimo/contracts/actions/automated/interfaces/IMIMOAutoAction.sol (line 9): `bool isAutomated;` 2. File: 2022-08-mimo/contracts/actions/managed/MIMOManagedAction.sol (line 17): `mapping(address => bool) internal _managers;` 3. File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedAction.sol (line 13): `bool isManaged;` 4. File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedAction.sol (line 22): `event ManagerSet(address manager, bool isManager);` 5. File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 24): `mapping(address => mapping(address => mapping(bytes4 => bool))) internal _permissions;` 6. File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 78): `bool success;` 7. File: 2022-08-mimo/contracts/proxy/MIMOProxyFactory.sol (line 24): `mapping(address => bool) internal _proxies;`
1. File: 2022-08-mimo/contracts/actions/MIMORebalance.soll (line 49): `bytes memory params = abi.encode(msg.sender, rbData, swapData);` 2. File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 54): `bytes memory params = abi.encode(msg.sender, swapAmount, swapData);` 3. File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 49): `bytes memory params = abi.encode(msg.sender, vaultId, swapData);` 4. File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedAction.sol (line 22): `event ManagerSet(address manager, bool isManager);` 5. File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 24): `mapping(address => mapping(address => mapping(bytes4 => bool))) internal _permissions;` 6. File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 73): ` _takeFlashLoan(flData, abi.encode(vaultOwner, autoFee, rbData, swapData));` 7. File: 2022-08-mimo/contracts/actions/managed/MIMOManagedRebalance.sol (line 65): `_takeFlashLoan(flData, abi.encode(vaultsData.vaultOwner(rbData.vaultId), managerFee, rbData, swapData));`
1. File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 64-66): ` address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums,` 2. File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 69-71): ` address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums,` 3. File: 2022-08-mimo/contracts/actions/MIMOFlashloan.sol (line 39-41): ` address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums,` 4. File: 2022-08-mimo/contracts/actions/MIMOFlashloan.sol (line 52-54): ` address[] memory assets = new address[](1); uint256[] memory amounts = new uint256[](1); uint256[] memory modes = new uint256[](1);event ManagerSet(address manager, bool isManager);` 5. File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 91-93): ` address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums,` 6. File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 64-66): ` address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums,` 7. File: 2022-08-mimo/contracts/actions/managed/MIMOManagedRebalance.sol (line 18-20): ` address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums,` 8. File: 2022-08-mimo/contracts/actions/managed/MIMOManagedRebalance.sol (line 91-94): ` address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums,`
1. File: 2022-08-mimo/contracts/actions/MIMORebalance.soll (line 49): `bytes memory params = abi.encode(msg.sender, rbData, swapData);` 2. File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 54): `bytes memory params = abi.encode(msg.sender, swapAmount, swapData);` 3. File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 49): `bytes memory params = abi.encode(msg.sender, vaultId, swapData);` 4. File: 2022-08-mimo/contracts/actions/managed/interfaces/IMIMOManagedAction.sol (line 22): `event ManagerSet(address manager, bool isManager);` 5. File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 24): `mapping(address => mapping(address => mapping(bytes4 => bool))) internal _permissions;` 6. File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 73): ` _takeFlashLoan(flData, abi.encode(vaultOwner, autoFee, rbData, swapData));` 7. File: 2022-08-mimo/contracts/actions/managed/MIMOManagedRebalance.sol (line 65): `_takeFlashLoan(flData, abi.encode(vaultsData.vaultOwner(rbData.vaultId), managerFee, rbData, swapData));`
1. File: 2022-08-mimo/contracts/actions/MIMOEmptyVault.sol (line 128): `vaultCollateral.safeTransfer(msg.sender, withdrawAmount);` 2. File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 51): `IERC20(flData.asset).safeTransferFrom(msg.sender, address(this), depositAmount);` 3. File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 137): ` token.safeTransfer(msg.sender, flashloanRepayAmount);` 4. File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 134): `fromCollateral.safeTransfer(msg.sender, flashloanRepayAmount);` 5. File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 136): `IERC20(a.stablex()).safeTransfer(msg.sender, fee);` 6. File: 2022-08-mimo/contracts/actions/MIMOVaultActions.sol (line 48): `collateral.safeTransferFrom(msg.sender, address(this), amount);` 7. File: 2022-08-mimo/contracts/actions/MIMOVaultActions.sol (line 71): `collateral.safeTransferFrom(msg.sender, address(this), depositAmount);` 8. File: 2022-08-mimo/contracts/actions/managed/MIMOManagedRebalance.sol (line 79): `IERC20(a.stablex()).safeTransfer(managedVault.manager, managerFee);` 9. File: 2022-08-mimo/contracts/actions/automated/MIMOAutoRebalance.sol (line 78): `IERC20(a.stablex()).safeTransfer(msg.sender, autoFee);`
!= 0
instead of > 0
:-1. File: 2022-08-mimo/contracts/actions/MIMOLeverage.sol (line 50): ` if (depositAmount > 0) {` 2. File: 2022-08-mimo/contracts/actions/MIMORebalance.sol (line 135): `if (fee > 0) {` 3. File: 2022-08-mimo/contracts/actions/MIMOSwap.sol (line 56): `if (response.length > 0) {` 4. File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 92): `if (response.length > 0) {` 5. File: 2022-08-mimo/contracts/proxy/MIMOProxy.sol (line 135): `if (response.length > 0) {`