@etherisc/gif-next 0.0.2-f29e479-370 → 0.0.2-f2df3e2-873
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 +6 -83
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +78 -89
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +139 -140
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +156 -64
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +181 -112
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +353 -176
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -138
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +299 -245
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +83 -162
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +527 -400
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +175 -51
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +500 -612
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -126
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +253 -236
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +305 -211
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +71 -23
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +86 -31
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- 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/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +291 -100
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +46 -22
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +422 -252
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +78 -14
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +373 -87
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +55 -7
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +579 -123
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +71 -47
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +200 -46
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +241 -188
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +251 -58
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +444 -25
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +430 -76
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +511 -14
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +544 -153
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +51 -27
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +562 -52
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +24 -12
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +115 -52
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -24
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +18 -37
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
- 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/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.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/IService.sol/IService.json +80 -14
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.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/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +3 -3
- 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/Service.sol/Service.json +87 -16
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +3 -3
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +102 -27
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +185 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/Component.sol +99 -87
- package/contracts/components/Distribution.sol +18 -21
- package/contracts/components/IComponent.sol +40 -18
- package/contracts/components/IDistributionComponent.sol +1 -22
- package/contracts/components/IPoolComponent.sol +73 -47
- package/contracts/components/IProductComponent.sol +3 -2
- package/contracts/components/Pool.sol +178 -130
- package/contracts/components/Product.sol +157 -71
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +10 -9
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +37 -27
- package/contracts/instance/IInstanceService.sol +18 -9
- package/contracts/instance/Instance.sol +117 -98
- package/contracts/instance/InstanceAccessManager.sol +388 -158
- package/contracts/instance/InstanceReader.sol +36 -12
- package/contracts/instance/InstanceService.sol +193 -191
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +23 -6
- package/contracts/instance/module/IAccess.sol +21 -14
- package/contracts/instance/module/IBundle.sol +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +2 -1
- package/contracts/instance/module/IPolicy.sol +37 -7
- package/contracts/instance/module/ISetup.sol +7 -22
- package/contracts/instance/service/ApplicationService.sol +137 -50
- package/contracts/instance/service/BundleService.sol +221 -83
- package/contracts/instance/service/ClaimService.sol +114 -26
- package/contracts/instance/service/DistributionService.sol +174 -118
- package/contracts/instance/service/IApplicationService.sol +9 -13
- package/contracts/instance/service/IBundleService.sol +68 -26
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IDistributionService.sol +20 -4
- package/contracts/instance/service/IPolicyService.sol +69 -21
- package/contracts/instance/service/IPoolService.sol +82 -3
- package/contracts/instance/service/PolicyService.sol +297 -232
- package/contracts/instance/service/PoolService.sol +214 -20
- package/contracts/instance/service/ProductService.sol +31 -54
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/IRegistryService.sol +4 -3
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +23 -20
- package/contracts/registry/RegistryService.sol +15 -16
- package/contracts/registry/ReleaseManager.sol +20 -18
- package/contracts/shared/IService.sol +4 -6
- package/contracts/shared/Registerable.sol +2 -2
- package/contracts/shared/Service.sol +21 -7
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +65 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +6 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +13 -6
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +7 -2
- package/contracts/types/Timestamp.sol +18 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +1 -1
@@ -2,43 +2,39 @@
|
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
|
-
import {IProductComponent} from "../../components/IProductComponent.sol";
|
6
5
|
import {Product} from "../../components/Product.sol";
|
7
|
-
import {
|
6
|
+
import {IComponents} from "../module/IComponents.sol";
|
8
7
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
9
8
|
import {IInstance} from "../IInstance.sol";
|
10
9
|
import {IPolicy} from "../module/IPolicy.sol";
|
10
|
+
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
11
11
|
import {IRisk} from "../module/IRisk.sol";
|
12
12
|
import {IBundle} from "../module/IBundle.sol";
|
13
|
-
import {IProductService} from "./IProductService.sol";
|
14
|
-
import {ITreasury} from "../module/ITreasury.sol";
|
15
13
|
import {ISetup} from "../module/ISetup.sol";
|
16
14
|
|
17
15
|
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
18
16
|
|
19
|
-
import {
|
20
|
-
import {
|
21
|
-
|
17
|
+
import {Amount, AmountLib} from "../../types/Amount.sol";
|
18
|
+
import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
|
22
19
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
23
20
|
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
24
|
-
import {
|
25
|
-
import {
|
26
|
-
import {
|
27
|
-
import {
|
28
|
-
import {Fee, FeeLib} from "../../types/Fee.sol";
|
29
|
-
import {ReferralId} from "../../types/Referral.sol";
|
30
|
-
import {RiskId} from "../../types/RiskId.sol";
|
21
|
+
import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM} from "../../types/ObjectType.sol";
|
22
|
+
import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../../types/StateId.sol";
|
23
|
+
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
24
|
+
import {PayoutId, PayoutIdLib} from "../../types/PayoutId.sol";
|
31
25
|
import {StateId} from "../../types/StateId.sol";
|
32
|
-
import {
|
33
|
-
//import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
|
26
|
+
import {VersionPart} from "../../types/Version.sol";
|
34
27
|
|
35
|
-
import {IService} from "../../shared/IService.sol";
|
36
|
-
import {Service} from "../../shared/Service.sol";
|
37
28
|
import {ComponentService} from "../base/ComponentService.sol";
|
38
|
-
import {
|
29
|
+
import {IApplicationService} from "./IApplicationService.sol";
|
30
|
+
import {IBundleService} from "./IBundleService.sol";
|
31
|
+
import {IClaimService} from "./IClaimService.sol";
|
32
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
39
33
|
import {InstanceReader} from "../InstanceReader.sol";
|
34
|
+
import {IPolicyService} from "./IPolicyService.sol";
|
40
35
|
import {IPoolService} from "./IPoolService.sol";
|
41
|
-
import {
|
36
|
+
import {IService} from "../../shared/IService.sol";
|
37
|
+
import {Service} from "../../shared/Service.sol";
|
42
38
|
|
43
39
|
|
44
40
|
contract PolicyService is
|
@@ -48,8 +44,11 @@ contract PolicyService is
|
|
48
44
|
using NftIdLib for NftId;
|
49
45
|
using TimestampLib for Timestamp;
|
50
46
|
|
51
|
-
|
47
|
+
IApplicationService internal _applicationService;
|
52
48
|
IBundleService internal _bundleService;
|
49
|
+
IClaimService internal _claimService;
|
50
|
+
IDistributionService internal _distributionService;
|
51
|
+
IPoolService internal _poolService;
|
53
52
|
|
54
53
|
event LogProductServiceSender(address sender);
|
55
54
|
|
@@ -65,143 +64,30 @@ contract PolicyService is
|
|
65
64
|
address initialOwner;
|
66
65
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
67
66
|
|
68
|
-
initializeService(registryAddress, owner);
|
67
|
+
initializeService(registryAddress, address(0), owner);
|
69
68
|
|
70
|
-
|
71
|
-
|
69
|
+
VersionPart majorVersion = getVersion().toMajorPart();
|
70
|
+
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
|
71
|
+
_bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
|
72
|
+
_claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
|
73
|
+
_applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
|
74
|
+
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
|
72
75
|
|
73
76
|
registerInterface(type(IPolicyService).interfaceId);
|
74
77
|
}
|
75
78
|
|
76
79
|
|
77
|
-
function getDomain() public pure override
|
80
|
+
function getDomain() public pure override returns(ObjectType) {
|
78
81
|
return POLICY();
|
79
82
|
}
|
80
83
|
|
81
84
|
|
82
85
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
83
86
|
IRegistry.ObjectInfo memory productInfo;
|
84
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
87
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
85
88
|
product = Product(productInfo.objectAddress);
|
86
89
|
}
|
87
90
|
|
88
|
-
// TODO: no access restrictions
|
89
|
-
function calculatePremium(
|
90
|
-
RiskId riskId,
|
91
|
-
uint256 sumInsuredAmount,
|
92
|
-
uint256 lifetime,
|
93
|
-
bytes memory applicationData,
|
94
|
-
NftId bundleNftId,
|
95
|
-
ReferralId referralId
|
96
|
-
)
|
97
|
-
public
|
98
|
-
view
|
99
|
-
virtual override
|
100
|
-
returns (
|
101
|
-
uint256 premiumAmount,
|
102
|
-
uint256 productFeeAmount,
|
103
|
-
uint256 poolFeeAmount,
|
104
|
-
uint256 bundleFeeAmount,
|
105
|
-
uint256 distributionFeeAmount
|
106
|
-
)
|
107
|
-
{
|
108
|
-
Product product = _getAndVerifyInstanceAndProduct();
|
109
|
-
uint256 netPremiumAmount = product.calculateNetPremium(
|
110
|
-
sumInsuredAmount,
|
111
|
-
riskId,
|
112
|
-
lifetime,
|
113
|
-
applicationData
|
114
|
-
);
|
115
|
-
|
116
|
-
(
|
117
|
-
productFeeAmount,
|
118
|
-
poolFeeAmount,
|
119
|
-
bundleFeeAmount,
|
120
|
-
distributionFeeAmount
|
121
|
-
) = _calculateFeeAmounts(
|
122
|
-
netPremiumAmount,
|
123
|
-
product,
|
124
|
-
bundleNftId,
|
125
|
-
referralId
|
126
|
-
);
|
127
|
-
|
128
|
-
premiumAmount = netPremiumAmount + productFeeAmount;
|
129
|
-
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
130
|
-
premiumAmount += distributionFeeAmount;
|
131
|
-
}
|
132
|
-
|
133
|
-
function _calculateFeeAmounts(
|
134
|
-
uint256 netPremiumAmount,
|
135
|
-
Product product,
|
136
|
-
NftId bundleNftId,
|
137
|
-
ReferralId referralId
|
138
|
-
)
|
139
|
-
internal
|
140
|
-
view
|
141
|
-
returns (
|
142
|
-
uint256 productFeeAmount,
|
143
|
-
uint256 poolFeeAmount,
|
144
|
-
uint256 bundleFeeAmount,
|
145
|
-
uint256 distributionFeeAmount
|
146
|
-
)
|
147
|
-
{
|
148
|
-
InstanceReader instanceReader;
|
149
|
-
{
|
150
|
-
IInstance instance = product.getInstance();
|
151
|
-
instanceReader = instance.getInstanceReader();
|
152
|
-
}
|
153
|
-
|
154
|
-
NftId poolNftId = product.getPoolNftId();
|
155
|
-
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
156
|
-
require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
|
157
|
-
|
158
|
-
{
|
159
|
-
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
|
160
|
-
(productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
161
|
-
}
|
162
|
-
{
|
163
|
-
ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
164
|
-
(poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
|
165
|
-
}
|
166
|
-
{
|
167
|
-
NftId distributionNftId = product.getDistributionNftId();
|
168
|
-
ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
169
|
-
// FIXME: call distributionService.calculateFeeAmount
|
170
|
-
(distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
|
171
|
-
}
|
172
|
-
|
173
|
-
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
174
|
-
}
|
175
|
-
|
176
|
-
function _getAndVerifyUnderwritingSetup(
|
177
|
-
IInstance instance,
|
178
|
-
InstanceReader instanceReader,
|
179
|
-
IPolicy.PolicyInfo memory policyInfo,
|
180
|
-
ISetup.ProductSetupInfo memory productSetupInfo
|
181
|
-
)
|
182
|
-
internal
|
183
|
-
view
|
184
|
-
returns (
|
185
|
-
NftId poolNftId,
|
186
|
-
NftId bundleNftId,
|
187
|
-
IBundle.BundleInfo memory bundleInfo,
|
188
|
-
uint256 collateralAmount
|
189
|
-
)
|
190
|
-
{
|
191
|
-
// check match between policy and bundle (via pool)
|
192
|
-
poolNftId = productSetupInfo.poolNftId;
|
193
|
-
bundleNftId = policyInfo.bundleNftId;
|
194
|
-
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
195
|
-
require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
|
196
|
-
|
197
|
-
// calculate required collateral
|
198
|
-
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
199
|
-
|
200
|
-
// obtain remaining return values
|
201
|
-
// TODO required collateral amount should be calculated by pool service, not policy service
|
202
|
-
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
203
|
-
}
|
204
|
-
|
205
91
|
|
206
92
|
function decline(
|
207
93
|
NftId policyNftId
|
@@ -214,7 +100,7 @@ contract PolicyService is
|
|
214
100
|
|
215
101
|
|
216
102
|
/// @dev underwites application which includes the locking of the required collateral from the pool.
|
217
|
-
function
|
103
|
+
function collateralize(
|
218
104
|
NftId applicationNftId, // = policyNftId
|
219
105
|
bool requirePremiumPayment,
|
220
106
|
Timestamp activateAt
|
@@ -223,42 +109,23 @@ contract PolicyService is
|
|
223
109
|
virtual override
|
224
110
|
{
|
225
111
|
// check caller is registered product
|
226
|
-
IInstance instance;
|
227
|
-
InstanceReader instanceReader;
|
228
|
-
NftId productNftId;
|
229
|
-
{
|
230
|
-
IRegistry.ObjectInfo memory productInfo;
|
231
|
-
(productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
232
|
-
instanceReader = instance.getInstanceReader();
|
233
|
-
productNftId = productInfo.nftId;
|
234
|
-
}
|
112
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
113
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
235
114
|
|
236
115
|
// check policy matches with calling product
|
237
|
-
IPolicy.PolicyInfo memory
|
238
|
-
require(
|
116
|
+
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
117
|
+
require(applicationInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
239
118
|
|
240
119
|
// check policy is in state applied
|
241
120
|
require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
242
121
|
|
243
|
-
(
|
244
|
-
NftId poolNftId,
|
245
|
-
NftId bundleNftId,
|
246
|
-
IBundle.BundleInfo memory bundleInfo,
|
247
|
-
uint256 collateralAmount
|
248
|
-
) = _getAndVerifyUnderwritingSetup(
|
249
|
-
instance,
|
250
|
-
instanceReader,
|
251
|
-
policyInfo,
|
252
|
-
instanceReader.getProductSetupInfo(productNftId)
|
253
|
-
);
|
254
|
-
|
255
|
-
StateId newPolicyState = UNDERWRITTEN();
|
122
|
+
StateId newPolicyState = COLLATERALIZED();
|
256
123
|
|
257
124
|
// optional activation of policy
|
258
125
|
if(activateAt > zeroTimestamp()) {
|
259
126
|
newPolicyState = ACTIVE();
|
260
|
-
|
261
|
-
|
127
|
+
applicationInfo.activatedAt = activateAt;
|
128
|
+
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
262
129
|
}
|
263
130
|
|
264
131
|
// lock bundle collateral
|
@@ -268,44 +135,26 @@ contract PolicyService is
|
|
268
135
|
if(requirePremiumPayment) {
|
269
136
|
netPremiumAmount = _processPremiumByTreasury(
|
270
137
|
instance,
|
271
|
-
productNftId,
|
272
138
|
applicationNftId,
|
273
|
-
|
139
|
+
applicationInfo.premiumAmount);
|
274
140
|
|
275
|
-
|
141
|
+
applicationInfo.premiumPaidAmount += applicationInfo.premiumAmount;
|
276
142
|
}
|
277
143
|
|
278
|
-
//
|
279
|
-
|
280
|
-
|
281
|
-
//
|
282
|
-
//
|
283
|
-
// retention level: fraction of sum insured that product will cover from pool funds directly
|
144
|
+
// store updated policy info
|
145
|
+
instance.updatePolicy(applicationNftId, applicationInfo, newPolicyState);
|
146
|
+
|
147
|
+
// lock collateral and update pool and bundle book keeping
|
148
|
+
// pool retention level: fraction of sum insured that product will cover from pool funds directly
|
284
149
|
// eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
|
285
150
|
// for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
|
286
|
-
//
|
287
|
-
|
288
|
-
// - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
|
289
|
-
bundleInfo = _bundleService.lockCollateral(
|
151
|
+
// might also call pool component (for isVerifyingApplications pools)
|
152
|
+
_poolService.lockCollateral(
|
290
153
|
instance,
|
154
|
+
productNftId,
|
291
155
|
applicationNftId,
|
292
|
-
|
293
|
-
|
294
|
-
netPremiumAmount);
|
295
|
-
|
296
|
-
instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
|
297
|
-
|
298
|
-
// also verify/confirm application by pool if necessary
|
299
|
-
if(instanceReader.getPoolSetupInfo(poolNftId).isVerifyingApplications) {
|
300
|
-
IPoolComponent pool = IPoolComponent(
|
301
|
-
getRegistry().getObjectInfo(poolNftId).objectAddress);
|
302
|
-
|
303
|
-
pool.verifyApplication(
|
304
|
-
applicationNftId,
|
305
|
-
policyInfo.applicationData,
|
306
|
-
bundleInfo.filter,
|
307
|
-
collateralAmount);
|
308
|
-
}
|
156
|
+
applicationInfo,
|
157
|
+
netPremiumAmount); // for pool book keeping (fee + additional capital)
|
309
158
|
|
310
159
|
// TODO: add logging
|
311
160
|
}
|
@@ -319,7 +168,7 @@ contract PolicyService is
|
|
319
168
|
|
320
169
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
321
170
|
// check caller is registered product
|
322
|
-
(
|
171
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
323
172
|
InstanceReader instanceReader = instance.getInstanceReader();
|
324
173
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
325
174
|
|
@@ -331,7 +180,6 @@ contract PolicyService is
|
|
331
180
|
|
332
181
|
uint256 netPremiumAmount = _processPremiumByTreasury(
|
333
182
|
instance,
|
334
|
-
productInfo.nftId,
|
335
183
|
policyNftId,
|
336
184
|
unpaidPremiumAmount);
|
337
185
|
|
@@ -349,7 +197,7 @@ contract PolicyService is
|
|
349
197
|
|
350
198
|
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
351
199
|
// check caller is registered product
|
352
|
-
(
|
200
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
353
201
|
InstanceReader instanceReader = instance.getInstanceReader();
|
354
202
|
|
355
203
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -383,7 +231,7 @@ contract PolicyService is
|
|
383
231
|
external
|
384
232
|
override
|
385
233
|
{
|
386
|
-
(
|
234
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
387
235
|
InstanceReader instanceReader = instance.getInstanceReader();
|
388
236
|
|
389
237
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -401,6 +249,7 @@ contract PolicyService is
|
|
401
249
|
revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
|
402
250
|
}
|
403
251
|
|
252
|
+
// TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
|
404
253
|
if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
|
405
254
|
revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
|
406
255
|
}
|
@@ -409,16 +258,215 @@ contract PolicyService is
|
|
409
258
|
revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
|
410
259
|
}
|
411
260
|
|
412
|
-
if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
|
413
|
-
revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
|
414
|
-
}
|
415
|
-
|
416
261
|
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
417
262
|
|
418
|
-
|
263
|
+
_poolService.releaseCollateral(
|
264
|
+
instance,
|
265
|
+
policyNftId,
|
266
|
+
policyInfo);
|
267
|
+
|
419
268
|
instance.updatePolicy(policyNftId, policyInfo, CLOSED());
|
420
269
|
}
|
421
270
|
|
271
|
+
function submitClaim(
|
272
|
+
NftId policyNftId,
|
273
|
+
Amount claimAmount,
|
274
|
+
bytes memory claimData
|
275
|
+
)
|
276
|
+
external
|
277
|
+
virtual
|
278
|
+
returns (ClaimId claimId)
|
279
|
+
{
|
280
|
+
(
|
281
|
+
IInstance instance,
|
282
|
+
InstanceReader instanceReader,
|
283
|
+
IPolicy.PolicyInfo memory policyInfo
|
284
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
285
|
+
|
286
|
+
// check policy is in its active period
|
287
|
+
if(policyInfo.activatedAt.eqz() || TimestampLib.blockTimestamp() >= policyInfo.expiredAt) {
|
288
|
+
revert ErrorPolicyServicePolicyNotOpen(policyNftId);
|
289
|
+
}
|
290
|
+
|
291
|
+
// check policy including this claim is still within sum insured
|
292
|
+
if(policyInfo.payoutAmount.toInt() + claimAmount.toInt() > policyInfo.sumInsuredAmount) {
|
293
|
+
revert ErrorPolicyServiceClaimExceedsSumInsured(
|
294
|
+
policyNftId,
|
295
|
+
AmountLib.toAmount(policyInfo.sumInsuredAmount),
|
296
|
+
AmountLib.toAmount(policyInfo.payoutAmount.toInt() + claimAmount.toInt()));
|
297
|
+
}
|
298
|
+
|
299
|
+
// create new claim
|
300
|
+
claimId = ClaimIdLib.toClaimId(policyInfo.claimsCount + 1);
|
301
|
+
_claimService.submit(instance, policyNftId, claimId, claimAmount, claimData);
|
302
|
+
|
303
|
+
// update and save policy info with instance
|
304
|
+
policyInfo.claimsCount += 1;
|
305
|
+
policyInfo.openClaimsCount += 1;
|
306
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
307
|
+
|
308
|
+
emit LogPolicyServiceClaimSubmitted(policyNftId, claimId, claimAmount);
|
309
|
+
}
|
310
|
+
|
311
|
+
function confirmClaim(
|
312
|
+
NftId policyNftId,
|
313
|
+
ClaimId claimId,
|
314
|
+
Amount confirmedAmount
|
315
|
+
)
|
316
|
+
external
|
317
|
+
{
|
318
|
+
(
|
319
|
+
IInstance instance,
|
320
|
+
InstanceReader instanceReader,
|
321
|
+
IPolicy.PolicyInfo memory policyInfo
|
322
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
323
|
+
|
324
|
+
// check/update claim info
|
325
|
+
_claimService.confirm(instance, instanceReader, policyNftId, claimId, confirmedAmount);
|
326
|
+
|
327
|
+
// update and save policy info with instance
|
328
|
+
instance.updatePolicy(policyNftId, policyInfo, CONFIRMED());
|
329
|
+
|
330
|
+
emit LogPolicyServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
|
331
|
+
}
|
332
|
+
|
333
|
+
function declineClaim(
|
334
|
+
NftId policyNftId,
|
335
|
+
ClaimId claimId
|
336
|
+
)
|
337
|
+
external
|
338
|
+
{
|
339
|
+
(
|
340
|
+
IInstance instance,
|
341
|
+
InstanceReader instanceReader,
|
342
|
+
IPolicy.PolicyInfo memory policyInfo
|
343
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
344
|
+
|
345
|
+
// check/update claim info
|
346
|
+
_claimService.decline(instance, instanceReader, policyNftId, claimId);
|
347
|
+
|
348
|
+
// update and save policy info with instance
|
349
|
+
policyInfo.openClaimsCount -= 1;
|
350
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
351
|
+
|
352
|
+
emit LogPolicyServiceClaimDeclined(policyNftId, claimId);
|
353
|
+
}
|
354
|
+
|
355
|
+
function closeClaim(
|
356
|
+
NftId policyNftId,
|
357
|
+
ClaimId claimId
|
358
|
+
)
|
359
|
+
external
|
360
|
+
{
|
361
|
+
(
|
362
|
+
IInstance instance,
|
363
|
+
InstanceReader instanceReader,
|
364
|
+
IPolicy.PolicyInfo memory policyInfo
|
365
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
366
|
+
|
367
|
+
// check/update claim info
|
368
|
+
_claimService.close(instance, instanceReader, policyNftId, claimId);
|
369
|
+
|
370
|
+
// update and save policy info with instance
|
371
|
+
policyInfo.openClaimsCount -= 1;
|
372
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
373
|
+
|
374
|
+
emit LogPolicyServiceClaimClosed(policyNftId, claimId);
|
375
|
+
}
|
376
|
+
|
377
|
+
function createPayout(
|
378
|
+
NftId policyNftId,
|
379
|
+
ClaimId claimId,
|
380
|
+
Amount amount,
|
381
|
+
bytes memory data
|
382
|
+
)
|
383
|
+
external
|
384
|
+
returns (PayoutId payoutId)
|
385
|
+
{
|
386
|
+
(
|
387
|
+
IInstance instance,
|
388
|
+
InstanceReader instanceReader,
|
389
|
+
IPolicy.PolicyInfo memory policyInfo
|
390
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
391
|
+
|
392
|
+
IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
|
393
|
+
StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
|
394
|
+
|
395
|
+
// TODO add checks
|
396
|
+
// claim needs to be open
|
397
|
+
// claim.paidAmount + amount <= claim.claimAmount
|
398
|
+
|
399
|
+
// check/update claim info
|
400
|
+
uint8 claimNo = claimInfo.payoutsCount + 1;
|
401
|
+
payoutId = PayoutIdLib.toPayoutId(claimId, claimNo);
|
402
|
+
_claimService.createPayout(
|
403
|
+
instance,
|
404
|
+
policyNftId,
|
405
|
+
payoutId,
|
406
|
+
amount,
|
407
|
+
data);
|
408
|
+
|
409
|
+
// update and save policy info with instance
|
410
|
+
policyInfo.payoutAmount.add(amount);
|
411
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
412
|
+
|
413
|
+
emit LogPolicyServicePayoutCreated(policyNftId, payoutId, amount);
|
414
|
+
}
|
415
|
+
|
416
|
+
function processPayout(
|
417
|
+
NftId policyNftId,
|
418
|
+
PayoutId payoutId
|
419
|
+
)
|
420
|
+
external
|
421
|
+
{
|
422
|
+
(
|
423
|
+
IInstance instance,
|
424
|
+
InstanceReader instanceReader,
|
425
|
+
IPolicy.PolicyInfo memory policyInfo
|
426
|
+
) = _verifyCallerWithPolicy(policyNftId);
|
427
|
+
|
428
|
+
// check/update claim info
|
429
|
+
(
|
430
|
+
Amount amount,
|
431
|
+
bool payoutIsClosingClaim
|
432
|
+
) = _claimService.processPayout(
|
433
|
+
instance,
|
434
|
+
instanceReader,
|
435
|
+
policyNftId,
|
436
|
+
payoutId);
|
437
|
+
|
438
|
+
// update policy info if affected by processed payout
|
439
|
+
if(payoutIsClosingClaim) {
|
440
|
+
policyInfo.openClaimsCount -= 1;
|
441
|
+
instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
442
|
+
}
|
443
|
+
|
444
|
+
emit LogPolicyServicePayoutProcessed(policyNftId, payoutId, amount);
|
445
|
+
}
|
446
|
+
|
447
|
+
function _verifyCallerWithPolicy(
|
448
|
+
NftId policyNftId
|
449
|
+
)
|
450
|
+
internal
|
451
|
+
returns (
|
452
|
+
IInstance instance,
|
453
|
+
InstanceReader instanceReader,
|
454
|
+
IPolicy.PolicyInfo memory policyInfo
|
455
|
+
)
|
456
|
+
{
|
457
|
+
NftId productNftId;
|
458
|
+
(productNftId,, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
459
|
+
instanceReader = instance.getInstanceReader();
|
460
|
+
|
461
|
+
// check caller(product) policy match
|
462
|
+
policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
463
|
+
if(policyInfo.productNftId != productNftId) {
|
464
|
+
revert ErrorPolicyServicePolicyProductMismatch(policyNftId,
|
465
|
+
policyInfo.productNftId,
|
466
|
+
productNftId);
|
467
|
+
}
|
468
|
+
}
|
469
|
+
|
422
470
|
function _getPoolNftId(
|
423
471
|
IInstance instance,
|
424
472
|
NftId productNftId
|
@@ -435,40 +483,57 @@ contract PolicyService is
|
|
435
483
|
|
436
484
|
function _processPremiumByTreasury(
|
437
485
|
IInstance instance,
|
438
|
-
NftId productNftId,
|
439
486
|
NftId policyNftId,
|
440
|
-
uint256
|
487
|
+
uint256 premiumExpectedAmount
|
441
488
|
)
|
442
489
|
internal
|
443
490
|
returns (uint256 netPremiumAmount)
|
444
491
|
{
|
445
492
|
// process token transfer(s)
|
446
|
-
if(
|
493
|
+
if(premiumExpectedAmount > 0) {
|
494
|
+
NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
|
447
495
|
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
496
|
+
IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
|
448
497
|
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
449
498
|
address policyOwner = getRegistry().ownerOf(policyNftId);
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
premiumAmount
|
499
|
+
address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
|
500
|
+
IPolicy.Premium memory premium = _applicationService.calculatePremium(
|
501
|
+
productNftId,
|
502
|
+
policyInfo.riskId,
|
503
|
+
policyInfo.sumInsuredAmount,
|
504
|
+
policyInfo.lifetime,
|
505
|
+
policyInfo.applicationData,
|
506
|
+
policyInfo.bundleNftId,
|
507
|
+
policyInfo.referralId
|
460
508
|
);
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
509
|
+
|
510
|
+
if (premium.premiumAmount != premiumExpectedAmount) {
|
511
|
+
revert ErrorIPolicyServicePremiumMismatch(
|
512
|
+
policyNftId,
|
513
|
+
premiumExpectedAmount,
|
514
|
+
premium.premiumAmount);
|
515
|
+
}
|
516
|
+
|
517
|
+
// move product fee to product wallet
|
518
|
+
address productWallet = productSetupInfo.wallet;
|
519
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
|
520
|
+
revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
|
471
521
|
}
|
522
|
+
tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
|
523
|
+
|
524
|
+
// move distribution fee to distribution wallet
|
525
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
|
526
|
+
address distributionWallet = distributionSetupInfo.wallet;
|
527
|
+
uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
|
528
|
+
tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
|
529
|
+
_distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
|
530
|
+
|
531
|
+
// move netpremium to pool wallet
|
532
|
+
tokenHandler.transfer(policyOwner, poolWallet, premium.netPremiumAmount);
|
533
|
+
|
534
|
+
// TODO: move pool related tokens too
|
535
|
+
// TODO: move bundle related tokens too
|
536
|
+
netPremiumAmount = premium.netPremiumAmount;
|
472
537
|
}
|
473
538
|
|
474
539
|
// TODO: add logging
|