The Standard

The Standard
DeFiHardhat
20,000 USDC
View results
Submission Details
Severity: low
Invalid

Not imported a specific member from the module but the entire

Summary

Import the specific member from the module

Vulnerability Details

It is a better practice and more secure to import the specific member from a contract.

Tools Used

Manual Review

Recommendations

Replace every 'import "@.../XXXX.sol";' with 'import {XXXX} from "@.../XXXX.sol";' defining the specific member from the module.

The new imports should look like this:

IEUROs.sol:

import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

ILiquidationPoolManager.sol:

import {ITokenManager} from "contracts/interfaces/ITokenManager.sol";

INFTMetadataGenerator.sol:

import {ISmartVault} from "contracts/interfaces/ISmartVault.sol";

IPriceCalculator.sol:

import {ITokenManager} from "contracts/interfaces/ITokenManager.sol";

ISmartVault.sol:

import {ITokenManager} from "contracts/interfaces/ITokenManager.sol";

ISmartVaultManagerV3.sol:

import {ISmartVaultManager} from "contracts/interfaces/ISmartVaultManager.sol";
import {ISmartVaultManagerV2} from "contracts/interfaces/ISmartVaultManagerV2.sol";

IWETH.sol:

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

DefGenerator.sol:

import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
import {NFTUtils} from "contracts/utils/nfts/NFTUtils.sol";

NFTMetadataGenerator.sol:

import {Base64} from "@openzeppelin/contracts/utils/Base64.sol";
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
import {ISmartVault} from "contracts/interfaces/ISmartVault.sol";
import {INFTMetadataGenerator} from "contracts/interfaces/INFTMetadataGenerator.sol";
import {SVGGenerator} from "contracts/utils/nfts/SVGGenerator.sol";
import {NFTUtils} from "contracts/utils/nfts/NFTUtils.sol";

NFTUtils.sol:

import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
import {ISmartVault.sol} from "contracts/interfaces/ISmartVault.sol";
import {INFTMetadataGenerator} from "contracts/interfaces/INFTMetadataGenerator.sol";
import {SVGGenerator} from "contracts/utils/nfts/SVGGenerator.sol";

SVGGenerator.sol:

import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
import {ISmartVault} from "contracts/interfaces/ISmartVault.sol";
import {DefGenerator} from "contracts/utils/nfts/DefGenerator.sol";
import {NFTUtils} from "contracts/utils/nfts/NFTUtils.sol";

ChainlinkMock.sol:

import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

ERC20Mock.sol:

import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";

EUROsMock.sol:

import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";
import {IEURO} from "contracts/interfaces/IEUROs.sol";

MockSmartVaultManager.sol:

import {ISmartVaultManager} from "contracts/interfaces/ISmartVaultManager.sol";
import {ITokenManager} from "contracts/interfaces/ITokenManager.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

PriceCalculator.sol:

import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol" as Chainlink;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {IPriceCalculator} from "contracts/interfaces/IPriceCalculator.sol";

SmartVaultDeployerV3.sol:

import {SmartVaultV3} from "contracts/SmartVaultV3.sol";
import {PriceCalculator} from "contracts/utils/PriceCalculator.sol";
import {ISmartVaultDeployer} from "contracts/interfaces/ISmartVaultDeployer.sol";

SmartVaultIndex.sol:

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {ISmartVaultIndex} from "contracts/interfaces/ISmartVaultIndex.sol";

SmartVaultManager.sol:

import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import {ERC721Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {INFTMetadataGenerator} from "contracts/interfaces/INFTMetadataGenerator.sol";
import {IEUROs} from "contracts/interfaces/IEUROs.sol";
import {ISmartVault} from "contracts/interfaces/ISmartVault.sol";
import {ISmartVaultDeployer} from "contracts/interfaces/ISmartVaultDeployer.sol";
import {ISmartVaultIndex} from "contracts/interfaces/ISmartVaultIndex.sol";
import {ISmartVaultManager} from "contracts/interfaces/ISmartVaultManager.sol";

SwapRouterMock.sol:

import {ISwapRouter} from "contracts/interfaces/ISwapRouter.sol";

TokenManagerMock.sol:

import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol" as Chainlink;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {ITokenManager} from "contracts/interfaces/ITokenManager.sol";

WETHMock.sol:

import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {IWETH} from "contracts/interfaces/IWETH.sol";

LiquidationPool.sol:

import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol" as Chainlink;
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {IEUROs} from "contracts/interfaces/IEUROs.sol";
import {ILiquidationPool} from "contracts/interfaces/ILiquidationPool.sol";
import {ILiquidationPoolManager} from "contracts/interfaces/ILiquidationPoolManager.sol";
import {ISmartVaultManager} from "contracts/interfaces/ISmartVaultManager.sol";
import {ITokenManager} from "contracts/interfaces/ITokenManager.sol";

LiquidationPoolManager.sol:

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {LiquidationPool} from "contracts/LiquidationPool.sol";
import {ILiquidationPoolManager} from "contracts/interfaces/ILiquidationPoolManager.sol";
import {ISmartVaultManager} from "contracts/interfaces/ISmartVaultManager.sol";
import {ITokenManager} from "contracts/interfaces/ITokenManager.sol";

SmartVaultManagerV5.sol:

import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import {ERC721Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {INFTMetadataGenerator} from "contracts/interfaces/INFTMetadataGenerator.sol";
import {IEUROs} from "contracts/interfaces/IEUROs.sol";
import {ISmartVault} from "contracts/interfaces/ISmartVault.sol";
import {ISmartVaultDeployer} from "contracts/interfaces/ISmartVaultDeployer.sol";
import {ISmartVaultIndex} from "contracts/interfaces/ISmartVaultIndex.sol";
import {ISmartVaultManager} from "contracts/interfaces/ISmartVaultManager.sol";
import {ISmartVaultManagerV2} from "contracts/interfaces/ISmartVaultManagerV2.sol";

SmartVaultV3.sol:

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {IEUROs} from "contracts/interfaces/IEUROs.sol";
import {IPriceCalculator} from "contracts/interfaces/IPriceCalculator.sol";
import {ISmartVault} from "contracts/interfaces/ISmartVault.sol";
import {ISmartVaultManagerV3} from "contracts/interfaces/ISmartVaultManagerV3.sol";
import {ISwapRouter} from "contracts/interfaces/ISwapRouter.sol";
import {ITokenManager} from "contracts/interfaces/ITokenManager.sol";
import {IWETH} from "contracts/interfaces/IWETH.sol";
Updates

Lead Judging Commences

hrishibhat Lead Judge over 1 year ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity
Assigned finding tags:

informational/invalid

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.