@etherisc/gif-next 0.0.2-f30e0eb-805 → 0.0.2-f4f2d93-430
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 +10 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +10 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +100 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +100 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +110 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +100 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +20 -0
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +10 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +34 -14
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +80 -14
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +90 -70
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +76 -57
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +21 -11
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +208 -62
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +62 -22
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/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 +124 -53
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +21 -13
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +298 -160
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -14
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +104 -41
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +11 -7
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +189 -123
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +48 -48
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +80 -14
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +142 -113
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +80 -14
- 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 +90 -24
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +430 -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 +136 -65
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +27 -19
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +468 -55
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +18 -14
- 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/IRegistry.sol/IRegistry.dbg.json +1 -1
- 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/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
- 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/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/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- 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/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- 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/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- 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/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- 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 +161 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- 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/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- 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/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- 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/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- 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/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/Component.sol +4 -2
- package/contracts/components/IComponent.sol +3 -1
- package/contracts/components/Pool.sol +8 -4
- package/contracts/instance/Instance.sol +1 -0
- package/contracts/instance/InstanceAccessManager.sol +16 -11
- package/contracts/instance/InstanceReader.sol +1 -0
- package/contracts/instance/InstanceService.sol +19 -19
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +8 -3
- package/contracts/instance/module/IAccess.sol +2 -2
- package/contracts/instance/module/IBundle.sol +6 -4
- package/contracts/instance/module/IComponents.sol +6 -0
- package/contracts/instance/service/ApplicationService.sol +9 -9
- package/contracts/instance/service/BundleService.sol +155 -60
- package/contracts/instance/service/ClaimService.sol +3 -3
- package/contracts/instance/service/DistributionService.sol +24 -56
- package/contracts/instance/service/IBundleService.sol +53 -22
- package/contracts/instance/service/IDistributionService.sol +1 -0
- package/contracts/instance/service/IPoolService.sol +65 -1
- package/contracts/instance/service/PolicyService.sol +60 -101
- package/contracts/instance/service/PoolService.sol +132 -49
- package/contracts/instance/service/ProductService.sol +20 -51
- package/contracts/registry/IRegistryService.sol +4 -3
- 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/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +60 -0
- package/contracts/types/Fee.sol +12 -5
- package/package.json +1 -1
@@ -1,6 +1,7 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
+
import {Amount} from "../../types/Amount.sol";
|
4
5
|
import {NftId} from "../../types/NftId.sol";
|
5
6
|
import {Fee} from "../../types/Fee.sol";
|
6
7
|
import {IService} from "../../shared/IService.sol";
|
@@ -8,55 +9,85 @@ import {IBundle} from "../module/IBundle.sol";
|
|
8
9
|
import {IInstance} from "../../instance/IInstance.sol";
|
9
10
|
import {Seconds} from "../../types/Seconds.sol";
|
10
11
|
import {StateId} from "../../types/StateId.sol";
|
12
|
+
import {Timestamp} from "../../types/Timestamp.sol";
|
11
13
|
|
12
14
|
interface IBundleService is IService {
|
13
15
|
|
14
16
|
event LogBundleServiceBundleActivated(NftId bundleNftId);
|
15
17
|
event LogBundleServiceBundleLocked(NftId bundleNftId);
|
16
|
-
event LogBundleServiceBundleClosed(NftId bundleNftId);
|
17
18
|
|
18
19
|
error ErrorBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, uint256 amount);
|
19
|
-
error ErrorBundleServiceBundleNotOpen(NftId bundleNftId, StateId state);
|
20
|
+
error ErrorBundleServiceBundleNotOpen(NftId bundleNftId, StateId state, Timestamp expiredAt);
|
21
|
+
error ErrorBundleServiceCapacityInsufficient(NftId bundleNftId, uint capacityAmount, uint collateralAmount);
|
20
22
|
error ErrorBundleServiceBundleWithOpenPolicies(NftId bundleNftId, uint256 openPoliciesCount);
|
21
23
|
|
24
|
+
/// @dev create a new bundle for the specified attributes
|
25
|
+
/// may only be called by pool service
|
22
26
|
function create(
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
IInstance instance, // instance relevant for bundle
|
28
|
+
NftId poolNftId, // the pool the bundle will be linked to
|
29
|
+
address owner, // initial bundle owner
|
30
|
+
Fee memory fee, // fees deducted from premium that go to bundle owner
|
31
|
+
Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
|
32
|
+
Seconds lifetime, // initial duration for which new policies are covered
|
33
|
+
bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
|
34
|
+
)
|
35
|
+
external
|
36
|
+
returns(NftId bundleNftId); // the nft id of the newly created bundle
|
37
|
+
|
38
|
+
/// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
|
39
|
+
/// only active bundles may be locked
|
40
|
+
/// may only be called by registered and unlocked pool components
|
41
|
+
function lock(NftId bundleNftId) external;
|
42
|
+
|
43
|
+
/// @dev activates the specified bundle
|
44
|
+
/// only locked bundles may be unlocked
|
45
|
+
/// may only be called by registered and unlocked pool components
|
46
|
+
function unlock(NftId bundleNftId) external;
|
29
47
|
|
48
|
+
/// @dev closes the specified bundle
|
49
|
+
/// only open bundles (active or locked) may be closed
|
50
|
+
/// to close a bundle it may not have any non-closed polices attached to it
|
51
|
+
/// may only be called by registered and unlocked pool components
|
52
|
+
function close(
|
53
|
+
IInstance instance,
|
54
|
+
NftId bundleNftId
|
55
|
+
) external;
|
30
56
|
|
57
|
+
/// @dev set bundle fee to provided value
|
58
|
+
/// may only be called by registered and unlocked pool components
|
31
59
|
function setFee(
|
32
60
|
NftId bundleNftId,
|
33
61
|
Fee memory fee
|
34
62
|
) external;
|
35
63
|
|
36
64
|
|
65
|
+
/// @dev locks the specified collateral in the bundle
|
66
|
+
/// the locked collateral is added to the bundle locked capital
|
67
|
+
/// the bundles' fees are updated with the fees for this premium
|
68
|
+
/// the premium (minus bundle fee) is added to the bundle capital
|
69
|
+
/// may only be called by pool service
|
37
70
|
function lockCollateral(
|
38
71
|
IInstance instanceNftId,
|
39
72
|
NftId policyNftId,
|
40
73
|
NftId bundleNftId,
|
41
74
|
uint256 collateralAmount,
|
42
|
-
uint256
|
43
|
-
)
|
44
|
-
external
|
45
|
-
returns (
|
46
|
-
IBundle.BundleInfo memory bundleInfo
|
47
|
-
);
|
75
|
+
uint256 premium // premium amount after pool fee
|
76
|
+
) external;
|
48
77
|
|
49
|
-
function increaseBalance(IInstance instance, NftId bundleNftId, uint256 amount) external;
|
50
78
|
|
51
|
-
|
79
|
+
/// @dev releases the specified collateral in the bundle
|
80
|
+
/// may only be called by pool service
|
81
|
+
function releaseCollateral(
|
82
|
+
IInstance instance,
|
83
|
+
NftId policyNftId,
|
84
|
+
NftId bundleNftId,
|
85
|
+
uint256 collateralAmount
|
86
|
+
) external;
|
87
|
+
|
88
|
+
function increaseBalance(IInstance instance, NftId bundleNftId, uint256 amount) external;
|
52
89
|
|
53
90
|
// function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
|
54
91
|
|
55
92
|
// function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
|
56
|
-
|
57
|
-
function lock(NftId bundleNftId) external;
|
58
|
-
|
59
|
-
function unlock(NftId bundleNftId) external;
|
60
|
-
|
61
|
-
function close(NftId bundleNftId) external;
|
62
93
|
}
|
@@ -12,6 +12,7 @@ import {Timestamp} from "../../types/Timestamp.sol";
|
|
12
12
|
|
13
13
|
|
14
14
|
interface IDistributionService is IService {
|
15
|
+
error ErrorDistributionServiceCallerNotRegistered(address caller);
|
15
16
|
error ErrorIDistributionServiceParentNftIdNotInstance(NftId nftId, NftId parentNftId);
|
16
17
|
error ErrorIDistributionServiceCallerNotDistributor(address caller);
|
17
18
|
error ErrorIDistributionServiceInvalidReferralId(ReferralId referralId);
|
@@ -1,12 +1,15 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
+
import {Amount} from "../../types/Amount.sol";
|
4
5
|
import {Fee} from "../../types/Fee.sol";
|
5
6
|
import {NftId} from "../../types/NftId.sol";
|
6
|
-
import {IService} from "../../shared/IService.sol";
|
7
7
|
import {IBundle} from "../module/IBundle.sol";
|
8
8
|
import {IInstance} from "../../instance/IInstance.sol";
|
9
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
10
|
+
import {IService} from "../../shared/IService.sol";
|
9
11
|
import {RoleId} from "../../types/RoleId.sol";
|
12
|
+
import {Seconds} from "../../types/Seconds.sol";
|
10
13
|
import {StateId} from "../../types/StateId.sol";
|
11
14
|
|
12
15
|
interface IPoolService is IService {
|
@@ -14,7 +17,11 @@ interface IPoolService is IService {
|
|
14
17
|
event LogPoolServiceMaxCapitalAmountUpdated(NftId poolNftId, uint256 previousMaxCapitalAmount, uint256 currentMaxCapitalAmount);
|
15
18
|
event LogPoolServiceBundleOwnerRoleSet(NftId poolNftId, RoleId bundleOwnerRole);
|
16
19
|
|
20
|
+
event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
|
21
|
+
event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
|
22
|
+
|
17
23
|
error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
|
24
|
+
error ErrorPoolServiceBundlePoolMismatch(NftId bundlePoolNftId, NftId productPoolNftId);
|
18
25
|
|
19
26
|
/// @dev registers a new pool with the registry service
|
20
27
|
function register(address poolAddress) external returns(NftId);
|
@@ -32,4 +39,61 @@ interface IPoolService is IService {
|
|
32
39
|
Fee memory stakingFee,
|
33
40
|
Fee memory performanceFee
|
34
41
|
) external;
|
42
|
+
|
43
|
+
|
44
|
+
/// @dev locks required collateral to cover the specified application (and turn it into a policy)
|
45
|
+
/// - retention level == 1: the full collateral amount will be locked by the specified bundle
|
46
|
+
/// - retention level < 1: a part of the coverage is provided by the specified bundle, the rest by the pool component
|
47
|
+
/// in which case the pool component might hold a re-insurance policy
|
48
|
+
/// may only be called by the policy service for unlocked pool components
|
49
|
+
function lockCollateral(
|
50
|
+
IInstance instance,
|
51
|
+
NftId productNftId,
|
52
|
+
NftId applicationNftId,
|
53
|
+
IPolicy.PolicyInfo memory applicationInfo,
|
54
|
+
uint256 premiumAmount
|
55
|
+
) external;
|
56
|
+
|
57
|
+
|
58
|
+
/// @dev releases the remaining collateral linked to the specified policy
|
59
|
+
/// may only be called by the policy service for unlocked pool components
|
60
|
+
function releaseCollateral(
|
61
|
+
IInstance instance,
|
62
|
+
NftId policyNftId,
|
63
|
+
IPolicy.PolicyInfo memory policyInfo
|
64
|
+
) external;
|
65
|
+
|
66
|
+
|
67
|
+
/// @dev create a new bundle for the provided parameters
|
68
|
+
/// staking fees will be deducted by the pool service from the staking amount
|
69
|
+
/// may only be called by registered and unlocked pool components
|
70
|
+
function createBundle(
|
71
|
+
address owner, // initial bundle owner
|
72
|
+
Fee memory fee, // fees deducted from premium that go to bundle owner
|
73
|
+
Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
|
74
|
+
Seconds lifetime, // initial duration for which new policies are covered
|
75
|
+
bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
|
76
|
+
)
|
77
|
+
external
|
78
|
+
returns(NftId bundleNftId); // the nft id of the newly created bundle
|
79
|
+
|
80
|
+
|
81
|
+
/// @dev closes the specified bundle
|
82
|
+
/// only open bundles (active or locked) may be closed
|
83
|
+
/// to close a bundle it may not have any non-closed polices attached to it
|
84
|
+
/// bundle fees and remaining capital (after deduction of the performance fee) will be transferred to the bundle owner
|
85
|
+
/// may only be called by registered and unlocked pool components
|
86
|
+
function closeBundle(NftId bundleNftId) external;
|
87
|
+
|
88
|
+
|
89
|
+
/// @dev increase stakes for bundle
|
90
|
+
/// staking fees will be deducted by the pool service from the staking amount
|
91
|
+
/// may only be called by registered and unlocked pool components
|
92
|
+
// function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
|
93
|
+
|
94
|
+
|
95
|
+
/// @dev decrease stakes for bundle
|
96
|
+
/// performance fees will be deducted by the pool service from the staking amount
|
97
|
+
/// may only be called by registered and unlocked pool components
|
98
|
+
// function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
|
35
99
|
}
|
@@ -20,6 +20,7 @@ import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE} fr
|
|
20
20
|
import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
|
21
21
|
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
22
22
|
import {StateId} from "../../types/StateId.sol";
|
23
|
+
import {VersionPart} from "../../types/Version.sol";
|
23
24
|
|
24
25
|
import {ComponentService} from "../base/ComponentService.sol";
|
25
26
|
import {IApplicationService} from "./IApplicationService.sol";
|
@@ -58,58 +59,54 @@ contract PolicyService is
|
|
58
59
|
address initialOwner;
|
59
60
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
60
61
|
|
61
|
-
initializeService(registryAddress, owner);
|
62
|
+
initializeService(registryAddress, address(0), owner);
|
62
63
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
64
|
+
VersionPart majorVersion = getVersion().toMajorPart();
|
65
|
+
_poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
|
66
|
+
_bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
|
67
|
+
_applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
|
68
|
+
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
|
67
69
|
|
68
70
|
registerInterface(type(IPolicyService).interfaceId);
|
69
71
|
}
|
70
72
|
|
71
73
|
|
72
|
-
function getDomain() public pure override
|
74
|
+
function getDomain() public pure override returns(ObjectType) {
|
73
75
|
return POLICY();
|
74
76
|
}
|
75
77
|
|
76
78
|
|
77
79
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
78
80
|
IRegistry.ObjectInfo memory productInfo;
|
79
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
81
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
80
82
|
product = Product(productInfo.objectAddress);
|
81
83
|
}
|
82
84
|
|
83
|
-
function _getAndVerifyUnderwritingSetup(
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
)
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
{
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
// obtain remaining return values
|
110
|
-
// TODO required collateral amount should be calculated by pool service, not policy service
|
111
|
-
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
112
|
-
}
|
85
|
+
// function _getAndVerifyUnderwritingSetup(
|
86
|
+
// IInstance instance,
|
87
|
+
// InstanceReader instanceReader,
|
88
|
+
// IPolicy.PolicyInfo memory policyInfo,
|
89
|
+
// ISetup.ProductSetupInfo memory productSetupInfo
|
90
|
+
// )
|
91
|
+
// internal
|
92
|
+
// view
|
93
|
+
// returns (
|
94
|
+
// NftId poolNftId,
|
95
|
+
// IComponents.PoolInfo memory poolInfo,
|
96
|
+
// NftId bundleNftId,
|
97
|
+
// IBundle.BundleInfo memory bundleInfo
|
98
|
+
// )
|
99
|
+
// {
|
100
|
+
// // check match between policy and bundle (via pool)
|
101
|
+
// poolNftId = productSetupInfo.poolNftId;
|
102
|
+
// bundleNftId = policyInfo.bundleNftId;
|
103
|
+
// bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
104
|
+
// require(bundleInfo.poolNftId == poolNftId, "BUNDLE_POOL_MISMATCH");
|
105
|
+
|
106
|
+
// // calculate required collateral
|
107
|
+
// IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
|
108
|
+
// poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
|
109
|
+
// }
|
113
110
|
|
114
111
|
|
115
112
|
function decline(
|
@@ -132,42 +129,23 @@ contract PolicyService is
|
|
132
129
|
virtual override
|
133
130
|
{
|
134
131
|
// check caller is registered product
|
135
|
-
IInstance instance;
|
136
|
-
InstanceReader instanceReader;
|
137
|
-
NftId productNftId;
|
138
|
-
{
|
139
|
-
IRegistry.ObjectInfo memory productInfo;
|
140
|
-
(productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
141
|
-
instanceReader = instance.getInstanceReader();
|
142
|
-
productNftId = productInfo.nftId;
|
143
|
-
}
|
132
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
133
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
144
134
|
|
145
135
|
// check policy matches with calling product
|
146
|
-
IPolicy.PolicyInfo memory
|
147
|
-
require(
|
136
|
+
IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
|
137
|
+
require(applicationInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
148
138
|
|
149
139
|
// check policy is in state applied
|
150
140
|
require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
151
141
|
|
152
|
-
(
|
153
|
-
NftId poolNftId,
|
154
|
-
NftId bundleNftId,
|
155
|
-
IBundle.BundleInfo memory bundleInfo,
|
156
|
-
uint256 collateralAmount
|
157
|
-
) = _getAndVerifyUnderwritingSetup(
|
158
|
-
instance,
|
159
|
-
instanceReader,
|
160
|
-
policyInfo,
|
161
|
-
instanceReader.getProductSetupInfo(productNftId)
|
162
|
-
);
|
163
|
-
|
164
142
|
StateId newPolicyState = UNDERWRITTEN();
|
165
143
|
|
166
144
|
// optional activation of policy
|
167
145
|
if(activateAt > zeroTimestamp()) {
|
168
146
|
newPolicyState = ACTIVE();
|
169
|
-
|
170
|
-
|
147
|
+
applicationInfo.activatedAt = activateAt;
|
148
|
+
applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
|
171
149
|
}
|
172
150
|
|
173
151
|
// lock bundle collateral
|
@@ -178,48 +156,25 @@ contract PolicyService is
|
|
178
156
|
netPremiumAmount = _processPremiumByTreasury(
|
179
157
|
instance,
|
180
158
|
applicationNftId,
|
181
|
-
|
159
|
+
applicationInfo.premiumAmount);
|
182
160
|
|
183
|
-
|
161
|
+
applicationInfo.premiumPaidAmount += applicationInfo.premiumAmount;
|
184
162
|
}
|
185
163
|
|
186
|
-
//
|
187
|
-
|
188
|
-
|
189
|
-
//
|
190
|
-
//
|
191
|
-
// retention level: fraction of sum insured that product will cover from pool funds directly
|
164
|
+
// store updated policy info
|
165
|
+
instance.updatePolicy(applicationNftId, applicationInfo, newPolicyState);
|
166
|
+
|
167
|
+
// lock collateral and update pool and bundle book keeping
|
168
|
+
// pool retention level: fraction of sum insured that product will cover from pool funds directly
|
192
169
|
// eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
|
193
170
|
// for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
|
194
|
-
//
|
195
|
-
|
196
|
-
// - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
|
197
|
-
bundleInfo = _bundleService.lockCollateral(
|
171
|
+
// might also call pool component (for isVerifyingApplications pools)
|
172
|
+
_poolService.lockCollateral(
|
198
173
|
instance,
|
174
|
+
productNftId,
|
199
175
|
applicationNftId,
|
200
|
-
|
201
|
-
|
202
|
-
netPremiumAmount);
|
203
|
-
|
204
|
-
instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
|
205
|
-
|
206
|
-
// also verify/confirm application by pool if necessary
|
207
|
-
if(abi.decode(
|
208
|
-
instanceReader.getComponentInfo(poolNftId).data,
|
209
|
-
(IComponents.PoolInfo)
|
210
|
-
).isVerifyingApplications
|
211
|
-
)
|
212
|
-
{
|
213
|
-
IPoolComponent pool = IPoolComponent(
|
214
|
-
getRegistry().getObjectInfo(poolNftId).objectAddress);
|
215
|
-
|
216
|
-
pool.verifyApplication(
|
217
|
-
applicationNftId,
|
218
|
-
policyInfo.applicationData,
|
219
|
-
bundleNftId,
|
220
|
-
bundleInfo.filter,
|
221
|
-
collateralAmount);
|
222
|
-
}
|
176
|
+
applicationInfo,
|
177
|
+
netPremiumAmount); // for pool book keeping (fee + additional capital)
|
223
178
|
|
224
179
|
// TODO: add logging
|
225
180
|
}
|
@@ -233,7 +188,7 @@ contract PolicyService is
|
|
233
188
|
|
234
189
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
235
190
|
// check caller is registered product
|
236
|
-
(
|
191
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
237
192
|
InstanceReader instanceReader = instance.getInstanceReader();
|
238
193
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
239
194
|
|
@@ -262,7 +217,7 @@ contract PolicyService is
|
|
262
217
|
|
263
218
|
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
264
219
|
// check caller is registered product
|
265
|
-
(
|
220
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
266
221
|
InstanceReader instanceReader = instance.getInstanceReader();
|
267
222
|
|
268
223
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -296,7 +251,7 @@ contract PolicyService is
|
|
296
251
|
external
|
297
252
|
override
|
298
253
|
{
|
299
|
-
(
|
254
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
300
255
|
InstanceReader instanceReader = instance.getInstanceReader();
|
301
256
|
|
302
257
|
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
@@ -328,7 +283,11 @@ contract PolicyService is
|
|
328
283
|
|
329
284
|
policyInfo.closedAt = TimestampLib.blockTimestamp();
|
330
285
|
|
331
|
-
|
286
|
+
_poolService.releaseCollateral(
|
287
|
+
instance,
|
288
|
+
policyNftId,
|
289
|
+
policyInfo);
|
290
|
+
|
332
291
|
instance.updatePolicy(policyNftId, policyInfo, CLOSED());
|
333
292
|
}
|
334
293
|
|