GitHub Hardhat / Foundry Auto-Fetch

Import & Scan Multi-File GitHub Repository

74Grade C+
Multi-Contract Audit Summary
4 files inspected • 415 lines of Solidity code • 2 issues flagged
1 Critical1 High2 Files CleanRequest Full Manual Audit →
Repository Tree
main
contracts/
contracts/Vault.sol(185 lines)
Issues Identified
1// SPDX-License-Identifier: MIT
2pragma solidity ^0.8.20;
3
4import "@openzeppelin/contracts/access/Ownable.sol";
5import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
6import "./interfaces/IPriceOracle.sol";
7
8contract Vault is Ownable {
9 mapping(address => uint256) public userBalances;
10 IPriceOracle public priceOracle;
11 IERC20 public collateralToken;
12
13 event LiquidityDeposited(address indexed user, uint256 amount);
14 event LiquidityWithdrawn(address indexed user, uint256 amount);
15
16 constructor(address _collateralToken, address _priceOracle) Ownable(msg.sender) {
17 collateralToken = IERC20(_collateralToken);
18 priceOracle = IPriceOracle(_priceOracle);
19 }
20
21 function depositCollateral(uint256 amount) external {
22 require(amount > 0, "Zero deposit");
23 collateralToken.transferFrom(msg.sender, address(this), amount);
24 userBalances[msg.sender] += amount;
25 emit LiquidityDeposited(msg.sender, amount);
26 }
27
28 // [CRITICAL] Reentrancy vulnerability: External call occurs before state balance is decremented
29 function withdrawLiquidity(uint256 amount) external {
30 require(userBalances[msg.sender] >= amount, "Insufficient collateral");
31
32 (bool success, ) = msg.sender.call{value: amount}("");
33 require(success, "Transfer execution failed");
34
35 userBalances[msg.sender] -= amount;
36 emit LiquidityWithdrawn(msg.sender, amount);
37 }
38}