@etherisc/gif-next 0.0.2-7afe9ac-654 → 0.0.2-7b09b39-121
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 +16 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +2 -2
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +30 -60
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +0 -38
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +93 -96
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +45 -49
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +2 -2
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +80 -122
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +72 -194
- 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 +2 -2
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +18 -48
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
- 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/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +0 -38
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +11 -99
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +288 -67
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +78 -34
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +134 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1 -57
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +189 -54
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +1 -95
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +337 -90
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +75 -19
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +21 -32
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +9 -17
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +0 -38
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +82 -58
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +34 -30
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +184 -88
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +291 -139
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +54 -26
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +7 -2
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +0 -38
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +2 -2
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
- 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 +0 -38
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +148 -76
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +47 -39
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +56 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +0 -38
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +53 -6
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +12 -2
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +56 -70
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +29 -17
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +12 -12
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +17 -12
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +7 -2
- 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 +13 -8
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- 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/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -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 +2 -2
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/distribution/BasicDistribution.sol +4 -15
- package/contracts/distribution/Distribution.sol +3 -9
- package/contracts/distribution/DistributionService.sol +11 -13
- package/contracts/instance/InstanceReader.sol +10 -7
- package/contracts/instance/InstanceStore.sol +2 -1
- package/contracts/instance/base/ObjectLifecycle.sol +2 -3
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +1 -6
- package/contracts/instance/module/IDistribution.sol +0 -1
- package/contracts/instance/module/IPolicy.sol +1 -1
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/Oracle.sol +2 -6
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +5 -2
- package/contracts/pool/BundleService.sol +126 -16
- package/contracts/pool/IBundleService.sol +21 -6
- package/contracts/pool/IPoolService.sol +15 -16
- package/contracts/pool/Pool.sol +14 -14
- package/contracts/pool/PoolService.sol +174 -48
- package/contracts/product/ApplicationService.sol +35 -15
- package/contracts/product/BasicProduct.sol +3 -33
- package/contracts/product/ClaimService.sol +16 -8
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +1 -0
- package/contracts/product/IPolicyService.sol +19 -12
- package/contracts/product/PolicyService.sol +189 -108
- package/contracts/product/PricingService.sol +5 -1
- package/contracts/product/Product.sol +22 -1
- package/contracts/registry/ReleaseRegistry.sol +0 -2
- package/contracts/shared/Component.sol +8 -7
- package/contracts/shared/ComponentService.sol +34 -4
- package/contracts/shared/IComponent.sol +4 -3
- package/contracts/shared/IComponentService.sol +5 -9
- package/contracts/shared/IInstanceLinkedComponent.sol +8 -8
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
- package/contracts/shared/NftOwnable.sol +2 -2
- package/contracts/shared/PolicyHolder.sol +2 -5
- package/contracts/shared/TokenHandler.sol +4 -0
- package/contracts/staking/Staking.sol +3 -1
- package/contracts/staking/StakingService.sol +8 -12
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/Seconds.sol +13 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +26 -8
- package/package.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
@@ -1,26 +1,21 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
|
4
6
|
import {IRegistry} from "../registry/IRegistry.sol";
|
5
7
|
import {Product} from "./Product.sol";
|
6
8
|
import {IComponents} from "../instance/module/IComponents.sol";
|
7
|
-
import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
|
8
9
|
import {IInstance} from "../instance/IInstance.sol";
|
9
10
|
import {IPolicy} from "../instance/module/IPolicy.sol";
|
10
|
-
import {IPoolComponent} from "../pool/IPoolComponent.sol";
|
11
|
-
import {IRisk} from "../instance/module/IRisk.sol";
|
12
|
-
import {IBundle} from "../instance/module/IBundle.sol";
|
13
11
|
|
14
12
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
15
13
|
|
16
14
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
17
|
-
import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
|
18
15
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
|
19
|
-
import {UFixed, UFixedLib} from "../type/UFixed.sol";
|
20
16
|
import {ObjectType, APPLICATION, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
|
21
|
-
import {APPLIED, COLLATERALIZED,
|
17
|
+
import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED} from "../type/StateId.sol";
|
22
18
|
import {NftId, NftIdLib} from "../type/NftId.sol";
|
23
|
-
import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
|
24
19
|
import {ReferralId} from "../type/Referral.sol";
|
25
20
|
import {StateId} from "../type/StateId.sol";
|
26
21
|
import {VersionPart} from "../type/Version.sol";
|
@@ -36,8 +31,6 @@ import {InstanceStore} from "../instance/InstanceStore.sol";
|
|
36
31
|
import {IPolicyService} from "./IPolicyService.sol";
|
37
32
|
import {IPoolService} from "../pool/IPoolService.sol";
|
38
33
|
import {IPricingService} from "./IPricingService.sol";
|
39
|
-
import {IService} from "../shared/IService.sol";
|
40
|
-
import {Service} from "../shared/Service.sol";
|
41
34
|
|
42
35
|
contract PolicyService is
|
43
36
|
ComponentVerifyingService,
|
@@ -90,20 +83,43 @@ contract PolicyService is
|
|
90
83
|
(, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
|
91
84
|
product = Product(productInfo.objectAddress);
|
92
85
|
}
|
93
|
-
|
86
|
+
|
94
87
|
|
95
88
|
function decline(
|
96
|
-
NftId policyNftId
|
89
|
+
NftId applicationNftId // = policyNftId
|
97
90
|
)
|
98
91
|
external
|
99
|
-
override
|
92
|
+
virtual override
|
100
93
|
{
|
101
|
-
|
94
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
|
95
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
96
|
+
|
97
|
+
// check policy is in state applied
|
98
|
+
if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
|
99
|
+
revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
|
100
|
+
}
|
101
|
+
|
102
|
+
// check policy matches with calling product
|
103
|
+
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
104
|
+
if(applicationInfo.productNftId != productNftId) {
|
105
|
+
revert ErrorPolicyServicePolicyProductMismatch(
|
106
|
+
applicationNftId,
|
107
|
+
applicationInfo.productNftId,
|
108
|
+
productNftId);
|
109
|
+
}
|
110
|
+
|
111
|
+
|
112
|
+
// store updated policy info
|
113
|
+
instance.getInstanceStore().updatePolicyState(
|
114
|
+
applicationNftId,
|
115
|
+
DECLINED());
|
116
|
+
|
117
|
+
emit LogPolicyServicePolicyDeclined(applicationNftId);
|
102
118
|
}
|
103
119
|
|
104
120
|
event LogDebug(uint idx, string message);
|
105
121
|
|
106
|
-
/// @
|
122
|
+
/// @inheritdoc IPolicyService
|
107
123
|
function collateralize(
|
108
124
|
NftId applicationNftId, // = policyNftId
|
109
125
|
bool requirePremiumPayment,
|
@@ -146,19 +162,20 @@ contract PolicyService is
|
|
146
162
|
|
147
163
|
// optional activation of policy
|
148
164
|
if(activateAt > zeroTimestamp()) {
|
149
|
-
newPolicyState = ACTIVE();
|
150
165
|
applicationInfo.activatedAt = activateAt;
|
151
166
|
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
152
167
|
}
|
153
168
|
|
154
|
-
|
169
|
+
IPolicy.Premium memory premium;
|
170
|
+
|
171
|
+
// optional: calculate the premium and update counters for collection at the end of this function
|
155
172
|
if(requirePremiumPayment) {
|
156
|
-
|
173
|
+
premium = _calculateAndProcessPremium(
|
157
174
|
instance,
|
158
175
|
applicationNftId,
|
159
176
|
applicationInfo);
|
160
177
|
|
161
|
-
applicationInfo.premiumPaidAmount =
|
178
|
+
applicationInfo.premiumPaidAmount = AmountLib.toAmount(premium.premiumAmount);
|
162
179
|
}
|
163
180
|
|
164
181
|
// store updated policy info
|
@@ -170,9 +187,14 @@ contract PolicyService is
|
|
170
187
|
// TODO add calling pool contract if it needs to validate application
|
171
188
|
|
172
189
|
// TODO: add logging
|
173
|
-
}
|
174
190
|
|
191
|
+
// optional: transfer funds for premium
|
192
|
+
if(requirePremiumPayment) {
|
193
|
+
_transferFunds(instanceReader, applicationNftId, applicationInfo.productNftId, premium);
|
194
|
+
}
|
195
|
+
}
|
175
196
|
|
197
|
+
/// @inheritdoc IPolicyService
|
176
198
|
function collectPremium(
|
177
199
|
NftId policyNftId,
|
178
200
|
Timestamp activateAt
|
@@ -186,8 +208,8 @@ contract PolicyService is
|
|
186
208
|
StateId stateId = instanceReader.getPolicyState(policyNftId);
|
187
209
|
|
188
210
|
// check policy is in state collateralized or active
|
189
|
-
if (!(stateId == COLLATERALIZED()
|
190
|
-
revert
|
211
|
+
if (!(stateId == COLLATERALIZED())) {
|
212
|
+
revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
|
191
213
|
}
|
192
214
|
|
193
215
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -197,11 +219,14 @@ contract PolicyService is
|
|
197
219
|
revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
|
198
220
|
}
|
199
221
|
|
200
|
-
|
222
|
+
// calculate premium
|
223
|
+
IPolicy.Premium memory premium = _calculateAndProcessPremium(
|
201
224
|
instance,
|
202
225
|
policyNftId,
|
203
226
|
policyInfo);
|
204
227
|
|
228
|
+
policyInfo.premiumPaidAmount = AmountLib.toAmount(premium.premiumAmount);
|
229
|
+
|
205
230
|
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
206
231
|
|
207
232
|
if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
|
@@ -209,8 +234,11 @@ contract PolicyService is
|
|
209
234
|
}
|
210
235
|
|
211
236
|
// TODO: add logging
|
237
|
+
|
238
|
+
_transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
|
212
239
|
}
|
213
240
|
|
241
|
+
/// @inheritdoc IPolicyService
|
214
242
|
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
215
243
|
// check caller is registered product
|
216
244
|
(,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
|
@@ -218,27 +246,66 @@ contract PolicyService is
|
|
218
246
|
|
219
247
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
220
248
|
|
221
|
-
|
222
|
-
|
223
|
-
|
249
|
+
if(! policyInfo.activatedAt.eqz()) {
|
250
|
+
revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
|
251
|
+
}
|
224
252
|
|
225
253
|
policyInfo.activatedAt = activateAt;
|
226
254
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
227
255
|
|
228
|
-
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo,
|
256
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
229
257
|
|
230
258
|
// TODO: add logging
|
231
259
|
}
|
232
260
|
|
233
|
-
|
261
|
+
/// @inheritdoc IPolicyService
|
234
262
|
function expire(
|
235
|
-
NftId policyNftId
|
263
|
+
NftId policyNftId,
|
264
|
+
Timestamp expireAt
|
236
265
|
)
|
237
266
|
external
|
238
267
|
override
|
239
|
-
|
268
|
+
virtual
|
269
|
+
returns (Timestamp)
|
240
270
|
{
|
241
|
-
|
271
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
|
272
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
273
|
+
|
274
|
+
// check policy matches with calling product
|
275
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
276
|
+
if(policyInfo.productNftId != productNftId) {
|
277
|
+
revert ErrorPolicyServicePolicyProductMismatch(
|
278
|
+
policyNftId,
|
279
|
+
policyInfo.productNftId,
|
280
|
+
productNftId);
|
281
|
+
}
|
282
|
+
|
283
|
+
// check policy is active
|
284
|
+
StateId policyState = instanceReader.getPolicyState(policyNftId);
|
285
|
+
if (!_policyHasBeenActivated(policyState, policyInfo)) {
|
286
|
+
revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
|
287
|
+
}
|
288
|
+
|
289
|
+
// set expiryAt to current block timestamp if not set
|
290
|
+
if (expireAt.eqz()) {
|
291
|
+
expireAt = TimestampLib.blockTimestamp();
|
292
|
+
}
|
293
|
+
|
294
|
+
// check expiryAt represents a valid expiry time
|
295
|
+
if (expireAt >= policyInfo.expiredAt) {
|
296
|
+
revert ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
|
297
|
+
}
|
298
|
+
if (expireAt < TimestampLib.blockTimestamp()) {
|
299
|
+
revert ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
|
300
|
+
}
|
301
|
+
|
302
|
+
// update policyInfo with new expiryAt timestamp
|
303
|
+
policyInfo.expiredAt = expireAt;
|
304
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
305
|
+
|
306
|
+
emit LogPolicyServicePolicyExpirationUpdated(policyNftId, expireAt);
|
307
|
+
|
308
|
+
return expireAt;
|
242
309
|
}
|
243
310
|
|
244
311
|
function close(
|
@@ -250,19 +317,21 @@ contract PolicyService is
|
|
250
317
|
(,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
|
251
318
|
InstanceReader instanceReader = instance.getInstanceReader();
|
252
319
|
|
320
|
+
// check that policy has been activated
|
253
321
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
254
|
-
|
255
|
-
if (policyInfo
|
256
|
-
revert
|
322
|
+
StateId policyState = instanceReader.getPolicyState(policyNftId);
|
323
|
+
if (!_policyHasBeenActivated(policyState, policyInfo)) {
|
324
|
+
revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
|
257
325
|
}
|
258
326
|
|
259
|
-
|
260
|
-
if (
|
261
|
-
revert
|
327
|
+
// check that policy has not already been closed
|
328
|
+
if (policyInfo.closedAt.gtz()) {
|
329
|
+
revert ErrorPolicyServicePolicyAlreadyClosed(policyNftId);
|
262
330
|
}
|
263
331
|
|
264
|
-
|
265
|
-
|
332
|
+
// check that policy does not have any open claims
|
333
|
+
if (policyInfo.openClaimsCount > 0) {
|
334
|
+
revert ErrorPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
266
335
|
}
|
267
336
|
|
268
337
|
// TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
|
@@ -270,23 +339,37 @@ contract PolicyService is
|
|
270
339
|
revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
|
271
340
|
}
|
272
341
|
|
273
|
-
|
274
|
-
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
275
|
-
}
|
276
|
-
|
277
|
-
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
278
|
-
|
342
|
+
// release (remaining) collateral that was blocked by policy
|
279
343
|
_poolService.releaseCollateral(
|
280
344
|
instance,
|
281
345
|
address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
|
282
346
|
policyNftId,
|
283
347
|
policyInfo);
|
284
348
|
|
349
|
+
// update policy state to closed
|
350
|
+
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
285
351
|
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
|
286
352
|
}
|
287
353
|
|
288
354
|
|
289
|
-
|
355
|
+
/// @dev checks that policy has been collateralized and has been activated.
|
356
|
+
/// does not check if policy has been expired or closed.
|
357
|
+
function _policyHasBeenActivated(
|
358
|
+
StateId policyState,
|
359
|
+
IPolicy.PolicyInfo memory policyInfo
|
360
|
+
)
|
361
|
+
internal
|
362
|
+
view
|
363
|
+
returns (bool)
|
364
|
+
{
|
365
|
+
if (policyState != COLLATERALIZED()) { return false; }
|
366
|
+
if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) { return false; }
|
367
|
+
return true;
|
368
|
+
}
|
369
|
+
|
370
|
+
|
371
|
+
/// @dev calculates the premium and updates all counters in the other services
|
372
|
+
function _calculateAndProcessPremium(
|
290
373
|
IInstance instance,
|
291
374
|
NftId applicationNftId,
|
292
375
|
IPolicy.PolicyInfo memory applicationInfo
|
@@ -294,13 +377,14 @@ contract PolicyService is
|
|
294
377
|
internal
|
295
378
|
virtual
|
296
379
|
returns (
|
297
|
-
|
380
|
+
IPolicy.Premium memory premium
|
298
381
|
)
|
299
382
|
{
|
300
383
|
NftId productNftId = applicationInfo.productNftId;
|
384
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
301
385
|
|
302
386
|
// calculate premium details
|
303
|
-
|
387
|
+
premium = _pricingService.calculatePremium(
|
304
388
|
productNftId,
|
305
389
|
applicationInfo.riskId,
|
306
390
|
applicationInfo.sumInsuredAmount,
|
@@ -309,90 +393,63 @@ contract PolicyService is
|
|
309
393
|
applicationInfo.bundleNftId,
|
310
394
|
applicationInfo.referralId);
|
311
395
|
|
396
|
+
// ensure the calculated premium is not higher than the expected premium from the application
|
397
|
+
if (applicationInfo.premiumAmount.toInt() < premium.premiumAmount) {
|
398
|
+
revert ErrorPolicyServicePremiumHigherThanExpected(applicationInfo.premiumAmount.toInt(), premium.premiumAmount);
|
399
|
+
}
|
312
400
|
|
313
|
-
//
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
function _processAndCollect(
|
326
|
-
IInstance instance,
|
327
|
-
NftId productNftId,
|
328
|
-
NftId policyNftId,
|
329
|
-
Amount premiumExpectedAmount,
|
330
|
-
NftId bundleNftId,
|
331
|
-
ReferralId referralId,
|
332
|
-
IPolicy.Premium memory premium
|
333
|
-
)
|
334
|
-
internal
|
335
|
-
virtual
|
336
|
-
returns (Amount premiumPaidAmount)
|
337
|
-
{
|
338
|
-
InstanceReader instanceReader = instance.getInstanceReader();
|
339
|
-
TokenHandler tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
|
340
|
-
address policyHolder = getRegistry().ownerOf(policyNftId);
|
341
|
-
premiumPaidAmount = AmountLib.toAmount(premium.premiumAmount);
|
342
|
-
|
343
|
-
_checkPremiumBalanceAndAllowance(
|
344
|
-
tokenHandler,
|
345
|
-
policyHolder,
|
346
|
-
premiumExpectedAmount,
|
347
|
-
premiumPaidAmount);
|
401
|
+
// check if premium balance and allowance of policy holder is sufficient
|
402
|
+
{
|
403
|
+
TokenHandler tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
|
404
|
+
address policyHolder = getRegistry().ownerOf(applicationNftId);
|
405
|
+
|
406
|
+
_checkPremiumBalanceAndAllowance(
|
407
|
+
tokenHandler.getToken(),
|
408
|
+
address(tokenHandler),
|
409
|
+
policyHolder,
|
410
|
+
applicationInfo.premiumAmount,
|
411
|
+
AmountLib.toAmount(premium.premiumAmount));
|
412
|
+
}
|
348
413
|
|
349
|
-
|
414
|
+
// update the counters
|
415
|
+
_processSale(
|
350
416
|
instanceReader,
|
351
417
|
instance.getInstanceStore(),
|
352
|
-
tokenHandler,
|
353
|
-
policyHolder,
|
354
418
|
productNftId,
|
355
|
-
bundleNftId,
|
356
|
-
referralId,
|
419
|
+
applicationInfo.bundleNftId,
|
420
|
+
applicationInfo.referralId,
|
357
421
|
premium);
|
358
422
|
}
|
359
423
|
|
360
|
-
|
424
|
+
/// @dev checks the balance and allowance of the policy holder
|
361
425
|
function _checkPremiumBalanceAndAllowance(
|
362
|
-
|
426
|
+
IERC20Metadata token,
|
427
|
+
address tokenHandlerAddress,
|
363
428
|
address policyHolder,
|
364
429
|
Amount premiumExpectedAmount,
|
365
|
-
Amount
|
430
|
+
Amount premiumAmount
|
366
431
|
)
|
367
432
|
internal
|
368
433
|
virtual
|
369
434
|
view
|
370
435
|
{
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
revert ErrorPolicyServicePremiumHigherThanExpected(premiumExpectedAmount, premiumPaidAmount);
|
375
|
-
}
|
376
|
-
|
377
|
-
uint256 premiumAmount = premiumPaidAmount.toInt();
|
378
|
-
uint256 balance = tokenHandler.getToken().balanceOf(policyHolder);
|
379
|
-
uint256 allowance = tokenHandler.getToken().allowance(policyHolder, address(tokenHandler));
|
436
|
+
uint256 premium = premiumAmount.toInt();
|
437
|
+
uint256 balance = token.balanceOf(policyHolder);
|
438
|
+
uint256 allowance = token.allowance(policyHolder, tokenHandlerAddress);
|
380
439
|
|
381
|
-
if (balance <
|
382
|
-
revert ErrorPolicyServiceBalanceInsufficient(policyHolder,
|
440
|
+
if (balance < premium) {
|
441
|
+
revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premium, balance);
|
383
442
|
}
|
384
443
|
|
385
|
-
if (allowance <
|
386
|
-
revert ErrorPolicyServiceAllowanceInsufficient(policyHolder,
|
444
|
+
if (allowance < premium) {
|
445
|
+
revert ErrorPolicyServiceAllowanceInsufficient(policyHolder, tokenHandlerAddress, premium, allowance);
|
387
446
|
}
|
388
447
|
}
|
389
448
|
|
390
|
-
|
391
|
-
function
|
449
|
+
/// @dev update counters by calling the involved services
|
450
|
+
function _processSale(
|
392
451
|
InstanceReader instanceReader,
|
393
452
|
InstanceStore instanceStore,
|
394
|
-
TokenHandler tokenHandler,
|
395
|
-
address policyHolder,
|
396
453
|
NftId productNftId,
|
397
454
|
NftId bundleNftId,
|
398
455
|
ReferralId referralId,
|
@@ -426,7 +483,31 @@ contract PolicyService is
|
|
426
483
|
_poolService.processSale(
|
427
484
|
bundleNftId,
|
428
485
|
premium);
|
486
|
+
}
|
487
|
+
|
488
|
+
/// @dev transfer the premium to the wallets the premium is distributed to
|
489
|
+
function _transferFunds(
|
490
|
+
InstanceReader instanceReader,
|
491
|
+
NftId policyNftId,
|
492
|
+
NftId productNftId,
|
493
|
+
IPolicy.Premium memory premium
|
494
|
+
)
|
495
|
+
internal
|
496
|
+
virtual
|
497
|
+
{
|
498
|
+
TokenHandler tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
|
499
|
+
address policyHolder = getRegistry().ownerOf(policyNftId);
|
500
|
+
|
501
|
+
(
|
502
|
+
NftId distributionNftId,
|
503
|
+
address distributionWallet,
|
504
|
+
address poolWallet,
|
505
|
+
address productWallet
|
506
|
+
) = _getDistributionNftAndWallets(
|
507
|
+
instanceReader,
|
508
|
+
productNftId);
|
429
509
|
|
510
|
+
// TODO: centralize token handling (issue #471)
|
430
511
|
// transfer premium amounts to target wallets
|
431
512
|
tokenHandler.transfer(policyHolder, productWallet, premium.productFeeAmount);
|
432
513
|
tokenHandler.transfer(policyHolder, distributionWallet, premium.distributionFeeAndCommissionAmount);
|
@@ -84,6 +84,7 @@ contract PricingService is
|
|
84
84
|
IInstance instance
|
85
85
|
) = _getAndVerifyComponentInfo(productNftId, PRODUCT(), false);
|
86
86
|
|
87
|
+
// get instance reader from local instance variable
|
87
88
|
reader = instance.getInstanceReader();
|
88
89
|
|
89
90
|
// calculate net premium
|
@@ -104,19 +105,21 @@ contract PricingService is
|
|
104
105
|
revert ErrorIPricingServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, productInfo.poolNftId);
|
105
106
|
}
|
106
107
|
|
107
|
-
// calculate
|
108
|
+
// calculate fixed fees for product, pool, bundle
|
108
109
|
premium = _getFixedFeeAmounts(
|
109
110
|
netPremiumAmount,
|
110
111
|
productInfo,
|
111
112
|
bundleInfo
|
112
113
|
);
|
113
114
|
|
115
|
+
// calculate variable fees for product, pool, bundle
|
114
116
|
premium = _calculateVariableFeeAmounts(
|
115
117
|
premium,
|
116
118
|
productInfo,
|
117
119
|
bundleInfo
|
118
120
|
);
|
119
121
|
|
122
|
+
// calculate distribution fee and (if applicable) commission
|
120
123
|
premium = _calculateDistributionOwnerFeeAmount(
|
121
124
|
premium,
|
122
125
|
productInfo,
|
@@ -124,6 +127,7 @@ contract PricingService is
|
|
124
127
|
reader
|
125
128
|
);
|
126
129
|
|
130
|
+
// calculate resulting amounts for product, pool, and distribution wallets
|
127
131
|
premium = _calculateTargetWalletAmounts(premium);
|
128
132
|
|
129
133
|
// sanity check to validate the fee calculation
|
@@ -62,7 +62,7 @@ abstract contract Product is
|
|
62
62
|
NftId bundleNftId,
|
63
63
|
ReferralId referralId
|
64
64
|
)
|
65
|
-
|
65
|
+
public
|
66
66
|
view
|
67
67
|
override
|
68
68
|
returns (Amount premiumAmount)
|
@@ -233,6 +233,7 @@ abstract contract Product is
|
|
233
233
|
address applicationOwner,
|
234
234
|
RiskId riskId,
|
235
235
|
Amount sumInsuredAmount,
|
236
|
+
Amount premiumAmount,
|
236
237
|
Seconds lifetime,
|
237
238
|
NftId bundleNftId,
|
238
239
|
ReferralId referralId,
|
@@ -245,6 +246,7 @@ abstract contract Product is
|
|
245
246
|
applicationOwner,
|
246
247
|
riskId,
|
247
248
|
sumInsuredAmount,
|
249
|
+
premiumAmount,
|
248
250
|
lifetime,
|
249
251
|
bundleNftId,
|
250
252
|
referralId,
|
@@ -265,6 +267,25 @@ abstract contract Product is
|
|
265
267
|
activateAt);
|
266
268
|
}
|
267
269
|
|
270
|
+
function _decline(
|
271
|
+
NftId policyNftId
|
272
|
+
)
|
273
|
+
internal
|
274
|
+
{
|
275
|
+
_getProductStorage()._policyService.decline(
|
276
|
+
policyNftId);
|
277
|
+
}
|
278
|
+
|
279
|
+
function _expire(
|
280
|
+
NftId policyNftId,
|
281
|
+
Timestamp expireAt
|
282
|
+
)
|
283
|
+
internal
|
284
|
+
returns (Timestamp)
|
285
|
+
{
|
286
|
+
return _getProductStorage()._policyService.expire(policyNftId, expireAt);
|
287
|
+
}
|
288
|
+
|
268
289
|
function _collectPremium(
|
269
290
|
NftId policyNftId,
|
270
291
|
Timestamp activateAt
|
@@ -32,8 +32,6 @@ import {Registry} from "./Registry.sol";
|
|
32
32
|
import {TokenRegistry} from "./TokenRegistry.sol";
|
33
33
|
import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
|
34
34
|
|
35
|
-
// TODO rename to something that does not end with 'Manager'
|
36
|
-
// everywhere else *Manager points to an upgradeable contract
|
37
35
|
contract ReleaseRegistry is
|
38
36
|
AccessManaged,
|
39
37
|
ReleaseLifecycle,
|
@@ -6,7 +6,7 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana
|
|
6
6
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
7
7
|
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
8
8
|
|
9
|
-
import {Amount} from "../type/Amount.sol";
|
9
|
+
import {Amount, AmountLib} from "../type/Amount.sol";
|
10
10
|
import {IComponent} from "./IComponent.sol";
|
11
11
|
import {IComponents} from "../instance/module/IComponents.sol";
|
12
12
|
import {NftId, NftIdLib} from "../type/NftId.sol";
|
@@ -109,11 +109,11 @@ abstract contract Component is
|
|
109
109
|
revert ErrorComponentWalletNotComponent();
|
110
110
|
}
|
111
111
|
|
112
|
+
emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
|
113
|
+
|
112
114
|
IERC20Metadata(token).approve(
|
113
115
|
address(getTokenHandler()),
|
114
116
|
spendingLimitAmount.toInt());
|
115
|
-
|
116
|
-
emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
|
117
117
|
}
|
118
118
|
|
119
119
|
function setWallet(address newWallet)
|
@@ -132,7 +132,7 @@ abstract contract Component is
|
|
132
132
|
// move tokens from component smart contract to external wallet
|
133
133
|
} else {
|
134
134
|
// move tokens from external wallet to component smart contract or another external wallet
|
135
|
-
uint256 allowance = token.allowance(currentWallet, address(
|
135
|
+
uint256 allowance = token.allowance(currentWallet, address(getTokenHandler()));
|
136
136
|
if (allowance < currentBalance) {
|
137
137
|
revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
|
138
138
|
}
|
@@ -144,14 +144,15 @@ abstract contract Component is
|
|
144
144
|
|
145
145
|
// interactions
|
146
146
|
if (currentBalance > 0) {
|
147
|
+
emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
|
148
|
+
|
147
149
|
// transfer tokens from current wallet to new wallet
|
148
150
|
if (currentWallet == address(this)) {
|
149
151
|
// transferFrom requires self allowance too
|
150
|
-
token.approve(address(
|
152
|
+
token.approve(address(getTokenHandler()), currentBalance);
|
151
153
|
}
|
152
154
|
|
153
|
-
|
154
|
-
emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
|
155
|
+
getTokenHandler().transfer(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
|
155
156
|
}
|
156
157
|
}
|
157
158
|
|