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