@etherisc/gif-next 0.0.2-f1e0c66-773 → 0.0.2-f1f3b2c-994
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 +7 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +81 -63
- 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 +2 -2
- 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 +48 -30
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +21 -2
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +72 -9
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +63 -248
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -222
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +134 -286
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +84 -120
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +21 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +49 -62
- 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 +1512 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1999 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -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 +1432 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1192 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1566 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2001 -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/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +10 -99
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +145 -111
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -124
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +39 -146
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +285 -218
- 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 +45 -4
- 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/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +47 -232
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
- 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 +15 -31
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +15 -216
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +51 -274
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +319 -188
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +130 -94
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +149 -23
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -88
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +360 -171
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +41 -270
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +492 -333
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +98 -82
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +43 -242
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +263 -181
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +104 -100
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +147 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +282 -119
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +43 -57
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +399 -327
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +115 -267
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +43 -242
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -0
- 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 +238 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +436 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +261 -143
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -313
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +46 -5
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +117 -215
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +70 -12
- 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 +15 -205
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +89 -212
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +96 -114
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -112
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +15 -20
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +15 -31
- 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/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/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- 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 +15 -216
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +41 -0
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +41 -0
- 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 +6 -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 +8 -97
- 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 +5 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +42 -21
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +100 -256
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +45 -4
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +31 -138
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +168 -127
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
- 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/Blocknumber.sol/BlocknumberLib.json +2 -2
- 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/Seconds.sol/SecondsLib.json +50 -2
- 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/Timestamp.sol/TimestampLib.json +23 -4
- 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 +39 -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 +31 -24
- package/contracts/authorization/Authorization.sol +5 -2
- package/contracts/authorization/IAccessAdmin.sol +3 -2
- package/contracts/authorization/IServiceAuthorization.sol +4 -2
- package/contracts/authorization/ServiceAuthorization.sol +27 -11
- package/contracts/distribution/Distribution.sol +1 -1
- package/contracts/distribution/DistributionService.sol +32 -33
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionService.sol +9 -5
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +75 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +411 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
- package/contracts/instance/IInstance.sol +7 -30
- package/contracts/instance/Instance.sol +10 -35
- package/contracts/instance/InstanceAdmin.sol +29 -7
- package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +63 -41
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +11 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +4 -7
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/Oracle.sol +2 -1
- package/contracts/oracle/OracleService.sol +11 -8
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +5 -2
- package/contracts/pool/BundleService.sol +166 -46
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +31 -8
- package/contracts/pool/IPoolComponent.sol +18 -8
- package/contracts/pool/IPoolService.sol +57 -36
- package/contracts/pool/Pool.sol +59 -34
- package/contracts/pool/PoolService.sol +231 -102
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +50 -29
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +1 -0
- package/contracts/product/ClaimService.sol +251 -87
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -34
- package/contracts/product/IPricingService.sol +7 -7
- package/contracts/product/IProductComponent.sol +17 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +379 -192
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +46 -46
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +81 -50
- package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +65 -32
- package/contracts/registry/IRegistry.sol +51 -18
- package/contracts/registry/IRegistryService.sol +0 -9
- package/contracts/registry/Registry.sol +328 -197
- package/contracts/registry/RegistryAdmin.sol +134 -51
- package/contracts/registry/RegistryService.sol +55 -48
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +194 -183
- package/contracts/registry/ServiceAuthorizationV3.sol +8 -10
- package/contracts/shared/Component.sol +25 -29
- package/contracts/shared/ComponentService.sol +20 -30
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +2 -3
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +7 -4
- package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +5 -6
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +13 -2
- package/contracts/shared/NftOwnable.sol +5 -5
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +4 -4
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +16 -11
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +2 -1
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +11 -29
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +10 -14
- package/contracts/staking/StakingServiceManager.sol +2 -2
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +15 -0
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +16 -11
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +15 -1
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +4 -0
- package/contracts/upgradeability/ProxyManager.sol +67 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +2 -1
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
| @@ -12,14 +12,14 @@ contract ApplicationServiceManager 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 | 
             
                    ApplicationService svc = new ApplicationService{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);
         | 
| @@ -1,21 +1,25 @@ | |
| 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,  | 
| 10 | 
            -
            import {SUBMITTED, KEEP_STATE, DECLINED, CONFIRMED, CLOSED, PAID} from "../type/StateId.sol";
         | 
| 6 | 
            +
            import {ObjectType, CLAIM, POLICY, POOL, PRODUCT} from "../type/ObjectType.sol";
         | 
| 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";
         | 
| 13 10 | 
             
            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";
         | 
| 18 16 | 
             
            import {IClaimService} from "./IClaimService.sol";
         | 
| 17 | 
            +
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 18 | 
            +
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 19 | 
            +
            import {IPolicy} from "../instance/module/IPolicy.sol";
         | 
| 20 | 
            +
            import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
         | 
| 21 | 
            +
            import {IPoolComponent} from "../pool/IPoolComponent.sol";
         | 
| 22 | 
            +
            import {IPolicyService} from "../product/IPolicyService.sol";
         | 
| 19 23 | 
             
            import {IPoolService} from "../pool/IPoolService.sol";
         | 
| 20 24 |  | 
| 21 25 |  | 
| @@ -24,6 +28,7 @@ contract ClaimService is | |
| 24 28 | 
             
                IClaimService
         | 
| 25 29 | 
             
            {
         | 
| 26 30 |  | 
| 31 | 
            +
                IPolicyService internal _policyService;
         | 
| 27 32 | 
             
                IPoolService internal _poolService;
         | 
| 28 33 |  | 
| 29 34 | 
             
                function _initialize(
         | 
| @@ -35,16 +40,16 @@ contract ClaimService is | |
| 35 40 | 
             
                    initializer()
         | 
| 36 41 | 
             
                {
         | 
| 37 42 | 
             
                    (
         | 
| 38 | 
            -
                        address registryAddress | 
| 39 | 
            -
                        //address managerAddress
         | 
| 43 | 
            +
                        address registryAddress,
         | 
| 40 44 | 
             
                        address authority
         | 
| 41 | 
            -
                    ) = abi.decode(data, (address, address | 
| 45 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 42 46 |  | 
| 43 | 
            -
                     | 
| 47 | 
            +
                    _initializeService(registryAddress, authority, owner);
         | 
| 44 48 |  | 
| 49 | 
            +
                    _policyService = IPolicyService(getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart()));
         | 
| 45 50 | 
             
                    _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
         | 
| 46 51 |  | 
| 47 | 
            -
                     | 
| 52 | 
            +
                    _registerInterface(type(IClaimService).interfaceId);
         | 
| 48 53 | 
             
                }
         | 
| 49 54 |  | 
| 50 55 | 
             
                function submit(
         | 
| @@ -54,9 +59,11 @@ contract ClaimService is | |
| 54 59 | 
             
                )
         | 
| 55 60 | 
             
                    external
         | 
| 56 61 | 
             
                    virtual
         | 
| 62 | 
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         | 
| 57 63 | 
             
                    returns (ClaimId claimId)
         | 
| 58 64 | 
             
                {
         | 
| 59 65 | 
             
                    (
         | 
| 66 | 
            +
                        ,
         | 
| 60 67 | 
             
                        IInstance instance,
         | 
| 61 68 | 
             
                        InstanceReader instanceReader,
         | 
| 62 69 | 
             
                        IPolicy.PolicyInfo memory policyInfo
         | 
| @@ -67,6 +74,7 @@ contract ClaimService is | |
| 67 74 | 
             
                        revert ErrorClaimServicePolicyNotOpen(policyNftId);
         | 
| 68 75 | 
             
                    }
         | 
| 69 76 |  | 
| 77 | 
            +
                    // TODO check claim amount > 0
         | 
| 70 78 | 
             
                    // check policy including this claim is still within sum insured
         | 
| 71 79 | 
             
                    if(policyInfo.payoutAmount + claimAmount > policyInfo.sumInsuredAmount) {
         | 
| 72 80 | 
             
                        revert ErrorClaimServiceClaimExceedsSumInsured(
         | 
| @@ -80,14 +88,14 @@ contract ClaimService is | |
| 80 88 | 
             
                    instance.getInstanceStore().createClaim(
         | 
| 81 89 | 
             
                        policyNftId, 
         | 
| 82 90 | 
             
                        claimId, 
         | 
| 83 | 
            -
                        IPolicy.ClaimInfo(
         | 
| 84 | 
            -
                            claimAmount,
         | 
| 85 | 
            -
                            AmountLib.zero(), | 
| 86 | 
            -
                            0, | 
| 87 | 
            -
                            0, | 
| 88 | 
            -
                            claimData, | 
| 89 | 
            -
                            "", | 
| 90 | 
            -
                            TimestampLib.zero())); | 
| 91 | 
            +
                        IPolicy.ClaimInfo({
         | 
| 92 | 
            +
                            claimAmount: claimAmount,
         | 
| 93 | 
            +
                            paidAmount: AmountLib.zero(),
         | 
| 94 | 
            +
                            payoutsCount: 0,
         | 
| 95 | 
            +
                            openPayoutsCount: 0,
         | 
| 96 | 
            +
                            submissionData: claimData,
         | 
| 97 | 
            +
                            processData: "",
         | 
| 98 | 
            +
                            closedAt: TimestampLib.zero()}));
         | 
| 91 99 |  | 
| 92 100 | 
             
                    // update and save policy info with instance
         | 
| 93 101 | 
             
                    policyInfo.claimsCount += 1;
         | 
| @@ -107,13 +115,17 @@ contract ClaimService is | |
| 107 115 | 
             
                )
         | 
| 108 116 | 
             
                    external
         | 
| 109 117 | 
             
                    virtual
         | 
| 118 | 
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         | 
| 110 119 | 
             
                {
         | 
| 111 120 | 
             
                    (
         | 
| 121 | 
            +
                        NftId productNftId,
         | 
| 112 122 | 
             
                        IInstance instance,
         | 
| 113 123 | 
             
                        InstanceReader instanceReader,
         | 
| 114 124 | 
             
                        IPolicy.PolicyInfo memory policyInfo
         | 
| 115 125 | 
             
                    ) = _verifyCallerWithPolicy(policyNftId);
         | 
| 116 126 |  | 
| 127 | 
            +
                    // TODO add check for confirmedAmount > 0 and does not lead to exceeding sum insured
         | 
| 128 | 
            +
             | 
| 117 129 | 
             
                    // check/update claim info
         | 
| 118 130 | 
             
                    IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
         | 
| 119 131 | 
             
                    claimInfo.claimAmount = confirmedAmount;
         | 
| @@ -124,9 +136,21 @@ contract ClaimService is | |
| 124 136 | 
             
                    policyInfo.claimAmount = policyInfo.claimAmount + confirmedAmount;
         | 
| 125 137 | 
             
                    instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         | 
| 126 138 |  | 
| 139 | 
            +
                    // should policy still be active it needs to become expired
         | 
| 140 | 
            +
                    if (policyInfo.claimAmount >= policyInfo.sumInsuredAmount) {
         | 
| 141 | 
            +
                        _policyService.expirePolicy(instance, policyNftId, TimestampLib.blockTimestamp());
         | 
| 142 | 
            +
                    }
         | 
| 143 | 
            +
             | 
| 127 144 | 
             
                    emit LogClaimServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                    // callback to pool if applicable
         | 
| 147 | 
            +
                    _processConfirmedClaimByPool(instanceReader, productNftId, policyNftId, claimId, confirmedAmount);
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                    // callback to policy holder if applicable
         | 
| 150 | 
            +
                    _policyHolderClaimConfirmed(policyNftId, claimId, confirmedAmount);
         | 
| 128 151 | 
             
                }
         | 
| 129 152 |  | 
| 153 | 
            +
             | 
| 130 154 | 
             
                function decline(
         | 
| 131 155 | 
             
                    NftId policyNftId, 
         | 
| 132 156 | 
             
                    ClaimId claimId,
         | 
| @@ -134,8 +158,10 @@ contract ClaimService is | |
| 134 158 | 
             
                )
         | 
| 135 159 | 
             
                    external
         | 
| 136 160 | 
             
                    virtual
         | 
| 161 | 
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         | 
| 137 162 | 
             
                {
         | 
| 138 163 | 
             
                    (
         | 
| 164 | 
            +
                        ,
         | 
| 139 165 | 
             
                        IInstance instance,
         | 
| 140 166 | 
             
                        InstanceReader instanceReader,
         | 
| 141 167 | 
             
                        IPolicy.PolicyInfo memory policyInfo
         | 
| @@ -154,14 +180,46 @@ contract ClaimService is | |
| 154 180 | 
             
                    emit LogClaimServiceClaimDeclined(policyNftId, claimId);
         | 
| 155 181 | 
             
                }
         | 
| 156 182 |  | 
| 183 | 
            +
             | 
| 184 | 
            +
                // TODO add test case
         | 
| 185 | 
            +
                function revoke(
         | 
| 186 | 
            +
                    NftId policyNftId, 
         | 
| 187 | 
            +
                    ClaimId claimId
         | 
| 188 | 
            +
                )
         | 
| 189 | 
            +
                    external
         | 
| 190 | 
            +
                    virtual
         | 
| 191 | 
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         | 
| 192 | 
            +
                {
         | 
| 193 | 
            +
                    (
         | 
| 194 | 
            +
                        ,
         | 
| 195 | 
            +
                        IInstance instance,
         | 
| 196 | 
            +
                        InstanceReader instanceReader,
         | 
| 197 | 
            +
                        IPolicy.PolicyInfo memory policyInfo
         | 
| 198 | 
            +
                    ) = _verifyCallerWithPolicy(policyNftId);
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                    // check/update claim info
         | 
| 201 | 
            +
                    IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
         | 
| 202 | 
            +
                    claimInfo.closedAt = TimestampLib.blockTimestamp();
         | 
| 203 | 
            +
                    instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, REVOKED());
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                    // update and save policy info with instance
         | 
| 206 | 
            +
                    policyInfo.openClaimsCount -= 1;
         | 
| 207 | 
            +
                    instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         | 
| 208 | 
            +
             | 
| 209 | 
            +
                    emit LogClaimServiceClaimRevoked(policyNftId, claimId);
         | 
| 210 | 
            +
                }
         | 
| 211 | 
            +
             | 
| 212 | 
            +
             | 
| 157 213 | 
             
                function close(
         | 
| 158 214 | 
             
                    NftId policyNftId, 
         | 
| 159 215 | 
             
                    ClaimId claimId
         | 
| 160 216 | 
             
                )
         | 
| 161 217 | 
             
                    external
         | 
| 162 218 | 
             
                    virtual
         | 
| 219 | 
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         | 
| 163 220 | 
             
                {
         | 
| 164 221 | 
             
                    (
         | 
| 222 | 
            +
                        ,
         | 
| 165 223 | 
             
                        IInstance instance,
         | 
| 166 224 | 
             
                        InstanceReader instanceReader,
         | 
| 167 225 | 
             
                        IPolicy.PolicyInfo memory policyInfo
         | 
| @@ -192,51 +250,48 @@ contract ClaimService is | |
| 192 250 | 
             
                }
         | 
| 193 251 |  | 
| 194 252 |  | 
| 195 | 
            -
                function  | 
| 253 | 
            +
                function createPayoutForBeneficiary(
         | 
| 196 254 | 
             
                    NftId policyNftId, 
         | 
| 197 255 | 
             
                    ClaimId claimId,
         | 
| 198 256 | 
             
                    Amount amount,
         | 
| 257 | 
            +
                    address beneficiary,
         | 
| 199 258 | 
             
                    bytes memory data
         | 
| 200 259 | 
             
                )
         | 
| 201 260 | 
             
                    external
         | 
| 261 | 
            +
                    virtual
         | 
| 262 | 
            +
                    // nonReentrant() // prevents creating a reinsurance claim in a single tx
         | 
| 202 263 | 
             
                    returns (PayoutId payoutId)
         | 
| 203 264 | 
             
                {
         | 
| 204 | 
            -
                    (
         | 
| 205 | 
            -
                         | 
| 206 | 
            -
             | 
| 207 | 
            -
                        IPolicy.PolicyInfo memory policyInfo
         | 
| 208 | 
            -
                    ) = _verifyCallerWithPolicy(policyNftId);
         | 
| 209 | 
            -
             | 
| 210 | 
            -
                    IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
         | 
| 211 | 
            -
                    StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
         | 
| 212 | 
            -
             | 
| 213 | 
            -
                    // TODO add checks
         | 
| 214 | 
            -
                    // claim needs to be open
         | 
| 215 | 
            -
                    // claim.paidAmount + amount <= claim.claimAmount
         | 
| 265 | 
            +
                    if (beneficiary == address(0)) {
         | 
| 266 | 
            +
                        revert ErrorClaimServiceBeneficiaryIsZero(policyNftId, claimId);
         | 
| 267 | 
            +
                    }
         | 
| 216 268 |  | 
| 217 | 
            -
                     | 
| 218 | 
            -
                    // create payout info with instance
         | 
| 219 | 
            -
                    uint8 claimNo = claimInfo.payoutsCount + 1;
         | 
| 220 | 
            -
                    payoutId = PayoutIdLib.toPayoutId(claimId, claimNo);
         | 
| 221 | 
            -
                    instance.getInstanceStore().createPayout(
         | 
| 269 | 
            +
                    return _createPayout(
         | 
| 222 270 | 
             
                        policyNftId, 
         | 
| 223 | 
            -
                         | 
| 224 | 
            -
                         | 
| 225 | 
            -
             | 
| 226 | 
            -
             | 
| 227 | 
            -
             | 
| 228 | 
            -
                            TimestampLib.zero()));
         | 
| 229 | 
            -
             | 
| 230 | 
            -
                    // update and save claim info with instance
         | 
| 231 | 
            -
                    claimInfo.payoutsCount += 1;
         | 
| 232 | 
            -
                    claimInfo.openPayoutsCount += 1;
         | 
| 233 | 
            -
                    instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
         | 
| 271 | 
            +
                        claimId, 
         | 
| 272 | 
            +
                        amount, 
         | 
| 273 | 
            +
                        beneficiary,
         | 
| 274 | 
            +
                        data);
         | 
| 275 | 
            +
                }
         | 
| 234 276 |  | 
| 235 | 
            -
                    // update and save policy info with instance
         | 
| 236 | 
            -
                    policyInfo.payoutAmount.add(amount);
         | 
| 237 | 
            -
                    instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         | 
| 238 277 |  | 
| 239 | 
            -
             | 
| 278 | 
            +
                function createPayout(
         | 
| 279 | 
            +
                    NftId policyNftId, 
         | 
| 280 | 
            +
                    ClaimId claimId,
         | 
| 281 | 
            +
                    Amount amount,
         | 
| 282 | 
            +
                    bytes memory data
         | 
| 283 | 
            +
                )
         | 
| 284 | 
            +
                    external
         | 
| 285 | 
            +
                    virtual
         | 
| 286 | 
            +
                    // nonReentrant() // prevents creating a reinsurance payout in a single tx
         | 
| 287 | 
            +
                    returns (PayoutId payoutId)
         | 
| 288 | 
            +
                {
         | 
| 289 | 
            +
                    return _createPayout(
         | 
| 290 | 
            +
                        policyNftId, 
         | 
| 291 | 
            +
                        claimId, 
         | 
| 292 | 
            +
                        amount, 
         | 
| 293 | 
            +
                        address(0), // defaults to owner of policy nft
         | 
| 294 | 
            +
                        data);
         | 
| 240 295 | 
             
                }
         | 
| 241 296 |  | 
| 242 297 |  | 
| @@ -246,8 +301,10 @@ contract ClaimService is | |
| 246 301 | 
             
                )
         | 
| 247 302 | 
             
                    external
         | 
| 248 303 | 
             
                    virtual
         | 
| 304 | 
            +
                    // nonReentrant() // prevents creating a reinsurance payout in a single tx
         | 
| 249 305 | 
             
                {
         | 
| 250 306 | 
             
                    (
         | 
| 307 | 
            +
                        ,
         | 
| 251 308 | 
             
                        IInstance instance,
         | 
| 252 309 | 
             
                        InstanceReader instanceReader,
         | 
| 253 310 | 
             
                        IPolicy.PolicyInfo memory policyInfo
         | 
| @@ -260,7 +317,6 @@ contract ClaimService is | |
| 260 317 | 
             
                    payoutInfo.paidAt = TimestampLib.blockTimestamp();
         | 
| 261 318 | 
             
                    instance.getInstanceStore().updatePayout(policyNftId, payoutId, payoutInfo, PAID());
         | 
| 262 319 |  | 
| 263 | 
            -
                    // TODO update and save claim info with instance
         | 
| 264 320 | 
             
                    ClaimId claimId = payoutId.toClaimId();
         | 
| 265 321 | 
             
                    Amount payoutAmount = payoutInfo.amount;
         | 
| 266 322 | 
             
                    IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
         | 
| @@ -270,7 +326,7 @@ contract ClaimService is | |
| 270 326 | 
             
                    // check if this payout is closing the linked claim
         | 
| 271 327 | 
             
                    // update claim and policy info accordingly
         | 
| 272 328 | 
             
                    if(claimInfo.openPayoutsCount == 0 && claimInfo.paidAmount == claimInfo.claimAmount) {
         | 
| 273 | 
            -
                        claimInfo.closedAt  | 
| 329 | 
            +
                        claimInfo.closedAt = TimestampLib.blockTimestamp();
         | 
| 274 330 | 
             
                        instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
         | 
| 275 331 |  | 
| 276 332 | 
             
                        policyInfo.openClaimsCount -= 1;
         | 
| @@ -283,30 +339,97 @@ contract ClaimService is | |
| 283 339 | 
             
                    instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         | 
| 284 340 |  | 
| 285 341 | 
             
                    // inform pool about payout
         | 
| 286 | 
            -
                    _poolService. | 
| 342 | 
            +
                    _poolService.processPayout(
         | 
| 287 343 | 
             
                        instance, 
         | 
| 288 344 | 
             
                        address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
         | 
| 289 345 | 
             
                        policyNftId, 
         | 
| 290 346 | 
             
                        policyInfo, 
         | 
| 291 347 | 
             
                        payoutAmount);
         | 
| 292 | 
            -
             | 
| 348 | 
            +
                    
         | 
| 293 349 | 
             
                    // transfer payout token and fee
         | 
| 294 350 | 
             
                    (
         | 
| 295 351 | 
             
                        Amount netPayoutAmount,
         | 
| 352 | 
            +
                        Amount processingFeeAmount,
         | 
| 296 353 | 
             
                        address beneficiary
         | 
| 297 | 
            -
                    ) =  | 
| 354 | 
            +
                    ) = _calculatePayoutAmount(
         | 
| 298 355 | 
             
                        instanceReader,
         | 
| 299 356 | 
             
                        policyNftId,
         | 
| 300 357 | 
             
                        policyInfo,
         | 
| 301 358 | 
             
                        payoutInfo);
         | 
| 302 359 |  | 
| 303 | 
            -
                     | 
| 360 | 
            +
                    emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount, processingFeeAmount);
         | 
| 361 | 
            +
             | 
| 362 | 
            +
                    {
         | 
| 363 | 
            +
                        NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
         | 
| 364 | 
            +
                        IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 365 | 
            +
                        poolInfo.tokenHandler.distributeTokens(poolInfo.wallet, beneficiary, netPayoutAmount);
         | 
| 366 | 
            +
             | 
| 367 | 
            +
                        // TODO add 2nd token tx if processingFeeAmount > 0
         | 
| 368 | 
            +
                    }
         | 
| 369 | 
            +
             | 
| 370 | 
            +
                    // callback to policy holder if applicable
         | 
| 371 | 
            +
                    _policyHolderPayoutExecuted(policyNftId, payoutId, beneficiary, payoutAmount);
         | 
| 372 | 
            +
                }
         | 
| 373 | 
            +
             | 
| 374 | 
            +
                // internal functions
         | 
| 375 | 
            +
             | 
| 376 | 
            +
             | 
| 377 | 
            +
                function _createPayout(
         | 
| 378 | 
            +
                    NftId policyNftId, 
         | 
| 379 | 
            +
                    ClaimId claimId,
         | 
| 380 | 
            +
                    Amount amount,
         | 
| 381 | 
            +
                    address beneficiary,
         | 
| 382 | 
            +
                    bytes memory data
         | 
| 383 | 
            +
                )
         | 
| 384 | 
            +
                    internal
         | 
| 385 | 
            +
                    virtual
         | 
| 386 | 
            +
                    returns (PayoutId payoutId)
         | 
| 387 | 
            +
                {
         | 
| 388 | 
            +
                    (
         | 
| 389 | 
            +
                        ,
         | 
| 390 | 
            +
                        IInstance instance,
         | 
| 391 | 
            +
                        InstanceReader instanceReader,
         | 
| 392 | 
            +
                        IPolicy.PolicyInfo memory policyInfo
         | 
| 393 | 
            +
                    ) = _verifyCallerWithPolicy(policyNftId);
         | 
| 394 | 
            +
             | 
| 395 | 
            +
                    IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
         | 
| 396 | 
            +
                    StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
         | 
| 304 397 |  | 
| 305 | 
            -
                     | 
| 398 | 
            +
                    // TODO add checks
         | 
| 399 | 
            +
                    // claim needs to be open
         | 
| 400 | 
            +
                    // claim.paidAmount + amount <= claim.claimAmount
         | 
| 401 | 
            +
             | 
| 402 | 
            +
                    // check/update claim info
         | 
| 403 | 
            +
                    // create payout info with instance
         | 
| 404 | 
            +
                    uint24 payoutNo = claimInfo.payoutsCount + 1;
         | 
| 405 | 
            +
                    payoutId = PayoutIdLib.toPayoutId(claimId, payoutNo);
         | 
| 406 | 
            +
                    if (beneficiary == address(0)) {
         | 
| 407 | 
            +
                        beneficiary = getRegistry().ownerOf(policyNftId);
         | 
| 408 | 
            +
                    }
         | 
| 409 | 
            +
                    instance.getInstanceStore().createPayout(
         | 
| 410 | 
            +
                        policyNftId, 
         | 
| 411 | 
            +
                        payoutId, 
         | 
| 412 | 
            +
                        IPolicy.PayoutInfo({
         | 
| 413 | 
            +
                            claimId: payoutId.toClaimId(),
         | 
| 414 | 
            +
                            amount: amount,
         | 
| 415 | 
            +
                            beneficiary: beneficiary,
         | 
| 416 | 
            +
                            data: data,
         | 
| 417 | 
            +
                            paidAt: TimestampLib.zero()}));
         | 
| 418 | 
            +
             | 
| 419 | 
            +
                    // update and save claim info with instance
         | 
| 420 | 
            +
                    claimInfo.payoutsCount += 1;
         | 
| 421 | 
            +
                    claimInfo.openPayoutsCount += 1;
         | 
| 422 | 
            +
                    instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
         | 
| 423 | 
            +
             | 
| 424 | 
            +
                    // update and save policy info with instance
         | 
| 425 | 
            +
                    policyInfo.payoutAmount.add(amount);
         | 
| 426 | 
            +
                    instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
         | 
| 427 | 
            +
             | 
| 428 | 
            +
                    emit LogClaimServicePayoutCreated(policyNftId, payoutId, amount, beneficiary);
         | 
| 306 429 | 
             
                }
         | 
| 307 430 |  | 
| 308 | 
            -
             | 
| 309 | 
            -
                function  | 
| 431 | 
            +
             | 
| 432 | 
            +
                function _calculatePayoutAmount(
         | 
| 310 433 | 
             
                    InstanceReader instanceReader,
         | 
| 311 434 | 
             
                    NftId policyNftId,
         | 
| 312 435 | 
             
                    IPolicy.PolicyInfo memory policyInfo,
         | 
| @@ -315,6 +438,7 @@ contract ClaimService is | |
| 315 438 | 
             
                    internal
         | 
| 316 439 | 
             
                    returns (
         | 
| 317 440 | 
             
                        Amount netPayoutAmount,
         | 
| 441 | 
            +
                        Amount processingFeeAmount,
         | 
| 318 442 | 
             
                        address beneficiary
         | 
| 319 443 | 
             
                    )
         | 
| 320 444 | 
             
                {
         | 
| @@ -328,39 +452,20 @@ contract ClaimService is | |
| 328 452 | 
             
                        IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
         | 
| 329 453 |  | 
| 330 454 | 
             
                        netPayoutAmount = payoutAmount;
         | 
| 331 | 
            -
             | 
| 455 | 
            +
             | 
| 456 | 
            +
                        if (payoutInfo.beneficiary == address(0)) {
         | 
| 457 | 
            +
                            beneficiary = getRegistry().ownerOf(policyNftId);
         | 
| 458 | 
            +
                        } else { 
         | 
| 459 | 
            +
                            beneficiary = payoutInfo.beneficiary;
         | 
| 460 | 
            +
                        }
         | 
| 332 461 |  | 
| 333 462 | 
             
                        IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 334 463 | 
             
                        if(FeeLib.gtz(productInfo.processingFee)) {
         | 
| 335 | 
            -
                            // TODO calculate net payout and processing fees
         | 
| 336 | 
            -
                            // TODO transfer processing fees to product wallet
         | 
| 337 | 
            -
                            // TODO inform product to update fee book keeping
         | 
| 464 | 
            +
                            // TODO calculate and set net payout and processing fees
         | 
| 338 465 | 
             
                        }
         | 
| 339 | 
            -
                        
         | 
| 340 | 
            -
                        // TODO: centralize token handling (issue #471)
         | 
| 341 | 
            -
                        poolInfo.tokenHandler.transfer(
         | 
| 342 | 
            -
                            poolInfo.wallet,
         | 
| 343 | 
            -
                            beneficiary,
         | 
| 344 | 
            -
                            netPayoutAmount);
         | 
| 345 466 | 
             
                    }
         | 
| 346 467 | 
             
                }
         | 
| 347 468 |  | 
| 348 | 
            -
                // internal functions
         | 
| 349 | 
            -
             | 
| 350 | 
            -
                function _getBeneficiary(
         | 
| 351 | 
            -
                    NftId policyNftId,
         | 
| 352 | 
            -
                    ClaimId claimId
         | 
| 353 | 
            -
                )
         | 
| 354 | 
            -
                    internal
         | 
| 355 | 
            -
                    returns (address beneficiary)
         | 
| 356 | 
            -
                {
         | 
| 357 | 
            -
                    // TODO check if owner is IPolicyHolder
         | 
| 358 | 
            -
                    // if so, obtain beneficiary from this contract
         | 
| 359 | 
            -
             | 
| 360 | 
            -
                    // default beneficiary is policy nft owner
         | 
| 361 | 
            -
                    beneficiary = getRegistry().ownerOf(policyNftId);
         | 
| 362 | 
            -
                }
         | 
| 363 | 
            -
             | 
| 364 469 |  | 
| 365 470 | 
             
                function _verifyCallerWithPolicy(
         | 
| 366 471 | 
             
                    NftId policyNftId
         | 
| @@ -369,12 +474,12 @@ contract ClaimService is | |
| 369 474 | 
             
                    view
         | 
| 370 475 | 
             
                    virtual
         | 
| 371 476 | 
             
                    returns (
         | 
| 477 | 
            +
                        NftId productNftId,
         | 
| 372 478 | 
             
                        IInstance instance,
         | 
| 373 479 | 
             
                        InstanceReader instanceReader,
         | 
| 374 480 | 
             
                        IPolicy.PolicyInfo memory policyInfo
         | 
| 375 481 | 
             
                    )
         | 
| 376 482 | 
             
                {
         | 
| 377 | 
            -
                    NftId productNftId;
         | 
| 378 483 | 
             
                    (productNftId,, instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 379 484 | 
             
                    instanceReader = instance.getInstanceReader();
         | 
| 380 485 |  | 
| @@ -410,6 +515,65 @@ contract ClaimService is | |
| 410 515 | 
             
                    claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
         | 
| 411 516 | 
             
                }
         | 
| 412 517 |  | 
| 518 | 
            +
                function _processConfirmedClaimByPool(
         | 
| 519 | 
            +
                    InstanceReader instanceReader, 
         | 
| 520 | 
            +
                    NftId productNftId, 
         | 
| 521 | 
            +
                    NftId policyNftId, 
         | 
| 522 | 
            +
                    ClaimId claimId, 
         | 
| 523 | 
            +
                    Amount amount
         | 
| 524 | 
            +
                )
         | 
| 525 | 
            +
                    internal
         | 
| 526 | 
            +
                {
         | 
| 527 | 
            +
                    NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
         | 
| 528 | 
            +
                    if (instanceReader.getPoolInfo(poolNftId).isProcessingConfirmedClaims) {
         | 
| 529 | 
            +
                        address poolAddress = getRegistry().getObjectAddress(poolNftId);
         | 
| 530 | 
            +
                        IPoolComponent(poolAddress).processConfirmedClaim(policyNftId, claimId, amount);
         | 
| 531 | 
            +
                    }
         | 
| 532 | 
            +
                }
         | 
| 533 | 
            +
             | 
| 534 | 
            +
             | 
| 535 | 
            +
                function _policyHolderClaimConfirmed(
         | 
| 536 | 
            +
                    NftId policyNftId, 
         | 
| 537 | 
            +
                    ClaimId claimId,
         | 
| 538 | 
            +
                    Amount confirmedAmount
         | 
| 539 | 
            +
                )
         | 
| 540 | 
            +
                    internal
         | 
| 541 | 
            +
                {
         | 
| 542 | 
            +
                    IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
         | 
| 543 | 
            +
                    if(address(policyHolder) != address(0)) {
         | 
| 544 | 
            +
                        policyHolder.claimConfirmed(policyNftId, claimId, confirmedAmount);
         | 
| 545 | 
            +
                    }
         | 
| 546 | 
            +
                }
         | 
| 547 | 
            +
             | 
| 548 | 
            +
             | 
| 549 | 
            +
                function _policyHolderPayoutExecuted(
         | 
| 550 | 
            +
                    NftId policyNftId, 
         | 
| 551 | 
            +
                    PayoutId payoutId,
         | 
| 552 | 
            +
                    address beneficiary,
         | 
| 553 | 
            +
                    Amount payoutAmount
         | 
| 554 | 
            +
                )
         | 
| 555 | 
            +
                    internal
         | 
| 556 | 
            +
                {
         | 
| 557 | 
            +
                    IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
         | 
| 558 | 
            +
                    if(address(policyHolder) != address(0)) {
         | 
| 559 | 
            +
                        policyHolder.payoutExecuted(policyNftId, payoutId, payoutAmount, beneficiary);
         | 
| 560 | 
            +
                    }
         | 
| 561 | 
            +
                }
         | 
| 562 | 
            +
             | 
| 563 | 
            +
             | 
| 564 | 
            +
                function _getPolicyHolder(NftId policyNftId)
         | 
| 565 | 
            +
                    internal 
         | 
| 566 | 
            +
                    view 
         | 
| 567 | 
            +
                    returns (IPolicyHolder policyHolder)
         | 
| 568 | 
            +
                {
         | 
| 569 | 
            +
                    address policyHolderAddress = getRegistry().ownerOf(policyNftId);
         | 
| 570 | 
            +
                    policyHolder = IPolicyHolder(policyHolderAddress);
         | 
| 571 | 
            +
             | 
| 572 | 
            +
                    if (!ContractLib.isPolicyHolder(policyHolderAddress)) {
         | 
| 573 | 
            +
                        policyHolder = IPolicyHolder(address(0));
         | 
| 574 | 
            +
                    }
         | 
| 575 | 
            +
                }
         | 
| 576 | 
            +
             | 
| 413 577 |  | 
| 414 578 | 
             
                function _getDomain() internal pure override returns(ObjectType) {
         | 
| 415 579 | 
             
                    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);
         | 
| @@ -23,16 +23,20 @@ interface IClaimService is | |
| 23 23 | 
             
                event LogClaimServiceClaimSubmitted(NftId policyNftId, ClaimId claimId, Amount claimAmount);
         | 
| 24 24 | 
             
                event LogClaimServiceClaimConfirmed(NftId policyNftId, ClaimId claimId, Amount confirmedAmount);
         | 
| 25 25 | 
             
                event LogClaimServiceClaimDeclined(NftId policyNftId, ClaimId claimId);
         | 
| 26 | 
            +
                event LogClaimServiceClaimRevoked(NftId policyNftId, ClaimId claimId);
         | 
| 26 27 | 
             
                event LogClaimServiceClaimClosed(NftId policyNftId, ClaimId claimId);
         | 
| 27 28 |  | 
| 28 | 
            -
                event LogClaimServicePayoutCreated(NftId policyNftId, PayoutId payoutId, Amount amount);
         | 
| 29 | 
            -
                event LogClaimServicePayoutProcessed(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary, Amount netAmount);
         | 
| 29 | 
            +
                event LogClaimServicePayoutCreated(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary);
         | 
| 30 | 
            +
                event LogClaimServicePayoutProcessed(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary, Amount netAmount, Amount processingFeeAmount);
         | 
| 31 | 
            +
                error ErrorClaimServiceBeneficiarySet(NftId policyNftId, PayoutId payoutId, address beneficiary);
         | 
| 30 32 |  | 
| 31 33 | 
             
                error ErrorClaimServicePolicyProductMismatch(NftId policyNftId, NftId expectedProduct, NftId actualProduct);
         | 
| 32 34 | 
             
                error ErrorClaimServicePolicyNotOpen(NftId policyNftId);
         | 
| 33 35 | 
             
                error ErrorClaimServiceClaimExceedsSumInsured(NftId policyNftId, Amount sumInsured, Amount payoutsIncludingClaimAmount);
         | 
| 36 | 
            +
                error ErrorClaimServiceBeneficiaryIsZero(NftId policyNftId, ClaimId claimId);
         | 
| 37 | 
            +
                error ErrorClaimsServicePayoutAmountIsZero(NftId policyNftId, PayoutId payoutId);
         | 
| 34 38 |  | 
| 35 | 
            -
                error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId,  | 
| 39 | 
            +
                error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint24 openPayouts);
         | 
| 36 40 | 
             
                error ErrorClaimServiceClaimWithMissingPayouts(NftId policyNftId, ClaimId claimId, Amount claimAmount, Amount paidAmount);
         | 
| 37 41 | 
             
                error ErrorClaimServiceClaimNotInExpectedState(NftId policyNftId, ClaimId claimId, StateId expectedState, StateId actualState);
         | 
| 38 42 |  | 
| @@ -46,9 +50,6 @@ interface IClaimService is | |
| 46 50 | 
             
                ) external returns (ClaimId claimId);
         | 
| 47 51 |  | 
| 48 52 |  | 
| 49 | 
            -
                // TODO add claim revoke functionality
         | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 53 | 
             
                /// @dev declines the specified claim
         | 
| 53 54 | 
             
                /// function can only be called by product, policy needs to match with calling product
         | 
| 54 55 | 
             
                function decline(
         | 
| @@ -58,6 +59,14 @@ interface IClaimService is | |
| 58 59 | 
             
                ) external;
         | 
| 59 60 |  | 
| 60 61 |  | 
| 62 | 
            +
                /// @dev revokes the specified claim
         | 
| 63 | 
            +
                /// function can only be called by product, policy needs to match with calling product
         | 
| 64 | 
            +
                function revoke(
         | 
| 65 | 
            +
                    NftId policyNftId, 
         | 
| 66 | 
            +
                    ClaimId claimId
         | 
| 67 | 
            +
                ) external;
         | 
| 68 | 
            +
             | 
| 69 | 
            +
             | 
| 61 70 | 
             
                /// @dev confirms the specified claim and specifies the payout amount
         | 
| 62 71 | 
             
                /// function can only be called by product, policy needs to match with calling product
         | 
| 63 72 | 
             
                function confirm(
         | 
| @@ -76,7 +85,8 @@ interface IClaimService is | |
| 76 85 | 
             
                ) external;
         | 
| 77 86 |  | 
| 78 87 |  | 
| 79 | 
            -
                /// @dev  | 
| 88 | 
            +
                /// @dev Creates a new payout for the specified claim.
         | 
| 89 | 
            +
                /// The beneficiary is the holder of the policy NFT
         | 
| 80 90 | 
             
                /// returns the id of the newly created payout, this id is unique for the specified policy
         | 
| 81 91 | 
             
                /// function can only be called by product, policy needs to match with calling product
         | 
| 82 92 | 
             
                function createPayout(
         | 
| @@ -89,6 +99,20 @@ interface IClaimService is | |
| 89 99 | 
             
                    returns (PayoutId payoutId);
         | 
| 90 100 |  | 
| 91 101 |  | 
| 102 | 
            +
                /// @dev Creates a new payout for the specified claim and beneficiary.
         | 
| 103 | 
            +
                /// returns the id of the newly created payout, this id is unique for the specified policy
         | 
| 104 | 
            +
                /// function can only be called by product, policy needs to match with calling product
         | 
| 105 | 
            +
                function createPayoutForBeneficiary(
         | 
| 106 | 
            +
                    NftId policyNftId, 
         | 
| 107 | 
            +
                    ClaimId claimId,
         | 
| 108 | 
            +
                    Amount amount,
         | 
| 109 | 
            +
                    address beneficiary,
         | 
| 110 | 
            +
                    bytes memory data
         | 
| 111 | 
            +
                )
         | 
| 112 | 
            +
                    external
         | 
| 113 | 
            +
                    returns (PayoutId payoutId);
         | 
| 114 | 
            +
             | 
| 115 | 
            +
             | 
| 92 116 | 
             
                /// @dev processes the specified payout
         | 
| 93 117 | 
             
                /// this includes moving the payout token to the beneficiary (default: policy holder)
         | 
| 94 118 | 
             
                /// function can only be called by product, policy needs to match with calling product
         |