@etherisc/gif-next 0.0.2-e8ea5fe-337 → 0.0.2-e91c6be-472
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -7
 - package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
 - package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
 - package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
 - package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
 - package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
 - package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
 - package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
 - package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
 - package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
 - package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
 - package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
 - package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +162 -327
 - package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
 - package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
 - package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +102 -243
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +180 -198
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +131 -107
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +92 -81
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +52 -0
 - package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
 - package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1429 -0
 - package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
 - package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1979 -0
 - package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
 - package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1430 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1177 -0
 - package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1606 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2281 -0
 - package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
 - package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.json +53 -31
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +31 -86
 - package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
 - package/artifacts/contracts/instance/Instance.sol/Instance.json +72 -123
 - package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +165 -138
 - package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +286 -83
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +96 -245
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +99 -87
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +197 -116
 - package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
 - package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
 - package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
 - package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
 - package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
 - package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
 - package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
 - package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +121 -286
 - package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
 - package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +87 -76
 - package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
 - package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +97 -238
 - package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
 - package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +107 -159
 - package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +99 -83
 - package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
 - package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +115 -256
 - package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.json +203 -208
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +135 -107
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +72 -15
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +107 -107
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +272 -185
 - package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
 - package/artifacts/contracts/pool/Pool.sol/Pool.json +115 -267
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.json +420 -366
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +128 -88
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +87 -144
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +96 -80
 - package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
 - package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +156 -251
 - package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +202 -200
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +136 -104
 - package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
 - package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +29 -0
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +64 -8
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +147 -1
 - package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
 - package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +80 -51
 - package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
 - package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +146 -89
 - package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
 - package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +29 -0
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +267 -167
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +127 -91
 - package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
 - package/artifacts/contracts/product/PricingService.sol/PricingService.json +170 -219
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +111 -91
 - package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
 - package/artifacts/contracts/product/Product.sol/Product.json +154 -249
 - package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
 - package/artifacts/contracts/product/RiskService.sol/RiskService.json +81 -138
 - package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +93 -77
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +309 -33
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
 - package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
 - package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
 - package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
 - package/artifacts/contracts/registry/Registry.sol/Registry.json +515 -94
 - package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +296 -143
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +94 -284
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +91 -75
 - package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
 - package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
 - package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +131 -223
 - package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
 - package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
 - package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
 - package/artifacts/contracts/shared/Component.sol/Component.json +76 -213
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +426 -263
 - package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +140 -110
 - package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
 - package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
 - package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +111 -0
 - package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponent.sol/IComponent.json +66 -51
 - package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +388 -19
 - package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +87 -76
 - package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
 - package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
 - package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
 - package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
 - package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
 - package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
 - package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
 - package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
 - package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
 - package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
 - package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
 - package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +97 -238
 - package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
 - package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
 - package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
 - package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
 - package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
 - package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
 - package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
 - package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +388 -35
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
 - package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
 - package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
 - package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStaking.sol/IStaking.json +84 -87
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
 - package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
 - package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
 - package/artifacts/contracts/staking/Staking.sol/Staking.json +152 -311
 - package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
 - package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +112 -97
 - package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.json +87 -165
 - package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +95 -79
 - package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +144 -103
 - package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
 - package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
 - package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
 - package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
 - package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
 - package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
 - package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
 - package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
 - package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
 - package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
 - package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
 - package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
 - package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
 - package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
 - package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
 - package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
 - package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
 - package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
 - package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
 - package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
 - package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
 - package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
 - package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
 - package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
 - package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
 - package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
 - package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
 - package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
 - package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
 - package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
 - package/contracts/authorization/AccessAdmin.sol +64 -59
 - package/contracts/authorization/Authorization.sol +111 -39
 - package/contracts/authorization/IAccess.sol +1 -0
 - package/contracts/authorization/IAccessAdmin.sol +4 -3
 - package/contracts/authorization/IAuthorization.sol +13 -7
 - package/contracts/authorization/IServiceAuthorization.sol +3 -1
 - package/contracts/authorization/ReleaseAccessManager.sol +38 -0
 - package/contracts/authorization/ServiceAuthorization.sol +26 -10
 - package/contracts/distribution/BasicDistribution.sol +4 -3
 - package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
 - package/contracts/distribution/Distribution.sol +12 -23
 - package/contracts/distribution/DistributionService.sol +78 -60
 - package/contracts/distribution/DistributionServiceManager.sol +6 -6
 - package/contracts/distribution/IDistributionComponent.sol +1 -1
 - package/contracts/distribution/IDistributionService.sol +5 -6
 - package/contracts/examples/fire/DamageLevel.sol +59 -0
 - package/contracts/examples/fire/FirePool.sol +86 -0
 - package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
 - package/contracts/examples/fire/FireProduct.sol +431 -0
 - package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
 - package/contracts/examples/fire/FireUSD.sol +26 -0
 - package/contracts/examples/unpermissioned/SimpleDistribution.sol +58 -0
 - package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
 - package/contracts/examples/unpermissioned/SimplePool.sol +108 -0
 - package/contracts/examples/unpermissioned/SimpleProduct.sol +345 -0
 - package/contracts/instance/IInstance.sol +4 -1
 - package/contracts/instance/IInstanceService.sol +2 -23
 - package/contracts/instance/Instance.sol +22 -19
 - package/contracts/instance/InstanceAdmin.sol +23 -31
 - package/contracts/instance/InstanceAuthorizationV3.sol +9 -19
 - package/contracts/instance/InstanceReader.sol +83 -18
 - package/contracts/instance/InstanceService.sol +35 -88
 - package/contracts/instance/InstanceServiceManager.sol +6 -7
 - package/contracts/instance/module/IComponents.sol +10 -6
 - package/contracts/instance/module/IPolicy.sol +4 -3
 - package/contracts/oracle/BasicOracle.sol +0 -1
 - package/contracts/oracle/IOracleService.sol +2 -1
 - package/contracts/oracle/Oracle.sol +5 -16
 - package/contracts/oracle/OracleService.sol +56 -43
 - package/contracts/oracle/OracleServiceManager.sol +6 -6
 - package/contracts/pool/BasicPool.sol +33 -24
 - package/contracts/pool/BasicPoolAuthorization.sol +12 -2
 - package/contracts/pool/BundleService.sol +96 -49
 - package/contracts/pool/BundleServiceManager.sol +6 -6
 - package/contracts/pool/IBundleService.sol +11 -5
 - package/contracts/pool/IPoolComponent.sol +19 -15
 - package/contracts/pool/IPoolService.sol +42 -30
 - package/contracts/pool/Pool.sol +142 -123
 - package/contracts/pool/PoolService.sol +254 -143
 - package/contracts/pool/PoolServiceManager.sol +4 -4
 - package/contracts/product/ApplicationService.sol +20 -9
 - package/contracts/product/ApplicationServiceManager.sol +4 -4
 - package/contracts/product/BasicProduct.sol +8 -12
 - package/contracts/product/BasicProductAuthorization.sol +0 -1
 - package/contracts/product/ClaimService.sol +235 -108
 - package/contracts/product/ClaimServiceManager.sol +4 -4
 - package/contracts/product/IClaimService.sol +3 -2
 - package/contracts/product/IPolicyService.sol +13 -4
 - package/contracts/product/IPricingService.sol +9 -9
 - package/contracts/product/IProductComponent.sol +23 -3
 - package/contracts/product/PolicyService.sol +169 -47
 - package/contracts/product/PolicyServiceManager.sol +4 -4
 - package/contracts/product/PricingService.sol +12 -13
 - package/contracts/product/PricingServiceManager.sol +3 -3
 - package/contracts/product/Product.sol +77 -70
 - package/contracts/product/RiskService.sol +4 -5
 - package/contracts/product/RiskServiceManager.sol +4 -4
 - package/contracts/registry/ChainNft.sol +68 -38
 - package/contracts/registry/IRegistry.sol +56 -17
 - package/contracts/registry/IRegistryService.sol +5 -12
 - package/contracts/registry/ITransferInterceptor.sol +1 -2
 - package/contracts/registry/Registry.sol +349 -200
 - package/contracts/registry/RegistryAdmin.sol +146 -58
 - package/contracts/registry/RegistryService.sol +35 -46
 - package/contracts/registry/RegistryServiceManager.sol +2 -2
 - package/contracts/registry/ReleaseLifecycle.sol +6 -3
 - package/contracts/registry/ReleaseRegistry.sol +204 -204
 - package/contracts/registry/ServiceAuthorizationV3.sol +24 -20
 - package/contracts/shared/Component.sol +62 -101
 - package/contracts/shared/ComponentService.sol +291 -153
 - package/contracts/shared/ComponentServiceManager.sol +8 -5
 - package/contracts/shared/ComponentVerifyingService.sol +27 -16
 - package/contracts/shared/ContractLib.sol +54 -0
 - package/contracts/shared/IComponent.sol +10 -13
 - package/contracts/shared/IComponentService.sol +38 -16
 - package/contracts/shared/IInstanceLinkedComponent.sol +3 -11
 - package/contracts/shared/ILifecycle.sol +3 -1
 - package/contracts/shared/INftOwnable.sol +2 -0
 - package/contracts/shared/IPolicyHolder.sol +12 -22
 - package/contracts/shared/IRegisterable.sol +11 -0
 - package/contracts/shared/InitializableERC165.sol +2 -2
 - package/contracts/shared/InstanceLinkedComponent.sol +70 -37
 - package/contracts/shared/KeyValueStore.sol +1 -1
 - package/contracts/shared/Lifecycle.sol +15 -4
 - package/contracts/shared/NftOwnable.sol +26 -6
 - package/contracts/shared/PolicyHolder.sol +15 -52
 - package/contracts/shared/Registerable.sol +19 -11
 - package/contracts/shared/RegistryLinked.sol +9 -14
 - package/contracts/shared/Service.sol +20 -18
 - package/contracts/shared/TokenHandler.sol +324 -66
 - package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
 - package/contracts/staking/IStaking.sol +9 -4
 - package/contracts/staking/IStakingService.sol +0 -3
 - package/contracts/staking/Staking.sol +34 -27
 - package/contracts/staking/StakingManager.sol +8 -6
 - package/contracts/staking/StakingReader.sol +12 -5
 - package/contracts/staking/StakingService.sol +71 -25
 - package/contracts/staking/StakingServiceManager.sol +2 -2
 - package/contracts/type/Amount.sol +15 -0
 - package/contracts/type/ClaimId.sol +6 -1
 - package/contracts/type/NftId.sol +1 -0
 - package/contracts/type/ObjectType.sol +1 -0
 - package/contracts/type/PayoutId.sol +10 -10
 - package/contracts/type/RiskId.sol +16 -2
 - package/contracts/type/RoleId.sol +0 -12
 - package/contracts/type/StateId.sol +14 -1
 - package/contracts/type/UFixed.sol +4 -0
 - package/contracts/upgradeability/ProxyManager.sol +68 -34
 - package/contracts/upgradeability/Versionable.sol +2 -2
 - package/package.json +4 -3
 - package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
 - package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
 - package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
 - package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
 - package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
 - package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
 - package/contracts/authorization/IModuleAuthorization.sol +0 -21
 - package/contracts/authorization/ModuleAuthorization.sol +0 -78
 - package/contracts/shared/InitializableCustom.sol +0 -177
 
| 
         @@ -1,12 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            import {IComponents} from "../instance/module/IComponents.sol";
         
     | 
| 
       5 
     | 
    
         
            -
            import {IInstance} from "../instance/IInstance.sol";
         
     | 
| 
       6 
     | 
    
         
            -
            import {IPolicy} from "../instance/module/IPolicy.sol";
         
     | 
| 
       7 
4 
     | 
    
         
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         
     | 
| 
       8 
5 
     | 
    
         
             
            import {TimestampLib} from "../type/Timestamp.sol";
         
     | 
| 
       9 
     | 
    
         
            -
            import {ObjectType, CLAIM,  
     | 
| 
      
 6 
     | 
    
         
            +
            import {ObjectType, CLAIM, POLICY, POOL, PRODUCT} from "../type/ObjectType.sol";
         
     | 
| 
       10 
7 
     | 
    
         
             
            import {SUBMITTED, KEEP_STATE, DECLINED, REVOKED, CONFIRMED, CLOSED, PAID} from "../type/StateId.sol";
         
     | 
| 
       11 
8 
     | 
    
         
             
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
       12 
9 
     | 
    
         
             
            import {FeeLib} from "../type/Fee.sol";
         
     | 
| 
         @@ -14,8 +11,16 @@ import {StateId} from "../type/StateId.sol"; 
     | 
|
| 
       14 
11 
     | 
    
         
             
            import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
         
     | 
| 
       15 
12 
     | 
    
         
             
            import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
         
     | 
| 
       16 
13 
     | 
    
         
             
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         
     | 
| 
      
 14 
     | 
    
         
            +
            import {ContractLib} from "../shared/ContractLib.sol";
         
     | 
| 
       17 
15 
     | 
    
         
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         
     | 
| 
      
 16 
     | 
    
         
            +
            import {InstanceStore} from "../instance/InstanceStore.sol";
         
     | 
| 
       18 
17 
     | 
    
         
             
            import {IClaimService} from "./IClaimService.sol";
         
     | 
| 
      
 18 
     | 
    
         
            +
            import {IComponents} from "../instance/module/IComponents.sol";
         
     | 
| 
      
 19 
     | 
    
         
            +
            import {IInstance} from "../instance/IInstance.sol";
         
     | 
| 
      
 20 
     | 
    
         
            +
            import {IPolicy} from "../instance/module/IPolicy.sol";
         
     | 
| 
      
 21 
     | 
    
         
            +
            import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
         
     | 
| 
      
 22 
     | 
    
         
            +
            import {IPoolComponent} from "../pool/IPoolComponent.sol";
         
     | 
| 
      
 23 
     | 
    
         
            +
            import {IPolicyService} from "../product/IPolicyService.sol";
         
     | 
| 
       19 
24 
     | 
    
         
             
            import {IPoolService} from "../pool/IPoolService.sol";
         
     | 
| 
       20 
25 
     | 
    
         | 
| 
       21 
26 
     | 
    
         | 
| 
         @@ -24,6 +29,7 @@ contract ClaimService is 
     | 
|
| 
       24 
29 
     | 
    
         
             
                IClaimService
         
     | 
| 
       25 
30 
     | 
    
         
             
            {
         
     | 
| 
       26 
31 
     | 
    
         | 
| 
      
 32 
     | 
    
         
            +
                IPolicyService internal _policyService;
         
     | 
| 
       27 
33 
     | 
    
         
             
                IPoolService internal _poolService;
         
     | 
| 
       28 
34 
     | 
    
         | 
| 
       29 
35 
     | 
    
         
             
                function _initialize(
         
     | 
| 
         @@ -35,16 +41,16 @@ contract ClaimService is 
     | 
|
| 
       35 
41 
     | 
    
         
             
                    initializer()
         
     | 
| 
       36 
42 
     | 
    
         
             
                {
         
     | 
| 
       37 
43 
     | 
    
         
             
                    (
         
     | 
| 
       38 
     | 
    
         
            -
                        address registryAddress 
     | 
| 
       39 
     | 
    
         
            -
                        //address managerAddress
         
     | 
| 
      
 44 
     | 
    
         
            +
                        address registryAddress,
         
     | 
| 
       40 
45 
     | 
    
         
             
                        address authority
         
     | 
| 
       41 
     | 
    
         
            -
                    ) = abi.decode(data, (address, address 
     | 
| 
      
 46 
     | 
    
         
            +
                    ) = abi.decode(data, (address, address));
         
     | 
| 
       42 
47 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
                     
     | 
| 
      
 48 
     | 
    
         
            +
                    _initializeService(registryAddress, authority, owner);
         
     | 
| 
       44 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
                    _policyService = IPolicyService(getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart()));
         
     | 
| 
       45 
51 
     | 
    
         
             
                    _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
         
     | 
| 
       46 
52 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                     
     | 
| 
      
 53 
     | 
    
         
            +
                    _registerInterface(type(IClaimService).interfaceId);
         
     | 
| 
       48 
54 
     | 
    
         
             
                }
         
     | 
| 
       49 
55 
     | 
    
         | 
| 
       50 
56 
     | 
    
         
             
                function submit(
         
     | 
| 
         @@ -54,11 +60,15 @@ contract ClaimService is 
     | 
|
| 
       54 
60 
     | 
    
         
             
                )
         
     | 
| 
       55 
61 
     | 
    
         
             
                    external
         
     | 
| 
       56 
62 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 63 
     | 
    
         
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         
     | 
| 
       57 
64 
     | 
    
         
             
                    returns (ClaimId claimId)
         
     | 
| 
       58 
65 
     | 
    
         
             
                {
         
     | 
| 
      
 66 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
       59 
68 
     | 
    
         
             
                    (
         
     | 
| 
       60 
     | 
    
         
            -
                         
     | 
| 
       61 
     | 
    
         
            -
                         
     | 
| 
      
 69 
     | 
    
         
            +
                        ,
         
     | 
| 
      
 70 
     | 
    
         
            +
                        IInstance instance,,
         
     | 
| 
      
 71 
     | 
    
         
            +
                        InstanceStore instanceStore,
         
     | 
| 
       62 
72 
     | 
    
         
             
                        IPolicy.PolicyInfo memory policyInfo
         
     | 
| 
       63 
73 
     | 
    
         
             
                    ) = _verifyCallerWithPolicy(policyNftId);
         
     | 
| 
       64 
74 
     | 
    
         | 
| 
         @@ -78,7 +88,7 @@ contract ClaimService is 
     | 
|
| 
       78 
88 
     | 
    
         | 
| 
       79 
89 
     | 
    
         
             
                    // create new claim
         
     | 
| 
       80 
90 
     | 
    
         
             
                    claimId = ClaimIdLib.toClaimId(policyInfo.claimsCount + 1);
         
     | 
| 
       81 
     | 
    
         
            -
                     
     | 
| 
      
 91 
     | 
    
         
            +
                    instanceStore.createClaim(
         
     | 
| 
       82 
92 
     | 
    
         
             
                        policyNftId, 
         
     | 
| 
       83 
93 
     | 
    
         
             
                        claimId, 
         
     | 
| 
       84 
94 
     | 
    
         
             
                        IPolicy.ClaimInfo({
         
     | 
| 
         @@ -91,10 +101,10 @@ contract ClaimService is 
     | 
|
| 
       91 
101 
     | 
    
         
             
                            closedAt: TimestampLib.zero()}));
         
     | 
| 
       92 
102 
     | 
    
         | 
| 
       93 
103 
     | 
    
         
             
                    // update and save policy info with instance
         
     | 
| 
      
 104 
     | 
    
         
            +
                    // policy claim amount is only updated when claim is confirmed
         
     | 
| 
       94 
105 
     | 
    
         
             
                    policyInfo.claimsCount += 1;
         
     | 
| 
       95 
106 
     | 
    
         
             
                    policyInfo.openClaimsCount += 1;
         
     | 
| 
       96 
     | 
    
         
            -
                     
     | 
| 
       97 
     | 
    
         
            -
                    instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
      
 107 
     | 
    
         
            +
                    instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
       98 
108 
     | 
    
         | 
| 
       99 
109 
     | 
    
         
             
                    emit LogClaimServiceClaimSubmitted(policyNftId, claimId, claimAmount);
         
     | 
| 
       100 
110 
     | 
    
         
             
                }
         
     | 
| 
         @@ -108,10 +118,15 @@ contract ClaimService is 
     | 
|
| 
       108 
118 
     | 
    
         
             
                )
         
     | 
| 
       109 
119 
     | 
    
         
             
                    external
         
     | 
| 
       110 
120 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 121 
     | 
    
         
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         
     | 
| 
       111 
122 
     | 
    
         
             
                {
         
     | 
| 
      
 123 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
       112 
125 
     | 
    
         
             
                    (
         
     | 
| 
      
 126 
     | 
    
         
            +
                        NftId productNftId,
         
     | 
| 
       113 
127 
     | 
    
         
             
                        IInstance instance,
         
     | 
| 
       114 
128 
     | 
    
         
             
                        InstanceReader instanceReader,
         
     | 
| 
      
 129 
     | 
    
         
            +
                        InstanceStore instanceStore,
         
     | 
| 
       115 
130 
     | 
    
         
             
                        IPolicy.PolicyInfo memory policyInfo
         
     | 
| 
       116 
131 
     | 
    
         
             
                    ) = _verifyCallerWithPolicy(policyNftId);
         
     | 
| 
       117 
132 
     | 
    
         | 
| 
         @@ -121,18 +136,27 @@ contract ClaimService is 
     | 
|
| 
       121 
136 
     | 
    
         
             
                    IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
         
     | 
| 
       122 
137 
     | 
    
         
             
                    claimInfo.claimAmount = confirmedAmount;
         
     | 
| 
       123 
138 
     | 
    
         
             
                    claimInfo.processData = data;
         
     | 
| 
       124 
     | 
    
         
            -
                     
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
                    // TODO test if claim results in total claim amount == sum insured amount
         
     | 
| 
       127 
     | 
    
         
            -
                    // should policy still be active it needs to automatically become expired
         
     | 
| 
      
 139 
     | 
    
         
            +
                    instanceStore.updateClaim(policyNftId, claimId, claimInfo, CONFIRMED());
         
     | 
| 
       128 
140 
     | 
    
         | 
| 
       129 
141 
     | 
    
         
             
                    // update and save policy info with instance
         
     | 
| 
       130 
142 
     | 
    
         
             
                    policyInfo.claimAmount = policyInfo.claimAmount + confirmedAmount;
         
     | 
| 
       131 
     | 
    
         
            -
                     
     | 
| 
      
 143 
     | 
    
         
            +
                    instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                    // should policy still be active it needs to become expired
         
     | 
| 
      
 146 
     | 
    
         
            +
                    if (policyInfo.claimAmount >= policyInfo.sumInsuredAmount) {
         
     | 
| 
      
 147 
     | 
    
         
            +
                        _policyService.expirePolicy(instance, policyNftId, TimestampLib.blockTimestamp());
         
     | 
| 
      
 148 
     | 
    
         
            +
                    }
         
     | 
| 
       132 
149 
     | 
    
         | 
| 
       133 
150 
     | 
    
         
             
                    emit LogClaimServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                    // callback to pool if applicable
         
     | 
| 
      
 153 
     | 
    
         
            +
                    _processConfirmedClaimByPool(instanceReader, productNftId, policyNftId, claimId, confirmedAmount);
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                    // callback to policy holder if applicable
         
     | 
| 
      
 156 
     | 
    
         
            +
                    _policyHolderClaimConfirmed(policyNftId, claimId, confirmedAmount);
         
     | 
| 
       134 
157 
     | 
    
         
             
                }
         
     | 
| 
       135 
158 
     | 
    
         | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
       136 
160 
     | 
    
         
             
                function decline(
         
     | 
| 
       137 
161 
     | 
    
         
             
                    NftId policyNftId, 
         
     | 
| 
       138 
162 
     | 
    
         
             
                    ClaimId claimId,
         
     | 
| 
         @@ -140,10 +164,15 @@ contract ClaimService is 
     | 
|
| 
       140 
164 
     | 
    
         
             
                )
         
     | 
| 
       141 
165 
     | 
    
         
             
                    external
         
     | 
| 
       142 
166 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 167 
     | 
    
         
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         
     | 
| 
       143 
168 
     | 
    
         
             
                {
         
     | 
| 
      
 169 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
       144 
171 
     | 
    
         
             
                    (
         
     | 
| 
      
 172 
     | 
    
         
            +
                        ,
         
     | 
| 
       145 
173 
     | 
    
         
             
                        IInstance instance,
         
     | 
| 
       146 
174 
     | 
    
         
             
                        InstanceReader instanceReader,
         
     | 
| 
      
 175 
     | 
    
         
            +
                        InstanceStore instanceStore,
         
     | 
| 
       147 
176 
     | 
    
         
             
                        IPolicy.PolicyInfo memory policyInfo
         
     | 
| 
       148 
177 
     | 
    
         
             
                    ) = _verifyCallerWithPolicy(policyNftId);
         
     | 
| 
       149 
178 
     | 
    
         | 
| 
         @@ -151,11 +180,11 @@ contract ClaimService is 
     | 
|
| 
       151 
180 
     | 
    
         
             
                    IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
         
     | 
| 
       152 
181 
     | 
    
         
             
                    claimInfo.processData = data;
         
     | 
| 
       153 
182 
     | 
    
         
             
                    claimInfo.closedAt = TimestampLib.blockTimestamp();
         
     | 
| 
       154 
     | 
    
         
            -
                     
     | 
| 
      
 183 
     | 
    
         
            +
                    instanceStore.updateClaim(policyNftId, claimId, claimInfo, DECLINED());
         
     | 
| 
       155 
184 
     | 
    
         | 
| 
       156 
185 
     | 
    
         
             
                    // update and save policy info with instance
         
     | 
| 
       157 
186 
     | 
    
         
             
                    policyInfo.openClaimsCount -= 1;
         
     | 
| 
       158 
     | 
    
         
            -
                     
     | 
| 
      
 187 
     | 
    
         
            +
                    instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
       159 
188 
     | 
    
         | 
| 
       160 
189 
     | 
    
         
             
                    emit LogClaimServiceClaimDeclined(policyNftId, claimId);
         
     | 
| 
       161 
190 
     | 
    
         
             
                }
         
     | 
| 
         @@ -168,21 +197,26 @@ contract ClaimService is 
     | 
|
| 
       168 
197 
     | 
    
         
             
                )
         
     | 
| 
       169 
198 
     | 
    
         
             
                    external
         
     | 
| 
       170 
199 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 200 
     | 
    
         
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         
     | 
| 
       171 
201 
     | 
    
         
             
                {
         
     | 
| 
      
 202 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 203 
     | 
    
         
            +
                    
         
     | 
| 
       172 
204 
     | 
    
         
             
                    (
         
     | 
| 
      
 205 
     | 
    
         
            +
                        ,
         
     | 
| 
       173 
206 
     | 
    
         
             
                        IInstance instance,
         
     | 
| 
       174 
207 
     | 
    
         
             
                        InstanceReader instanceReader,
         
     | 
| 
      
 208 
     | 
    
         
            +
                        InstanceStore instanceStore,
         
     | 
| 
       175 
209 
     | 
    
         
             
                        IPolicy.PolicyInfo memory policyInfo
         
     | 
| 
       176 
210 
     | 
    
         
             
                    ) = _verifyCallerWithPolicy(policyNftId);
         
     | 
| 
       177 
211 
     | 
    
         | 
| 
       178 
212 
     | 
    
         
             
                    // check/update claim info
         
     | 
| 
       179 
213 
     | 
    
         
             
                    IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
         
     | 
| 
       180 
214 
     | 
    
         
             
                    claimInfo.closedAt = TimestampLib.blockTimestamp();
         
     | 
| 
       181 
     | 
    
         
            -
                     
     | 
| 
      
 215 
     | 
    
         
            +
                    instanceStore.updateClaim(policyNftId, claimId, claimInfo, REVOKED());
         
     | 
| 
       182 
216 
     | 
    
         | 
| 
       183 
217 
     | 
    
         
             
                    // update and save policy info with instance
         
     | 
| 
       184 
218 
     | 
    
         
             
                    policyInfo.openClaimsCount -= 1;
         
     | 
| 
       185 
     | 
    
         
            -
                     
     | 
| 
      
 219 
     | 
    
         
            +
                    instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
       186 
220 
     | 
    
         | 
| 
       187 
221 
     | 
    
         
             
                    emit LogClaimServiceClaimRevoked(policyNftId, claimId);
         
     | 
| 
       188 
222 
     | 
    
         
             
                }
         
     | 
| 
         @@ -194,10 +228,15 @@ contract ClaimService is 
     | 
|
| 
       194 
228 
     | 
    
         
             
                )
         
     | 
| 
       195 
229 
     | 
    
         
             
                    external
         
     | 
| 
       196 
230 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 231 
     | 
    
         
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         
     | 
| 
       197 
232 
     | 
    
         
             
                {
         
     | 
| 
      
 233 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 234 
     | 
    
         
            +
                    
         
     | 
| 
       198 
235 
     | 
    
         
             
                    (
         
     | 
| 
      
 236 
     | 
    
         
            +
                        ,
         
     | 
| 
       199 
237 
     | 
    
         
             
                        IInstance instance,
         
     | 
| 
       200 
238 
     | 
    
         
             
                        InstanceReader instanceReader,
         
     | 
| 
      
 239 
     | 
    
         
            +
                        InstanceStore instanceStore,
         
     | 
| 
       201 
240 
     | 
    
         
             
                        IPolicy.PolicyInfo memory policyInfo
         
     | 
| 
       202 
241 
     | 
    
         
             
                    ) = _verifyCallerWithPolicy(policyNftId);
         
     | 
| 
       203 
242 
     | 
    
         | 
| 
         @@ -222,10 +261,10 @@ contract ClaimService is 
     | 
|
| 
       222 
261 
     | 
    
         
             
                    }
         
     | 
| 
       223 
262 
     | 
    
         | 
| 
       224 
263 
     | 
    
         
             
                    claimInfo.closedAt = TimestampLib.blockTimestamp();
         
     | 
| 
       225 
     | 
    
         
            -
                     
     | 
| 
      
 264 
     | 
    
         
            +
                    instanceStore.updateClaim(policyNftId, claimId, claimInfo, CLOSED());
         
     | 
| 
       226 
265 
     | 
    
         
             
                }
         
     | 
| 
       227 
266 
     | 
    
         | 
| 
       228 
     | 
    
         
            -
             
     | 
| 
      
 267 
     | 
    
         
            +
             
     | 
| 
       229 
268 
     | 
    
         
             
                function createPayoutForBeneficiary(
         
     | 
| 
       230 
269 
     | 
    
         
             
                    NftId policyNftId, 
         
     | 
| 
       231 
270 
     | 
    
         
             
                    ClaimId claimId,
         
     | 
| 
         @@ -235,8 +274,11 @@ contract ClaimService is 
     | 
|
| 
       235 
274 
     | 
    
         
             
                )
         
     | 
| 
       236 
275 
     | 
    
         
             
                    external
         
     | 
| 
       237 
276 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 277 
     | 
    
         
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         
     | 
| 
       238 
278 
     | 
    
         
             
                    returns (PayoutId payoutId)
         
     | 
| 
       239 
279 
     | 
    
         
             
                {
         
     | 
| 
      
 280 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 281 
     | 
    
         
            +
                    
         
     | 
| 
       240 
282 
     | 
    
         
             
                    if (beneficiary == address(0)) {
         
     | 
| 
       241 
283 
     | 
    
         
             
                        revert ErrorClaimServiceBeneficiaryIsZero(policyNftId, claimId);
         
     | 
| 
       242 
284 
     | 
    
         
             
                    }
         
     | 
| 
         @@ -258,8 +300,11 @@ contract ClaimService is 
     | 
|
| 
       258 
300 
     | 
    
         
             
                )
         
     | 
| 
       259 
301 
     | 
    
         
             
                    external
         
     | 
| 
       260 
302 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 303 
     | 
    
         
            +
                    // nonReentrant() // prevents creating a reinsurance payout in a single tx
         
     | 
| 
       261 
304 
     | 
    
         
             
                    returns (PayoutId payoutId)
         
     | 
| 
       262 
305 
     | 
    
         
             
                {
         
     | 
| 
      
 306 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 307 
     | 
    
         
            +
                    
         
     | 
| 
       263 
308 
     | 
    
         
             
                    return _createPayout(
         
     | 
| 
       264 
309 
     | 
    
         
             
                        policyNftId, 
         
     | 
| 
       265 
310 
     | 
    
         
             
                        claimId, 
         
     | 
| 
         @@ -268,6 +313,96 @@ contract ClaimService is 
     | 
|
| 
       268 
313 
     | 
    
         
             
                        data);
         
     | 
| 
       269 
314 
     | 
    
         
             
                }
         
     | 
| 
       270 
315 
     | 
    
         | 
| 
      
 316 
     | 
    
         
            +
             
     | 
| 
      
 317 
     | 
    
         
            +
                function processPayout(
         
     | 
| 
      
 318 
     | 
    
         
            +
                    NftId policyNftId, 
         
     | 
| 
      
 319 
     | 
    
         
            +
                    PayoutId payoutId
         
     | 
| 
      
 320 
     | 
    
         
            +
                )
         
     | 
| 
      
 321 
     | 
    
         
            +
                    external
         
     | 
| 
      
 322 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 323 
     | 
    
         
            +
                    // nonReentrant() // prevents creating a reinsurance payout in a single tx
         
     | 
| 
      
 324 
     | 
    
         
            +
                {
         
     | 
| 
      
 325 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 326 
     | 
    
         
            +
                    
         
     | 
| 
      
 327 
     | 
    
         
            +
                    (
         
     | 
| 
      
 328 
     | 
    
         
            +
                        ,
         
     | 
| 
      
 329 
     | 
    
         
            +
                        IInstance instance,
         
     | 
| 
      
 330 
     | 
    
         
            +
                        InstanceReader instanceReader,
         
     | 
| 
      
 331 
     | 
    
         
            +
                        InstanceStore instanceStore,
         
     | 
| 
      
 332 
     | 
    
         
            +
                        IPolicy.PolicyInfo memory policyInfo
         
     | 
| 
      
 333 
     | 
    
         
            +
                    ) = _verifyCallerWithPolicy(policyNftId);
         
     | 
| 
      
 334 
     | 
    
         
            +
             
     | 
| 
      
 335 
     | 
    
         
            +
                    // TODO add check that payout exists and is open
         
     | 
| 
      
 336 
     | 
    
         
            +
                    IPolicy.PayoutInfo memory payoutInfo = instanceReader.getPayoutInfo(policyNftId, payoutId);
         
     | 
| 
      
 337 
     | 
    
         
            +
             
     | 
| 
      
 338 
     | 
    
         
            +
                    // update and save payout info with instance
         
     | 
| 
      
 339 
     | 
    
         
            +
                    payoutInfo.paidAt = TimestampLib.blockTimestamp();
         
     | 
| 
      
 340 
     | 
    
         
            +
                    instanceStore.updatePayout(policyNftId, payoutId, payoutInfo, PAID());
         
     | 
| 
      
 341 
     | 
    
         
            +
             
     | 
| 
      
 342 
     | 
    
         
            +
                    Amount payoutAmount = payoutInfo.amount;
         
     | 
| 
      
 343 
     | 
    
         
            +
             
     | 
| 
      
 344 
     | 
    
         
            +
                    {
         
     | 
| 
      
 345 
     | 
    
         
            +
                        ClaimId claimId = payoutId.toClaimId();
         
     | 
| 
      
 346 
     | 
    
         
            +
                        IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
         
     | 
| 
      
 347 
     | 
    
         
            +
                        claimInfo.paidAmount = claimInfo.paidAmount.add(payoutAmount);
         
     | 
| 
      
 348 
     | 
    
         
            +
                        claimInfo.openPayoutsCount -= 1;
         
     | 
| 
      
 349 
     | 
    
         
            +
             
     | 
| 
      
 350 
     | 
    
         
            +
                        // check if this payout is closing the linked claim
         
     | 
| 
      
 351 
     | 
    
         
            +
                        // update claim and policy info accordingly
         
     | 
| 
      
 352 
     | 
    
         
            +
                        if(claimInfo.openPayoutsCount == 0 && claimInfo.paidAmount == claimInfo.claimAmount) {
         
     | 
| 
      
 353 
     | 
    
         
            +
                            claimInfo.closedAt = TimestampLib.blockTimestamp();
         
     | 
| 
      
 354 
     | 
    
         
            +
                            instanceStore.updateClaim(policyNftId, claimId, claimInfo, CLOSED());
         
     | 
| 
      
 355 
     | 
    
         
            +
             
     | 
| 
      
 356 
     | 
    
         
            +
                            policyInfo.openClaimsCount -= 1;
         
     | 
| 
      
 357 
     | 
    
         
            +
                        } else {
         
     | 
| 
      
 358 
     | 
    
         
            +
                            instanceStore.updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
         
     | 
| 
      
 359 
     | 
    
         
            +
                        }
         
     | 
| 
      
 360 
     | 
    
         
            +
                    }
         
     | 
| 
      
 361 
     | 
    
         
            +
             
     | 
| 
      
 362 
     | 
    
         
            +
                    // update and save policy info with instance
         
     | 
| 
      
 363 
     | 
    
         
            +
                    policyInfo.payoutAmount = policyInfo.payoutAmount.add(payoutAmount);
         
     | 
| 
      
 364 
     | 
    
         
            +
                    instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
      
 365 
     | 
    
         
            +
             
     | 
| 
      
 366 
     | 
    
         
            +
                    // inform pool about payout
         
     | 
| 
      
 367 
     | 
    
         
            +
                    _poolService.processPayout(
         
     | 
| 
      
 368 
     | 
    
         
            +
                        instance, 
         
     | 
| 
      
 369 
     | 
    
         
            +
                        address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
         
     | 
| 
      
 370 
     | 
    
         
            +
                        policyNftId, 
         
     | 
| 
      
 371 
     | 
    
         
            +
                        policyInfo, 
         
     | 
| 
      
 372 
     | 
    
         
            +
                        payoutAmount);
         
     | 
| 
      
 373 
     | 
    
         
            +
                    
         
     | 
| 
      
 374 
     | 
    
         
            +
                    // transfer payout token and fee
         
     | 
| 
      
 375 
     | 
    
         
            +
                    {
         
     | 
| 
      
 376 
     | 
    
         
            +
                        (
         
     | 
| 
      
 377 
     | 
    
         
            +
                            Amount netPayoutAmount,
         
     | 
| 
      
 378 
     | 
    
         
            +
                            Amount processingFeeAmount,
         
     | 
| 
      
 379 
     | 
    
         
            +
                            address beneficiary
         
     | 
| 
      
 380 
     | 
    
         
            +
                        ) = _calculatePayoutAmount(
         
     | 
| 
      
 381 
     | 
    
         
            +
                            instanceReader,
         
     | 
| 
      
 382 
     | 
    
         
            +
                            policyNftId,
         
     | 
| 
      
 383 
     | 
    
         
            +
                            policyInfo,
         
     | 
| 
      
 384 
     | 
    
         
            +
                            payoutInfo);
         
     | 
| 
      
 385 
     | 
    
         
            +
             
     | 
| 
      
 386 
     | 
    
         
            +
                        emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount, processingFeeAmount);
         
     | 
| 
      
 387 
     | 
    
         
            +
             
     | 
| 
      
 388 
     | 
    
         
            +
                        {
         
     | 
| 
      
 389 
     | 
    
         
            +
                            NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
         
     | 
| 
      
 390 
     | 
    
         
            +
                            IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
         
     | 
| 
      
 391 
     | 
    
         
            +
                            poolInfo.tokenHandler.pushToken(
         
     | 
| 
      
 392 
     | 
    
         
            +
                                beneficiary, 
         
     | 
| 
      
 393 
     | 
    
         
            +
                                netPayoutAmount);
         
     | 
| 
      
 394 
     | 
    
         
            +
             
     | 
| 
      
 395 
     | 
    
         
            +
                            // TODO add 2nd token tx if processingFeeAmount > 0
         
     | 
| 
      
 396 
     | 
    
         
            +
                        }
         
     | 
| 
      
 397 
     | 
    
         
            +
             
     | 
| 
      
 398 
     | 
    
         
            +
                        // callback to policy holder if applicable
         
     | 
| 
      
 399 
     | 
    
         
            +
                        _policyHolderPayoutExecuted(policyNftId, payoutId, beneficiary, payoutAmount);
         
     | 
| 
      
 400 
     | 
    
         
            +
                    }
         
     | 
| 
      
 401 
     | 
    
         
            +
                }
         
     | 
| 
      
 402 
     | 
    
         
            +
             
     | 
| 
      
 403 
     | 
    
         
            +
                // internal functions
         
     | 
| 
      
 404 
     | 
    
         
            +
             
     | 
| 
      
 405 
     | 
    
         
            +
             
     | 
| 
       271 
406 
     | 
    
         
             
                function _createPayout(
         
     | 
| 
       272 
407 
     | 
    
         
             
                    NftId policyNftId, 
         
     | 
| 
       273 
408 
     | 
    
         
             
                    ClaimId claimId,
         
     | 
| 
         @@ -280,8 +415,10 @@ contract ClaimService is 
     | 
|
| 
       280 
415 
     | 
    
         
             
                    returns (PayoutId payoutId)
         
     | 
| 
       281 
416 
     | 
    
         
             
                {
         
     | 
| 
       282 
417 
     | 
    
         
             
                    (
         
     | 
| 
       283 
     | 
    
         
            -
                         
     | 
| 
      
 418 
     | 
    
         
            +
                        ,
         
     | 
| 
      
 419 
     | 
    
         
            +
                        ,
         
     | 
| 
       284 
420 
     | 
    
         
             
                        InstanceReader instanceReader,
         
     | 
| 
      
 421 
     | 
    
         
            +
                        InstanceStore instanceStore,
         
     | 
| 
       285 
422 
     | 
    
         
             
                        IPolicy.PolicyInfo memory policyInfo
         
     | 
| 
       286 
423 
     | 
    
         
             
                    ) = _verifyCallerWithPolicy(policyNftId);
         
     | 
| 
       287 
424 
     | 
    
         | 
| 
         @@ -294,9 +431,13 @@ contract ClaimService is 
     | 
|
| 
       294 
431 
     | 
    
         | 
| 
       295 
432 
     | 
    
         
             
                    // check/update claim info
         
     | 
| 
       296 
433 
     | 
    
         
             
                    // create payout info with instance
         
     | 
| 
       297 
     | 
    
         
            -
                     
     | 
| 
       298 
     | 
    
         
            -
                    payoutId = PayoutIdLib.toPayoutId(claimId,  
     | 
| 
       299 
     | 
    
         
            -
                     
     | 
| 
      
 434 
     | 
    
         
            +
                    uint24 payoutNo = claimInfo.payoutsCount + 1;
         
     | 
| 
      
 435 
     | 
    
         
            +
                    payoutId = PayoutIdLib.toPayoutId(claimId, payoutNo);
         
     | 
| 
      
 436 
     | 
    
         
            +
                    if (beneficiary == address(0)) {
         
     | 
| 
      
 437 
     | 
    
         
            +
                        beneficiary = getRegistry().ownerOf(policyNftId);
         
     | 
| 
      
 438 
     | 
    
         
            +
                    }
         
     | 
| 
      
 439 
     | 
    
         
            +
             
     | 
| 
      
 440 
     | 
    
         
            +
                    instanceStore.createPayout(
         
     | 
| 
       300 
441 
     | 
    
         
             
                        policyNftId, 
         
     | 
| 
       301 
442 
     | 
    
         
             
                        payoutId, 
         
     | 
| 
       302 
443 
     | 
    
         
             
                        IPolicy.PayoutInfo({
         
     | 
| 
         @@ -309,90 +450,16 @@ contract ClaimService is 
     | 
|
| 
       309 
450 
     | 
    
         
             
                    // update and save claim info with instance
         
     | 
| 
       310 
451 
     | 
    
         
             
                    claimInfo.payoutsCount += 1;
         
     | 
| 
       311 
452 
     | 
    
         
             
                    claimInfo.openPayoutsCount += 1;
         
     | 
| 
       312 
     | 
    
         
            -
                     
     | 
| 
      
 453 
     | 
    
         
            +
                    instanceStore.updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
         
     | 
| 
       313 
454 
     | 
    
         | 
| 
       314 
455 
     | 
    
         
             
                    // update and save policy info with instance
         
     | 
| 
       315 
456 
     | 
    
         
             
                    policyInfo.payoutAmount.add(amount);
         
     | 
| 
       316 
     | 
    
         
            -
                     
     | 
| 
      
 457 
     | 
    
         
            +
                    instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
       317 
458 
     | 
    
         | 
| 
       318 
     | 
    
         
            -
                    emit LogClaimServicePayoutCreated(policyNftId, payoutId, amount);
         
     | 
| 
      
 459 
     | 
    
         
            +
                    emit LogClaimServicePayoutCreated(policyNftId, payoutId, amount, beneficiary);
         
     | 
| 
       319 
460 
     | 
    
         
             
                }
         
     | 
| 
       320 
461 
     | 
    
         | 
| 
       321 
462 
     | 
    
         | 
| 
       322 
     | 
    
         
            -
                function processPayout(
         
     | 
| 
       323 
     | 
    
         
            -
                    NftId policyNftId, 
         
     | 
| 
       324 
     | 
    
         
            -
                    PayoutId payoutId
         
     | 
| 
       325 
     | 
    
         
            -
                )
         
     | 
| 
       326 
     | 
    
         
            -
                    external
         
     | 
| 
       327 
     | 
    
         
            -
                    virtual
         
     | 
| 
       328 
     | 
    
         
            -
                {
         
     | 
| 
       329 
     | 
    
         
            -
                    (
         
     | 
| 
       330 
     | 
    
         
            -
                        IInstance instance,
         
     | 
| 
       331 
     | 
    
         
            -
                        InstanceReader instanceReader,
         
     | 
| 
       332 
     | 
    
         
            -
                        IPolicy.PolicyInfo memory policyInfo
         
     | 
| 
       333 
     | 
    
         
            -
                    ) = _verifyCallerWithPolicy(policyNftId);
         
     | 
| 
       334 
     | 
    
         
            -
             
     | 
| 
       335 
     | 
    
         
            -
                    // TODO add check that payout exists and is open
         
     | 
| 
       336 
     | 
    
         
            -
                    IPolicy.PayoutInfo memory payoutInfo = instanceReader.getPayoutInfo(policyNftId, payoutId);
         
     | 
| 
       337 
     | 
    
         
            -
             
     | 
| 
       338 
     | 
    
         
            -
                    // update and save payout info with instance
         
     | 
| 
       339 
     | 
    
         
            -
                    payoutInfo.paidAt = TimestampLib.blockTimestamp();
         
     | 
| 
       340 
     | 
    
         
            -
                    instance.getInstanceStore().updatePayout(policyNftId, payoutId, payoutInfo, PAID());
         
     | 
| 
       341 
     | 
    
         
            -
             
     | 
| 
       342 
     | 
    
         
            -
                    // TODO update and save claim info with instance
         
     | 
| 
       343 
     | 
    
         
            -
                    ClaimId claimId = payoutId.toClaimId();
         
     | 
| 
       344 
     | 
    
         
            -
                    Amount payoutAmount = payoutInfo.amount;
         
     | 
| 
       345 
     | 
    
         
            -
                    IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
         
     | 
| 
       346 
     | 
    
         
            -
                    claimInfo.paidAmount = claimInfo.paidAmount.add(payoutAmount);
         
     | 
| 
       347 
     | 
    
         
            -
                    claimInfo.openPayoutsCount -= 1;
         
     | 
| 
       348 
     | 
    
         
            -
             
     | 
| 
       349 
     | 
    
         
            -
                    // check if this payout is closing the linked claim
         
     | 
| 
       350 
     | 
    
         
            -
                    // update claim and policy info accordingly
         
     | 
| 
       351 
     | 
    
         
            -
                    if(claimInfo.openPayoutsCount == 0 && claimInfo.paidAmount == claimInfo.claimAmount) {
         
     | 
| 
       352 
     | 
    
         
            -
                        claimInfo.closedAt == TimestampLib.blockTimestamp();
         
     | 
| 
       353 
     | 
    
         
            -
                        instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
         
     | 
| 
       354 
     | 
    
         
            -
             
     | 
| 
       355 
     | 
    
         
            -
                        policyInfo.openClaimsCount -= 1;
         
     | 
| 
       356 
     | 
    
         
            -
                    } else {
         
     | 
| 
       357 
     | 
    
         
            -
                        instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
         
     | 
| 
       358 
     | 
    
         
            -
                    }
         
     | 
| 
       359 
     | 
    
         
            -
             
     | 
| 
       360 
     | 
    
         
            -
                    // update and save policy info with instance
         
     | 
| 
       361 
     | 
    
         
            -
                    policyInfo.payoutAmount = policyInfo.payoutAmount.add(payoutAmount);
         
     | 
| 
       362 
     | 
    
         
            -
                    instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
       363 
     | 
    
         
            -
             
     | 
| 
       364 
     | 
    
         
            -
                    // inform pool about payout
         
     | 
| 
       365 
     | 
    
         
            -
                    _poolService.reduceCollateral(
         
     | 
| 
       366 
     | 
    
         
            -
                        instance, 
         
     | 
| 
       367 
     | 
    
         
            -
                        address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
         
     | 
| 
       368 
     | 
    
         
            -
                        policyNftId, 
         
     | 
| 
       369 
     | 
    
         
            -
                        policyInfo, 
         
     | 
| 
       370 
     | 
    
         
            -
                        payoutAmount);
         
     | 
| 
       371 
     | 
    
         
            -
             
     | 
| 
       372 
     | 
    
         
            -
                    // transfer payout token and fee
         
     | 
| 
       373 
     | 
    
         
            -
                    (
         
     | 
| 
       374 
     | 
    
         
            -
                        Amount netPayoutAmount,
         
     | 
| 
       375 
     | 
    
         
            -
                        Amount processingFeeAmount,
         
     | 
| 
       376 
     | 
    
         
            -
                        address beneficiary
         
     | 
| 
       377 
     | 
    
         
            -
                    ) = _calculatePayoutAmount(
         
     | 
| 
       378 
     | 
    
         
            -
                        instanceReader,
         
     | 
| 
       379 
     | 
    
         
            -
                        policyNftId,
         
     | 
| 
       380 
     | 
    
         
            -
                        policyInfo,
         
     | 
| 
       381 
     | 
    
         
            -
                        payoutInfo);
         
     | 
| 
       382 
     | 
    
         
            -
             
     | 
| 
       383 
     | 
    
         
            -
                    emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount, processingFeeAmount);
         
     | 
| 
       384 
     | 
    
         
            -
             
     | 
| 
       385 
     | 
    
         
            -
                    {
         
     | 
| 
       386 
     | 
    
         
            -
                        NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
         
     | 
| 
       387 
     | 
    
         
            -
                        IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
         
     | 
| 
       388 
     | 
    
         
            -
                        poolInfo.tokenHandler.distributeTokens(poolInfo.wallet, beneficiary, netPayoutAmount);
         
     | 
| 
       389 
     | 
    
         
            -
             
     | 
| 
       390 
     | 
    
         
            -
                        // TODO add 2nd token tx if processingFeeAmount > 0
         
     | 
| 
       391 
     | 
    
         
            -
                    }
         
     | 
| 
       392 
     | 
    
         
            -
             
     | 
| 
       393 
     | 
    
         
            -
                    // TODO callback IPolicyHolder
         
     | 
| 
       394 
     | 
    
         
            -
                }
         
     | 
| 
       395 
     | 
    
         
            -
             
     | 
| 
       396 
463 
     | 
    
         
             
                function _calculatePayoutAmount(
         
     | 
| 
       397 
464 
     | 
    
         
             
                    InstanceReader instanceReader,
         
     | 
| 
       398 
465 
     | 
    
         
             
                    NftId policyNftId,
         
     | 
| 
         @@ -430,7 +497,6 @@ contract ClaimService is 
     | 
|
| 
       430 
497 
     | 
    
         
             
                    }
         
     | 
| 
       431 
498 
     | 
    
         
             
                }
         
     | 
| 
       432 
499 
     | 
    
         | 
| 
       433 
     | 
    
         
            -
                // internal functions
         
     | 
| 
       434 
500 
     | 
    
         | 
| 
       435 
501 
     | 
    
         
             
                function _verifyCallerWithPolicy(
         
     | 
| 
       436 
502 
     | 
    
         
             
                    NftId policyNftId
         
     | 
| 
         @@ -439,14 +505,16 @@ contract ClaimService is 
     | 
|
| 
       439 
505 
     | 
    
         
             
                    view
         
     | 
| 
       440 
506 
     | 
    
         
             
                    virtual
         
     | 
| 
       441 
507 
     | 
    
         
             
                    returns (
         
     | 
| 
      
 508 
     | 
    
         
            +
                        NftId productNftId,
         
     | 
| 
       442 
509 
     | 
    
         
             
                        IInstance instance,
         
     | 
| 
       443 
510 
     | 
    
         
             
                        InstanceReader instanceReader,
         
     | 
| 
      
 511 
     | 
    
         
            +
                        InstanceStore instanceStore,
         
     | 
| 
       444 
512 
     | 
    
         
             
                        IPolicy.PolicyInfo memory policyInfo
         
     | 
| 
       445 
513 
     | 
    
         
             
                    )
         
     | 
| 
       446 
514 
     | 
    
         
             
                {
         
     | 
| 
       447 
     | 
    
         
            -
                    NftId productNftId;
         
     | 
| 
       448 
515 
     | 
    
         
             
                    (productNftId,, instance) = _getAndVerifyActiveComponent(PRODUCT());
         
     | 
| 
       449 
516 
     | 
    
         
             
                    instanceReader = instance.getInstanceReader();
         
     | 
| 
      
 517 
     | 
    
         
            +
                    instanceStore = instance.getInstanceStore();
         
     | 
| 
       450 
518 
     | 
    
         | 
| 
       451 
519 
     | 
    
         
             
                    // check caller(product) policy match
         
     | 
| 
       452 
520 
     | 
    
         
             
                    policyInfo = instanceReader.getPolicyInfo(policyNftId);
         
     | 
| 
         @@ -480,6 +548,65 @@ contract ClaimService is 
     | 
|
| 
       480 
548 
     | 
    
         
             
                    claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
         
     | 
| 
       481 
549 
     | 
    
         
             
                }
         
     | 
| 
       482 
550 
     | 
    
         | 
| 
      
 551 
     | 
    
         
            +
                function _processConfirmedClaimByPool(
         
     | 
| 
      
 552 
     | 
    
         
            +
                    InstanceReader instanceReader, 
         
     | 
| 
      
 553 
     | 
    
         
            +
                    NftId productNftId, 
         
     | 
| 
      
 554 
     | 
    
         
            +
                    NftId policyNftId, 
         
     | 
| 
      
 555 
     | 
    
         
            +
                    ClaimId claimId, 
         
     | 
| 
      
 556 
     | 
    
         
            +
                    Amount amount
         
     | 
| 
      
 557 
     | 
    
         
            +
                )
         
     | 
| 
      
 558 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 559 
     | 
    
         
            +
                {
         
     | 
| 
      
 560 
     | 
    
         
            +
                    NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
         
     | 
| 
      
 561 
     | 
    
         
            +
                    if (instanceReader.getPoolInfo(poolNftId).isProcessingConfirmedClaims) {
         
     | 
| 
      
 562 
     | 
    
         
            +
                        address poolAddress = getRegistry().getObjectAddress(poolNftId);
         
     | 
| 
      
 563 
     | 
    
         
            +
                        IPoolComponent(poolAddress).processConfirmedClaim(policyNftId, claimId, amount);
         
     | 
| 
      
 564 
     | 
    
         
            +
                    }
         
     | 
| 
      
 565 
     | 
    
         
            +
                }
         
     | 
| 
      
 566 
     | 
    
         
            +
             
     | 
| 
      
 567 
     | 
    
         
            +
             
     | 
| 
      
 568 
     | 
    
         
            +
                function _policyHolderClaimConfirmed(
         
     | 
| 
      
 569 
     | 
    
         
            +
                    NftId policyNftId, 
         
     | 
| 
      
 570 
     | 
    
         
            +
                    ClaimId claimId,
         
     | 
| 
      
 571 
     | 
    
         
            +
                    Amount confirmedAmount
         
     | 
| 
      
 572 
     | 
    
         
            +
                )
         
     | 
| 
      
 573 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 574 
     | 
    
         
            +
                {
         
     | 
| 
      
 575 
     | 
    
         
            +
                    IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
         
     | 
| 
      
 576 
     | 
    
         
            +
                    if(address(policyHolder) != address(0)) {
         
     | 
| 
      
 577 
     | 
    
         
            +
                        policyHolder.claimConfirmed(policyNftId, claimId, confirmedAmount);
         
     | 
| 
      
 578 
     | 
    
         
            +
                    }
         
     | 
| 
      
 579 
     | 
    
         
            +
                }
         
     | 
| 
      
 580 
     | 
    
         
            +
             
     | 
| 
      
 581 
     | 
    
         
            +
             
     | 
| 
      
 582 
     | 
    
         
            +
                function _policyHolderPayoutExecuted(
         
     | 
| 
      
 583 
     | 
    
         
            +
                    NftId policyNftId, 
         
     | 
| 
      
 584 
     | 
    
         
            +
                    PayoutId payoutId,
         
     | 
| 
      
 585 
     | 
    
         
            +
                    address beneficiary,
         
     | 
| 
      
 586 
     | 
    
         
            +
                    Amount payoutAmount
         
     | 
| 
      
 587 
     | 
    
         
            +
                )
         
     | 
| 
      
 588 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 589 
     | 
    
         
            +
                {
         
     | 
| 
      
 590 
     | 
    
         
            +
                    IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
         
     | 
| 
      
 591 
     | 
    
         
            +
                    if(address(policyHolder) != address(0)) {
         
     | 
| 
      
 592 
     | 
    
         
            +
                        policyHolder.payoutExecuted(policyNftId, payoutId, payoutAmount, beneficiary);
         
     | 
| 
      
 593 
     | 
    
         
            +
                    }
         
     | 
| 
      
 594 
     | 
    
         
            +
                }
         
     | 
| 
      
 595 
     | 
    
         
            +
             
     | 
| 
      
 596 
     | 
    
         
            +
             
     | 
| 
      
 597 
     | 
    
         
            +
                function _getPolicyHolder(NftId policyNftId)
         
     | 
| 
      
 598 
     | 
    
         
            +
                    internal 
         
     | 
| 
      
 599 
     | 
    
         
            +
                    view 
         
     | 
| 
      
 600 
     | 
    
         
            +
                    returns (IPolicyHolder policyHolder)
         
     | 
| 
      
 601 
     | 
    
         
            +
                {
         
     | 
| 
      
 602 
     | 
    
         
            +
                    address policyHolderAddress = getRegistry().ownerOf(policyNftId);
         
     | 
| 
      
 603 
     | 
    
         
            +
                    policyHolder = IPolicyHolder(policyHolderAddress);
         
     | 
| 
      
 604 
     | 
    
         
            +
             
     | 
| 
      
 605 
     | 
    
         
            +
                    if (!ContractLib.isPolicyHolder(policyHolderAddress)) {
         
     | 
| 
      
 606 
     | 
    
         
            +
                        policyHolder = IPolicyHolder(address(0));
         
     | 
| 
      
 607 
     | 
    
         
            +
                    }
         
     | 
| 
      
 608 
     | 
    
         
            +
                }
         
     | 
| 
      
 609 
     | 
    
         
            +
             
     | 
| 
       483 
610 
     | 
    
         | 
| 
       484 
611 
     | 
    
         
             
                function _getDomain() internal pure override returns(ObjectType) {
         
     | 
| 
       485 
612 
     | 
    
         
             
                    return CLAIM();
         
     | 
| 
         @@ -12,14 +12,14 @@ contract ClaimServiceManager is ProxyManager { 
     | 
|
| 
       12 
12 
     | 
    
         
             
                /// @dev initializes proxy manager with service implementation 
         
     | 
| 
       13 
13 
     | 
    
         
             
                constructor(
         
     | 
| 
       14 
14 
     | 
    
         
             
                    address authority, 
         
     | 
| 
       15 
     | 
    
         
            -
                    address  
     | 
| 
      
 15 
     | 
    
         
            +
                    address registry,
         
     | 
| 
       16 
16 
     | 
    
         
             
                    bytes32 salt
         
     | 
| 
       17 
17 
     | 
    
         
             
                ) 
         
     | 
| 
       18 
     | 
    
         
            -
                    ProxyManager(registryAddress)
         
     | 
| 
       19 
18 
     | 
    
         
             
                {
         
     | 
| 
       20 
19 
     | 
    
         
             
                    ClaimService svc = new ClaimService{salt: salt}();
         
     | 
| 
       21 
     | 
    
         
            -
                    bytes memory data = abi.encode( 
     | 
| 
       22 
     | 
    
         
            -
                    IVersionable versionable =  
     | 
| 
      
 20 
     | 
    
         
            +
                    bytes memory data = abi.encode(registry, authority);
         
     | 
| 
      
 21 
     | 
    
         
            +
                    IVersionable versionable = initialize(
         
     | 
| 
      
 22 
     | 
    
         
            +
                        registry,
         
     | 
| 
       23 
23 
     | 
    
         
             
                        address(svc), 
         
     | 
| 
       24 
24 
     | 
    
         
             
                        data,
         
     | 
| 
       25 
25 
     | 
    
         
             
                        salt);
         
     | 
| 
         @@ -26,8 +26,9 @@ interface IClaimService is 
     | 
|
| 
       26 
26 
     | 
    
         
             
                event LogClaimServiceClaimRevoked(NftId policyNftId, ClaimId claimId);
         
     | 
| 
       27 
27 
     | 
    
         
             
                event LogClaimServiceClaimClosed(NftId policyNftId, ClaimId claimId);
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
                event LogClaimServicePayoutCreated(NftId policyNftId, PayoutId payoutId, Amount amount);
         
     | 
| 
      
 29 
     | 
    
         
            +
                event LogClaimServicePayoutCreated(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary);
         
     | 
| 
       30 
30 
     | 
    
         
             
                event LogClaimServicePayoutProcessed(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary, Amount netAmount, Amount processingFeeAmount);
         
     | 
| 
      
 31 
     | 
    
         
            +
                error ErrorClaimServiceBeneficiarySet(NftId policyNftId, PayoutId payoutId, address beneficiary);
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
       32 
33 
     | 
    
         
             
                error ErrorClaimServicePolicyProductMismatch(NftId policyNftId, NftId expectedProduct, NftId actualProduct);
         
     | 
| 
       33 
34 
     | 
    
         
             
                error ErrorClaimServicePolicyNotOpen(NftId policyNftId);
         
     | 
| 
         @@ -35,7 +36,7 @@ interface IClaimService is 
     | 
|
| 
       35 
36 
     | 
    
         
             
                error ErrorClaimServiceBeneficiaryIsZero(NftId policyNftId, ClaimId claimId);
         
     | 
| 
       36 
37 
     | 
    
         
             
                error ErrorClaimsServicePayoutAmountIsZero(NftId policyNftId, PayoutId payoutId);
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId,  
     | 
| 
      
 39 
     | 
    
         
            +
                error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint24 openPayouts);
         
     | 
| 
       39 
40 
     | 
    
         
             
                error ErrorClaimServiceClaimWithMissingPayouts(NftId policyNftId, ClaimId claimId, Amount claimAmount, Amount paidAmount);
         
     | 
| 
       40 
41 
     | 
    
         
             
                error ErrorClaimServiceClaimNotInExpectedState(NftId policyNftId, ClaimId claimId, StateId expectedState, StateId actualState);
         
     | 
| 
       41 
42 
     | 
    
         | 
| 
         @@ -4,12 +4,20 @@ pragma solidity ^0.8.20; 
     | 
|
| 
       4 
4 
     | 
    
         
             
            import {IService} from "../shared/IService.sol";
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            import {Amount} from "../type/Amount.sol";
         
     | 
| 
      
 7 
     | 
    
         
            +
            import {IInstance} from "../instance/IInstance.sol";
         
     | 
| 
       7 
8 
     | 
    
         
             
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
       8 
9 
     | 
    
         
             
            import {StateId} from "../type/StateId.sol";
         
     | 
| 
       9 
10 
     | 
    
         
             
            import {Timestamp} from "../type/Timestamp.sol";
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
            interface IPolicyService is IService {
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
      
 14 
     | 
    
         
            +
                event LogPolicyServicePolicyCreated(NftId policyNftId, Amount premiumAmount, Timestamp activatedAt);
         
     | 
| 
      
 15 
     | 
    
         
            +
                event LogPolicyServicePolicyDeclined(NftId policyNftId);
         
     | 
| 
      
 16 
     | 
    
         
            +
                event LogPolicyServicePolicyPremiumCollected(NftId policyNftId, Amount premiumAmount);
         
     | 
| 
      
 17 
     | 
    
         
            +
                event LogPolicyServicePolicyActivated(NftId policyNftId, Timestamp activatedAt);
         
     | 
| 
      
 18 
     | 
    
         
            +
                event LogPolicyServicePolicyExpirationUpdated(NftId policyNftId, Timestamp originalExpiredAt, Timestamp expiredAt);
         
     | 
| 
      
 19 
     | 
    
         
            +
                event LogPolicyServicePolicyClosed(NftId policyNftId);
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
       13 
21 
     | 
    
         
             
                error ErrorPolicyServicePolicyProductMismatch(NftId applicationNftId, NftId expectedProductNftId, NftId actualProductNftId);
         
     | 
| 
       14 
22 
     | 
    
         
             
                error ErrorPolicyServicePolicyStateNotApplied(NftId applicationNftId);
         
     | 
| 
       15 
23 
     | 
    
         
             
                error ErrorPolicyServicePolicyStateNotCollateralized(NftId applicationNftId);
         
     | 
| 
         @@ -32,9 +40,6 @@ interface IPolicyService is IService { 
     | 
|
| 
       32 
40 
     | 
    
         
             
                error ErrorPolicyServicePremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount recalculatedPremiumAmount);
         
     | 
| 
       33 
41 
     | 
    
         
             
                error ErrorPolicyServiceTransferredPremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount transferredPremiumAmount);
         
     | 
| 
       34 
42 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
                event LogPolicyServicePolicyDeclined(NftId policyNftId);
         
     | 
| 
       36 
     | 
    
         
            -
                event LogPolicyServicePolicyExpirationUpdated(NftId policyNftId, Timestamp expiredAt);
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
43 
     | 
    
         
             
                /// @dev creates the policy from {applicationNftId}. 
         
     | 
| 
       39 
44 
     | 
    
         
             
                /// After successful completion of the function the policy can be referenced using the application NftId.
         
     | 
| 
       40 
45 
     | 
    
         
             
                /// Locks the sum insured amount in the pool, but does not transfer tokens. Call collectPremium to transfer tokens. 
         
     | 
| 
         @@ -44,7 +49,9 @@ interface IPolicyService is IService { 
     | 
|
| 
       44 
49 
     | 
    
         
             
                function createPolicy(
         
     | 
| 
       45 
50 
     | 
    
         
             
                    NftId applicationNftId,
         
     | 
| 
       46 
51 
     | 
    
         
             
                    Timestamp activateAt
         
     | 
| 
       47 
     | 
    
         
            -
                ) 
     | 
| 
      
 52 
     | 
    
         
            +
                )
         
     | 
| 
      
 53 
     | 
    
         
            +
                    external
         
     | 
| 
      
 54 
     | 
    
         
            +
                    returns (Amount premiumAmount);
         
     | 
| 
       48 
55 
     | 
    
         | 
| 
       49 
56 
     | 
    
         
             
                /// @dev declines an application represented by {policyNftId}
         
     | 
| 
       50 
57 
     | 
    
         
             
                /// an application can only be declined in applied state
         
     | 
| 
         @@ -65,6 +72,8 @@ interface IPolicyService is IService { 
     | 
|
| 
       65 
72 
     | 
    
         
             
                /// @return expiredAt the effective expiry date
         
     | 
| 
       66 
73 
     | 
    
         
             
                function expire(NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
         
     | 
| 
       67 
74 
     | 
    
         | 
| 
      
 75 
     | 
    
         
            +
                function expirePolicy(IInstance instance, NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
       68 
77 
     | 
    
         
             
                /// @dev closes the specified policy and sets the closed data in the policy metadata
         
     | 
| 
       69 
78 
     | 
    
         
             
                /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
         
     | 
| 
       70 
79 
     | 
    
         
             
                /// this function can only be called by a product. the policy needs to match with the calling product
         
     | 
| 
         @@ -14,15 +14,15 @@ interface IPricingService is IService 
     | 
|
| 
       14 
14 
     | 
    
         
             
            {
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                error ErrorPricingServiceTargetWalletAmountsMismatch();
         
     | 
| 
       17 
     | 
    
         
            -
                error  
     | 
| 
       18 
     | 
    
         
            -
                error  
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
                error ErrorPricingServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
         
     | 
| 
      
 18 
     | 
    
         
            +
                error ErrorPricingServiceFeeCalculationMismatch(
         
     | 
| 
      
 19 
     | 
    
         
            +
                    Amount distributionFeeFixAmount,
         
     | 
| 
      
 20 
     | 
    
         
            +
                    Amount distributionFeeVarAmount,
         
     | 
| 
      
 21 
     | 
    
         
            +
                    Amount distributionOwnerFeeFixAmount,
         
     | 
| 
      
 22 
     | 
    
         
            +
                    Amount distributionOwnerFeeVarAmount,
         
     | 
| 
      
 23 
     | 
    
         
            +
                    Amount commissionAmount,
         
     | 
| 
      
 24 
     | 
    
         
            +
                    Amount discountAmount
         
     | 
| 
      
 25 
     | 
    
         
            +
                );
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                function calculatePremium(
         
     | 
| 
       28 
28 
     | 
    
         
             
                    NftId productNftId,
         
     |