@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,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";
|
@@ -65,24 +68,20 @@ contract PoolService is
|
|
65
68
|
registerInterface(type(IPoolService).interfaceId);
|
66
69
|
}
|
67
70
|
|
68
|
-
|
69
|
-
function
|
71
|
+
/// @inheritdoc IPoolService
|
72
|
+
function setMaxBalanceAmount(Amount maxBalanceAmount)
|
70
73
|
external
|
71
74
|
virtual
|
72
75
|
{
|
73
|
-
/*
|
74
76
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
75
77
|
InstanceReader instanceReader = instance.getInstanceReader();
|
78
|
+
IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
|
76
79
|
|
77
|
-
|
78
|
-
|
79
|
-
Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
|
80
|
-
|
81
|
-
poolInfo.maxCapitalAmount = maxCapitalAmount;
|
80
|
+
Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
|
81
|
+
poolInfo.maxBalanceAmount = maxBalanceAmount;
|
82
82
|
instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
|
83
83
|
|
84
|
-
emit
|
85
|
-
*/
|
84
|
+
emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
|
86
85
|
}
|
87
86
|
|
88
87
|
function setBundleOwnerRole(RoleId bundleOwnerRole)
|
@@ -106,27 +105,7 @@ contract PoolService is
|
|
106
105
|
emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
|
107
106
|
}
|
108
107
|
|
109
|
-
|
110
|
-
function setFees(
|
111
|
-
Fee memory poolFee,
|
112
|
-
Fee memory stakingFee,
|
113
|
-
Fee memory performanceFee
|
114
|
-
)
|
115
|
-
external
|
116
|
-
virtual
|
117
|
-
{
|
118
|
-
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
119
|
-
|
120
|
-
IComponents.PoolInfo memory poolInfo = instance.getInstanceReader().getPoolInfo(poolNftId);
|
121
|
-
poolInfo.poolFee = poolFee;
|
122
|
-
poolInfo.stakingFee = stakingFee;
|
123
|
-
poolInfo.performanceFee = performanceFee;
|
124
|
-
|
125
|
-
instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
|
126
|
-
|
127
|
-
// TODO add logging
|
128
|
-
}
|
129
|
-
|
108
|
+
/// @inheritdoc IPoolService
|
130
109
|
function createBundle(
|
131
110
|
address bundleOwner, // initial bundle owner
|
132
111
|
Fee memory fee, // fees deducted from premium that go to bundle owner
|
@@ -136,24 +115,32 @@ contract PoolService is
|
|
136
115
|
)
|
137
116
|
external
|
138
117
|
virtual
|
139
|
-
returns(NftId bundleNftId)
|
118
|
+
returns(NftId bundleNftId, Amount netStakedAmount)
|
140
119
|
{
|
141
120
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
142
|
-
InstanceReader instanceReader = instance.getInstanceReader();
|
143
121
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
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),
|
149
135
|
stakingAmount);
|
150
136
|
|
137
|
+
|
151
138
|
bundleNftId = _bundleService.create(
|
152
139
|
instance,
|
153
140
|
poolNftId,
|
154
141
|
bundleOwner,
|
155
142
|
fee,
|
156
|
-
|
143
|
+
netStakedAmount,
|
157
144
|
lifetime,
|
158
145
|
filter);
|
159
146
|
|
@@ -161,12 +148,12 @@ contract PoolService is
|
|
161
148
|
_componentService.increasePoolBalance(
|
162
149
|
instance.getInstanceStore(),
|
163
150
|
poolNftId,
|
164
|
-
|
151
|
+
netStakedAmount,
|
165
152
|
stakingFeeAmount);
|
166
153
|
|
167
154
|
// pool bookkeeping and collect tokens from bundle owner
|
168
155
|
_collectStakingAmount(
|
169
|
-
|
156
|
+
instance.getInstanceReader(),
|
170
157
|
poolNftId,
|
171
158
|
bundleOwner,
|
172
159
|
stakingAmount);
|
@@ -180,8 +167,8 @@ contract PoolService is
|
|
180
167
|
view
|
181
168
|
returns (Fee memory stakingFee)
|
182
169
|
{
|
183
|
-
NftId productNftId = instanceReader.
|
184
|
-
return instanceReader.
|
170
|
+
NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
|
171
|
+
return instanceReader.getProductInfo(productNftId).stakingFee;
|
185
172
|
}
|
186
173
|
|
187
174
|
function closeBundle(NftId bundleNftId)
|
@@ -190,16 +177,147 @@ contract PoolService is
|
|
190
177
|
{
|
191
178
|
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
192
179
|
|
193
|
-
// TODO
|
180
|
+
// TODO get performance fee for pool (#477)
|
194
181
|
|
195
182
|
// releasing collateral in bundle
|
196
|
-
_bundleService.close(instance, bundleNftId);
|
197
|
-
|
198
|
-
// TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
|
183
|
+
(Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
|
199
184
|
|
185
|
+
_componentService.decreasePoolBalance(
|
186
|
+
instance.getInstanceStore(),
|
187
|
+
poolNftId,
|
188
|
+
unstakedAmount + feeAmount,
|
189
|
+
AmountLib.zero());
|
190
|
+
|
200
191
|
emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
|
192
|
+
|
193
|
+
if ((unstakedAmount + feeAmount).gtz()){
|
194
|
+
IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
|
195
|
+
TokenHandler tokenHandler = poolComponentInfo.tokenHandler;
|
196
|
+
IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
|
197
|
+
|
198
|
+
// TODO: centralize token handling (issue #471)
|
199
|
+
|
200
|
+
// check allowance
|
201
|
+
uint256 tokenAllowance = token.allowance(poolComponentInfo.wallet, address(tokenHandler));
|
202
|
+
if (tokenAllowance < (unstakedAmount.toInt() + feeAmount.toInt())) {
|
203
|
+
revert ErrorPoolServiceWalletAllowanceTooSmall(
|
204
|
+
poolComponentInfo.wallet,
|
205
|
+
address(tokenHandler),
|
206
|
+
tokenAllowance,
|
207
|
+
unstakedAmount.toInt() + feeAmount.toInt());
|
208
|
+
}
|
209
|
+
|
210
|
+
// transfer amount to bundle owner
|
211
|
+
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
212
|
+
tokenHandler.transfer(poolComponentInfo.wallet, bundleOwner, unstakedAmount + feeAmount);
|
213
|
+
}
|
214
|
+
}
|
215
|
+
|
216
|
+
/// @inheritdoc IPoolService
|
217
|
+
function stake(NftId bundleNftId, Amount amount)
|
218
|
+
external
|
219
|
+
virtual
|
220
|
+
// TODO: restricted() (once #462 is done)
|
221
|
+
returns(Amount netAmount)
|
222
|
+
{
|
223
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
224
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
225
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
226
|
+
IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
|
227
|
+
|
228
|
+
if (bundleInfo.poolNftId != poolNftId) {
|
229
|
+
revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
|
230
|
+
}
|
231
|
+
|
232
|
+
{
|
233
|
+
Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
|
234
|
+
if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
|
235
|
+
revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
|
236
|
+
}
|
237
|
+
}
|
238
|
+
|
239
|
+
// calculate fees
|
240
|
+
Amount feeAmount;
|
241
|
+
(
|
242
|
+
feeAmount,
|
243
|
+
netAmount
|
244
|
+
) = FeeLib.calculateFee(
|
245
|
+
_getStakingFee(instanceReader, poolNftId),
|
246
|
+
amount);
|
247
|
+
|
248
|
+
// do all the bookkeeping
|
249
|
+
_componentService.increasePoolBalance(
|
250
|
+
instance.getInstanceStore(),
|
251
|
+
poolNftId,
|
252
|
+
netAmount,
|
253
|
+
feeAmount);
|
254
|
+
|
255
|
+
_bundleService.stake(instance, bundleNftId, netAmount);
|
256
|
+
|
257
|
+
// collect tokens from bundle owner
|
258
|
+
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
259
|
+
emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
|
260
|
+
_collectStakingAmount(
|
261
|
+
instanceReader,
|
262
|
+
poolNftId,
|
263
|
+
bundleOwner,
|
264
|
+
amount);
|
201
265
|
}
|
202
266
|
|
267
|
+
/// @inheritdoc IPoolService
|
268
|
+
function unstake(NftId bundleNftId, Amount amount)
|
269
|
+
external
|
270
|
+
virtual
|
271
|
+
// TODO: restricted() (once #462 is done)
|
272
|
+
returns(Amount netAmount)
|
273
|
+
{
|
274
|
+
(NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
275
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
276
|
+
InstanceStore instanceStore = instance.getInstanceStore();
|
277
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
278
|
+
|
279
|
+
if (bundleInfo.poolNftId != poolNftId) {
|
280
|
+
revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
|
281
|
+
}
|
282
|
+
|
283
|
+
if (amount.eqz()) {
|
284
|
+
revert ErrorPoolServiceAmountIsZero();
|
285
|
+
}
|
286
|
+
|
287
|
+
// call bundle service for bookkeeping and additional checks
|
288
|
+
Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
|
289
|
+
|
290
|
+
// Important: from now on work only with unstakedAmount as it is the only reliable amount.
|
291
|
+
// if amount was max, this was set to the available amount
|
292
|
+
|
293
|
+
// TODO: handle performance fees (issue #477)
|
294
|
+
|
295
|
+
// update pool bookkeeping - performance fees stay in the pool, but as fees
|
296
|
+
_componentService.decreasePoolBalance(
|
297
|
+
instanceStore,
|
298
|
+
poolNftId,
|
299
|
+
unstakedAmount,
|
300
|
+
AmountLib.zero());
|
301
|
+
|
302
|
+
IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
|
303
|
+
address poolWallet = poolComponentInfo.wallet;
|
304
|
+
|
305
|
+
// check allowance
|
306
|
+
{
|
307
|
+
IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
|
308
|
+
uint256 tokenAllowance = token.allowance(poolWallet, address(poolComponentInfo.tokenHandler));
|
309
|
+
if (tokenAllowance < unstakedAmount.toInt()) {
|
310
|
+
revert ErrorPoolServiceWalletAllowanceTooSmall(poolWallet, address(poolComponentInfo.tokenHandler), tokenAllowance, amount.toInt());
|
311
|
+
}
|
312
|
+
}
|
313
|
+
|
314
|
+
// transfer amount to bundle owner
|
315
|
+
address owner = getRegistry().ownerOf(bundleNftId);
|
316
|
+
emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
|
317
|
+
// TODO: centralize token handling (issue #471)
|
318
|
+
poolComponentInfo.tokenHandler.transfer(poolWallet, owner, unstakedAmount);
|
319
|
+
return unstakedAmount;
|
320
|
+
}
|
203
321
|
|
204
322
|
function processSale(
|
205
323
|
NftId bundleNftId,
|
@@ -420,10 +538,18 @@ contract PoolService is
|
|
420
538
|
address poolWallet = componentInfo.wallet;
|
421
539
|
|
422
540
|
if(amount.gtz()) {
|
541
|
+
uint256 allowance = IERC20Metadata(componentInfo.token).allowance(bundleOwner, address(tokenHandler));
|
542
|
+
if (allowance < amount.toInt()) {
|
543
|
+
revert ErrorPoolServiceWalletAllowanceTooSmall(bundleOwner, address(tokenHandler), allowance, amount.toInt());
|
544
|
+
}
|
545
|
+
|
546
|
+
// TODO: centralize token handling (issue #471)
|
423
547
|
tokenHandler.transfer(
|
424
548
|
bundleOwner,
|
425
549
|
poolWallet,
|
426
550
|
amount);
|
551
|
+
} else {
|
552
|
+
revert ErrorPoolServiceAmountIsZero();
|
427
553
|
}
|
428
554
|
}
|
429
555
|
|
@@ -128,6 +128,7 @@ contract ApplicationService is
|
|
128
128
|
address applicationOwner,
|
129
129
|
RiskId riskId,
|
130
130
|
Amount sumInsuredAmount,
|
131
|
+
Amount premiumAmount,
|
131
132
|
Seconds lifetime,
|
132
133
|
NftId bundleNftId,
|
133
134
|
ReferralId referralId,
|
@@ -152,13 +153,45 @@ contract ApplicationService is
|
|
152
153
|
applicationNftId = _registerApplication(productNftId, applicationOwner);
|
153
154
|
|
154
155
|
// create policy info for application
|
155
|
-
IPolicy.PolicyInfo memory applicationInfo =
|
156
|
+
IPolicy.PolicyInfo memory applicationInfo = _createApplicationInfo(
|
157
|
+
productNftId,
|
158
|
+
riskId,
|
159
|
+
sumInsuredAmount,
|
160
|
+
premiumAmount,
|
161
|
+
lifetime,
|
162
|
+
bundleNftId,
|
163
|
+
referralId,
|
164
|
+
applicationData);
|
165
|
+
|
166
|
+
// register application with instance
|
167
|
+
instance.getInstanceStore().createApplication(
|
168
|
+
applicationNftId,
|
169
|
+
applicationInfo);
|
170
|
+
|
171
|
+
// TODO: add logging
|
172
|
+
}
|
173
|
+
|
174
|
+
function _createApplicationInfo(
|
175
|
+
NftId productNftId,
|
176
|
+
RiskId riskId,
|
177
|
+
Amount sumInsuredAmount,
|
178
|
+
Amount premiumAmount,
|
179
|
+
Seconds lifetime,
|
180
|
+
NftId bundleNftId,
|
181
|
+
ReferralId referralId,
|
182
|
+
bytes memory applicationData
|
183
|
+
)
|
184
|
+
internal
|
185
|
+
virtual
|
186
|
+
returns (IPolicy.PolicyInfo memory applicationInfo)
|
187
|
+
{
|
188
|
+
return IPolicy.PolicyInfo({
|
156
189
|
productNftId: productNftId,
|
157
190
|
bundleNftId: bundleNftId,
|
158
191
|
referralId: referralId,
|
159
192
|
riskId: riskId,
|
160
193
|
sumInsuredAmount: sumInsuredAmount,
|
161
|
-
premiumAmount:
|
194
|
+
premiumAmount: premiumAmount,
|
162
195
|
premiumPaidAmount: AmountLib.zero(),
|
163
196
|
lifetime: lifetime,
|
164
197
|
applicationData: applicationData,
|
@@ -171,21 +204,8 @@ contract ApplicationService is
|
|
171
204
|
expiredAt: zeroTimestamp(),
|
172
205
|
closedAt: zeroTimestamp()
|
173
206
|
});
|
174
|
-
|
175
|
-
// TODO consider to provide this amount externally
|
176
|
-
// actual calculation is done 2nd time anyway for premium collection
|
177
|
-
// calculate premium amount
|
178
|
-
applicationInfo.premiumAmount = _calculatePremiumAmount(applicationInfo);
|
179
|
-
|
180
|
-
// register application with instance
|
181
|
-
instance.getInstanceStore().createApplication(
|
182
|
-
applicationNftId,
|
183
|
-
applicationInfo);
|
184
|
-
|
185
|
-
// TODO: add logging
|
186
207
|
}
|
187
208
|
|
188
|
-
|
189
209
|
function renew(
|
190
210
|
NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
|
191
211
|
NftId bundleNftId // will likely need a newer bundle for underwriting
|
@@ -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,
|
@@ -294,7 +294,7 @@ contract ClaimService is
|
|
294
294
|
(
|
295
295
|
Amount netPayoutAmount,
|
296
296
|
address beneficiary
|
297
|
-
) =
|
297
|
+
) = _calculatePayoutAmount(
|
298
298
|
instanceReader,
|
299
299
|
policyNftId,
|
300
300
|
policyInfo,
|
@@ -302,11 +302,24 @@ contract ClaimService is
|
|
302
302
|
|
303
303
|
// TODO callback IPolicyHolder
|
304
304
|
|
305
|
+
if (netPayoutAmount.eqz()) {
|
306
|
+
revert ErrorClaimsServicePayoutAmountIsZero(policyNftId, payoutId);
|
307
|
+
}
|
308
|
+
|
305
309
|
emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount);
|
310
|
+
|
311
|
+
{
|
312
|
+
NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
|
313
|
+
IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
|
314
|
+
// TODO: centralize token handling (issue #471)
|
315
|
+
poolInfo.tokenHandler.transfer(
|
316
|
+
poolInfo.wallet,
|
317
|
+
beneficiary,
|
318
|
+
netPayoutAmount);
|
319
|
+
}
|
306
320
|
}
|
307
321
|
|
308
|
-
|
309
|
-
function _transferPayoutAmount(
|
322
|
+
function _calculatePayoutAmount(
|
310
323
|
InstanceReader instanceReader,
|
311
324
|
NftId policyNftId,
|
312
325
|
IPolicy.PolicyInfo memory policyInfo,
|
@@ -336,11 +349,6 @@ contract ClaimService is
|
|
336
349
|
// TODO transfer processing fees to product wallet
|
337
350
|
// TODO inform product to update fee book keeping
|
338
351
|
}
|
339
|
-
|
340
|
-
poolInfo.tokenHandler.transfer(
|
341
|
-
poolInfo.wallet,
|
342
|
-
beneficiary,
|
343
|
-
netPayoutAmount);
|
344
352
|
}
|
345
353
|
}
|
346
354
|
|
@@ -31,6 +31,7 @@ interface IClaimService is
|
|
31
31
|
error ErrorClaimServicePolicyProductMismatch(NftId policyNftId, NftId expectedProduct, NftId actualProduct);
|
32
32
|
error ErrorClaimServicePolicyNotOpen(NftId policyNftId);
|
33
33
|
error ErrorClaimServiceClaimExceedsSumInsured(NftId policyNftId, Amount sumInsured, Amount payoutsIncludingClaimAmount);
|
34
|
+
error ErrorClaimsServicePayoutAmountIsZero(NftId policyNftId, PayoutId payoutId);
|
34
35
|
|
35
36
|
error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint8 openPayouts);
|
36
37
|
error ErrorClaimServiceClaimWithMissingPayouts(NftId policyNftId, ClaimId claimId, Amount claimAmount, Amount paidAmount);
|
@@ -20,25 +20,31 @@ interface IPolicyService is IService {
|
|
20
20
|
|
21
21
|
error ErrorPolicyServicePolicyProductMismatch(NftId applicationNftId, NftId expectedProductNftId, NftId actualProductNftId);
|
22
22
|
error ErrorPolicyServicePolicyStateNotApplied(NftId applicationNftId);
|
23
|
-
error
|
23
|
+
error ErrorPolicyServicePolicyStateNotCollateralized(NftId applicationNftId);
|
24
|
+
error ErrorPolicyServicePolicyAlreadyActivated(NftId policyNftId);
|
24
25
|
|
25
|
-
error ErrorPolicyServicePremiumHigherThanExpected(
|
26
|
+
error ErrorPolicyServicePremiumHigherThanExpected(uint256 premiumExpectedAmount, uint256 premiumToBePaidAmount);
|
26
27
|
error ErrorPolicyServiceBalanceInsufficient(address policyOwner, uint256 premiumAmount, uint256 balance);
|
27
28
|
error ErrorPolicyServiceAllowanceInsufficient(address policyOwner, address tokenHandler, uint256 premiumAmount, uint256 allowance);
|
28
29
|
|
29
|
-
error
|
30
|
+
error ErrorPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
|
30
31
|
error ErrorPolicyServicePremiumAlreadyPaid(NftId policyNftId, Amount premiumPaidAmount);
|
31
|
-
error
|
32
|
-
error
|
33
|
-
error
|
32
|
+
error ErrorPolicyServicePolicyNotActivated(NftId policyNftId);
|
33
|
+
error ErrorPolicyServicePolicyAlreadyClosed(NftId policyNftId);
|
34
|
+
error ErrorPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
|
34
35
|
error ErrorPolicyServicePremiumNotFullyPaid(NftId policyNftId, Amount premiumAmount, Amount premiumPaidAmount);
|
35
|
-
error
|
36
|
-
error
|
36
|
+
error ErrorPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
|
37
|
+
error ErrorPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
|
38
|
+
error ErrorPolicyServicePolicyExpirationTooLate(NftId policyNftId, Timestamp upperLimit, Timestamp expiredAt);
|
39
|
+
error ErrorPolicyServicePolicyExpirationTooEarly(NftId policyNftId, Timestamp lowerLimit, Timestamp expiredAt);
|
37
40
|
|
38
41
|
error ErrorPolicyServicePremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount recalculatedPremiumAmount);
|
39
42
|
error ErrorPolicyServiceTransferredPremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount transferredPremiumAmount);
|
40
43
|
|
41
|
-
|
44
|
+
event LogPolicyServicePolicyDeclined(NftId policyNftId);
|
45
|
+
event LogPolicyServicePolicyExpirationUpdated(NftId policyNftId, Timestamp expiredAt);
|
46
|
+
|
47
|
+
/// @dev collateralizes the policy represented by {policyNftId}. locks the sum insured amount in the pool.
|
42
48
|
/// sets the policy state to collateralized
|
43
49
|
/// may set the policy state to activated and set the activation date
|
44
50
|
/// optionally collects premiums and activates the policy.
|
@@ -57,18 +63,19 @@ interface IPolicyService is IService {
|
|
57
63
|
/// only the related product may decline an application
|
58
64
|
function decline(NftId policyNftId) external;
|
59
65
|
|
60
|
-
/// @dev collects the premium token for the specified policy
|
66
|
+
/// @dev collects the premium token for the specified policy (must be in COLLATERALIZED or ACTIVE state)
|
61
67
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external;
|
62
68
|
|
63
69
|
/// @dev activates the specified policy and sets the activation date in the policy metadata
|
64
70
|
/// to activate a policy it needs to be in underwritten state
|
65
71
|
function activate(NftId policyNftId, Timestamp activateAt) external;
|
66
72
|
|
67
|
-
/// @dev expires the specified policy and sets the expiry date in the policy metadata
|
73
|
+
/// @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
74
|
/// 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
75
|
/// a policy can only be closed when it has been expired. in addition, it must not have any open claims
|
70
76
|
/// this function can only be called by a product. the policy needs to match with the calling product
|
71
|
-
|
77
|
+
/// @return expiredAt the effective expiry date
|
78
|
+
function expire(NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
|
72
79
|
|
73
80
|
/// @dev closes the specified policy and sets the closed data in the policy metadata
|
74
81
|
/// a policy can only be closed when it has been expired. in addition, it must not have any open claims
|