// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "./Assets.sol"; interface IAssetManager { /** * @dev Register a new asset. * @param assetClass Asset class identifier. * @param original The original assets address. */ function registerAsset(bytes4 assetClass, address original) external; /** * @dev Transfers an asset to the vault using associated controller. * @param asset Asset and its value. * @param from The owner of the asset. */ function depositAsset(Assets.Asset memory asset, address from) external; /** * @dev Withdraw asset from the vault using associated controller to owner. * @param asset Asset and its value. */ function withdrawAsset(Assets.Asset calldata asset) external; /** * @dev Retrieve the asset class controller for a given assetClass. * @param assetClass Asset class identifier. * @return The asset class controller. */ function assetClassController(bytes4 assetClass) external view returns (address); /** * @dev Returns the number of currently supported assets. * @return Asset count. */ function supportedAssetCount() external view returns (uint256); /** * @dev Returns the list of all supported asset addresses. * @param offset Starting index. * @param limit Max number of items. * @return List of original asset addresses. * @return List of asset config structures. */ function supportedAssets(uint256 offset, uint256 limit) external view returns (address[] memory, Assets.AssetConfig[] memory); }