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