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