LayerCover

ISharedAssetController

Interface for the Reinsurance (Backstop) system.

View deployed contract addresses in the Contract Addresses section.

The ISharedAssetController manages the Reinsurance (Backstop) pool. This system provides a shared layer of protection for all Syndicates by absorbing losses that exceed a Syndicate's capacity and enabling liquidity during claim payouts.

Interface

// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.20;

import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/**
 * @title ISharedAssetController
 * @notice Interface for the single-pool reinsurance controller
 * @dev Simplified ERC-4626 vault with backstop hook for future extensibility
 */
interface ISharedAssetController {
    // Events
    event PremiumReceived(uint256 amount);
    event DrawExecuted(uint256 requestedAmount, uint256 sentToCapitalPool);
    event AdapterChanged(address indexed newAdapter);
    event DepositToAdapter(uint256 amount);
    event Harvest(uint256 gainRealized);
    event LossRealized(uint256 lossAmount);
    event SalvageReceived(uint256 amount);
    event SalvageDistributed(uint256 amount);
    event BackstopHookUpdated(address indexed previousHook, address indexed newHook);
    event WithdrawalRequested(address indexed user, uint256 shares, uint256 unlockTime);

    // Views
    function asset() external view returns (address);
    function adapter() external view returns (address);
    function backstopHook() external view returns (address);
    function capitalPoolAddress() external view returns (address);
    function policyManagerAddress() external view returns (address);
    function riskManagerAddress() external view returns (address);

    function totalAssets() external view returns (uint256);
    function harvestCooldown() external view returns (uint256);
    function lastHarvestTimestamp() external view returns (uint256);
    function pendingSalvage() external view returns (uint256);
    function noticePeriod() external view returns (uint256);

    // Configuration (owner only)
    function setBackstopHook(address hook) external;
    function setAdapter(address newAdapter) external;
    function emergencySetAdapter(address newAdapter) external;
    function setHarvestCooldown(uint256 newCooldown) external;

    // Yield adapter operations
    function flushToAdapter(uint256 amount) external;
    function harvest() external;

    // Withdrawal queue
    function requestWithdrawal(uint256 shares) external;

    // Premium and drawdown
    function receiveUsdcPremium(uint256 amount) external;
    function drawFund(uint256 amountToDraw) external;
    function receiveSalvage(uint256 amount) external;
    function claimSalvage(uint256 policyId) external;

    // Emergency
    function emergencyTransferFromAdapter(address recipient, uint256 amount) external returns (uint256);
    function recoverERC20(IERC20 token, uint256 amount, address to) external;
}

Backstop Flow