@etherisc/gif-next 0.0.2-e987ccf-894 → 0.0.2-e9c5694-914
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 +1 -1
 - 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 +151 -249
 - 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 +91 -213
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +141 -198
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +107 -107
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +78 -66
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +29 -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 +1538 -0
 - package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
 - package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2072 -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 +1471 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1231 -0
 - package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2095 -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 +29 -84
 - package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
 - package/artifacts/contracts/instance/Instance.sol/Instance.json +56 -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 +310 -83
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +77 -242
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -87
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +207 -241
 - 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 +132 -230
 - 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 +73 -61
 - 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 +86 -208
 - package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
 - package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +91 -159
 - package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +75 -83
 - package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
 - package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +109 -216
 - package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.json +178 -187
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +117 -105
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +53 -0
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +98 -58
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +200 -125
 - package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
 - package/artifacts/contracts/pool/Pool.sol/Pool.json +109 -203
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.json +308 -274
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +108 -88
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +71 -152
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -84
 - package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
 - package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +140 -221
 - 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 +288 -188
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +119 -103
 - 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 +161 -7
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +141 -11
 - 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 +131 -78
 - package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
 - package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +258 -195
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +114 -98
 - package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
 - package/artifacts/contracts/product/PricingService.sol/PricingService.json +154 -219
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +87 -91
 - package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
 - package/artifacts/contracts/product/Product.sol/Product.json +140 -221
 - package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
 - package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
 - package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
 - package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -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 +285 -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 +491 -94
 - package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +283 -143
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +78 -284
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -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 +129 -221
 - 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 +68 -175
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +351 -263
 - package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +120 -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 +92 -0
 - package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponent.sol/IComponent.json +55 -28
 - package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +321 -19
 - package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +73 -61
 - 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 +86 -208
 - 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 +2 -2
 - package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
 - package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
 - package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStaking.sol/IStaking.json +82 -29
 - 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 +83 -30
 - package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
 - package/artifacts/contracts/staking/Staking.sol/Staking.json +171 -224
 - 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 +102 -87
 - 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 +71 -165
 - package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +71 -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 +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/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 +26 -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 +2 -2
 - 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 +55 -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 +2 -1
 - package/contracts/distribution/Distribution.sol +7 -17
 - package/contracts/distribution/DistributionService.sol +63 -44
 - package/contracts/distribution/DistributionServiceManager.sol +6 -6
 - package/contracts/distribution/IDistributionComponent.sol +1 -1
 - package/contracts/examples/fire/DamageLevel.sol +59 -0
 - package/contracts/examples/fire/FirePool.sol +73 -0
 - package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
 - package/contracts/examples/fire/FireProduct.sol +415 -0
 - package/contracts/examples/fire/FireProductAuthorization.sol +44 -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 +10 -30
 - package/contracts/instance/IInstanceService.sol +0 -20
 - package/contracts/instance/Instance.sol +29 -51
 - package/contracts/instance/InstanceAdmin.sol +23 -31
 - package/contracts/instance/InstanceAuthorizationV3.sol +10 -19
 - package/contracts/instance/InstanceReader.sol +91 -18
 - package/contracts/instance/InstanceService.sol +23 -77
 - package/contracts/instance/InstanceServiceManager.sol +6 -7
 - package/contracts/instance/InstanceStore.sol +0 -4
 - package/contracts/instance/base/ObjectLifecycle.sol +2 -1
 - package/contracts/instance/module/IComponents.sol +10 -5
 - package/contracts/instance/module/IPolicy.sol +7 -7
 - package/contracts/oracle/BasicOracle.sol +0 -1
 - package/contracts/oracle/IOracleService.sol +2 -1
 - package/contracts/oracle/Oracle.sol +6 -16
 - package/contracts/oracle/OracleService.sol +47 -34
 - package/contracts/oracle/OracleServiceManager.sol +6 -6
 - package/contracts/pool/BasicPool.sol +14 -26
 - package/contracts/pool/BasicPoolAuthorization.sol +0 -1
 - package/contracts/pool/BundleService.sol +83 -28
 - package/contracts/pool/BundleServiceManager.sol +6 -6
 - package/contracts/pool/IBundleService.sol +9 -0
 - package/contracts/pool/IPoolComponent.sol +18 -8
 - package/contracts/pool/IPoolService.sol +21 -14
 - package/contracts/pool/Pool.sol +48 -39
 - package/contracts/pool/PoolService.sol +121 -86
 - package/contracts/pool/PoolServiceManager.sol +4 -4
 - package/contracts/product/ApplicationService.sol +20 -10
 - package/contracts/product/ApplicationServiceManager.sol +4 -4
 - package/contracts/product/BasicProduct.sol +7 -6
 - package/contracts/product/BasicProductAuthorization.sol +0 -1
 - package/contracts/product/ClaimService.sol +310 -114
 - package/contracts/product/ClaimServiceManager.sol +4 -4
 - package/contracts/product/IClaimService.sol +30 -7
 - package/contracts/product/IPolicyService.sol +12 -5
 - package/contracts/product/IPricingService.sol +9 -9
 - package/contracts/product/IProductComponent.sol +23 -3
 - package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -2
 - package/contracts/product/PolicyService.sol +168 -53
 - 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 +104 -55
 - package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
 - package/contracts/product/RiskServiceManager.sol +39 -0
 - package/contracts/registry/ChainNft.sol +68 -38
 - package/contracts/registry/IRegistry.sol +54 -17
 - package/contracts/registry/IRegistryService.sol +5 -12
 - package/contracts/registry/ITransferInterceptor.sol +1 -2
 - package/contracts/registry/Registry.sol +341 -200
 - package/contracts/registry/RegistryAdmin.sol +124 -50
 - 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 +203 -187
 - package/contracts/registry/ServiceAuthorizationV3.sol +14 -19
 - package/contracts/shared/Component.sol +29 -32
 - package/contracts/shared/ComponentService.sol +241 -137
 - package/contracts/shared/ComponentServiceManager.sol +8 -5
 - package/contracts/shared/ComponentVerifyingService.sol +22 -13
 - package/contracts/shared/ContractLib.sol +38 -0
 - package/contracts/shared/IComponent.sol +6 -2
 - package/contracts/shared/IComponentService.sol +25 -13
 - package/contracts/shared/IInstanceLinkedComponent.sol +2 -17
 - 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 +71 -30
 - 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 -9
 - package/contracts/shared/RegistryLinked.sol +3 -2
 - package/contracts/shared/Service.sol +20 -18
 - package/contracts/staking/IStaking.sol +2 -1
 - package/contracts/staking/IStakingService.sol +0 -3
 - package/contracts/staking/StakeManagerLib.sol +18 -0
 - package/contracts/staking/Staking.sol +8 -8
 - package/contracts/staking/StakingManager.sol +8 -6
 - package/contracts/staking/StakingReader.sol +12 -5
 - package/contracts/staking/StakingService.sol +17 -17
 - package/contracts/staking/StakingServiceManager.sol +2 -2
 - package/contracts/staking/TargetManagerLib.sol +7 -3
 - 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 +15 -1
 - package/contracts/type/RoleId.sol +0 -12
 - package/contracts/type/Seconds.sol +8 -0
 - package/contracts/type/StateId.sol +15 -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 +2 -1
 - 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/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/authorization/IModuleAuthorization.sol +0 -21
 - package/contracts/authorization/ModuleAuthorization.sol +0 -78
 - package/contracts/product/ProductServiceManager.sol +0 -39
 - package/contracts/shared/InitializableCustom.sol +0 -177
 
| 
         @@ -23,17 +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);
         
     | 
| 
       34 
37 
     | 
    
         
             
                error ErrorClaimsServicePayoutAmountIsZero(NftId policyNftId, PayoutId payoutId);
         
     | 
| 
       35 
38 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId,  
     | 
| 
      
 39 
     | 
    
         
            +
                error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint24 openPayouts);
         
     | 
| 
       37 
40 
     | 
    
         
             
                error ErrorClaimServiceClaimWithMissingPayouts(NftId policyNftId, ClaimId claimId, Amount claimAmount, Amount paidAmount);
         
     | 
| 
       38 
41 
     | 
    
         
             
                error ErrorClaimServiceClaimNotInExpectedState(NftId policyNftId, ClaimId claimId, StateId expectedState, StateId actualState);
         
     | 
| 
       39 
42 
     | 
    
         | 
| 
         @@ -47,9 +50,6 @@ interface IClaimService is 
     | 
|
| 
       47 
50 
     | 
    
         
             
                ) external returns (ClaimId claimId);
         
     | 
| 
       48 
51 
     | 
    
         | 
| 
       49 
52 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                // TODO add claim revoke functionality
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
53 
     | 
    
         
             
                /// @dev declines the specified claim
         
     | 
| 
       54 
54 
     | 
    
         
             
                /// function can only be called by product, policy needs to match with calling product
         
     | 
| 
       55 
55 
     | 
    
         
             
                function decline(
         
     | 
| 
         @@ -59,6 +59,14 @@ interface IClaimService is 
     | 
|
| 
       59 
59 
     | 
    
         
             
                ) external;
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
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 
     | 
    
         
            +
             
     | 
| 
       62 
70 
     | 
    
         
             
                /// @dev confirms the specified claim and specifies the payout amount
         
     | 
| 
       63 
71 
     | 
    
         
             
                /// function can only be called by product, policy needs to match with calling product
         
     | 
| 
       64 
72 
     | 
    
         
             
                function confirm(
         
     | 
| 
         @@ -77,7 +85,8 @@ interface IClaimService is 
     | 
|
| 
       77 
85 
     | 
    
         
             
                ) external;
         
     | 
| 
       78 
86 
     | 
    
         | 
| 
       79 
87 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
                /// @dev  
     | 
| 
      
 88 
     | 
    
         
            +
                /// @dev Creates a new payout for the specified claim.
         
     | 
| 
      
 89 
     | 
    
         
            +
                /// The beneficiary is the holder of the policy NFT
         
     | 
| 
       81 
90 
     | 
    
         
             
                /// returns the id of the newly created payout, this id is unique for the specified policy
         
     | 
| 
       82 
91 
     | 
    
         
             
                /// function can only be called by product, policy needs to match with calling product
         
     | 
| 
       83 
92 
     | 
    
         
             
                function createPayout(
         
     | 
| 
         @@ -90,6 +99,20 @@ interface IClaimService is 
     | 
|
| 
       90 
99 
     | 
    
         
             
                    returns (PayoutId payoutId);
         
     | 
| 
       91 
100 
     | 
    
         | 
| 
       92 
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 
     | 
    
         
            +
             
     | 
| 
       93 
116 
     | 
    
         
             
                /// @dev processes the specified payout
         
     | 
| 
       94 
117 
     | 
    
         
             
                /// this includes moving the payout token to the beneficiary (default: policy holder)
         
     | 
| 
       95 
118 
     | 
    
         
             
                /// function can only be called by product, policy needs to match with calling product
         
     | 
| 
         @@ -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);
         
     | 
| 
         @@ -19,11 +27,11 @@ interface IPolicyService is IService { 
     | 
|
| 
       19 
27 
     | 
    
         
             
                error ErrorPolicyServiceAllowanceInsufficient(address policyOwner, address tokenHandler, uint256 premiumAmount, uint256 allowance);
         
     | 
| 
       20 
28 
     | 
    
         | 
| 
       21 
29 
     | 
    
         
             
                error ErrorPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
         
     | 
| 
       22 
     | 
    
         
            -
                error ErrorPolicyServicePremiumAlreadyPaid(NftId policyNftId 
     | 
| 
      
 30 
     | 
    
         
            +
                error ErrorPolicyServicePremiumAlreadyPaid(NftId policyNftId);
         
     | 
| 
       23 
31 
     | 
    
         
             
                error ErrorPolicyServicePolicyNotActivated(NftId policyNftId);
         
     | 
| 
       24 
32 
     | 
    
         
             
                error ErrorPolicyServicePolicyAlreadyClosed(NftId policyNftId);
         
     | 
| 
       25 
33 
     | 
    
         
             
                error ErrorPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
         
     | 
| 
       26 
     | 
    
         
            -
                error  
     | 
| 
      
 34 
     | 
    
         
            +
                error ErrorPolicyServicePremiumNotPaid(NftId policyNftId, Amount premiumAmount);
         
     | 
| 
       27 
35 
     | 
    
         
             
                error ErrorPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
         
     | 
| 
       28 
36 
     | 
    
         
             
                error ErrorPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
         
     | 
| 
       29 
37 
     | 
    
         
             
                error ErrorPolicyServicePolicyExpirationTooLate(NftId policyNftId, Timestamp upperLimit, Timestamp expiredAt);
         
     | 
| 
         @@ -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. 
         
     | 
| 
         @@ -65,6 +70,8 @@ interface IPolicyService is IService { 
     | 
|
| 
       65 
70 
     | 
    
         
             
                /// @return expiredAt the effective expiry date
         
     | 
| 
       66 
71 
     | 
    
         
             
                function expire(NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
         
     | 
| 
       67 
72 
     | 
    
         | 
| 
      
 73 
     | 
    
         
            +
                function expirePolicy(IInstance instance, NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
       68 
75 
     | 
    
         
             
                /// @dev closes the specified policy and sets the closed data in the policy metadata
         
     | 
| 
       69 
76 
     | 
    
         
             
                /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
         
     | 
| 
       70 
77 
     | 
    
         
             
                /// 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,
         
     | 
| 
         @@ -2,9 +2,11 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            import {Amount} from "../type/Amount.sol";
         
     | 
| 
      
 5 
     | 
    
         
            +
            import {ClaimId} from "../type/ClaimId.sol";
         
     | 
| 
       5 
6 
     | 
    
         
             
            import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
         
     | 
| 
       6 
7 
     | 
    
         
             
            import {IComponents} from "../instance/module/IComponents.sol";
         
     | 
| 
       7 
8 
     | 
    
         
             
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
      
 9 
     | 
    
         
            +
            import {ObjectType} from "../type/ObjectType.sol";
         
     | 
| 
       8 
10 
     | 
    
         
             
            import {ReferralId} from "../type/Referral.sol";
         
     | 
| 
       9 
11 
     | 
    
         
             
            import {RiskId} from "../type/RiskId.sol";
         
     | 
| 
       10 
12 
     | 
    
         
             
            import {Seconds} from "../type/Seconds.sol";
         
     | 
| 
         @@ -13,6 +15,23 @@ interface IProductComponent is 
     | 
|
| 
       13 
15 
     | 
    
         
             
                IInstanceLinkedComponent
         
     | 
| 
       14 
16 
     | 
    
         
             
            {
         
     | 
| 
       15 
17 
     | 
    
         | 
| 
      
 18 
     | 
    
         
            +
                // @dev register a new component for this product cluster.
         
     | 
| 
      
 19 
     | 
    
         
            +
                function registerComponent(address component)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    external
         
     | 
| 
      
 21 
     | 
    
         
            +
                    returns (NftId componentNftId);
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                /// @dev Callback function to inform product compnent about arrival of funding for a claim.
         
     | 
| 
      
 24 
     | 
    
         
            +
                /// The callback is called by the pool service after the corresponding pool triggers this function.
         
     | 
| 
      
 25 
     | 
    
         
            +
                /// The callback is only called when the product's property isProcessingFundedClaims is set.
         
     | 
| 
      
 26 
     | 
    
         
            +
                function processFundedClaim(
         
     | 
| 
      
 27 
     | 
    
         
            +
                    NftId policyNftId, 
         
     | 
| 
      
 28 
     | 
    
         
            +
                    ClaimId claimId, 
         
     | 
| 
      
 29 
     | 
    
         
            +
                    Amount availableAmount
         
     | 
| 
      
 30 
     | 
    
         
            +
                ) external;
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                /// @dev Calculates the premium amount for the provided application data.
         
     | 
| 
      
 34 
     | 
    
         
            +
                /// The returned premium amounts takes into account potential discounts and fees.
         
     | 
| 
       16 
35 
     | 
    
         
             
                function calculatePremium(
         
     | 
| 
       17 
36 
     | 
    
         
             
                    Amount sumInsuredAmount,
         
     | 
| 
       18 
37 
     | 
    
         
             
                    RiskId riskId,
         
     | 
| 
         @@ -22,6 +41,10 @@ interface IProductComponent is 
     | 
|
| 
       22 
41 
     | 
    
         
             
                    ReferralId referralId
         
     | 
| 
       23 
42 
     | 
    
         
             
                ) external view returns (Amount premiumAmount);
         
     | 
| 
       24 
43 
     | 
    
         | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                /// @dev Calculates the net premium amount for the provided application data.
         
     | 
| 
      
 46 
     | 
    
         
            +
                /// The returned net premium amounts only covers the cost of collateralizing the application.
         
     | 
| 
      
 47 
     | 
    
         
            +
                /// This amount purely depends on the use case specific risk and does not include any fees/commission.
         
     | 
| 
       25 
48 
     | 
    
         
             
                function calculateNetPremium(
         
     | 
| 
       26 
49 
     | 
    
         
             
                    Amount sumInsuredAmount,
         
     | 
| 
       27 
50 
     | 
    
         
             
                    RiskId riskId,
         
     | 
| 
         @@ -29,9 +52,6 @@ interface IProductComponent is 
     | 
|
| 
       29 
52 
     | 
    
         
             
                    bytes memory applicationData
         
     | 
| 
       30 
53 
     | 
    
         
             
                ) external view returns (Amount netPremiumAmount);    
         
     | 
| 
       31 
54 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                function getPoolNftId() external view returns (NftId poolNftId);
         
     | 
| 
       33 
     | 
    
         
            -
                function getDistributionNftId() external view returns (NftId distributionNftId);
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
55 
     | 
    
         | 
| 
       36 
56 
     | 
    
         
             
                /// @dev returns initial pool specific infos for this pool
         
     | 
| 
       37 
57 
     | 
    
         
             
                function getInitialProductInfo() external view returns (IComponents.ProductInfo memory info);
         
     | 
| 
         @@ -12,8 +12,7 @@ import {Timestamp} from "../type/Timestamp.sol"; 
     | 
|
| 
       12 
12 
     | 
    
         
             
            import {UFixed} from "../type/UFixed.sol";
         
     | 
| 
       13 
13 
     | 
    
         
             
            import {Fee} from "../type/Fee.sol";
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
            interface IProductService is IService {
         
     | 
| 
      
 15 
     | 
    
         
            +
            interface IRiskService is IService {
         
     | 
| 
       17 
16 
     | 
    
         | 
| 
       18 
17 
     | 
    
         
             
                function createRisk(
         
     | 
| 
       19 
18 
     | 
    
         
             
                    RiskId riskId,
         
     | 
| 
         @@ -14,13 +14,14 @@ import {TokenHandler} from "../shared/TokenHandler.sol"; 
     | 
|
| 
       14 
14 
     | 
    
         
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         
     | 
| 
       15 
15 
     | 
    
         
             
            import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
         
     | 
| 
       16 
16 
     | 
    
         
             
            import {ObjectType, APPLICATION, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
         
     | 
| 
       17 
     | 
    
         
            -
            import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED} from "../type/StateId.sol";
         
     | 
| 
       18 
     | 
    
         
            -
            import {NftId 
     | 
| 
      
 17 
     | 
    
         
            +
            import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED, PAID} from "../type/StateId.sol";
         
     | 
| 
      
 18 
     | 
    
         
            +
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
       19 
19 
     | 
    
         
             
            import {ReferralId} from "../type/Referral.sol";
         
     | 
| 
       20 
20 
     | 
    
         
             
            import {StateId} from "../type/StateId.sol";
         
     | 
| 
       21 
21 
     | 
    
         
             
            import {VersionPart} from "../type/Version.sol";
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         
     | 
| 
      
 24 
     | 
    
         
            +
            import {ContractLib} from "../shared/ContractLib.sol";
         
     | 
| 
       24 
25 
     | 
    
         
             
            import {IApplicationService} from "./IApplicationService.sol";
         
     | 
| 
       25 
26 
     | 
    
         
             
            import {IBundleService} from "../pool/IBundleService.sol";
         
     | 
| 
       26 
27 
     | 
    
         
             
            import {IClaimService} from "./IClaimService.sol";
         
     | 
| 
         @@ -28,6 +29,7 @@ import {IComponentService} from "../shared/IComponentService.sol"; 
     | 
|
| 
       28 
29 
     | 
    
         
             
            import {IDistributionService} from "../distribution/IDistributionService.sol";
         
     | 
| 
       29 
30 
     | 
    
         
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         
     | 
| 
       30 
31 
     | 
    
         
             
            import {InstanceStore} from "../instance/InstanceStore.sol";
         
     | 
| 
      
 32 
     | 
    
         
            +
            import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
         
     | 
| 
       31 
33 
     | 
    
         
             
            import {IPolicyService} from "./IPolicyService.sol";
         
     | 
| 
       32 
34 
     | 
    
         
             
            import {IPoolService} from "../pool/IPoolService.sol";
         
     | 
| 
       33 
35 
     | 
    
         
             
            import {IPricingService} from "./IPricingService.sol";
         
     | 
| 
         @@ -36,19 +38,11 @@ contract PolicyService is 
     | 
|
| 
       36 
38 
     | 
    
         
             
                ComponentVerifyingService, 
         
     | 
| 
       37 
39 
     | 
    
         
             
                IPolicyService
         
     | 
| 
       38 
40 
     | 
    
         
             
            {
         
     | 
| 
       39 
     | 
    
         
            -
                using NftIdLib for NftId;
         
     | 
| 
       40 
     | 
    
         
            -
                using TimestampLib for Timestamp;
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                IApplicationService internal _applicationService;
         
     | 
| 
       43 
41 
     | 
    
         
             
                IComponentService internal _componentService;
         
     | 
| 
       44 
     | 
    
         
            -
                IBundleService internal _bundleService;
         
     | 
| 
       45 
     | 
    
         
            -
                IClaimService internal _claimService;
         
     | 
| 
       46 
42 
     | 
    
         
             
                IDistributionService internal _distributionService;
         
     | 
| 
       47 
43 
     | 
    
         
             
                IPoolService internal _poolService;
         
     | 
| 
       48 
44 
     | 
    
         
             
                IPricingService internal _pricingService;
         
     | 
| 
       49 
45 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                event LogProductServiceSender(address sender);
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
46 
     | 
    
         
             
                function _initialize(
         
     | 
| 
       53 
47 
     | 
    
         
             
                    address owner, 
         
     | 
| 
       54 
48 
     | 
    
         
             
                    bytes memory data
         
     | 
| 
         @@ -58,23 +52,19 @@ contract PolicyService is 
     | 
|
| 
       58 
52 
     | 
    
         
             
                    initializer
         
     | 
| 
       59 
53 
     | 
    
         
             
                {
         
     | 
| 
       60 
54 
     | 
    
         
             
                    (
         
     | 
| 
       61 
     | 
    
         
            -
                        address registryAddress 
     | 
| 
       62 
     | 
    
         
            -
                        //address managerAddress
         
     | 
| 
      
 55 
     | 
    
         
            +
                        address registryAddress,
         
     | 
| 
       63 
56 
     | 
    
         
             
                        address authority
         
     | 
| 
       64 
     | 
    
         
            -
                    ) = abi.decode(data, (address, address 
     | 
| 
      
 57 
     | 
    
         
            +
                    ) = abi.decode(data, (address, address));
         
     | 
| 
       65 
58 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
                     
     | 
| 
      
 59 
     | 
    
         
            +
                    _initializeService(registryAddress, authority, owner);
         
     | 
| 
       67 
60 
     | 
    
         | 
| 
       68 
61 
     | 
    
         
             
                    VersionPart majorVersion = getVersion().toMajorPart();
         
     | 
| 
       69 
     | 
    
         
            -
                    _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
         
     | 
| 
       70 
     | 
    
         
            -
                    _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
         
     | 
| 
       71 
62 
     | 
    
         
             
                    _componentService = IComponentService(getRegistry().getServiceAddress(COMPONENT(), majorVersion));
         
     | 
| 
       72 
     | 
    
         
            -
                    _claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
         
     | 
| 
       73 
63 
     | 
    
         
             
                    _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
         
     | 
| 
       74 
64 
     | 
    
         
             
                    _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
         
     | 
| 
       75 
65 
     | 
    
         
             
                    _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
         
     | 
| 
       76 
66 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
                     
     | 
| 
      
 67 
     | 
    
         
            +
                    _registerInterface(type(IPolicyService).interfaceId);
         
     | 
| 
       78 
68 
     | 
    
         
             
                }
         
     | 
| 
       79 
69 
     | 
    
         | 
| 
       80 
70 
     | 
    
         | 
| 
         @@ -82,8 +72,11 @@ contract PolicyService is 
     | 
|
| 
       82 
72 
     | 
    
         
             
                    NftId applicationNftId // = policyNftId
         
     | 
| 
       83 
73 
     | 
    
         
             
                )
         
     | 
| 
       84 
74 
     | 
    
         
             
                    external
         
     | 
| 
       85 
     | 
    
         
            -
                    virtual 
     | 
| 
      
 75 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 76 
     | 
    
         
            +
                    nonReentrant()
         
     | 
| 
       86 
77 
     | 
    
         
             
                {
         
     | 
| 
      
 78 
     | 
    
         
            +
                    _checkNftType(applicationNftId, POLICY());
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
       87 
80 
     | 
    
         
             
                    (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         
     | 
| 
       88 
81 
     | 
    
         
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         
     | 
| 
       89 
82 
     | 
    
         | 
| 
         @@ -117,8 +110,11 @@ contract PolicyService is 
     | 
|
| 
       117 
110 
     | 
    
         
             
                    Timestamp activateAt
         
     | 
| 
       118 
111 
     | 
    
         
             
                )
         
     | 
| 
       119 
112 
     | 
    
         
             
                    external 
         
     | 
| 
       120 
     | 
    
         
            -
                    virtual 
     | 
| 
      
 113 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 114 
     | 
    
         
            +
                    nonReentrant()
         
     | 
| 
       121 
115 
     | 
    
         
             
                {
         
     | 
| 
      
 116 
     | 
    
         
            +
                    _checkNftType(applicationNftId, POLICY());
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
       122 
118 
     | 
    
         
             
                    // check caller is registered product
         
     | 
| 
       123 
119 
     | 
    
         
             
                    (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         
     | 
| 
       124 
120 
     | 
    
         
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         
     | 
| 
         @@ -177,16 +173,21 @@ contract PolicyService is 
     | 
|
| 
       177 
173 
     | 
    
         
             
                    // update referral counter 
         
     | 
| 
       178 
174 
     | 
    
         
             
                    {
         
     | 
| 
       179 
175 
     | 
    
         
             
                        IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
                             
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                        if (! productInfo.distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product    
         
     | 
| 
      
 178 
     | 
    
         
            +
                            _distributionService.processReferral(
         
     | 
| 
      
 179 
     | 
    
         
            +
                                productInfo.distributionNftId, 
         
     | 
| 
      
 180 
     | 
    
         
            +
                                applicationInfo.referralId);
         
     | 
| 
      
 181 
     | 
    
         
            +
                        }
         
     | 
| 
       183 
182 
     | 
    
         
             
                    }
         
     | 
| 
       184 
     | 
    
         
            -
                    
         
     | 
| 
       185 
     | 
    
         
            -
                    // TODO add calling pool contract if it needs to validate application
         
     | 
| 
       186 
183 
     | 
    
         | 
| 
       187 
     | 
    
         
            -
                    //  
     | 
| 
      
 184 
     | 
    
         
            +
                    // log policy creation before interactions with token and policy holder
         
     | 
| 
      
 185 
     | 
    
         
            +
                    emit LogPolicyServicePolicyCreated(applicationNftId, premium.premiumAmount, activateAt);
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
                    // TODO add calling pool contract if it needs to validate application
         
     | 
| 
       188 
188 
     | 
    
         | 
| 
       189 
     | 
    
         
            -
                    //  
     | 
| 
      
 189 
     | 
    
         
            +
                    // callback to policy holder if applicable
         
     | 
| 
      
 190 
     | 
    
         
            +
                    _policyHolderPolicyActivated(applicationNftId, activateAt);
         
     | 
| 
       190 
191 
     | 
    
         
             
                }
         
     | 
| 
       191 
192 
     | 
    
         | 
| 
       192 
193 
     | 
    
         | 
| 
         @@ -197,7 +198,10 @@ contract PolicyService is 
     | 
|
| 
       197 
198 
     | 
    
         
             
                )
         
     | 
| 
       198 
199 
     | 
    
         
             
                    external 
         
     | 
| 
       199 
200 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 201 
     | 
    
         
            +
                    nonReentrant()
         
     | 
| 
       200 
202 
     | 
    
         
             
                {
         
     | 
| 
      
 203 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
       201 
205 
     | 
    
         
             
                    // check caller is registered product
         
     | 
| 
       202 
206 
     | 
    
         
             
                    (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         
     | 
| 
       203 
207 
     | 
    
         
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         
     | 
| 
         @@ -208,16 +212,14 @@ contract PolicyService is 
     | 
|
| 
       208 
212 
     | 
    
         
             
                        revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
         
     | 
| 
       209 
213 
     | 
    
         
             
                    }
         
     | 
| 
       210 
214 
     | 
    
         | 
| 
       211 
     | 
    
         
            -
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         
     | 
| 
       212 
     | 
    
         
            -
             
     | 
| 
       213 
215 
     | 
    
         
             
                    // check if premium is already collected
         
     | 
| 
       214 
     | 
    
         
            -
                    if ( 
     | 
| 
       215 
     | 
    
         
            -
                        revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId 
     | 
| 
      
 216 
     | 
    
         
            +
                    if (instanceReader.getPremiumInfoState(policyNftId) == PAID()) {
         
     | 
| 
      
 217 
     | 
    
         
            +
                        revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId);
         
     | 
| 
       216 
218 
     | 
    
         
             
                    }
         
     | 
| 
       217 
219 
     | 
    
         | 
| 
      
 220 
     | 
    
         
            +
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         
     | 
| 
       218 
221 
     | 
    
         
             
                    IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId); 
         
     | 
| 
       219 
     | 
    
         
            -
                     
     | 
| 
       220 
     | 
    
         
            -
             
     | 
| 
      
 222 
     | 
    
         
            +
                    
         
     | 
| 
       221 
223 
     | 
    
         
             
                    _processPremium(
         
     | 
| 
       222 
224 
     | 
    
         
             
                        instance,
         
     | 
| 
       223 
225 
     | 
    
         
             
                        policyNftId,
         
     | 
| 
         @@ -230,16 +232,22 @@ contract PolicyService is 
     | 
|
| 
       230 
232 
     | 
    
         
             
                    }
         
     | 
| 
       231 
233 
     | 
    
         | 
| 
       232 
234 
     | 
    
         
             
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
      
 235 
     | 
    
         
            +
                    instance.getInstanceStore().updatePremiumState(policyNftId, PAID());
         
     | 
| 
       233 
236 
     | 
    
         | 
| 
       234 
     | 
    
         
            -
                    //  
     | 
| 
      
 237 
     | 
    
         
            +
                    // log premium collection before interactions with token
         
     | 
| 
      
 238 
     | 
    
         
            +
                    emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
         
     | 
| 
       235 
239 
     | 
    
         | 
| 
       236 
240 
     | 
    
         
             
                    _transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
         
     | 
| 
       237 
     | 
    
         
            -
             
     | 
| 
       238 
     | 
    
         
            -
                    // TODO: add callback IPolicyHolder.policyActivated() if applicable
         
     | 
| 
       239 
241 
     | 
    
         
             
                }
         
     | 
| 
       240 
242 
     | 
    
         | 
| 
       241 
243 
     | 
    
         
             
                /// @inheritdoc IPolicyService
         
     | 
| 
       242 
     | 
    
         
            -
                function activate(NftId policyNftId, Timestamp activateAt) 
     | 
| 
      
 244 
     | 
    
         
            +
                function activate(NftId policyNftId, Timestamp activateAt)
         
     | 
| 
      
 245 
     | 
    
         
            +
                    external
         
     | 
| 
      
 246 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 247 
     | 
    
         
            +
                    nonReentrant()
         
     | 
| 
      
 248 
     | 
    
         
            +
                {
         
     | 
| 
      
 249 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 250 
     | 
    
         
            +
             
     | 
| 
       243 
251 
     | 
    
         
             
                    // check caller is registered product
         
     | 
| 
       244 
252 
     | 
    
         
             
                    (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         
     | 
| 
       245 
253 
     | 
    
         
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         
     | 
| 
         @@ -249,9 +257,11 @@ contract PolicyService is 
     | 
|
| 
       249 
257 
     | 
    
         | 
| 
       250 
258 
     | 
    
         
             
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
       251 
259 
     | 
    
         | 
| 
       252 
     | 
    
         
            -
                    //  
     | 
| 
      
 260 
     | 
    
         
            +
                    // log policy activation before interactions with policy holder
         
     | 
| 
      
 261 
     | 
    
         
            +
                    emit LogPolicyServicePolicyActivated(policyNftId, activateAt);
         
     | 
| 
       253 
262 
     | 
    
         | 
| 
       254 
     | 
    
         
            -
                    //  
     | 
| 
      
 263 
     | 
    
         
            +
                    // callback to policy holder if applicable
         
     | 
| 
      
 264 
     | 
    
         
            +
                    _policyHolderPolicyActivated(policyNftId, activateAt);
         
     | 
| 
       255 
265 
     | 
    
         
             
                }
         
     | 
| 
       256 
266 
     | 
    
         | 
| 
       257 
267 
     | 
    
         | 
| 
         @@ -261,15 +271,16 @@ contract PolicyService is 
     | 
|
| 
       261 
271 
     | 
    
         
             
                    Timestamp expireAt
         
     | 
| 
       262 
272 
     | 
    
         
             
                )
         
     | 
| 
       263 
273 
     | 
    
         
             
                    external
         
     | 
| 
       264 
     | 
    
         
            -
                    override
         
     | 
| 
       265 
274 
     | 
    
         
             
                    virtual
         
     | 
| 
      
 275 
     | 
    
         
            +
                    nonReentrant()
         
     | 
| 
       266 
276 
     | 
    
         
             
                    returns (Timestamp expiredAt)
         
     | 
| 
       267 
277 
     | 
    
         
             
                {
         
     | 
| 
       268 
     | 
    
         
            -
                    ( 
     | 
| 
       269 
     | 
    
         
            -
                    InstanceReader instanceReader = instance.getInstanceReader();
         
     | 
| 
      
 278 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
       270 
279 
     | 
    
         | 
| 
      
 280 
     | 
    
         
            +
                    (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         
     | 
| 
      
 281 
     | 
    
         
            +
                    
         
     | 
| 
       271 
282 
     | 
    
         
             
                    // check policy matches with calling product
         
     | 
| 
       272 
     | 
    
         
            -
                    IPolicy.PolicyInfo memory policyInfo =  
     | 
| 
      
 283 
     | 
    
         
            +
                    IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
         
     | 
| 
       273 
284 
     | 
    
         
             
                    if(policyInfo.productNftId != productNftId) {
         
     | 
| 
       274 
285 
     | 
    
         
             
                        revert ErrorPolicyServicePolicyProductMismatch(
         
     | 
| 
       275 
286 
     | 
    
         
             
                            policyNftId, 
         
     | 
| 
         @@ -277,8 +288,46 @@ contract PolicyService is 
     | 
|
| 
       277 
288 
     | 
    
         
             
                            productNftId);
         
     | 
| 
       278 
289 
     | 
    
         
             
                    }
         
     | 
| 
       279 
290 
     | 
    
         | 
| 
      
 291 
     | 
    
         
            +
                    return _expire(
         
     | 
| 
      
 292 
     | 
    
         
            +
                        instance,
         
     | 
| 
      
 293 
     | 
    
         
            +
                        policyNftId,
         
     | 
| 
      
 294 
     | 
    
         
            +
                        expireAt
         
     | 
| 
      
 295 
     | 
    
         
            +
                    );
         
     | 
| 
      
 296 
     | 
    
         
            +
                }
         
     | 
| 
      
 297 
     | 
    
         
            +
             
     | 
| 
      
 298 
     | 
    
         
            +
                /// @inheritdoc IPolicyService
         
     | 
| 
      
 299 
     | 
    
         
            +
                function expirePolicy(
         
     | 
| 
      
 300 
     | 
    
         
            +
                    IInstance instance,
         
     | 
| 
      
 301 
     | 
    
         
            +
                    NftId policyNftId,
         
     | 
| 
      
 302 
     | 
    
         
            +
                    Timestamp expireAt
         
     | 
| 
      
 303 
     | 
    
         
            +
                )
         
     | 
| 
      
 304 
     | 
    
         
            +
                    external
         
     | 
| 
      
 305 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 306 
     | 
    
         
            +
                    nonReentrant()
         
     | 
| 
      
 307 
     | 
    
         
            +
                    returns (Timestamp expiredAt)
         
     | 
| 
      
 308 
     | 
    
         
            +
                {
         
     | 
| 
      
 309 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 310 
     | 
    
         
            +
             
     | 
| 
      
 311 
     | 
    
         
            +
                    return _expire(
         
     | 
| 
      
 312 
     | 
    
         
            +
                        instance,
         
     | 
| 
      
 313 
     | 
    
         
            +
                        policyNftId,
         
     | 
| 
      
 314 
     | 
    
         
            +
                        expireAt
         
     | 
| 
      
 315 
     | 
    
         
            +
                    );
         
     | 
| 
      
 316 
     | 
    
         
            +
                }
         
     | 
| 
      
 317 
     | 
    
         
            +
             
     | 
| 
      
 318 
     | 
    
         
            +
                function _expire(
         
     | 
| 
      
 319 
     | 
    
         
            +
                    IInstance instance,
         
     | 
| 
      
 320 
     | 
    
         
            +
                    NftId policyNftId,
         
     | 
| 
      
 321 
     | 
    
         
            +
                    Timestamp expireAt
         
     | 
| 
      
 322 
     | 
    
         
            +
                )
         
     | 
| 
      
 323 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 324 
     | 
    
         
            +
                    returns (Timestamp expiredAt)
         
     | 
| 
      
 325 
     | 
    
         
            +
                {
         
     | 
| 
      
 326 
     | 
    
         
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         
     | 
| 
      
 327 
     | 
    
         
            +
                    
         
     | 
| 
       280 
328 
     | 
    
         
             
                    // check policy is active
         
     | 
| 
       281 
329 
     | 
    
         
             
                    StateId policyState = instanceReader.getPolicyState(policyNftId);
         
     | 
| 
      
 330 
     | 
    
         
            +
                    IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
         
     | 
| 
       282 
331 
     | 
    
         
             
                    if (!_policyHasBeenActivated(policyState, policyInfo)) {
         
     | 
| 
       283 
332 
     | 
    
         
             
                        revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
         
     | 
| 
       284 
333 
     | 
    
         
             
                    }
         
     | 
| 
         @@ -300,12 +349,14 @@ contract PolicyService is 
     | 
|
| 
       300 
349 
     | 
    
         
             
                    }
         
     | 
| 
       301 
350 
     | 
    
         | 
| 
       302 
351 
     | 
    
         
             
                    // update policyInfo with new expiredAt timestamp
         
     | 
| 
      
 352 
     | 
    
         
            +
                    Timestamp originalExpiredAt = policyInfo.expiredAt;
         
     | 
| 
       303 
353 
     | 
    
         
             
                    policyInfo.expiredAt = expiredAt;
         
     | 
| 
       304 
354 
     | 
    
         
             
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
         
     | 
| 
       305 
355 
     | 
    
         | 
| 
       306 
     | 
    
         
            -
                    emit LogPolicyServicePolicyExpirationUpdated(policyNftId, expiredAt);
         
     | 
| 
      
 356 
     | 
    
         
            +
                    emit LogPolicyServicePolicyExpirationUpdated(policyNftId, originalExpiredAt, expiredAt);
         
     | 
| 
       307 
357 
     | 
    
         | 
| 
       308 
     | 
    
         
            -
                    //  
     | 
| 
      
 358 
     | 
    
         
            +
                    // callback to policy holder if applicable
         
     | 
| 
      
 359 
     | 
    
         
            +
                    _policyHolderPolicyExpired(policyNftId, expiredAt);
         
     | 
| 
       309 
360 
     | 
    
         
             
                }
         
     | 
| 
       310 
361 
     | 
    
         | 
| 
       311 
362 
     | 
    
         | 
| 
         @@ -313,8 +364,11 @@ contract PolicyService is 
     | 
|
| 
       313 
364 
     | 
    
         
             
                    NftId policyNftId
         
     | 
| 
       314 
365 
     | 
    
         
             
                )
         
     | 
| 
       315 
366 
     | 
    
         
             
                    external 
         
     | 
| 
       316 
     | 
    
         
            -
                     
     | 
| 
      
 367 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 368 
     | 
    
         
            +
                    nonReentrant()
         
     | 
| 
       317 
369 
     | 
    
         
             
                {
         
     | 
| 
      
 370 
     | 
    
         
            +
                    _checkNftType(policyNftId, POLICY());
         
     | 
| 
      
 371 
     | 
    
         
            +
                    
         
     | 
| 
       318 
372 
     | 
    
         
             
                    (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         
     | 
| 
       319 
373 
     | 
    
         
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         
     | 
| 
       320 
374 
     | 
    
         | 
| 
         @@ -337,8 +391,8 @@ contract PolicyService is 
     | 
|
| 
       337 
391 
     | 
    
         | 
| 
       338 
392 
     | 
    
         
             
                    // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
         
     | 
| 
       339 
393 
     | 
    
         
             
                    // TODO consider to remove requirement for fully paid premiums altogether
         
     | 
| 
       340 
     | 
    
         
            -
                    if (! 
     | 
| 
       341 
     | 
    
         
            -
                        revert  
     | 
| 
      
 394 
     | 
    
         
            +
                    if (! instanceReader.getPremiumInfoState(policyNftId).eq(PAID())) {
         
     | 
| 
      
 395 
     | 
    
         
            +
                        revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
         
     | 
| 
       342 
396 
     | 
    
         
             
                    }
         
     | 
| 
       343 
397 
     | 
    
         | 
| 
       344 
398 
     | 
    
         
             
                    // release (remaining) collateral that was blocked by policy
         
     | 
| 
         @@ -354,7 +408,7 @@ contract PolicyService is 
     | 
|
| 
       354 
408 
     | 
    
         
             
                    policyInfo.closedAt = TimestampLib.blockTimestamp();
         
     | 
| 
       355 
409 
     | 
    
         
             
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
         
     | 
| 
       356 
410 
     | 
    
         | 
| 
       357 
     | 
    
         
            -
                     
     | 
| 
      
 411 
     | 
    
         
            +
                    emit LogPolicyServicePolicyClosed(policyNftId);
         
     | 
| 
       358 
412 
     | 
    
         
             
                }
         
     | 
| 
       359 
413 
     | 
    
         | 
| 
       360 
414 
     | 
    
         | 
| 
         @@ -442,10 +496,12 @@ contract PolicyService is 
     | 
|
| 
       442 
496 
     | 
    
         
             
                        premium.productFeeVarAmount + premium.productFeeFixAmount);
         
     | 
| 
       443 
497 
     | 
    
         | 
| 
       444 
498 
     | 
    
         
             
                    // update distribution fees and distributor commission and pool fees 
         
     | 
| 
       445 
     | 
    
         
            -
                     
     | 
| 
       446 
     | 
    
         
            -
                         
     | 
| 
       447 
     | 
    
         
            -
             
     | 
| 
       448 
     | 
    
         
            -
             
     | 
| 
      
 499 
     | 
    
         
            +
                    if (!distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
         
     | 
| 
      
 500 
     | 
    
         
            +
                        _distributionService.processSale(
         
     | 
| 
      
 501 
     | 
    
         
            +
                            distributionNftId, 
         
     | 
| 
      
 502 
     | 
    
         
            +
                            referralId, 
         
     | 
| 
      
 503 
     | 
    
         
            +
                            premium);
         
     | 
| 
      
 504 
     | 
    
         
            +
                    }
         
     | 
| 
       449 
505 
     | 
    
         | 
| 
       450 
506 
     | 
    
         
             
                    // update pool and bundle fees 
         
     | 
| 
       451 
507 
     | 
    
         
             
                    _poolService.processSale(
         
     | 
| 
         @@ -528,6 +584,64 @@ contract PolicyService is 
     | 
|
| 
       528 
584 
     | 
    
         
             
                }
         
     | 
| 
       529 
585 
     | 
    
         | 
| 
       530 
586 
     | 
    
         | 
| 
      
 587 
     | 
    
         
            +
                function _policyHolderPolicyActivated(
         
     | 
| 
      
 588 
     | 
    
         
            +
                    NftId policyNftId,
         
     | 
| 
      
 589 
     | 
    
         
            +
                    Timestamp activateAt
         
     | 
| 
      
 590 
     | 
    
         
            +
                )
         
     | 
| 
      
 591 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 592 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 593 
     | 
    
         
            +
                {
         
     | 
| 
      
 594 
     | 
    
         
            +
                    // immediately return if policy is not activated
         
     | 
| 
      
 595 
     | 
    
         
            +
                    if (activateAt.eqz()) {
         
     | 
| 
      
 596 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 597 
     | 
    
         
            +
                    }
         
     | 
| 
      
 598 
     | 
    
         
            +
             
     | 
| 
      
 599 
     | 
    
         
            +
                    // get policy holder address
         
     | 
| 
      
 600 
     | 
    
         
            +
                    IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
         
     | 
| 
      
 601 
     | 
    
         
            +
             
     | 
| 
      
 602 
     | 
    
         
            +
                    // execute callback if policy holder implements IPolicyHolder
         
     | 
| 
      
 603 
     | 
    
         
            +
                    if (address(policyHolder) != address(0)) {
         
     | 
| 
      
 604 
     | 
    
         
            +
                        policyHolder.policyActivated(policyNftId, activateAt);
         
     | 
| 
      
 605 
     | 
    
         
            +
                    }
         
     | 
| 
      
 606 
     | 
    
         
            +
                }
         
     | 
| 
      
 607 
     | 
    
         
            +
             
     | 
| 
      
 608 
     | 
    
         
            +
             
     | 
| 
      
 609 
     | 
    
         
            +
                function _policyHolderPolicyExpired(
         
     | 
| 
      
 610 
     | 
    
         
            +
                    NftId policyNftId,
         
     | 
| 
      
 611 
     | 
    
         
            +
                    Timestamp expiredAt
         
     | 
| 
      
 612 
     | 
    
         
            +
                )
         
     | 
| 
      
 613 
     | 
    
         
            +
                    internal
         
     | 
| 
      
 614 
     | 
    
         
            +
                    virtual
         
     | 
| 
      
 615 
     | 
    
         
            +
                {
         
     | 
| 
      
 616 
     | 
    
         
            +
                    // immediately return if policy is not activated
         
     | 
| 
      
 617 
     | 
    
         
            +
                    if (expiredAt.eqz()) {
         
     | 
| 
      
 618 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 619 
     | 
    
         
            +
                    }
         
     | 
| 
      
 620 
     | 
    
         
            +
             
     | 
| 
      
 621 
     | 
    
         
            +
                    // get policy holder address
         
     | 
| 
      
 622 
     | 
    
         
            +
                    IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
         
     | 
| 
      
 623 
     | 
    
         
            +
             
     | 
| 
      
 624 
     | 
    
         
            +
                    // execute callback if policy holder implements IPolicyHolder
         
     | 
| 
      
 625 
     | 
    
         
            +
                    if (address(policyHolder) != address(0)) {
         
     | 
| 
      
 626 
     | 
    
         
            +
                        policyHolder.policyExpired(policyNftId, expiredAt);
         
     | 
| 
      
 627 
     | 
    
         
            +
                    }
         
     | 
| 
      
 628 
     | 
    
         
            +
                }
         
     | 
| 
      
 629 
     | 
    
         
            +
             
     | 
| 
      
 630 
     | 
    
         
            +
             
     | 
| 
      
 631 
     | 
    
         
            +
                function _getPolicyHolder(NftId policyNftId)
         
     | 
| 
      
 632 
     | 
    
         
            +
                    internal 
         
     | 
| 
      
 633 
     | 
    
         
            +
                    view 
         
     | 
| 
      
 634 
     | 
    
         
            +
                    returns (IPolicyHolder policyHolder)
         
     | 
| 
      
 635 
     | 
    
         
            +
                {
         
     | 
| 
      
 636 
     | 
    
         
            +
                    address policyHolderAddress = getRegistry().ownerOf(policyNftId);
         
     | 
| 
      
 637 
     | 
    
         
            +
                    policyHolder = IPolicyHolder(policyHolderAddress);
         
     | 
| 
      
 638 
     | 
    
         
            +
             
     | 
| 
      
 639 
     | 
    
         
            +
                    if (!ContractLib.isPolicyHolder(policyHolderAddress)) {
         
     | 
| 
      
 640 
     | 
    
         
            +
                        policyHolder = IPolicyHolder(address(0));
         
     | 
| 
      
 641 
     | 
    
         
            +
                    }
         
     | 
| 
      
 642 
     | 
    
         
            +
                }
         
     | 
| 
      
 643 
     | 
    
         
            +
             
     | 
| 
      
 644 
     | 
    
         
            +
             
     | 
| 
       531 
645 
     | 
    
         
             
                function _getTokenHandler(
         
     | 
| 
       532 
646 
     | 
    
         
             
                    InstanceReader instanceReader,
         
     | 
| 
       533 
647 
     | 
    
         
             
                    NftId productNftId
         
     | 
| 
         @@ -542,6 +656,7 @@ contract PolicyService is 
     | 
|
| 
       542 
656 
     | 
    
         
             
                    tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
         
     | 
| 
       543 
657 
     | 
    
         
             
                }
         
     | 
| 
       544 
658 
     | 
    
         | 
| 
      
 659 
     | 
    
         
            +
             
     | 
| 
       545 
660 
     | 
    
         
             
                function _getDistributionNftAndWallets(
         
     | 
| 
       546 
661 
     | 
    
         
             
                    InstanceReader instanceReader,
         
     | 
| 
       547 
662 
     | 
    
         
             
                    NftId productNftId
         
     | 
| 
         @@ -12,14 +12,14 @@ contract PolicyServiceManager is ProxyManager { 
     | 
|
| 
       12 
12 
     | 
    
         
             
                /// @dev initializes proxy manager with product 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 
     | 
    
         
             
                    PolicyService svc = new PolicyService{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);
         
     |