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