@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
|
}
|