@etherisc/gif-next 0.0.2-caf7ec3-284 → 0.0.2-cb0658a-785
Sign up to get free protection for your applications and to get access to all the features.
- 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 +2 -2
- 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/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +94 -108
- 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/distribution/IDistributionService.sol/IDistributionService.json +1 -12
- 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/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 +2 -2
- 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/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 +34 -60
- 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 +426 -50
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +102 -26
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +224 -0
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +25 -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 +25 -57
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +289 -90
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +51 -19
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- 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 +2 -2
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +86 -1
- 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 +169 -52
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +42 -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/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/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +132 -76
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +39 -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/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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
- 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 +37 -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/Referral.sol/ReferralLib.json +2 -2
- 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 +12 -27
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +2 -3
- package/contracts/instance/InstanceReader.sol +10 -7
- package/contracts/instance/InstanceStore.sol +2 -1
- 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/mock/Dip.sol +1 -1
- package/contracts/oracle/Oracle.sol +2 -6
- package/contracts/pool/BasicPool.sol +5 -3
- package/contracts/pool/BasicPoolAuthorization.sol +7 -1
- package/contracts/pool/BundleService.sol +170 -12
- package/contracts/pool/IBundleService.sol +31 -4
- package/contracts/pool/IPoolComponent.sol +7 -0
- package/contracts/pool/IPoolService.sol +15 -16
- package/contracts/pool/Pool.sol +30 -13
- package/contracts/pool/PoolService.sol +147 -47
- package/contracts/product/BasicProduct.sol +3 -33
- package/contracts/product/ClaimService.sol +2 -1
- package/contracts/product/IPolicyService.sol +8 -2
- package/contracts/product/PolicyService.sol +72 -18
- package/contracts/product/Product.sol +19 -0
- package/contracts/registry/ReleaseRegistry.sol +0 -2
- package/contracts/shared/ComponentService.sol +32 -3
- package/contracts/shared/IComponentService.sol +5 -9
- 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/staking/Staking.sol +3 -1
- package/contracts/type/Amount.sol +12 -5
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/Referral.sol +1 -0
- package/contracts/type/Seconds.sol +13 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +29 -10
- package/package.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
@@ -1,6 +1,9 @@
|
|
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
|
+
|
6
|
+
import {IBundle} from "../instance/module/IBundle.sol";
|
4
7
|
import {IBundleService} from "./IBundleService.sol";
|
5
8
|
import {IComponents} from "../instance/module/IComponents.sol";
|
6
9
|
import {IComponentService} from "../shared/IComponentService.sol";
|
@@ -14,7 +17,7 @@ import {IStaking} from "../staking/IStaking.sol";
|
|
14
17
|
|
15
18
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
16
19
|
import {Fee, FeeLib} from "../type/Fee.sol";
|
17
|
-
import {NftId
|
20
|
+
import {NftId} from "../type/NftId.sol";
|
18
21
|
import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
|
19
22
|
import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
|
20
23
|
import {Fee, FeeLib} from "../type/Fee.sol";
|
@@ -32,9 +35,6 @@ contract PoolService is
|
|
32
35
|
ComponentVerifyingService,
|
33
36
|
IPoolService
|
34
37
|
{
|
35
|
-
using NftIdLib for NftId;
|
36
|
-
using AmountLib for Amount;
|
37
|
-
|
38
38
|
IBundleService internal _bundleService;
|
39
39
|
IComponentService internal _componentService;
|
40
40
|
IInstanceService private _instanceService;
|
@@ -68,24 +68,20 @@ contract PoolService is
|
|
68
68
|
registerInterface(type(IPoolService).interfaceId);
|
69
69
|
}
|
70
70
|
|
71
|
-
|
72
|
-
function
|
71
|
+
/// @inheritdoc IPoolService
|
72
|
+
function setMaxBalanceAmount(Amount maxBalanceAmount)
|
73
73
|
external
|
74
74
|
virtual
|
75
75
|
{
|
76
|
-
/*
|
77
76
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
78
77
|
InstanceReader instanceReader = instance.getInstanceReader();
|
78
|
+
IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
|
79
79
|
|
80
|
-
|
81
|
-
|
82
|
-
Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
|
83
|
-
|
84
|
-
poolInfo.maxCapitalAmount = maxCapitalAmount;
|
80
|
+
Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
|
81
|
+
poolInfo.maxBalanceAmount = maxBalanceAmount;
|
85
82
|
instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
|
86
83
|
|
87
|
-
emit
|
88
|
-
*/
|
84
|
+
emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
|
89
85
|
}
|
90
86
|
|
91
87
|
function setBundleOwnerRole(RoleId bundleOwnerRole)
|
@@ -109,27 +105,7 @@ contract PoolService is
|
|
109
105
|
emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
|
110
106
|
}
|
111
107
|
|
112
|
-
|
113
|
-
function setFees(
|
114
|
-
Fee memory poolFee,
|
115
|
-
Fee memory stakingFee,
|
116
|
-
Fee memory performanceFee
|
117
|
-
)
|
118
|
-
external
|
119
|
-
virtual
|
120
|
-
{
|
121
|
-
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
122
|
-
|
123
|
-
IComponents.PoolInfo memory poolInfo = instance.getInstanceReader().getPoolInfo(poolNftId);
|
124
|
-
poolInfo.poolFee = poolFee;
|
125
|
-
poolInfo.stakingFee = stakingFee;
|
126
|
-
poolInfo.performanceFee = performanceFee;
|
127
|
-
|
128
|
-
instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
|
129
|
-
|
130
|
-
// TODO add logging
|
131
|
-
}
|
132
|
-
|
108
|
+
/// @inheritdoc IPoolService
|
133
109
|
function createBundle(
|
134
110
|
address bundleOwner, // initial bundle owner
|
135
111
|
Fee memory fee, // fees deducted from premium that go to bundle owner
|
@@ -139,24 +115,32 @@ contract PoolService is
|
|
139
115
|
)
|
140
116
|
external
|
141
117
|
virtual
|
142
|
-
returns(NftId bundleNftId)
|
118
|
+
returns(NftId bundleNftId, Amount netStakedAmount)
|
143
119
|
{
|
144
120
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
145
|
-
InstanceReader instanceReader = instance.getInstanceReader();
|
146
121
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
122
|
+
{
|
123
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
124
|
+
IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
|
125
|
+
Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
|
126
|
+
if (currentPoolBalance + stakingAmount > poolInfo.maxBalanceAmount) {
|
127
|
+
revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, stakingAmount);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
|
131
|
+
|
132
|
+
Amount stakingFeeAmount;
|
133
|
+
(stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
|
134
|
+
_getStakingFee(instance.getInstanceReader(), poolNftId),
|
152
135
|
stakingAmount);
|
153
136
|
|
137
|
+
|
154
138
|
bundleNftId = _bundleService.create(
|
155
139
|
instance,
|
156
140
|
poolNftId,
|
157
141
|
bundleOwner,
|
158
142
|
fee,
|
159
|
-
|
143
|
+
netStakedAmount,
|
160
144
|
lifetime,
|
161
145
|
filter);
|
162
146
|
|
@@ -164,12 +148,12 @@ contract PoolService is
|
|
164
148
|
_componentService.increasePoolBalance(
|
165
149
|
instance.getInstanceStore(),
|
166
150
|
poolNftId,
|
167
|
-
|
151
|
+
netStakedAmount,
|
168
152
|
stakingFeeAmount);
|
169
153
|
|
170
154
|
// pool bookkeeping and collect tokens from bundle owner
|
171
155
|
_collectStakingAmount(
|
172
|
-
|
156
|
+
instance.getInstanceReader(),
|
173
157
|
poolNftId,
|
174
158
|
bundleOwner,
|
175
159
|
stakingAmount);
|
@@ -183,8 +167,8 @@ contract PoolService is
|
|
183
167
|
view
|
184
168
|
returns (Fee memory stakingFee)
|
185
169
|
{
|
186
|
-
NftId productNftId = instanceReader.
|
187
|
-
return instanceReader.
|
170
|
+
NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
|
171
|
+
return instanceReader.getProductInfo(productNftId).stakingFee;
|
188
172
|
}
|
189
173
|
|
190
174
|
function closeBundle(NftId bundleNftId)
|
@@ -203,6 +187,114 @@ contract PoolService is
|
|
203
187
|
emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
|
204
188
|
}
|
205
189
|
|
190
|
+
/// @inheritdoc IPoolService
|
191
|
+
function stake(NftId bundleNftId, Amount amount)
|
192
|
+
external
|
193
|
+
virtual
|
194
|
+
// TODO: restricted() (once #462 is done)
|
195
|
+
returns(Amount netAmount)
|
196
|
+
{
|
197
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
198
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
199
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
200
|
+
IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
|
201
|
+
|
202
|
+
if (bundleInfo.poolNftId != poolNftId) {
|
203
|
+
revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
|
204
|
+
}
|
205
|
+
|
206
|
+
{
|
207
|
+
Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
|
208
|
+
if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
|
209
|
+
revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
|
210
|
+
}
|
211
|
+
}
|
212
|
+
|
213
|
+
// calculate fees
|
214
|
+
Amount feeAmount;
|
215
|
+
(
|
216
|
+
feeAmount,
|
217
|
+
netAmount
|
218
|
+
) = FeeLib.calculateFee(
|
219
|
+
_getStakingFee(instanceReader, poolNftId),
|
220
|
+
amount);
|
221
|
+
|
222
|
+
// do all the bookkeeping
|
223
|
+
_componentService.increasePoolBalance(
|
224
|
+
instance.getInstanceStore(),
|
225
|
+
poolNftId,
|
226
|
+
netAmount,
|
227
|
+
feeAmount);
|
228
|
+
|
229
|
+
_bundleService.stake(instance, bundleNftId, netAmount);
|
230
|
+
|
231
|
+
// collect tokens from bundle owner
|
232
|
+
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
233
|
+
_collectStakingAmount(
|
234
|
+
instanceReader,
|
235
|
+
poolNftId,
|
236
|
+
bundleOwner,
|
237
|
+
amount);
|
238
|
+
|
239
|
+
emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
|
240
|
+
}
|
241
|
+
|
242
|
+
/// @inheritdoc IPoolService
|
243
|
+
function unstake(NftId bundleNftId, Amount amount)
|
244
|
+
external
|
245
|
+
virtual
|
246
|
+
// TODO: restricted() (once #462 is done)
|
247
|
+
returns(Amount netAmount)
|
248
|
+
{
|
249
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
250
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
251
|
+
InstanceStore instanceStore = instance.getInstanceStore();
|
252
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
253
|
+
|
254
|
+
if (bundleInfo.poolNftId != poolNftId) {
|
255
|
+
revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
|
256
|
+
}
|
257
|
+
|
258
|
+
if (amount.eqz()) {
|
259
|
+
revert ErrorPoolServiceAmountIsZero();
|
260
|
+
}
|
261
|
+
|
262
|
+
// call bundle service for bookkeeping and additional checks
|
263
|
+
Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
|
264
|
+
|
265
|
+
// Important: from now on work only with unstakedAmount as it is the only reliable amount.
|
266
|
+
// if amount was max, this was set to the available amount
|
267
|
+
|
268
|
+
// TODO: handle performance fees (issue #477)
|
269
|
+
|
270
|
+
// update pool bookkeeping - performance fees stay in the pool, but as fees
|
271
|
+
_componentService.decreasePoolBalance(
|
272
|
+
instanceStore,
|
273
|
+
poolNftId,
|
274
|
+
unstakedAmount,
|
275
|
+
AmountLib.zero());
|
276
|
+
|
277
|
+
IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
|
278
|
+
address poolWallet = poolComponentInfo.wallet;
|
279
|
+
|
280
|
+
// check allowance
|
281
|
+
{
|
282
|
+
IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
|
283
|
+
uint256 tokenAllowance = token.allowance(poolWallet, address(poolComponentInfo.tokenHandler));
|
284
|
+
if (tokenAllowance < unstakedAmount.toInt()) {
|
285
|
+
revert ErrorPoolServiceWalletAllowanceTooSmall(poolWallet, address(poolComponentInfo.tokenHandler), tokenAllowance, amount.toInt());
|
286
|
+
}
|
287
|
+
}
|
288
|
+
|
289
|
+
// transfer amount to bundle owner
|
290
|
+
address owner = getRegistry().ownerOf(bundleNftId);
|
291
|
+
// TODO: centralize token handling (issue #471)
|
292
|
+
poolComponentInfo.tokenHandler.transfer(poolWallet, owner, unstakedAmount);
|
293
|
+
|
294
|
+
emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
|
295
|
+
|
296
|
+
return unstakedAmount;
|
297
|
+
}
|
206
298
|
|
207
299
|
function processSale(
|
208
300
|
NftId bundleNftId,
|
@@ -423,10 +515,18 @@ contract PoolService is
|
|
423
515
|
address poolWallet = componentInfo.wallet;
|
424
516
|
|
425
517
|
if(amount.gtz()) {
|
518
|
+
uint256 allowance = IERC20Metadata(componentInfo.token).allowance(bundleOwner, address(tokenHandler));
|
519
|
+
if (allowance < amount.toInt()) {
|
520
|
+
revert ErrorPoolServiceWalletAllowanceTooSmall(bundleOwner, address(tokenHandler), allowance, amount.toInt());
|
521
|
+
}
|
522
|
+
|
523
|
+
// TODO: centralize token handling (issue #471)
|
426
524
|
tokenHandler.transfer(
|
427
525
|
bundleOwner,
|
428
526
|
poolWallet,
|
429
527
|
amount);
|
528
|
+
} else {
|
529
|
+
revert ErrorPoolServiceAmountIsZero();
|
430
530
|
}
|
431
531
|
}
|
432
532
|
|
@@ -1,43 +1,15 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
5
|
-
|
6
|
-
import {Amount, AmountLib} from "../type/Amount.sol";
|
7
|
-
import {ClaimId} from "../type/ClaimId.sol";
|
8
|
-
import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
|
9
|
-
import {Fee, FeeLib} from "../type/Fee.sol";
|
10
|
-
import {IRisk} from "../instance/module/IRisk.sol";
|
11
|
-
import {IApplicationService} from "./IApplicationService.sol";
|
4
|
+
import {Fee} from "../type/Fee.sol";
|
12
5
|
import {IAuthorization} from "../authorization/IAuthorization.sol";
|
13
|
-
import {
|
14
|
-
import {IPolicyService} from "./IPolicyService.sol";
|
15
|
-
import {IProductService} from "./IProductService.sol";
|
16
|
-
import {IClaimService} from "./IClaimService.sol";
|
17
|
-
import {IPricingService} from "./IPricingService.sol";
|
18
|
-
import {IProductComponent} from "./IProductComponent.sol";
|
19
|
-
import {NftId, NftIdLib} from "../type/NftId.sol";
|
6
|
+
import {NftId} from "../type/NftId.sol";
|
20
7
|
import {Product} from "../product/Product.sol";
|
21
|
-
import {PayoutId} from "../type/PayoutId.sol";
|
22
|
-
import {COMPONENT, PRODUCT, APPLICATION, POLICY, CLAIM, PRICE } from "../type/ObjectType.sol";
|
23
|
-
import {ReferralId} from "../type/Referral.sol";
|
24
|
-
import {RiskId, RiskIdLib} from "../type/RiskId.sol";
|
25
|
-
import {Seconds} from "../type/Seconds.sol";
|
26
|
-
import {StateId} from "../type/StateId.sol";
|
27
|
-
import {Timestamp} from "../type/Timestamp.sol";
|
28
|
-
|
29
|
-
import {TokenHandler} from "../shared/TokenHandler.sol";
|
30
|
-
|
31
|
-
import {InstanceReader} from "../instance/InstanceReader.sol";
|
32
|
-
import {IPolicy} from "../instance/module/IPolicy.sol";
|
33
|
-
import {IComponents} from "../instance/module/IComponents.sol";
|
34
|
-
import {Pool} from "../pool/Pool.sol";
|
35
|
-
import {Distribution} from "../distribution/Distribution.sol";
|
36
8
|
|
37
9
|
abstract contract BasicProduct is
|
38
10
|
Product
|
39
11
|
{
|
40
|
-
|
12
|
+
|
41
13
|
function setFees(
|
42
14
|
Fee memory productFee,
|
43
15
|
Fee memory processingFee
|
@@ -49,8 +21,6 @@ abstract contract BasicProduct is
|
|
49
21
|
{
|
50
22
|
_setFees(productFee, processingFee);
|
51
23
|
}
|
52
|
-
|
53
|
-
|
54
24
|
function _initializeBasicProduct(
|
55
25
|
address registry,
|
56
26
|
NftId instanceNftId,
|
@@ -336,7 +336,8 @@ contract ClaimService is
|
|
336
336
|
// TODO transfer processing fees to product wallet
|
337
337
|
// TODO inform product to update fee book keeping
|
338
338
|
}
|
339
|
-
|
339
|
+
|
340
|
+
// TODO: centralize token handling (issue #471)
|
340
341
|
poolInfo.tokenHandler.transfer(
|
341
342
|
poolInfo.wallet,
|
342
343
|
beneficiary,
|
@@ -34,10 +34,15 @@ interface IPolicyService is IService {
|
|
34
34
|
error ErrorPolicyServicePremiumNotFullyPaid(NftId policyNftId, Amount premiumAmount, Amount premiumPaidAmount);
|
35
35
|
error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
|
36
36
|
error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
|
37
|
+
error ErrorIPolicyServicePolicyExpirationTooLate(NftId policyNftId, Timestamp upperLimit, Timestamp expiredAt);
|
38
|
+
error ErrorIPolicyServicePolicyExpirationTooEarly(NftId policyNftId, Timestamp lowerLimit, Timestamp expiredAt);
|
37
39
|
|
38
40
|
error ErrorPolicyServicePremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount recalculatedPremiumAmount);
|
39
41
|
error ErrorPolicyServiceTransferredPremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount transferredPremiumAmount);
|
40
42
|
|
43
|
+
event LogPolicyServicePolicyDeclined(NftId policyNftId);
|
44
|
+
event LogPolicyServicePolicyExpirationUpdated(NftId policyNftId, Timestamp expiredAt);
|
45
|
+
|
41
46
|
/// @dev collateralizes the policy represented by {policyNftId}
|
42
47
|
/// sets the policy state to collateralized
|
43
48
|
/// may set the policy state to activated and set the activation date
|
@@ -64,11 +69,12 @@ interface IPolicyService is IService {
|
|
64
69
|
/// to activate a policy it needs to be in underwritten state
|
65
70
|
function activate(NftId policyNftId, Timestamp activateAt) external;
|
66
71
|
|
67
|
-
/// @dev expires the specified policy and sets the expiry date in the policy metadata
|
72
|
+
/// @dev expires the specified policy and sets the expiry date in the policy metadata. If expiry date is set to 0, then the earliest possible expiry date (current blocktime) is set
|
68
73
|
/// to expire a policy it must be in active state, policies may be expired even when the predefined expiry date is still in the future
|
69
74
|
/// a policy can only be closed when it has been expired. in addition, it must not have any open claims
|
70
75
|
/// this function can only be called by a product. the policy needs to match with the calling product
|
71
|
-
|
76
|
+
/// @return expiredAt the effective expiry date
|
77
|
+
function expire(NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
|
72
78
|
|
73
79
|
/// @dev closes the specified policy and sets the closed data in the policy metadata
|
74
80
|
/// a policy can only be closed when it has been expired. in addition, it must not have any open claims
|
@@ -4,23 +4,16 @@ pragma solidity ^0.8.20;
|
|
4
4
|
import {IRegistry} from "../registry/IRegistry.sol";
|
5
5
|
import {Product} from "./Product.sol";
|
6
6
|
import {IComponents} from "../instance/module/IComponents.sol";
|
7
|
-
import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
|
8
7
|
import {IInstance} from "../instance/IInstance.sol";
|
9
8
|
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
9
|
|
14
10
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
15
11
|
|
16
12
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
17
|
-
import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
|
18
13
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
|
19
|
-
import {UFixed, UFixedLib} from "../type/UFixed.sol";
|
20
14
|
import {ObjectType, APPLICATION, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
|
21
|
-
import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED
|
15
|
+
import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED} from "../type/StateId.sol";
|
22
16
|
import {NftId, NftIdLib} from "../type/NftId.sol";
|
23
|
-
import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
|
24
17
|
import {ReferralId} from "../type/Referral.sol";
|
25
18
|
import {StateId} from "../type/StateId.sol";
|
26
19
|
import {VersionPart} from "../type/Version.sol";
|
@@ -36,8 +29,6 @@ import {InstanceStore} from "../instance/InstanceStore.sol";
|
|
36
29
|
import {IPolicyService} from "./IPolicyService.sol";
|
37
30
|
import {IPoolService} from "../pool/IPoolService.sol";
|
38
31
|
import {IPricingService} from "./IPricingService.sol";
|
39
|
-
import {IService} from "../shared/IService.sol";
|
40
|
-
import {Service} from "../shared/Service.sol";
|
41
32
|
|
42
33
|
contract PolicyService is
|
43
34
|
ComponentVerifyingService,
|
@@ -90,15 +81,38 @@ contract PolicyService is
|
|
90
81
|
(, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
|
91
82
|
product = Product(productInfo.objectAddress);
|
92
83
|
}
|
93
|
-
|
84
|
+
|
94
85
|
|
95
86
|
function decline(
|
96
|
-
NftId policyNftId
|
87
|
+
NftId applicationNftId // = policyNftId
|
97
88
|
)
|
98
89
|
external
|
99
|
-
override
|
90
|
+
virtual override
|
100
91
|
{
|
101
|
-
|
92
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
|
93
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
94
|
+
|
95
|
+
// check policy is in state applied
|
96
|
+
if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
|
97
|
+
revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
|
98
|
+
}
|
99
|
+
|
100
|
+
// check policy matches with calling product
|
101
|
+
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
102
|
+
if(applicationInfo.productNftId != productNftId) {
|
103
|
+
revert ErrorPolicyServicePolicyProductMismatch(
|
104
|
+
applicationNftId,
|
105
|
+
applicationInfo.productNftId,
|
106
|
+
productNftId);
|
107
|
+
}
|
108
|
+
|
109
|
+
|
110
|
+
// store updated policy info
|
111
|
+
instance.getInstanceStore().updatePolicyState(
|
112
|
+
applicationNftId,
|
113
|
+
DECLINED());
|
114
|
+
|
115
|
+
emit LogPolicyServicePolicyDeclined(applicationNftId);
|
102
116
|
}
|
103
117
|
|
104
118
|
event LogDebug(uint idx, string message);
|
@@ -230,15 +244,54 @@ contract PolicyService is
|
|
230
244
|
// TODO: add logging
|
231
245
|
}
|
232
246
|
|
233
|
-
|
247
|
+
/// @inheritdoc IPolicyService
|
234
248
|
function expire(
|
235
|
-
NftId policyNftId
|
249
|
+
NftId policyNftId,
|
250
|
+
Timestamp expireAt
|
236
251
|
)
|
237
252
|
external
|
238
253
|
override
|
239
|
-
|
254
|
+
virtual
|
255
|
+
returns (Timestamp)
|
240
256
|
{
|
241
|
-
|
257
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
|
258
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
259
|
+
|
260
|
+
// check policy is in state applied
|
261
|
+
if (instanceReader.getPolicyState(policyNftId) != ACTIVE()) {
|
262
|
+
revert ErrorIPolicyServicePolicyNotActive(policyNftId, instanceReader.getPolicyState(policyNftId));
|
263
|
+
}
|
264
|
+
|
265
|
+
// check policy matches with calling product
|
266
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
267
|
+
if(policyInfo.productNftId != productNftId) {
|
268
|
+
revert ErrorPolicyServicePolicyProductMismatch(
|
269
|
+
policyNftId,
|
270
|
+
policyInfo.productNftId,
|
271
|
+
productNftId);
|
272
|
+
}
|
273
|
+
|
274
|
+
if (expireAt.eqz()) {
|
275
|
+
expireAt = TimestampLib.blockTimestamp();
|
276
|
+
}
|
277
|
+
|
278
|
+
// check preconditions
|
279
|
+
if (expireAt >= policyInfo.expiredAt) {
|
280
|
+
revert ErrorIPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
|
281
|
+
}
|
282
|
+
if (expireAt < TimestampLib.blockTimestamp()) {
|
283
|
+
revert ErrorIPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
|
284
|
+
}
|
285
|
+
if (policyInfo.openClaimsCount > 0) {
|
286
|
+
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
287
|
+
}
|
288
|
+
|
289
|
+
policyInfo.expiredAt = expireAt;
|
290
|
+
instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
291
|
+
|
292
|
+
emit LogPolicyServicePolicyExpirationUpdated(policyNftId, expireAt);
|
293
|
+
|
294
|
+
return expireAt;
|
242
295
|
}
|
243
296
|
|
244
297
|
function close(
|
@@ -427,6 +480,7 @@ contract PolicyService is
|
|
427
480
|
bundleNftId,
|
428
481
|
premium);
|
429
482
|
|
483
|
+
// TODO: centralize token handling (issue #471)
|
430
484
|
// transfer premium amounts to target wallets
|
431
485
|
tokenHandler.transfer(policyHolder, productWallet, premium.productFeeAmount);
|
432
486
|
tokenHandler.transfer(policyHolder, distributionWallet, premium.distributionFeeAndCommissionAmount);
|
@@ -265,6 +265,25 @@ abstract contract Product is
|
|
265
265
|
activateAt);
|
266
266
|
}
|
267
267
|
|
268
|
+
function _decline(
|
269
|
+
NftId policyNftId
|
270
|
+
)
|
271
|
+
internal
|
272
|
+
{
|
273
|
+
_getProductStorage()._policyService.decline(
|
274
|
+
policyNftId);
|
275
|
+
}
|
276
|
+
|
277
|
+
function _expire(
|
278
|
+
NftId policyNftId,
|
279
|
+
Timestamp expireAt
|
280
|
+
)
|
281
|
+
internal
|
282
|
+
returns (Timestamp)
|
283
|
+
{
|
284
|
+
return _getProductStorage()._policyService.expire(policyNftId, expireAt);
|
285
|
+
}
|
286
|
+
|
268
287
|
function _collectPremium(
|
269
288
|
NftId policyNftId,
|
270
289
|
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,
|
@@ -27,8 +27,6 @@ contract ComponentService is
|
|
27
27
|
ComponentVerifyingService,
|
28
28
|
IComponentService
|
29
29
|
{
|
30
|
-
using AmountLib for Amount;
|
31
|
-
|
32
30
|
error ErrorComponentServiceAlreadyRegistered(address component);
|
33
31
|
error ErrorComponentServiceNotComponent(address component);
|
34
32
|
error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
|
@@ -106,7 +104,7 @@ contract ComponentService is
|
|
106
104
|
|
107
105
|
// determine withdrawn amount
|
108
106
|
withdrawnAmount = amount;
|
109
|
-
if (withdrawnAmount.
|
107
|
+
if (withdrawnAmount.gte(AmountLib.max())) {
|
110
108
|
withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
|
111
109
|
} else if (withdrawnAmount.eqz()) {
|
112
110
|
revert ErrorComponentServiceWithdrawAmountIsZero();
|
@@ -130,6 +128,7 @@ contract ComponentService is
|
|
130
128
|
|
131
129
|
// transfer amount to component owner
|
132
130
|
address componentOwner = getRegistry().ownerOf(componentNftId);
|
131
|
+
// TODO: centralize token handling (issue #471)
|
133
132
|
tokenHandler.transfer(componentWallet, componentOwner, withdrawnAmount);
|
134
133
|
|
135
134
|
emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(token), withdrawnAmount);
|
@@ -296,6 +295,36 @@ contract ComponentService is
|
|
296
295
|
_changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
|
297
296
|
}
|
298
297
|
|
298
|
+
//-------- distributor -------------------------------------------------------//
|
299
|
+
|
300
|
+
function increaseDistributorBalance(
|
301
|
+
InstanceStore instanceStore,
|
302
|
+
NftId distributorNftId,
|
303
|
+
Amount amount,
|
304
|
+
Amount feeAmount
|
305
|
+
)
|
306
|
+
external
|
307
|
+
virtual
|
308
|
+
// TODO re-enable once role granting is stable and fixed
|
309
|
+
// restricted()
|
310
|
+
{
|
311
|
+
_changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
|
312
|
+
}
|
313
|
+
|
314
|
+
function decreaseDistributorBalance(
|
315
|
+
InstanceStore instanceStore,
|
316
|
+
NftId distributorNftId,
|
317
|
+
Amount amount,
|
318
|
+
Amount feeAmount
|
319
|
+
)
|
320
|
+
external
|
321
|
+
virtual
|
322
|
+
// TODO re-enable once role granting is stable and fixed
|
323
|
+
// restricted()
|
324
|
+
{
|
325
|
+
_changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
|
326
|
+
}
|
327
|
+
|
299
328
|
//-------- oracle -------------------------------------------------------//
|
300
329
|
|
301
330
|
function registerOracle()
|
@@ -1,21 +1,12 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
5
|
-
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
6
4
|
|
7
5
|
import {Amount} from "../type/Amount.sol";
|
8
6
|
import {Fee} from "../type/Fee.sol";
|
9
|
-
import {IComponents} from "../instance/module/IComponents.sol";
|
10
|
-
import {IInstance} from "../instance/IInstance.sol";
|
11
|
-
import {IInstanceService} from "../instance/IInstanceService.sol";
|
12
7
|
import {InstanceStore} from "../instance/InstanceStore.sol";
|
13
|
-
import {IProductService} from "../product/IProductService.sol";
|
14
|
-
import {IRegisterable} from "../shared/IRegisterable.sol";
|
15
8
|
import {IService} from "../shared/IService.sol";
|
16
9
|
import {NftId} from "../type/NftId.sol";
|
17
|
-
import {ObjectType} from "../type/ObjectType.sol";
|
18
|
-
import {TokenHandler} from "../shared/TokenHandler.sol";
|
19
10
|
import {UFixed} from "../type/UFixed.sol";
|
20
11
|
|
21
12
|
/// @dev component base class
|
@@ -87,6 +78,10 @@ interface IComponentService is
|
|
87
78
|
function increaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
|
88
79
|
function decreaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
|
89
80
|
|
81
|
+
//-------- distributor --------------------------------------------------//
|
82
|
+
function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
|
83
|
+
function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
|
84
|
+
|
90
85
|
//-------- oracle -------------------------------------------------------//
|
91
86
|
|
92
87
|
/// @dev registers the sending component as an oracle component
|
@@ -109,4 +104,5 @@ interface IComponentService is
|
|
109
104
|
//-------- bundle -------------------------------------------------------//
|
110
105
|
function increaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
|
111
106
|
function decreaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
|
107
|
+
|
112
108
|
}
|
@@ -4,7 +4,7 @@ pragma solidity ^0.8.20;
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
5
|
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
6
6
|
|
7
|
-
contract
|
7
|
+
contract InitializableERC165 is
|
8
8
|
Initializable,
|
9
9
|
IERC165
|
10
10
|
{
|