# CryndexFactory.sol

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

interface ICryndexFactory {
    /// @notice Emitted when a new asset contract is created
    /// @param name The name of the asset
    /// @param symbol The symbol of the asset
    /// @param assetClass The class of asset (commodity, equity, etc.)
    /// @param aggregators Chainlink aggregator addresses for the asset
    /// @param proportionalities The proportionality of each price feed
    /// @param asset The address of the newly created asset contract
    event AssetCreated(
        string name,
        string symbol,
        string assetClass,
        address[] aggregators,
        uint256[] proportionalities,
        address asset
    );

    /// @notice Creates new asset contracts
    /// @param name The name of the asset
    /// @param symbol The symbol of the asset
    /// @param assetClass The class of asset (commodity, equity, etc.)
    /// @param aggregator Chainlink aggregator address for the asset
    /// @param borrowRate The initial borrow rate
    /// @param savingsRate The initial savings rate
    /// @param governor The address of the governor
    function createAsset(
        string memory name,
        string memory symbol,
        string memory assetClass,
        address[] memory aggregator,
        uint256[] memory proportionalities,
        uint112 borrowRate,
        uint112 savingsRate,
        address governor
    ) external returns (address);

    /// @notice Returns all asset addresses
    /// @return Array of asset contract addresses
    function getAssets() external view returns (address[] memory);

    /// @notice Sets the address for the treasury
    /// @param _treasury Address of the treasury
    function initialise(address _treasury) external;
}

```
