// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.2; interface IPool { event LogRiskpoolRegistered( uint256 riskpoolId, address wallet, address erc20Token, uint256 collateralizationLevel, uint256 sumOfSumInsuredCap ); event LogRiskpoolRequiredCollateral(bytes32 processId, uint256 sumInsured, uint256 collateral); event LogRiskpoolCollateralizationFailed(uint256 riskpoolId, bytes32 processId, uint256 amount); event LogRiskpoolCollateralizationSucceeded(uint256 riskpoolId, bytes32 processId, uint256 amount); event LogRiskpoolCollateralReleased(uint256 riskpoolId, bytes32 processId, uint256 amount); struct Pool { uint256 id; // matches component id of riskpool address wallet; // riskpool wallet address erc20Token; // the value token of the riskpool uint256 collateralizationLevel; // required collateralization level to cover new policies uint256 sumOfSumInsuredCap; // max sum of sum insured the pool is allowed to secure uint256 sumOfSumInsuredAtRisk; // current sum of sum insured at risk in this pool uint256 capital; // net investment capital amount (<= balance) uint256 lockedCapital; // capital amount linked to collateralizaion of non-closed policies (<= capital) uint256 balance; // total amount of funds: net investment capital + net premiums - payouts uint256 createdAt; uint256 updatedAt; } function registerRiskpool( uint256 riskpoolId, address wallet, address erc20Token, uint256 collateralizationLevel, uint256 sumOfSumInsuredCap ) external; function setRiskpoolForProduct(uint256 productId, uint256 riskpoolId) external; function underwrite(bytes32 processId) external returns(bool success); function processPremium(bytes32 processId, uint256 amount) external; function processPayout(bytes32 processId, uint256 amount) external; function release(bytes32 processId) external; }