ISyndicate
Interface for the Syndicate vault, the core underwriting engine.
View deployed contract addresses in the Contract Addresses section.
The ISyndicate interface defines the interactions for a Syndicate vault. Syndicates are ERC4626-compliant vaults that allow Liquidity Providers (LPs) to deposit capital, which is then allocated to underwriting pools to earn yield from premiums. The architecture uses a merged Hub+Strategy pattern for gas efficiency.
Interface
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol"; import {Types} from "../libraries/helpers/Types.sol"; import {SyndicateTypes} from "../vaults/syndicates/libraries/SyndicateTypes.sol"; /** * @title ISyndicate * @notice Unified interface for Syndicate vaults (merged Hub+Strategy architecture) * @dev Includes vault operations, intent reservations, duration tracking, and snapshots */ interface ISyndicate is IERC4626 { /* ============================= ===== Initialization ===== ============================= */ function initialize( address systemRegistry_, address asset_, address syndicateManager_, address feeRecipient_, string calldata name_, string calldata symbol_, address initialOwner_, address salvageManager_, uint16 performanceFeeBps_ ) external; /* ============================= ===== Vault Operations ===== ============================= */ function idleAssets() external view returns (uint256); function effectiveCapacity() external returns (uint256); function deallocateFromPool(uint256 poolId) external; function allocate(uint256 poolId, uint256 amount) external; // Bundled Setters function configureVault(SyndicateTypes.VaultConfig calldata config) external; function configureManager(SyndicateTypes.ManagerConfig calldata config) external; function configureDependencies(SyndicateTypes.DependenciesConfig calldata config) external; /* ============================= ===== Intent Reservations ===== ============================= */ function reserveMatchedIntent( SyndicateTypes.ReservationParams calldata params ) external returns (bytes32 key); function cancelReservation(bytes32 key) external; function expireReservation(bytes32 key) external; function consumeReservation(bytes32 key, uint256 poolId, uint256 coverageAmount, uint32 coverageDuration) external returns (uint256 reservedShares); function releaseReservation(bytes32 key, uint256 coverageAmount) external returns (uint256 releasedShares); function setSolverMinNonce(address solver, uint96 newMin) external; /* ============================= ===== Duration Tracking ===== ============================= */ function setDepositLockPreference(uint32 duration) external; function extendLockDuration(uint32 newDuration) external; function getSharesUnlockingAt(uint64 unlockTime) external view returns (uint256); function availableSharesForExactDuration(uint32 duration) external view returns (uint256); /* ============================= ===== Yield Management ===== ============================= */ function harvestYield(uint256 minAmount) external returns (uint256 appliedAmount); function upkeep() external; function performanceFeeBps() external view returns (uint16); /* ============================= ===== Hooks ===== ============================= */ function yieldBoostHook() external view returns (address); function reinsuranceHook() external view returns (address); function setYieldBoostHook(address hook) external; function setReinsuranceHook(address hook) external; /* ============================= ===== Bundled Views ===== ============================= */ function getVaultConfig() external view returns (SyndicateTypes.VaultConfig memory); function getManagerConfig() external view returns (SyndicateTypes.ManagerConfig memory); function getAccountState(address account) external view returns (SyndicateTypes.AccountState memory); function getReservation(bytes32 key) external view returns (SyndicateTypes.ReservationView memory); function reserveNonces(address solver) external view returns (uint96); function getActiveReservationsCount() external view returns (uint256); function owner() external view returns (address); function syndicateManager() external view returns (address); function poolAllocations() external view returns (address); /** * @notice Receive premium and split with reinsurer if applicable * @param premium Total premium amount being distributed * @param coverageAmount Total coverage amount that generated this premium * @param reinsuredPortion Amount of coverage backed by reinsurance */ function receivePremiumWithReinsuranceSplit( uint256 premium, uint256 coverageAmount, uint256 reinsuredPortion ) external; /* ============================= ===== Salvage Claims ===== ============================= */ function distributeSalvage(address salvageToken, uint256 maxRounds) external; function initializeSalvageSnapshot(address salvageToken) external; /* ============================= ===== Snapshot Support ===== ============================= */ function balanceOfAt(address account, uint256 snapshotId) external view returns (uint256); function totalSupplyAt(uint256 snapshotId) external view returns (uint256); /* ============================= ===== Misc & Admin ===== ============================= */ function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4); }
Capital Flow
Related Documentation
- Syndicates - Conceptual overview
- IPoolAllocations - Allocation tracking