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