@etherisc/gif-next 0.0.2-f18fb8b-243 → 0.0.2-f1f3b2c-994
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +81 -63
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +48 -30
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +21 -2
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +72 -9
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +106 -248
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +64 -222
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +228 -217
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +93 -101
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +64 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -31
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1512 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1999 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1432 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1192 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1566 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2001 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +6 -6
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -5
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +17 -106
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +146 -112
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +31 -31
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -129
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +44 -151
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +285 -228
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +45 -4
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ObjectManager.sol/ObjectManager.json → ObjectSet.sol/ObjectSet.json} +6 -6
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +74 -229
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +45 -31
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +42 -213
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +94 -274
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +458 -161
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +154 -86
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +229 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +87 -88
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +360 -171
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +84 -270
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +492 -333
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +98 -82
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +62 -242
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +263 -181
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +104 -100
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +147 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +295 -119
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +62 -57
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +406 -321
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +118 -265
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +62 -242
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +274 -22
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +493 -80
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +263 -145
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -313
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +46 -5
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1061 -0
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +70 -12
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +15 -205
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +247 -161
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +105 -95
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -112
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +15 -20
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +34 -31
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +34 -216
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +41 -0
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +41 -0
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
- package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +5 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +42 -21
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +100 -256
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +45 -4
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +31 -138
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +176 -130
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -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 +61 -8
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +52 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +586 -0
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +31 -24
- package/contracts/authorization/Authorization.sol +5 -2
- package/contracts/authorization/IAccessAdmin.sol +3 -2
- package/contracts/authorization/IServiceAuthorization.sol +4 -2
- package/contracts/authorization/ServiceAuthorization.sol +27 -11
- package/contracts/distribution/BasicDistribution.sol +4 -15
- package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
- package/contracts/distribution/Distribution.sol +23 -11
- package/contracts/distribution/DistributionService.sol +76 -42
- package/contracts/distribution/DistributionServiceManager.sol +8 -11
- package/contracts/distribution/IDistributionComponent.sol +8 -4
- package/contracts/distribution/IDistributionService.sol +18 -2
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +75 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +411 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
- package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
- package/contracts/instance/IInstance.sol +11 -34
- package/contracts/instance/IInstanceService.sol +5 -5
- package/contracts/instance/Instance.sol +13 -38
- package/contracts/instance/InstanceAdmin.sol +31 -9
- package/contracts/instance/InstanceAuthorizationV3.sol +16 -14
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +71 -49
- package/contracts/instance/InstanceServiceManager.sol +8 -13
- package/contracts/instance/InstanceStore.sol +12 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +4 -8
- package/contracts/instance/module/IDistribution.sol +0 -1
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/Oracle.sol +17 -7
- package/contracts/oracle/OracleService.sol +11 -8
- package/contracts/oracle/OracleServiceManager.sol +8 -11
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +11 -2
- package/contracts/pool/BundleService.sol +221 -56
- package/contracts/pool/BundleServiceManager.sol +8 -11
- package/contracts/pool/IBundleService.sol +42 -5
- package/contracts/pool/IPoolComponent.sol +24 -8
- package/contracts/pool/IPoolService.sol +57 -36
- package/contracts/pool/Pool.sol +72 -30
- package/contracts/pool/PoolService.sol +240 -129
- package/contracts/pool/PoolServiceManager.sol +6 -9
- package/contracts/product/ApplicationService.sol +62 -65
- package/contracts/product/ApplicationServiceManager.sol +6 -6
- package/contracts/product/BasicProduct.sol +3 -32
- package/contracts/product/BasicProductAuthorization.sol +3 -0
- package/contracts/product/ClaimService.sol +254 -115
- package/contracts/product/ClaimServiceManager.sol +6 -6
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -32
- package/contracts/product/IPricingService.sol +7 -7
- package/contracts/product/IProductComponent.sol +18 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +404 -193
- package/contracts/product/PolicyServiceManager.sol +6 -9
- package/contracts/product/PricingService.sol +46 -46
- package/contracts/product/PricingServiceManager.sol +5 -8
- package/contracts/product/Product.sol +90 -50
- package/contracts/product/{ProductService.sol → RiskService.sol} +13 -41
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +65 -32
- package/contracts/registry/IRegistry.sol +65 -19
- package/contracts/registry/IRegistryService.sol +0 -9
- package/contracts/registry/Registry.sol +340 -211
- package/contracts/registry/RegistryAdmin.sol +155 -72
- package/contracts/registry/RegistryService.sol +59 -66
- package/contracts/registry/RegistryServiceManager.sol +4 -4
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +496 -0
- package/contracts/registry/ServiceAuthorizationV3.sol +13 -15
- package/contracts/registry/TokenRegistry.sol +2 -2
- package/contracts/shared/Component.sol +38 -43
- package/contracts/shared/ComponentService.sol +88 -28
- package/contracts/shared/ComponentServiceManager.sol +10 -7
- package/contracts/shared/ComponentVerifyingService.sol +2 -3
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +7 -4
- package/contracts/shared/IComponentService.sol +15 -9
- package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IService.sol +1 -1
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
- package/contracts/shared/InstanceLinkedComponent.sol +26 -6
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +13 -2
- package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
- package/contracts/shared/NftOwnable.sol +7 -7
- package/contracts/shared/PolicyHolder.sol +17 -57
- package/contracts/shared/Registerable.sol +4 -4
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +19 -15
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +3 -3
- package/contracts/staking/IStakingService.sol +12 -5
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +27 -42
- package/contracts/staking/StakingManager.sol +10 -12
- package/contracts/staking/StakingReader.sol +23 -20
- package/contracts/staking/StakingService.sol +10 -14
- package/contracts/staking/StakingServiceManager.sol +4 -4
- package/contracts/staking/StakingStore.sol +12 -22
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +27 -5
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +19 -18
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/Referral.sol +1 -0
- package/contracts/type/RiskId.sol +15 -1
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +33 -10
- package/contracts/type/Version.sol +3 -1
- package/contracts/{shared → upgradeability}/ProxyManager.sol +70 -38
- package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
- package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
- package/package.json +2 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
- 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/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1159
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
- package/contracts/product/ProductServiceManager.sol +0 -42
- package/contracts/registry/ReleaseManager.sol +0 -487
- package/contracts/shared/InitializableCustom.sol +0 -177
- /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
| @@ -1,31 +1,27 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            +
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 | 
            +
             | 
| 4 6 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 5 7 | 
             
            import {Product} from "./Product.sol";
         | 
| 6 8 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 7 | 
            -
            import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
         | 
| 8 9 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 9 10 | 
             
            import {IPolicy} from "../instance/module/IPolicy.sol";
         | 
| 10 | 
            -
            import {IPoolComponent} from "../pool/IPoolComponent.sol";
         | 
| 11 | 
            -
            import {IRisk} from "../instance/module/IRisk.sol";
         | 
| 12 | 
            -
            import {IBundle} from "../instance/module/IBundle.sol";
         | 
| 13 11 |  | 
| 14 12 | 
             
            import {TokenHandler} from "../shared/TokenHandler.sol";
         | 
| 15 13 |  | 
| 16 14 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 17 | 
            -
            import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
         | 
| 18 15 | 
             
            import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
         | 
| 19 | 
            -
            import {UFixed, UFixedLib} from "../type/UFixed.sol";
         | 
| 20 16 | 
             
            import {ObjectType, APPLICATION, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
         | 
| 21 | 
            -
            import {APPLIED, COLLATERALIZED,  | 
| 17 | 
            +
            import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED, PAID} from "../type/StateId.sol";
         | 
| 22 18 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 23 | 
            -
            import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
         | 
| 24 19 | 
             
            import {ReferralId} from "../type/Referral.sol";
         | 
| 25 20 | 
             
            import {StateId} from "../type/StateId.sol";
         | 
| 26 21 | 
             
            import {VersionPart} from "../type/Version.sol";
         | 
| 27 22 |  | 
| 28 23 | 
             
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         | 
| 24 | 
            +
            import {ContractLib} from "../shared/ContractLib.sol";
         | 
| 29 25 | 
             
            import {IApplicationService} from "./IApplicationService.sol";
         | 
| 30 26 | 
             
            import {IBundleService} from "../pool/IBundleService.sol";
         | 
| 31 27 | 
             
            import {IClaimService} from "./IClaimService.sol";
         | 
| @@ -33,11 +29,10 @@ import {IComponentService} from "../shared/IComponentService.sol"; | |
| 33 29 | 
             
            import {IDistributionService} from "../distribution/IDistributionService.sol";
         | 
| 34 30 | 
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 35 31 | 
             
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 32 | 
            +
            import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
         | 
| 36 33 | 
             
            import {IPolicyService} from "./IPolicyService.sol";
         | 
| 37 34 | 
             
            import {IPoolService} from "../pool/IPoolService.sol";
         | 
| 38 35 | 
             
            import {IPricingService} from "./IPricingService.sol";
         | 
| 39 | 
            -
            import {IService} from "../shared/IService.sol";
         | 
| 40 | 
            -
            import {Service} from "../shared/Service.sol";
         | 
| 41 36 |  | 
| 42 37 | 
             
            contract PolicyService is
         | 
| 43 38 | 
             
                ComponentVerifyingService, 
         | 
| @@ -54,8 +49,6 @@ contract PolicyService is | |
| 54 49 | 
             
                IPoolService internal _poolService;
         | 
| 55 50 | 
             
                IPricingService internal _pricingService;
         | 
| 56 51 |  | 
| 57 | 
            -
                event LogProductServiceSender(address sender);
         | 
| 58 | 
            -
             | 
| 59 52 | 
             
                function _initialize(
         | 
| 60 53 | 
             
                    address owner, 
         | 
| 61 54 | 
             
                    bytes memory data
         | 
| @@ -65,12 +58,11 @@ contract PolicyService is | |
| 65 58 | 
             
                    initializer
         | 
| 66 59 | 
             
                {
         | 
| 67 60 | 
             
                    (
         | 
| 68 | 
            -
                        address registryAddress | 
| 69 | 
            -
                        //address managerAddress
         | 
| 61 | 
            +
                        address registryAddress,
         | 
| 70 62 | 
             
                        address authority
         | 
| 71 | 
            -
                    ) = abi.decode(data, (address, address | 
| 63 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 72 64 |  | 
| 73 | 
            -
                     | 
| 65 | 
            +
                    _initializeService(registryAddress, authority, owner);
         | 
| 74 66 |  | 
| 75 67 | 
             
                    VersionPart majorVersion = getVersion().toMajorPart();
         | 
| 76 68 | 
             
                    _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
         | 
| @@ -81,36 +73,52 @@ contract PolicyService is | |
| 81 73 | 
             
                    _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
         | 
| 82 74 | 
             
                    _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
         | 
| 83 75 |  | 
| 84 | 
            -
                     | 
| 85 | 
            -
                }
         | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
                function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
         | 
| 89 | 
            -
                    IRegistry.ObjectInfo memory productInfo;
         | 
| 90 | 
            -
                    (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 91 | 
            -
                    product = Product(productInfo.objectAddress);
         | 
| 76 | 
            +
                    _registerInterface(type(IPolicyService).interfaceId);
         | 
| 92 77 | 
             
                }
         | 
| 93 78 |  | 
| 94 79 |  | 
| 95 80 | 
             
                function decline(
         | 
| 96 | 
            -
                    NftId policyNftId
         | 
| 81 | 
            +
                    NftId applicationNftId // = policyNftId
         | 
| 97 82 | 
             
                )
         | 
| 98 83 | 
             
                    external
         | 
| 99 | 
            -
                     | 
| 84 | 
            +
                    virtual
         | 
| 85 | 
            +
                    nonReentrant()
         | 
| 100 86 | 
             
                {
         | 
| 101 | 
            -
                     | 
| 87 | 
            +
                    (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 88 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                    // check policy is in state applied
         | 
| 91 | 
            +
                    if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
         | 
| 92 | 
            +
                        revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
         | 
| 93 | 
            +
                    }
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                    // check policy matches with calling product
         | 
| 96 | 
            +
                    IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
         | 
| 97 | 
            +
                    if(applicationInfo.productNftId != productNftId) {
         | 
| 98 | 
            +
                        revert ErrorPolicyServicePolicyProductMismatch(
         | 
| 99 | 
            +
                            applicationNftId, 
         | 
| 100 | 
            +
                            applicationInfo.productNftId, 
         | 
| 101 | 
            +
                            productNftId);
         | 
| 102 | 
            +
                    }
         | 
| 103 | 
            +
                    
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                    // store updated policy info
         | 
| 106 | 
            +
                    instance.getInstanceStore().updatePolicyState(
         | 
| 107 | 
            +
                        applicationNftId, 
         | 
| 108 | 
            +
                        DECLINED());
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                    emit LogPolicyServicePolicyDeclined(applicationNftId);
         | 
| 102 111 | 
             
                }
         | 
| 103 112 |  | 
| 104 | 
            -
                event LogDebug(uint idx, string message);
         | 
| 105 113 |  | 
| 106 | 
            -
                /// @ | 
| 107 | 
            -
                function  | 
| 114 | 
            +
                /// @inheritdoc IPolicyService
         | 
| 115 | 
            +
                function createPolicy(
         | 
| 108 116 | 
             
                    NftId applicationNftId, // = policyNftId
         | 
| 109 | 
            -
                    bool requirePremiumPayment,
         | 
| 110 117 | 
             
                    Timestamp activateAt
         | 
| 111 118 | 
             
                )
         | 
| 112 119 | 
             
                    external 
         | 
| 113 | 
            -
                    virtual | 
| 120 | 
            +
                    virtual
         | 
| 121 | 
            +
                    nonReentrant()
         | 
| 114 122 | 
             
                {
         | 
| 115 123 | 
             
                    // check caller is registered product
         | 
| 116 124 | 
             
                    (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| @@ -130,13 +138,8 @@ contract PolicyService is | |
| 130 138 | 
             
                            productNftId);
         | 
| 131 139 | 
             
                    }
         | 
| 132 140 |  | 
| 133 | 
            -
                    StateId newPolicyState = COLLATERALIZED();
         | 
| 134 | 
            -
             | 
| 135 141 | 
             
                    // actual collateralizaion
         | 
| 136 | 
            -
                    (
         | 
| 137 | 
            -
                        Amount localCollateralAmount,
         | 
| 138 | 
            -
                        Amount totalCollateralAmount
         | 
| 139 | 
            -
                    ) = _poolService.lockCollateral(
         | 
| 142 | 
            +
                    _poolService.lockCollateral(
         | 
| 140 143 | 
             
                        instance,
         | 
| 141 144 | 
             
                        address(instanceReader.getComponentInfo(productNftId).token),
         | 
| 142 145 | 
             
                        productNftId,
         | 
| @@ -146,39 +149,61 @@ contract PolicyService is | |
| 146 149 |  | 
| 147 150 | 
             
                    // optional activation of policy
         | 
| 148 151 | 
             
                    if(activateAt > zeroTimestamp()) {
         | 
| 149 | 
            -
                         | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
                    // optional collection of premium
         | 
| 155 | 
            -
                    if(requirePremiumPayment) {
         | 
| 156 | 
            -
                        Amount premiumPaidAmount = _calculateAndCollectPremium(
         | 
| 157 | 
            -
                            instance,
         | 
| 158 | 
            -
                            applicationNftId,
         | 
| 159 | 
            -
                            applicationInfo);
         | 
| 160 | 
            -
             | 
| 161 | 
            -
                        applicationInfo.premiumPaidAmount = premiumPaidAmount;
         | 
| 152 | 
            +
                        applicationInfo = _activate(
         | 
| 153 | 
            +
                            applicationNftId, 
         | 
| 154 | 
            +
                            applicationInfo, 
         | 
| 155 | 
            +
                            activateAt);
         | 
| 162 156 | 
             
                    }
         | 
| 163 157 |  | 
| 164 | 
            -
                    //  | 
| 158 | 
            +
                    // update policy and set state to collateralized
         | 
| 165 159 | 
             
                    instance.getInstanceStore().updatePolicy(
         | 
| 166 160 | 
             
                        applicationNftId, 
         | 
| 167 161 | 
             
                        applicationInfo, 
         | 
| 168 | 
            -
                         | 
| 162 | 
            +
                        COLLATERALIZED());
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                    // calculate and store premium
         | 
| 165 | 
            +
                    IPolicy.PremiumInfo memory premium = _pricingService.calculatePremium(
         | 
| 166 | 
            +
                        productNftId,
         | 
| 167 | 
            +
                        applicationInfo.riskId,
         | 
| 168 | 
            +
                        applicationInfo.sumInsuredAmount,
         | 
| 169 | 
            +
                        applicationInfo.lifetime,
         | 
| 170 | 
            +
                        applicationInfo.applicationData,
         | 
| 171 | 
            +
                        applicationInfo.bundleNftId,
         | 
| 172 | 
            +
                        applicationInfo.referralId);
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                    instance.getInstanceStore().createPremium(
         | 
| 175 | 
            +
                        applicationNftId,
         | 
| 176 | 
            +
                        premium);
         | 
| 177 | 
            +
             | 
| 178 | 
            +
                    // update referral counter 
         | 
| 179 | 
            +
                    {
         | 
| 180 | 
            +
                        IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                        if (! productInfo.distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product    
         | 
| 183 | 
            +
                            _distributionService.processReferral(
         | 
| 184 | 
            +
                                productInfo.distributionNftId, 
         | 
| 185 | 
            +
                                applicationInfo.referralId);
         | 
| 186 | 
            +
                        }
         | 
| 187 | 
            +
                    }
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                    // log policy creation before interactions with token and policy holder
         | 
| 190 | 
            +
                    emit LogPolicyServicePolicyCreated(applicationNftId, premium.premiumAmount, activateAt);
         | 
| 169 191 |  | 
| 170 192 | 
             
                    // TODO add calling pool contract if it needs to validate application
         | 
| 171 193 |  | 
| 172 | 
            -
                    //  | 
| 194 | 
            +
                    // callback to policy holder if applicable
         | 
| 195 | 
            +
                    _policyHolderPolicyActivated(applicationNftId, activateAt);
         | 
| 173 196 | 
             
                }
         | 
| 174 197 |  | 
| 175 198 |  | 
| 199 | 
            +
                /// @inheritdoc IPolicyService
         | 
| 176 200 | 
             
                function collectPremium(
         | 
| 177 201 | 
             
                    NftId policyNftId, 
         | 
| 178 202 | 
             
                    Timestamp activateAt
         | 
| 179 203 | 
             
                )
         | 
| 180 204 | 
             
                    external 
         | 
| 181 205 | 
             
                    virtual
         | 
| 206 | 
            +
                    nonReentrant()
         | 
| 182 207 | 
             
                {
         | 
| 183 208 | 
             
                    // check caller is registered product
         | 
| 184 209 | 
             
                    (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| @@ -186,227 +211,276 @@ contract PolicyService is | |
| 186 211 | 
             
                    StateId stateId = instanceReader.getPolicyState(policyNftId);
         | 
| 187 212 |  | 
| 188 213 | 
             
                    // check policy is in state collateralized or active
         | 
| 189 | 
            -
                    if (!(stateId == COLLATERALIZED() | 
| 190 | 
            -
                        revert  | 
| 214 | 
            +
                    if (!(stateId == COLLATERALIZED())) {
         | 
| 215 | 
            +
                        revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
         | 
| 191 216 | 
             
                    }
         | 
| 192 217 |  | 
| 193 | 
            -
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| 194 | 
            -
             | 
| 195 218 | 
             
                    // check if premium is already collected
         | 
| 196 | 
            -
                    if ( | 
| 197 | 
            -
                        revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId | 
| 219 | 
            +
                    if (instanceReader.getPremiumInfoState(policyNftId) == PAID()) {
         | 
| 220 | 
            +
                        revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId);
         | 
| 198 221 | 
             
                    }
         | 
| 199 222 |  | 
| 200 | 
            -
                     | 
| 201 | 
            -
             | 
| 202 | 
            -
             | 
| 203 | 
            -
             | 
| 223 | 
            +
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| 224 | 
            +
                    IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId); 
         | 
| 225 | 
            +
                    
         | 
| 226 | 
            +
                    _processPremium(
         | 
| 227 | 
            +
                        instance,
         | 
| 228 | 
            +
                        policyNftId,
         | 
| 229 | 
            +
                        policyInfo,
         | 
| 230 | 
            +
                        premium);
         | 
| 231 | 
            +
             | 
| 232 | 
            +
                    // optionally activate policy
         | 
| 233 | 
            +
                    if(activateAt.gtz()) {
         | 
| 234 | 
            +
                        policyInfo = _activate(policyNftId, policyInfo, activateAt);
         | 
| 235 | 
            +
                    }
         | 
| 204 236 |  | 
| 205 237 | 
             
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
         | 
| 238 | 
            +
                    instance.getInstanceStore().updatePremiumState(policyNftId, PAID());
         | 
| 206 239 |  | 
| 207 | 
            -
                     | 
| 208 | 
            -
             | 
| 209 | 
            -
                    }
         | 
| 240 | 
            +
                    // log premium collection before interactions with token
         | 
| 241 | 
            +
                    emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
         | 
| 210 242 |  | 
| 211 | 
            -
                     | 
| 243 | 
            +
                    _transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
         | 
| 212 244 | 
             
                }
         | 
| 213 245 |  | 
| 214 | 
            -
                 | 
| 246 | 
            +
                /// @inheritdoc IPolicyService
         | 
| 247 | 
            +
                function activate(NftId policyNftId, Timestamp activateAt)
         | 
| 248 | 
            +
                    external
         | 
| 249 | 
            +
                    virtual
         | 
| 250 | 
            +
                    nonReentrant()
         | 
| 251 | 
            +
                {
         | 
| 215 252 | 
             
                    // check caller is registered product
         | 
| 216 253 | 
             
                    (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 217 254 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 218 255 |  | 
| 219 256 | 
             
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| 257 | 
            +
                    policyInfo = _activate(policyNftId, policyInfo, activateAt);
         | 
| 220 258 |  | 
| 221 | 
            -
                     | 
| 222 | 
            -
                        policyInfo.activatedAt.eqz(),
         | 
| 223 | 
            -
                        "ERROR:PRS-020:ALREADY_ACTIVATED");
         | 
| 224 | 
            -
             | 
| 225 | 
            -
                    policyInfo.activatedAt = activateAt;
         | 
| 226 | 
            -
                    policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
         | 
| 259 | 
            +
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
         | 
| 227 260 |  | 
| 228 | 
            -
                     | 
| 261 | 
            +
                    // log policy activation before interactions with policy holder
         | 
| 262 | 
            +
                    emit LogPolicyServicePolicyActivated(policyNftId, activateAt);
         | 
| 229 263 |  | 
| 230 | 
            -
                    //  | 
| 264 | 
            +
                    // callback to policy holder if applicable
         | 
| 265 | 
            +
                    _policyHolderPolicyActivated(policyNftId, activateAt);
         | 
| 231 266 | 
             
                }
         | 
| 232 267 |  | 
| 233 268 |  | 
| 269 | 
            +
                /// @inheritdoc IPolicyService
         | 
| 234 270 | 
             
                function expire(
         | 
| 235 | 
            -
                    NftId policyNftId
         | 
| 271 | 
            +
                    NftId policyNftId,
         | 
| 272 | 
            +
                    Timestamp expireAt
         | 
| 236 273 | 
             
                )
         | 
| 237 274 | 
             
                    external
         | 
| 238 | 
            -
                     | 
| 239 | 
            -
                     | 
| 275 | 
            +
                    virtual
         | 
| 276 | 
            +
                    nonReentrant()
         | 
| 277 | 
            +
                    returns (Timestamp expiredAt)
         | 
| 240 278 | 
             
                {
         | 
| 279 | 
            +
                    (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 241 280 |  | 
| 281 | 
            +
                    // check policy matches with calling product
         | 
| 282 | 
            +
                    IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
         | 
| 283 | 
            +
                    if(policyInfo.productNftId != productNftId) {
         | 
| 284 | 
            +
                        revert ErrorPolicyServicePolicyProductMismatch(
         | 
| 285 | 
            +
                            policyNftId, 
         | 
| 286 | 
            +
                            policyInfo.productNftId, 
         | 
| 287 | 
            +
                            productNftId);
         | 
| 288 | 
            +
                    }
         | 
| 289 | 
            +
             | 
| 290 | 
            +
                    return _expire(
         | 
| 291 | 
            +
                        instance,
         | 
| 292 | 
            +
                        policyNftId,
         | 
| 293 | 
            +
                        expireAt
         | 
| 294 | 
            +
                    );
         | 
| 242 295 | 
             
                }
         | 
| 243 296 |  | 
| 297 | 
            +
                /// @inheritdoc IPolicyService
         | 
| 298 | 
            +
                function expirePolicy(
         | 
| 299 | 
            +
                    IInstance instance,
         | 
| 300 | 
            +
                    NftId policyNftId,
         | 
| 301 | 
            +
                    Timestamp expireAt
         | 
| 302 | 
            +
                )
         | 
| 303 | 
            +
                    external
         | 
| 304 | 
            +
                    virtual
         | 
| 305 | 
            +
                    nonReentrant()
         | 
| 306 | 
            +
                    returns (Timestamp expiredAt)
         | 
| 307 | 
            +
                {
         | 
| 308 | 
            +
                    return _expire(
         | 
| 309 | 
            +
                        instance,
         | 
| 310 | 
            +
                        policyNftId,
         | 
| 311 | 
            +
                        expireAt
         | 
| 312 | 
            +
                    );
         | 
| 313 | 
            +
                }
         | 
| 314 | 
            +
             | 
| 315 | 
            +
                function _expire(
         | 
| 316 | 
            +
                    IInstance instance,
         | 
| 317 | 
            +
                    NftId policyNftId,
         | 
| 318 | 
            +
                    Timestamp expireAt
         | 
| 319 | 
            +
                )
         | 
| 320 | 
            +
                    internal
         | 
| 321 | 
            +
                    returns (Timestamp expiredAt)
         | 
| 322 | 
            +
                {
         | 
| 323 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 324 | 
            +
                    
         | 
| 325 | 
            +
                    // check policy is active
         | 
| 326 | 
            +
                    StateId policyState = instanceReader.getPolicyState(policyNftId);
         | 
| 327 | 
            +
                    IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
         | 
| 328 | 
            +
                    if (!_policyHasBeenActivated(policyState, policyInfo)) {
         | 
| 329 | 
            +
                        revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
         | 
| 330 | 
            +
                    }
         | 
| 331 | 
            +
             | 
| 332 | 
            +
                    // set return value to provided timestamp
         | 
| 333 | 
            +
                    expiredAt = expireAt;
         | 
| 334 | 
            +
             | 
| 335 | 
            +
                    // update expiredAt to current block timestamp if not set
         | 
| 336 | 
            +
                    if (expiredAt.eqz()) {
         | 
| 337 | 
            +
                        expiredAt = TimestampLib.blockTimestamp();
         | 
| 338 | 
            +
                    }
         | 
| 339 | 
            +
             | 
| 340 | 
            +
                    // check expiredAt represents a valid expiry time
         | 
| 341 | 
            +
                    if (expiredAt >= policyInfo.expiredAt) {
         | 
| 342 | 
            +
                        revert ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
         | 
| 343 | 
            +
                    }
         | 
| 344 | 
            +
                    if (expiredAt < TimestampLib.blockTimestamp()) {
         | 
| 345 | 
            +
                        revert ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
         | 
| 346 | 
            +
                    }
         | 
| 347 | 
            +
             | 
| 348 | 
            +
                    // update policyInfo with new expiredAt timestamp
         | 
| 349 | 
            +
                    Timestamp originalExpiredAt = policyInfo.expiredAt;
         | 
| 350 | 
            +
                    policyInfo.expiredAt = expiredAt;
         | 
| 351 | 
            +
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
         | 
| 352 | 
            +
             | 
| 353 | 
            +
                    emit LogPolicyServicePolicyExpirationUpdated(policyNftId, originalExpiredAt, expiredAt);
         | 
| 354 | 
            +
             | 
| 355 | 
            +
                    // callback to policy holder if applicable
         | 
| 356 | 
            +
                    _policyHolderPolicyExpired(policyNftId, expiredAt);
         | 
| 357 | 
            +
                }
         | 
| 358 | 
            +
             | 
| 359 | 
            +
             | 
| 244 360 | 
             
                function close(
         | 
| 245 361 | 
             
                    NftId policyNftId
         | 
| 246 362 | 
             
                )
         | 
| 247 363 | 
             
                    external 
         | 
| 248 | 
            -
                     | 
| 364 | 
            +
                    virtual
         | 
| 365 | 
            +
                    nonReentrant()
         | 
| 249 366 | 
             
                {
         | 
| 250 367 | 
             
                    (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 251 368 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 252 369 |  | 
| 370 | 
            +
                    // check that policy has been activated
         | 
| 253 371 | 
             
                    IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
         | 
| 254 | 
            -
             | 
| 255 | 
            -
                    if (policyInfo | 
| 256 | 
            -
                        revert  | 
| 257 | 
            -
                    }
         | 
| 258 | 
            -
             | 
| 259 | 
            -
                    StateId state = instanceReader.getPolicyState(policyNftId);
         | 
| 260 | 
            -
                    if (state != ACTIVE()) {
         | 
| 261 | 
            -
                        revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
         | 
| 372 | 
            +
                    StateId policyState = instanceReader.getPolicyState(policyNftId);
         | 
| 373 | 
            +
                    if (!_policyHasBeenActivated(policyState, policyInfo)) {
         | 
| 374 | 
            +
                        revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
         | 
| 262 375 | 
             
                    }
         | 
| 263 376 |  | 
| 377 | 
            +
                    // check that policy has not already been closed
         | 
| 264 378 | 
             
                    if (policyInfo.closedAt.gtz()) {
         | 
| 265 | 
            -
                        revert  | 
| 266 | 
            -
                    }
         | 
| 267 | 
            -
             | 
| 268 | 
            -
                    // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
         | 
| 269 | 
            -
                    if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
         | 
| 270 | 
            -
                        revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
         | 
| 379 | 
            +
                        revert ErrorPolicyServicePolicyAlreadyClosed(policyNftId);
         | 
| 271 380 | 
             
                    }
         | 
| 272 381 |  | 
| 382 | 
            +
                    // check that policy does not have any open claims
         | 
| 273 383 | 
             
                    if (policyInfo.openClaimsCount > 0) {
         | 
| 274 | 
            -
                        revert  | 
| 384 | 
            +
                        revert ErrorPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
         | 
| 275 385 | 
             
                    }
         | 
| 276 386 |  | 
| 277 | 
            -
                     | 
| 387 | 
            +
                    // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
         | 
| 388 | 
            +
                    // TODO consider to remove requirement for fully paid premiums altogether
         | 
| 389 | 
            +
                    if (! instanceReader.getPremiumInfoState(policyNftId).eq(PAID())) {
         | 
| 390 | 
            +
                        revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
         | 
| 391 | 
            +
                    }
         | 
| 278 392 |  | 
| 393 | 
            +
                    // release (remaining) collateral that was blocked by policy
         | 
| 279 394 | 
             
                    _poolService.releaseCollateral(
         | 
| 280 395 | 
             
                        instance, 
         | 
| 281 396 | 
             
                        address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
         | 
| 282 397 | 
             
                        policyNftId, 
         | 
| 283 398 | 
             
                        policyInfo);
         | 
| 284 399 |  | 
| 400 | 
            +
                    // TODO consider to also set expiredAt to current block timestamp if that timestamp is still in the futue
         | 
| 401 | 
            +
             | 
| 402 | 
            +
                    // update policy state to closed
         | 
| 403 | 
            +
                    policyInfo.closedAt = TimestampLib.blockTimestamp();
         | 
| 285 404 | 
             
                    instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
         | 
| 405 | 
            +
             | 
| 406 | 
            +
                    emit LogPolicyServicePolicyClosed(policyNftId);
         | 
| 286 407 | 
             
                }
         | 
| 287 408 |  | 
| 288 409 |  | 
| 289 | 
            -
                 | 
| 410 | 
            +
                /// @dev calculates the premium and updates all counters in the other services
         | 
| 411 | 
            +
                function _processPremium(
         | 
| 290 412 | 
             
                    IInstance instance,
         | 
| 291 413 | 
             
                    NftId applicationNftId,
         | 
| 292 | 
            -
                    IPolicy.PolicyInfo memory applicationInfo
         | 
| 414 | 
            +
                    IPolicy.PolicyInfo memory applicationInfo,
         | 
| 415 | 
            +
                    IPolicy.PremiumInfo memory premium
         | 
| 293 416 | 
             
                )
         | 
| 294 417 | 
             
                    internal
         | 
| 295 418 | 
             
                    virtual
         | 
| 296 | 
            -
                    returns (
         | 
| 297 | 
            -
                        Amount premiumPaidAmount
         | 
| 298 | 
            -
                    )
         | 
| 299 419 | 
             
                {
         | 
| 300 420 | 
             
                    NftId productNftId = applicationInfo.productNftId;
         | 
| 301 | 
            -
             | 
| 302 | 
            -
                    // calculate premium details
         | 
| 303 | 
            -
                    IPolicy.Premium memory premium = _pricingService.calculatePremium(
         | 
| 304 | 
            -
                        productNftId,
         | 
| 305 | 
            -
                        applicationInfo.riskId,
         | 
| 306 | 
            -
                        applicationInfo.sumInsuredAmount,
         | 
| 307 | 
            -
                        applicationInfo.lifetime,
         | 
| 308 | 
            -
                        applicationInfo.applicationData,
         | 
| 309 | 
            -
                        applicationInfo.bundleNftId,
         | 
| 310 | 
            -
                        applicationInfo.referralId);
         | 
| 311 | 
            -
             | 
| 312 | 
            -
             | 
| 313 | 
            -
                    // update financials and transfer premium tokens
         | 
| 314 | 
            -
                    premiumPaidAmount = _processAndCollect(
         | 
| 315 | 
            -
                        instance, 
         | 
| 316 | 
            -
                        productNftId,
         | 
| 317 | 
            -
                        applicationNftId, 
         | 
| 318 | 
            -
                        applicationInfo.premiumAmount,
         | 
| 319 | 
            -
                        applicationInfo.bundleNftId,
         | 
| 320 | 
            -
                        applicationInfo.referralId,
         | 
| 321 | 
            -
                        premium);
         | 
| 322 | 
            -
                }
         | 
| 323 | 
            -
             | 
| 324 | 
            -
             | 
| 325 | 
            -
                function _processAndCollect(
         | 
| 326 | 
            -
                    IInstance instance,
         | 
| 327 | 
            -
                    NftId productNftId,
         | 
| 328 | 
            -
                    NftId policyNftId,
         | 
| 329 | 
            -
                    Amount premiumExpectedAmount,
         | 
| 330 | 
            -
                    NftId bundleNftId,
         | 
| 331 | 
            -
                    ReferralId referralId,
         | 
| 332 | 
            -
                    IPolicy.Premium memory premium
         | 
| 333 | 
            -
                )
         | 
| 334 | 
            -
                    internal
         | 
| 335 | 
            -
                    virtual
         | 
| 336 | 
            -
                    returns (Amount premiumPaidAmount)
         | 
| 337 | 
            -
                {
         | 
| 338 421 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 339 | 
            -
                    TokenHandler tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
         | 
| 340 | 
            -
                    address policyHolder = getRegistry().ownerOf(policyNftId);
         | 
| 341 | 
            -
                    premiumPaidAmount = AmountLib.toAmount(premium.premiumAmount);
         | 
| 342 422 |  | 
| 343 | 
            -
                     | 
| 344 | 
            -
             | 
| 345 | 
            -
                         | 
| 346 | 
            -
                         | 
| 347 | 
            -
             | 
| 423 | 
            +
                    // check if premium balance and allowance of policy holder is sufficient
         | 
| 424 | 
            +
                    {
         | 
| 425 | 
            +
                        TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
         | 
| 426 | 
            +
                        address policyHolder = getRegistry().ownerOf(applicationNftId);
         | 
| 427 | 
            +
                    
         | 
| 428 | 
            +
                        _checkPremiumBalanceAndAllowance(
         | 
| 429 | 
            +
                            tokenHandler.getToken(), 
         | 
| 430 | 
            +
                            address(tokenHandler),
         | 
| 431 | 
            +
                            policyHolder, 
         | 
| 432 | 
            +
                            premium.premiumAmount);
         | 
| 433 | 
            +
                    }
         | 
| 348 434 |  | 
| 349 | 
            -
                     | 
| 435 | 
            +
                    // update the counters
         | 
| 436 | 
            +
                    _processSale(
         | 
| 350 437 | 
             
                        instanceReader, 
         | 
| 351 438 | 
             
                        instance.getInstanceStore(), 
         | 
| 352 | 
            -
                        tokenHandler, 
         | 
| 353 | 
            -
                        policyHolder, 
         | 
| 354 439 | 
             
                        productNftId, 
         | 
| 355 | 
            -
                        bundleNftId, 
         | 
| 356 | 
            -
                        referralId, 
         | 
| 440 | 
            +
                        applicationInfo.bundleNftId, 
         | 
| 441 | 
            +
                        applicationInfo.referralId, 
         | 
| 357 442 | 
             
                        premium);
         | 
| 358 443 | 
             
                }
         | 
| 359 444 |  | 
| 360 | 
            -
             | 
| 361 | 
            -
             | 
| 362 | 
            -
                     | 
| 363 | 
            -
                     | 
| 364 | 
            -
                    Amount premiumExpectedAmount,
         | 
| 365 | 
            -
                    Amount premiumPaidAmount
         | 
| 445 | 
            +
                function _activate(
         | 
| 446 | 
            +
                    NftId policyNftId, 
         | 
| 447 | 
            +
                    IPolicy.PolicyInfo memory policyInfo,
         | 
| 448 | 
            +
                    Timestamp activateAt
         | 
| 366 449 | 
             
                )
         | 
| 367 450 | 
             
                    internal
         | 
| 368 451 | 
             
                    virtual
         | 
| 369 | 
            -
                    view
         | 
| 452 | 
            +
                    view 
         | 
| 453 | 
            +
                    returns (IPolicy.PolicyInfo memory)
         | 
| 370 454 | 
             
                {
         | 
| 371 | 
            -
                    //  | 
| 372 | 
            -
                     | 
| 373 | 
            -
             | 
| 374 | 
            -
                        revert ErrorPolicyServicePremiumHigherThanExpected(premiumExpectedAmount, premiumPaidAmount);
         | 
| 455 | 
            +
                    // fail if policy has already been activated and activateAt is different
         | 
| 456 | 
            +
                    if(! policyInfo.activatedAt.eqz() && activateAt != policyInfo.activatedAt) {
         | 
| 457 | 
            +
                        revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
         | 
| 375 458 | 
             
                    }
         | 
| 376 459 |  | 
| 377 | 
            -
                     | 
| 378 | 
            -
                     | 
| 379 | 
            -
             | 
| 380 | 
            -
                
         | 
| 381 | 
            -
                    if (balance < premiumAmount) {
         | 
| 382 | 
            -
                        revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premiumAmount, balance);
         | 
| 460 | 
            +
                    // ignore if policy has already been activated and activateAt is the same
         | 
| 461 | 
            +
                    if (policyInfo.activatedAt == activateAt) {
         | 
| 462 | 
            +
                        return policyInfo;
         | 
| 383 463 | 
             
                    }
         | 
| 384 464 |  | 
| 385 | 
            -
                     | 
| 386 | 
            -
             | 
| 387 | 
            -
                    }
         | 
| 388 | 
            -
                }
         | 
| 465 | 
            +
                    policyInfo.activatedAt = activateAt;
         | 
| 466 | 
            +
                    policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
         | 
| 389 467 |  | 
| 468 | 
            +
                    return policyInfo;
         | 
| 469 | 
            +
                }
         | 
| 390 470 |  | 
| 391 | 
            -
                 | 
| 471 | 
            +
                /// @dev update counters by calling the involved services
         | 
| 472 | 
            +
                function _processSale(
         | 
| 392 473 | 
             
                    InstanceReader instanceReader,
         | 
| 393 474 | 
             
                    InstanceStore instanceStore,
         | 
| 394 | 
            -
                    TokenHandler tokenHandler,
         | 
| 395 | 
            -
                    address policyHolder,
         | 
| 396 475 | 
             
                    NftId productNftId,
         | 
| 397 476 | 
             
                    NftId bundleNftId,
         | 
| 398 477 | 
             
                    ReferralId referralId,
         | 
| 399 | 
            -
                    IPolicy. | 
| 478 | 
            +
                    IPolicy.PremiumInfo memory premium
         | 
| 400 479 | 
             
                )
         | 
| 401 480 | 
             
                    internal
         | 
| 402 481 | 
             
                    virtual
         | 
| 403 482 | 
             
                {
         | 
| 404 | 
            -
                    (
         | 
| 405 | 
            -
                        NftId distributionNftId,
         | 
| 406 | 
            -
                        address distributionWallet,
         | 
| 407 | 
            -
                        address poolWallet,
         | 
| 408 | 
            -
                        address productWallet
         | 
| 409 | 
            -
                    ) = _getDistributionNftAndWallets(
         | 
| 483 | 
            +
                    (NftId distributionNftId, , , ) = _getDistributionNftAndWallets(
         | 
| 410 484 | 
             
                        instanceReader, 
         | 
| 411 485 | 
             
                        productNftId);
         | 
| 412 486 |  | 
| @@ -414,27 +488,156 @@ contract PolicyService is | |
| 414 488 | 
             
                    _componentService.increaseProductFees(
         | 
| 415 489 | 
             
                        instanceStore, 
         | 
| 416 490 | 
             
                        productNftId, 
         | 
| 417 | 
            -
                         | 
| 491 | 
            +
                        premium.productFeeVarAmount + premium.productFeeFixAmount);
         | 
| 418 492 |  | 
| 419 493 | 
             
                    // update distribution fees and distributor commission and pool fees 
         | 
| 420 | 
            -
                     | 
| 421 | 
            -
                         | 
| 422 | 
            -
             | 
| 423 | 
            -
             | 
| 494 | 
            +
                    if (!distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
         | 
| 495 | 
            +
                        _distributionService.processSale(
         | 
| 496 | 
            +
                            distributionNftId, 
         | 
| 497 | 
            +
                            referralId, 
         | 
| 498 | 
            +
                            premium);
         | 
| 499 | 
            +
                    }
         | 
| 424 500 |  | 
| 425 501 | 
             
                    // update pool and bundle fees 
         | 
| 426 502 | 
             
                    _poolService.processSale(
         | 
| 427 503 | 
             
                        bundleNftId, 
         | 
| 428 504 | 
             
                        premium);
         | 
| 505 | 
            +
                }
         | 
| 506 | 
            +
             | 
| 507 | 
            +
             | 
| 508 | 
            +
                /// @dev transfer the premium to the wallets the premium is distributed to
         | 
| 509 | 
            +
                function _transferFunds(
         | 
| 510 | 
            +
                    InstanceReader instanceReader,
         | 
| 511 | 
            +
                    NftId policyNftId,
         | 
| 512 | 
            +
                    NftId productNftId,
         | 
| 513 | 
            +
                    IPolicy.PremiumInfo memory premium
         | 
| 514 | 
            +
                )
         | 
| 515 | 
            +
                    internal
         | 
| 516 | 
            +
                    virtual
         | 
| 517 | 
            +
                {
         | 
| 518 | 
            +
                    TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
         | 
| 519 | 
            +
                    address policyHolder = getRegistry().ownerOf(policyNftId);
         | 
| 520 | 
            +
             | 
| 521 | 
            +
                    (
         | 
| 522 | 
            +
                        ,
         | 
| 523 | 
            +
                        address distributionWallet,
         | 
| 524 | 
            +
                        address poolWallet,
         | 
| 525 | 
            +
                        address productWallet
         | 
| 526 | 
            +
                    ) = _getDistributionNftAndWallets(
         | 
| 527 | 
            +
                        instanceReader, 
         | 
| 528 | 
            +
                        productNftId);
         | 
| 429 529 |  | 
| 430 | 
            -
                     | 
| 431 | 
            -
             | 
| 432 | 
            -
             | 
| 433 | 
            -
             | 
| 530 | 
            +
                    tokenHandler.collectTokensToThreeRecipients(
         | 
| 531 | 
            +
                        policyHolder,
         | 
| 532 | 
            +
                        productWallet,
         | 
| 533 | 
            +
                        premium.productFeeAmount,
         | 
| 534 | 
            +
                        distributionWallet,
         | 
| 535 | 
            +
                        premium.distributionFeeAndCommissionAmount,
         | 
| 536 | 
            +
                        poolWallet,
         | 
| 537 | 
            +
                        premium.poolPremiumAndFeeAmount);
         | 
| 434 538 | 
             
                }
         | 
| 435 539 |  | 
| 436 540 |  | 
| 437 | 
            -
                 | 
| 541 | 
            +
                /// @dev checks that policy has been collateralized and has been activated.
         | 
| 542 | 
            +
                /// does not check if policy has been expired or closed.
         | 
| 543 | 
            +
                function _policyHasBeenActivated(
         | 
| 544 | 
            +
                    StateId policyState,
         | 
| 545 | 
            +
                    IPolicy.PolicyInfo memory policyInfo
         | 
| 546 | 
            +
                )
         | 
| 547 | 
            +
                    internal
         | 
| 548 | 
            +
                    view
         | 
| 549 | 
            +
                    returns (bool)
         | 
| 550 | 
            +
                {
         | 
| 551 | 
            +
                    if (policyState != COLLATERALIZED()) { return false; } 
         | 
| 552 | 
            +
                    if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) { return false; } 
         | 
| 553 | 
            +
                    return true;
         | 
| 554 | 
            +
                }
         | 
| 555 | 
            +
             | 
| 556 | 
            +
             | 
| 557 | 
            +
                /// @dev checks the balance and allowance of the policy holder
         | 
| 558 | 
            +
                function _checkPremiumBalanceAndAllowance(
         | 
| 559 | 
            +
                    IERC20Metadata token,
         | 
| 560 | 
            +
                    address tokenHandlerAddress, 
         | 
| 561 | 
            +
                    address policyHolder, 
         | 
| 562 | 
            +
                    Amount premiumAmount
         | 
| 563 | 
            +
                )
         | 
| 564 | 
            +
                    internal
         | 
| 565 | 
            +
                    virtual
         | 
| 566 | 
            +
                    view
         | 
| 567 | 
            +
                {
         | 
| 568 | 
            +
                    uint256 premium = premiumAmount.toInt();
         | 
| 569 | 
            +
                    uint256 balance = token.balanceOf(policyHolder);
         | 
| 570 | 
            +
                    uint256 allowance = token.allowance(policyHolder, tokenHandlerAddress);
         | 
| 571 | 
            +
                
         | 
| 572 | 
            +
                    if (balance < premium) {
         | 
| 573 | 
            +
                        revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premium, balance);
         | 
| 574 | 
            +
                    }
         | 
| 575 | 
            +
             | 
| 576 | 
            +
                    if (allowance < premium) {
         | 
| 577 | 
            +
                        revert ErrorPolicyServiceAllowanceInsufficient(policyHolder, tokenHandlerAddress, premium, allowance);
         | 
| 578 | 
            +
                    }
         | 
| 579 | 
            +
                }
         | 
| 580 | 
            +
             | 
| 581 | 
            +
             | 
| 582 | 
            +
                function _policyHolderPolicyActivated(
         | 
| 583 | 
            +
                    NftId policyNftId,
         | 
| 584 | 
            +
                    Timestamp activateAt
         | 
| 585 | 
            +
                )
         | 
| 586 | 
            +
                    internal
         | 
| 587 | 
            +
                    virtual
         | 
| 588 | 
            +
                {
         | 
| 589 | 
            +
                    // immediately return if policy is not activated
         | 
| 590 | 
            +
                    if (activateAt.eqz()) {
         | 
| 591 | 
            +
                        return;
         | 
| 592 | 
            +
                    }
         | 
| 593 | 
            +
             | 
| 594 | 
            +
                    // get policy holder address
         | 
| 595 | 
            +
                    IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
         | 
| 596 | 
            +
             | 
| 597 | 
            +
                    // execute callback if policy holder implements IPolicyHolder
         | 
| 598 | 
            +
                    if (address(policyHolder) != address(0)) {
         | 
| 599 | 
            +
                        policyHolder.policyActivated(policyNftId, activateAt);
         | 
| 600 | 
            +
                    }
         | 
| 601 | 
            +
                }
         | 
| 602 | 
            +
             | 
| 603 | 
            +
             | 
| 604 | 
            +
                function _policyHolderPolicyExpired(
         | 
| 605 | 
            +
                    NftId policyNftId,
         | 
| 606 | 
            +
                    Timestamp expiredAt
         | 
| 607 | 
            +
                )
         | 
| 608 | 
            +
                    internal
         | 
| 609 | 
            +
                    virtual
         | 
| 610 | 
            +
                {
         | 
| 611 | 
            +
                    // immediately return if policy is not activated
         | 
| 612 | 
            +
                    if (expiredAt.eqz()) {
         | 
| 613 | 
            +
                        return;
         | 
| 614 | 
            +
                    }
         | 
| 615 | 
            +
             | 
| 616 | 
            +
                    // get policy holder address
         | 
| 617 | 
            +
                    IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
         | 
| 618 | 
            +
             | 
| 619 | 
            +
                    // execute callback if policy holder implements IPolicyHolder
         | 
| 620 | 
            +
                    if (address(policyHolder) != address(0)) {
         | 
| 621 | 
            +
                        policyHolder.policyExpired(policyNftId, expiredAt);
         | 
| 622 | 
            +
                    }
         | 
| 623 | 
            +
                }
         | 
| 624 | 
            +
             | 
| 625 | 
            +
             | 
| 626 | 
            +
                function _getPolicyHolder(NftId policyNftId)
         | 
| 627 | 
            +
                    internal 
         | 
| 628 | 
            +
                    view 
         | 
| 629 | 
            +
                    returns (IPolicyHolder policyHolder)
         | 
| 630 | 
            +
                {
         | 
| 631 | 
            +
                    address policyHolderAddress = getRegistry().ownerOf(policyNftId);
         | 
| 632 | 
            +
                    policyHolder = IPolicyHolder(policyHolderAddress);
         | 
| 633 | 
            +
             | 
| 634 | 
            +
                    if (!ContractLib.isPolicyHolder(policyHolderAddress)) {
         | 
| 635 | 
            +
                        policyHolder = IPolicyHolder(address(0));
         | 
| 636 | 
            +
                    }
         | 
| 637 | 
            +
                }
         | 
| 638 | 
            +
             | 
| 639 | 
            +
             | 
| 640 | 
            +
                function _getTokenHandler(
         | 
| 438 641 | 
             
                    InstanceReader instanceReader,
         | 
| 439 642 | 
             
                    NftId productNftId
         | 
| 440 643 | 
             
                )
         | 
| @@ -448,6 +651,7 @@ contract PolicyService is | |
| 448 651 | 
             
                    tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
         | 
| 449 652 | 
             
                }
         | 
| 450 653 |  | 
| 654 | 
            +
             | 
| 451 655 | 
             
                function _getDistributionNftAndWallets(
         | 
| 452 656 | 
             
                    InstanceReader instanceReader,
         | 
| 453 657 | 
             
                    NftId productNftId
         | 
| @@ -469,6 +673,13 @@ contract PolicyService is | |
| 469 673 | 
             
                }
         | 
| 470 674 |  | 
| 471 675 |  | 
| 676 | 
            +
                function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
         | 
| 677 | 
            +
                    IRegistry.ObjectInfo memory productInfo;
         | 
| 678 | 
            +
                    (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 679 | 
            +
                    product = Product(productInfo.objectAddress);
         | 
| 680 | 
            +
                }
         | 
| 681 | 
            +
             | 
| 682 | 
            +
             | 
| 472 683 | 
             
                function _getDomain() internal pure override returns(ObjectType) {
         | 
| 473 684 | 
             
                    return POLICY();
         | 
| 474 685 | 
             
                }
         |