// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../interfaces/IFYToken.sol"; import "../../interfaces/IOracle.sol"; import "../../interfaces/DataTypes.sol"; interface IVRCauldron { /// @dev Variable rate lending oracle for an underlying function rateOracles(bytes6 baseId) external view returns (IOracle); /// @dev An user can own one or more Vaults, with each vault being able to borrow from a single series. function vaults(bytes12 vault) external view returns (VRDataTypes.Vault memory); /// @dev Bases available in Cauldron. function bases(bytes6 baseId) external view returns (bool); /// @dev Assets available in Cauldron. function assets(bytes6 assetsId) external view returns (address); /// @dev Returns true if the asset is ilk for the base. function ilks(bytes6 baseId, bytes6 assetId) external view returns (bool); /// @dev Each vault records debt and collateral balances_. function balances(bytes12 vault) external view returns (DataTypes.Balances memory); /// @dev Max, min and sum of debt per underlying and collateral. function debt(bytes6 baseId, bytes6 ilkId) external view returns (DataTypes.Debt memory); // @dev Spot price oracle addresses and collateralization ratios function spotOracles(bytes6 baseId, bytes6 ilkId) external view returns (DataTypes.SpotOracle memory); /// @dev Create a new vault, linked to a series (and therefore underlying) and up to 5 collateral types function build( address owner, bytes12 vaultId, bytes6 baseId, bytes6 ilkId ) external returns (VRDataTypes.Vault memory); /// @dev Destroy an empty vault. Used to recover gas costs. function destroy(bytes12 vault) external; /// @dev Change a vault series and/or collateral types. function tweak( bytes12 vaultId, bytes6 baseId, bytes6 ilkId ) external returns (VRDataTypes.Vault memory); /// @dev Give a vault to another user. function give(bytes12 vaultId, address receiver) external returns (VRDataTypes.Vault memory); /// @dev Move collateral and debt between vaults. function stir( bytes12 from, bytes12 to, uint128 ink, uint128 art ) external returns (DataTypes.Balances memory, DataTypes.Balances memory); /// @dev Manipulate a vault debt and collateral. function pour( bytes12 vaultId, int128 ink, int128 base ) external returns (DataTypes.Balances memory); /// @dev Reduce debt and collateral from a vault, ignoring collateralization checks. function slurp( bytes12 vaultId, uint128 ink, uint128 base ) external returns (DataTypes.Balances memory); // ==== Helpers ==== /// @dev Convert a debt amount for a series from base to fyToken terms. /// @notice Think about rounding if using, since we are dividing. function debtFromBase(bytes6 baseId, uint128 base) external returns (uint128 art); /// @dev Convert a debt amount for a series from fyToken to base terms function debtToBase(bytes6 baseId, uint128 art) external returns (uint128 base); // ==== Accounting ==== /// @dev Return the collateralization level of a vault. It will be negative if undercollateralized. function level(bytes12 vaultId) external returns (int256); }