// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; /** * @title IVault * @notice Interface for Vault contract * @dev Aave-style vault operations (deposit, borrow, repay, withdraw) */ interface IVault { /** * @notice Deposit M0 collateral into vault * @param asset Collateral asset address * @param amount Amount to deposit */ function deposit(address asset, uint256 amount) external payable; /** * @notice Borrow eMoney against collateral * @param currency eMoney currency address * @param amount Amount to borrow */ function borrow(address currency, uint256 amount) external; /** * @notice Repay borrowed eMoney * @param currency eMoney currency address * @param amount Amount to repay */ function repay(address currency, uint256 amount) external; /** * @notice Withdraw collateral from vault * @param asset Collateral asset address * @param amount Amount to withdraw */ function withdraw(address asset, uint256 amount) external; /** * @notice Get vault owner * @return owner Vault owner address */ function owner() external view returns (address); /** * @notice Get vault health * @return healthRatio Collateralization ratio in basis points * @return collateralValue Total collateral value in XAU * @return debtValue Total debt value in XAU */ function getHealth() external view returns ( uint256 healthRatio, uint256 collateralValue, uint256 debtValue ); event Deposited(address indexed asset, uint256 amount, address indexed depositor); event Borrowed(address indexed currency, uint256 amount, address indexed borrower); event Repaid(address indexed currency, uint256 amount, address indexed repayer); event Withdrawn(address indexed asset, uint256 amount, address indexed withdrawer); }