@etherisc/gif-next 0.0.2-db1e1e4-828 → 0.0.2-db81915-875
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/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +16 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- 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 +346 -102
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +276 -289
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +2 -2
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +154 -40
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +62 -101
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +32 -32
- 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/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 +8 -8
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +6 -6
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/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 +71 -50
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +18 -10
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +79 -44
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +27 -23
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +284 -61
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +52 -8
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +42 -66
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +22 -34
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +37 -32
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +27 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +173 -46
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +353 -22
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +4 -4
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +481 -62
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +65 -21
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +12 -12
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +5 -5
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +2 -2
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +2 -2
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
- package/artifacts/contracts/registry/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 +2 -2
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +2 -2
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/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/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/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/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 +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +2 -2
- 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 +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +28 -4
- 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/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/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 +2 -2
- 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/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/Distribution.sol +6 -2
- package/contracts/components/IPoolComponent.sol +1 -1
- package/contracts/components/Pool.sol +3 -4
- package/contracts/components/Product.sol +137 -59
- package/contracts/instance/BundleManager.sol +3 -4
- package/contracts/instance/IInstance.sol +25 -21
- package/contracts/instance/IInstanceService.sol +0 -4
- package/contracts/instance/Instance.sol +85 -103
- package/contracts/instance/InstanceReader.sol +30 -4
- package/contracts/instance/InstanceService.sol +11 -28
- package/contracts/instance/base/Lifecycle.sol +12 -4
- package/contracts/instance/module/IPolicy.sol +11 -6
- package/contracts/instance/service/ApplicationService.sol +10 -5
- package/contracts/instance/service/BundleService.sol +8 -3
- package/contracts/instance/service/ClaimService.sol +111 -23
- package/contracts/instance/service/DistributionService.sol +14 -18
- package/contracts/instance/service/IApplicationService.sol +3 -7
- package/contracts/instance/service/IBundleService.sol +3 -0
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IPolicyService.sol +70 -5
- package/contracts/instance/service/PolicyService.sol +219 -40
- package/contracts/instance/service/ProductService.sol +1 -1
- package/contracts/types/Amount.sol +5 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/ObjectType.sol +5 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/StateId.sol +6 -2
- package/contracts/types/Timestamp.sol +5 -0
- package/package.json +1 -1
@@ -3,18 +3,18 @@ pragma solidity ^0.8.20;
|
|
3
3
|
|
4
4
|
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
5
5
|
|
6
|
-
import {Key32
|
6
|
+
import {Key32} from "../types/Key32.sol";
|
7
7
|
import {NftId} from "../types/NftId.sol";
|
8
8
|
import {ClaimId} from "../types/ClaimId.sol";
|
9
|
-
import {
|
10
|
-
import {
|
11
|
-
import {
|
12
|
-
import {
|
13
|
-
import {
|
14
|
-
import {
|
9
|
+
import {DistributorType} from "../types/DistributorType.sol";
|
10
|
+
import {PayoutId} from "../types/PayoutId.sol";
|
11
|
+
import {ObjectType, BUNDLE, DISTRIBUTION, INSTANCE, POLICY, POOL, PRODUCT, DISTRIBUTOR} from "../types/ObjectType.sol";
|
12
|
+
import {ReferralId} from "../types/Referral.sol";
|
13
|
+
import {RiskId} from "../types/RiskId.sol";
|
14
|
+
import {INSTANCE_OWNER_ROLE} from "../types/RoleId.sol";
|
15
|
+
import {StateId} from "../types/StateId.sol";
|
15
16
|
import {VersionPart, VersionPartLib} from "../types/Version.sol";
|
16
17
|
|
17
|
-
import {ERC165} from "../shared/ERC165.sol";
|
18
18
|
import {Registerable} from "../shared/Registerable.sol";
|
19
19
|
|
20
20
|
import {IRegistry} from "../registry/IRegistry.sol";
|
@@ -26,7 +26,6 @@ import {BundleManager} from "./BundleManager.sol";
|
|
26
26
|
|
27
27
|
import {KeyValueStore} from "./base/KeyValueStore.sol";
|
28
28
|
|
29
|
-
import {IAccess} from "./module/IAccess.sol";
|
30
29
|
import {IBundle} from "./module/IBundle.sol";
|
31
30
|
import {IComponents} from "./module/IComponents.sol";
|
32
31
|
import {IDistribution} from "./module/IDistribution.sol";
|
@@ -34,12 +33,6 @@ import {IPolicy} from "./module/IPolicy.sol";
|
|
34
33
|
import {IRisk} from "./module/IRisk.sol";
|
35
34
|
import {ISetup} from "./module/ISetup.sol";
|
36
35
|
|
37
|
-
import {IDistributionService} from "./service/IDistributionService.sol";
|
38
|
-
import {IPoolService} from "./service/IPoolService.sol";
|
39
|
-
import {IProductService} from "./service/IProductService.sol";
|
40
|
-
import {IPolicyService} from "./service/IPolicyService.sol";
|
41
|
-
import {IBundleService} from "./service/IBundleService.sol";
|
42
|
-
import {TokenHandler} from "../shared/TokenHandler.sol";
|
43
36
|
import {VersionPart, VersionPartLib} from "../types/Version.sol";
|
44
37
|
|
45
38
|
contract Instance is
|
@@ -123,55 +116,55 @@ contract Instance is
|
|
123
116
|
}
|
124
117
|
|
125
118
|
//--- DistributorType -------------------------------------------------------//
|
126
|
-
function createDistributorType(
|
127
|
-
create(
|
119
|
+
function createDistributorType(DistributorType distributorType, IDistribution.DistributorTypeInfo memory info) external restricted() {
|
120
|
+
create(distributorType.toKey32(), abi.encode(info));
|
128
121
|
}
|
129
122
|
|
130
|
-
function updateDistributorType(
|
131
|
-
update(
|
123
|
+
function updateDistributorType(DistributorType distributorType, IDistribution.DistributorTypeInfo memory info, StateId newState) external restricted() {
|
124
|
+
update(distributorType.toKey32(), abi.encode(info), newState);
|
132
125
|
}
|
133
126
|
|
134
|
-
function updateDistributorTypeState(
|
135
|
-
updateState(
|
127
|
+
function updateDistributorTypeState(DistributorType distributorType, StateId newState) external restricted() {
|
128
|
+
updateState(distributorType.toKey32(), newState);
|
136
129
|
}
|
137
130
|
|
138
131
|
//--- Distributor -------------------------------------------------------//
|
139
|
-
function createDistributor(NftId
|
140
|
-
create(
|
132
|
+
function createDistributor(NftId distributorNftId, IDistribution.DistributorInfo memory info) external restricted() {
|
133
|
+
create(_toNftKey32(distributorNftId, DISTRIBUTOR()), abi.encode(info));
|
141
134
|
}
|
142
135
|
|
143
|
-
function updateDistributor(NftId
|
144
|
-
update(
|
136
|
+
function updateDistributor(NftId distributorNftId, IDistribution.DistributorInfo memory info, StateId newState) external restricted() {
|
137
|
+
update(_toNftKey32(distributorNftId, DISTRIBUTOR()), abi.encode(info), newState);
|
145
138
|
}
|
146
139
|
|
147
|
-
function updateDistributorState(NftId
|
148
|
-
updateState(
|
140
|
+
function updateDistributorState(NftId distributorNftId, StateId newState) external restricted() {
|
141
|
+
updateState(_toNftKey32(distributorNftId, DISTRIBUTOR()), newState);
|
149
142
|
}
|
150
143
|
|
151
144
|
//--- Referral ----------------------------------------------------------//
|
152
|
-
function createReferral(
|
153
|
-
create(
|
145
|
+
function createReferral(ReferralId referralId, IDistribution.ReferralInfo memory referralInfo) external restricted() {
|
146
|
+
create(referralId.toKey32(), abi.encode(referralInfo));
|
154
147
|
}
|
155
148
|
|
156
|
-
function updateReferral(
|
157
|
-
update(
|
149
|
+
function updateReferral(ReferralId referralId, IDistribution.ReferralInfo memory referralInfo, StateId newState) external restricted() {
|
150
|
+
update(referralId.toKey32(), abi.encode(referralInfo), newState);
|
158
151
|
}
|
159
152
|
|
160
|
-
function updateReferralState(
|
161
|
-
updateState(
|
153
|
+
function updateReferralState(ReferralId referralId, StateId newState) external restricted() {
|
154
|
+
updateState(referralId.toKey32(), newState);
|
162
155
|
}
|
163
156
|
|
164
157
|
//--- Bundle ------------------------------------------------------------//
|
165
158
|
function createBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle) external restricted() {
|
166
|
-
create(
|
159
|
+
create(_toNftKey32(bundleNftId, BUNDLE()), abi.encode(bundle));
|
167
160
|
}
|
168
161
|
|
169
162
|
function updateBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle, StateId newState) external restricted() {
|
170
|
-
update(
|
163
|
+
update(_toNftKey32(bundleNftId, BUNDLE()), abi.encode(bundle), newState);
|
171
164
|
}
|
172
165
|
|
173
166
|
function updateBundleState(NftId bundleNftId, StateId newState) external restricted() {
|
174
|
-
updateState(
|
167
|
+
updateState(_toNftKey32(bundleNftId, BUNDLE()), newState);
|
175
168
|
}
|
176
169
|
|
177
170
|
//--- Risk --------------------------------------------------------------//
|
@@ -189,50 +182,50 @@ contract Instance is
|
|
189
182
|
|
190
183
|
//--- Application (Policy) ----------------------------------------------//
|
191
184
|
function createApplication(NftId applicationNftId, IPolicy.PolicyInfo memory policy) external restricted() {
|
192
|
-
create(
|
185
|
+
create(_toNftKey32(applicationNftId, POLICY()), abi.encode(policy));
|
193
186
|
}
|
194
187
|
|
195
188
|
function updateApplication(NftId applicationNftId, IPolicy.PolicyInfo memory policy, StateId newState) external restricted() {
|
196
|
-
update(
|
189
|
+
update(_toNftKey32(applicationNftId, POLICY()), abi.encode(policy), newState);
|
197
190
|
}
|
198
191
|
|
199
192
|
function updateApplicationState(NftId applicationNftId, StateId newState) external restricted() {
|
200
|
-
updateState(
|
193
|
+
updateState(_toNftKey32(applicationNftId, POLICY()), newState);
|
201
194
|
}
|
202
195
|
|
203
196
|
//--- Policy ------------------------------------------------------------//
|
204
197
|
function updatePolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy, StateId newState) external restricted() {
|
205
|
-
update(
|
198
|
+
update(_toNftKey32(policyNftId, POLICY()), abi.encode(policy), newState);
|
206
199
|
}
|
207
200
|
|
208
201
|
function updatePolicyState(NftId policyNftId, StateId newState) external restricted() {
|
209
|
-
updateState(
|
202
|
+
updateState(_toNftKey32(policyNftId, POLICY()), newState);
|
210
203
|
}
|
211
204
|
|
212
205
|
//--- Claim -------------------------------------------------------------//
|
213
206
|
function createClaim(NftId policyNftId, ClaimId claimId, IPolicy.ClaimInfo memory claim) external restricted() {
|
214
|
-
create(
|
207
|
+
create(_toClaimKey32(policyNftId, claimId), abi.encode(claim));
|
215
208
|
}
|
216
209
|
|
217
210
|
function updateClaim(NftId policyNftId, ClaimId claimId, IPolicy.ClaimInfo memory claim, StateId newState) external restricted() {
|
218
|
-
update(
|
211
|
+
update(_toClaimKey32(policyNftId, claimId), abi.encode(claim), newState);
|
219
212
|
}
|
220
213
|
|
221
214
|
function updateClaimState(NftId policyNftId, ClaimId claimId, StateId newState) external restricted() {
|
222
|
-
updateState(
|
215
|
+
updateState(_toClaimKey32(policyNftId, claimId), newState);
|
223
216
|
}
|
224
217
|
|
225
218
|
//--- Payout ------------------------------------------------------------//
|
226
|
-
function createPayout(NftId policyNftId,
|
227
|
-
create(
|
219
|
+
function createPayout(NftId policyNftId, PayoutId payoutId, IPolicy.PayoutInfo memory payout) external restricted() {
|
220
|
+
create(_toPayoutKey32(policyNftId, payoutId), abi.encode(payout));
|
228
221
|
}
|
229
222
|
|
230
|
-
function updatePayout(NftId policyNftId,
|
231
|
-
update(
|
223
|
+
function updatePayout(NftId policyNftId, PayoutId payoutId, IPolicy.PayoutInfo memory payout, StateId newState) external restricted() {
|
224
|
+
update(_toPayoutKey32(policyNftId, payoutId), abi.encode(payout), newState);
|
232
225
|
}
|
233
226
|
|
234
|
-
function updatePayoutState(NftId policyNftId, StateId newState) external restricted() {
|
235
|
-
updateState(
|
227
|
+
function updatePayoutState(NftId policyNftId, PayoutId payoutId, StateId newState) external restricted() {
|
228
|
+
updateState(_toPayoutKey32(policyNftId, payoutId), newState);
|
236
229
|
}
|
237
230
|
|
238
231
|
//--- ITransferInterceptor ------------------------------------------------------------//
|
@@ -246,83 +239,72 @@ contract Instance is
|
|
246
239
|
assert(_accessManager.grantRole(INSTANCE_OWNER_ROLE(), to) == true);
|
247
240
|
}
|
248
241
|
|
249
|
-
//---
|
250
|
-
function _toNftKey32(NftId nftId, ObjectType objectType) internal pure returns (Key32) {
|
251
|
-
return nftId.toKey32(objectType);
|
252
|
-
}
|
253
|
-
|
254
|
-
function toBundleKey32(NftId bundleNftId) public pure returns (Key32) {
|
255
|
-
return bundleNftId.toKey32(BUNDLE());
|
256
|
-
}
|
257
|
-
|
258
|
-
function toPolicyKey32(NftId policyNftId) public pure returns (Key32) {
|
259
|
-
return policyNftId.toKey32(POLICY());
|
260
|
-
}
|
242
|
+
//--- initial setup functions -------------------------------------------//
|
261
243
|
|
262
|
-
function
|
263
|
-
|
264
|
-
|
244
|
+
function setInstanceAccessManager(InstanceAccessManager accessManager) external restricted {
|
245
|
+
if(address(_accessManager) != address(0)) {
|
246
|
+
revert ErrorInstanceInstanceAccessManagerAlreadySet(address(_accessManager));
|
247
|
+
}
|
265
248
|
|
266
|
-
|
267
|
-
|
268
|
-
|
249
|
+
if(accessManager.authority() != authority()) {
|
250
|
+
revert ErrorInstanceInstanceAccessManagerAuthorityMismatch(authority());
|
251
|
+
}
|
269
252
|
|
270
|
-
|
271
|
-
return distNftId.toKey32(DISTRIBUTOR());
|
272
|
-
}
|
273
|
-
|
274
|
-
function getDistributionService() external view returns (IDistributionService) {
|
275
|
-
return IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), VersionPart.wrap(3)));
|
253
|
+
_accessManager = accessManager;
|
276
254
|
}
|
277
255
|
|
278
|
-
function
|
279
|
-
|
280
|
-
|
256
|
+
function setBundleManager(BundleManager bundleManager) external restricted() {
|
257
|
+
if(address(_bundleManager) != address(0)) {
|
258
|
+
revert ErrorInstanceBundleManagerAlreadySet(address(_bundleManager));
|
259
|
+
}
|
281
260
|
|
282
|
-
|
283
|
-
|
284
|
-
|
261
|
+
if(bundleManager.getInstance() != Instance(this)) {
|
262
|
+
revert ErrorInstanceBundleManagerInstanceMismatch(address(this));
|
263
|
+
}
|
285
264
|
|
286
|
-
|
287
|
-
|
288
|
-
|
265
|
+
if(bundleManager.authority() != authority()) {
|
266
|
+
revert ErrorInstanceBundleManagerAuthorityMismatch(authority());
|
267
|
+
}
|
289
268
|
|
290
|
-
|
291
|
-
return IBundleService(getRegistry().getServiceAddress(BUNDLE(), VersionPart.wrap(3)));
|
269
|
+
_bundleManager = bundleManager;
|
292
270
|
}
|
293
271
|
|
294
272
|
function setInstanceReader(InstanceReader instanceReader) external restricted() {
|
295
|
-
|
273
|
+
if(instanceReader.getInstance() != Instance(this)) {
|
274
|
+
revert ErrorInstanceInstanceReaderInstanceMismatch(address(this));
|
275
|
+
}
|
276
|
+
|
296
277
|
_instanceReader = instanceReader;
|
297
278
|
}
|
298
279
|
|
299
|
-
|
300
|
-
return VersionPartLib.toVersionPart(GIF_MAJOR_VERSION);
|
301
|
-
}
|
280
|
+
//--- external view functions -------------------------------------------//
|
302
281
|
|
303
282
|
function getInstanceReader() external view returns (InstanceReader) {
|
304
283
|
return _instanceReader;
|
305
284
|
}
|
306
|
-
|
307
|
-
function setBundleManager(BundleManager bundleManager) external restricted() {
|
308
|
-
require(address(_bundleManager) == address(0), "BundleManager is set");
|
309
|
-
require(bundleManager.getInstance() == Instance(this), "BundleManager instance mismatch");
|
310
|
-
require(bundleManager.authority() == authority(), "BundleManager authority mismatch");
|
311
|
-
_bundleManager = bundleManager;
|
312
|
-
}
|
313
285
|
|
314
286
|
function getBundleManager() external view returns (BundleManager) {
|
315
287
|
return _bundleManager;
|
316
288
|
}
|
317
289
|
|
318
|
-
function setInstanceAccessManager(InstanceAccessManager accessManager) external restricted {
|
319
|
-
require(address(_accessManager) == address(0), "InstanceAccessManager is set");
|
320
|
-
require(accessManager.authority() == authority(), "InstanceAccessManager authority mismatch");
|
321
|
-
_accessManager = accessManager;
|
322
|
-
}
|
323
|
-
|
324
290
|
function getInstanceAccessManager() external view returns (InstanceAccessManager) {
|
325
291
|
return _accessManager;
|
326
292
|
}
|
327
|
-
|
293
|
+
|
294
|
+
function getMajorVersion() external pure returns (VersionPart majorVersion) {
|
295
|
+
return VersionPartLib.toVersionPart(GIF_MAJOR_VERSION);
|
296
|
+
}
|
297
|
+
|
298
|
+
//--- internal view/pure functions --------------------------------------//
|
299
|
+
function _toNftKey32(NftId nftId, ObjectType objectType) private pure returns (Key32) {
|
300
|
+
return nftId.toKey32(objectType);
|
301
|
+
}
|
302
|
+
|
303
|
+
function _toClaimKey32(NftId policyNftId, ClaimId claimId) private pure returns (Key32) {
|
304
|
+
return claimId.toKey32(policyNftId);
|
305
|
+
}
|
306
|
+
|
307
|
+
function _toPayoutKey32(NftId policyNftId, PayoutId payoutId) private pure returns (Key32) {
|
308
|
+
return payoutId.toKey32(policyNftId);
|
309
|
+
}
|
328
310
|
}
|
@@ -3,6 +3,7 @@ pragma solidity ^0.8.20;
|
|
3
3
|
|
4
4
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
|
+
import {ClaimId} from "../types/ClaimId.sol";
|
6
7
|
import {DistributorType} from "../types/DistributorType.sol";
|
7
8
|
import {Fee, FeeLib} from "../types/Fee.sol";
|
8
9
|
import {Key32} from "../types/Key32.sol";
|
@@ -29,17 +30,23 @@ import {TimestampLib} from "../types/Timestamp.sol";
|
|
29
30
|
|
30
31
|
|
31
32
|
contract InstanceReader {
|
33
|
+
|
34
|
+
error ErrorInstanceReaderAlreadyInitialized();
|
35
|
+
error ErrorInstanceReaderInstanceAddressZero();
|
36
|
+
|
32
37
|
bool private _initialized;
|
33
38
|
|
34
39
|
IInstance internal _instance;
|
35
40
|
IKeyValueStore internal _store;
|
36
41
|
|
37
42
|
function initialize(address instance) public {
|
38
|
-
|
43
|
+
if(_initialized) {
|
44
|
+
revert ErrorInstanceReaderAlreadyInitialized();
|
45
|
+
}
|
39
46
|
|
40
|
-
|
41
|
-
|
42
|
-
|
47
|
+
if(address(instance) == address(0)) {
|
48
|
+
revert ErrorInstanceReaderInstanceAddressZero();
|
49
|
+
}
|
43
50
|
|
44
51
|
_instance = IInstance(instance);
|
45
52
|
_store = IKeyValueStore(instance);
|
@@ -69,6 +76,25 @@ contract InstanceReader {
|
|
69
76
|
return _instance.getState(toPolicyKey(policyNftId));
|
70
77
|
}
|
71
78
|
|
79
|
+
function getClaimInfo(NftId policyNftId, ClaimId claimId)
|
80
|
+
public
|
81
|
+
view
|
82
|
+
returns (IPolicy.ClaimInfo memory info)
|
83
|
+
{
|
84
|
+
bytes memory data = _store.getData(claimId.toKey32(policyNftId));
|
85
|
+
if (data.length > 0) {
|
86
|
+
return abi.decode(data, (IPolicy.ClaimInfo));
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
function getClaimState(NftId policyNftId, ClaimId claimId)
|
91
|
+
public
|
92
|
+
view
|
93
|
+
returns (StateId state)
|
94
|
+
{
|
95
|
+
return _instance.getState(claimId.toKey32(policyNftId));
|
96
|
+
}
|
97
|
+
|
72
98
|
function getRiskInfo(RiskId riskId)
|
73
99
|
public
|
74
100
|
view
|
@@ -13,16 +13,11 @@ import {BundleManager} from "./BundleManager.sol";
|
|
13
13
|
import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
|
14
14
|
import {IRegistry} from "../registry/IRegistry.sol";
|
15
15
|
import {IRegistryService} from "../registry/IRegistryService.sol";
|
16
|
-
import {ChainNft} from "../registry/ChainNft.sol";
|
17
16
|
import {Service} from "../../contracts/shared/Service.sol";
|
18
|
-
import {IService} from "../shared/IService.sol";
|
19
17
|
import {NftId} from "../../contracts/types/NftId.sol";
|
20
18
|
import {RoleId} from "../types/RoleId.sol";
|
21
19
|
import {ADMIN_ROLE, INSTANCE_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, APPLICATION_SERVICE_ROLE, POLICY_SERVICE_ROLE, CLAIM_SERVICE_ROLE, BUNDLE_SERVICE_ROLE, INSTANCE_ROLE} from "../types/RoleId.sol";
|
22
20
|
import {ObjectType, INSTANCE, BUNDLE, APPLICATION, POLICY, CLAIM, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
|
23
|
-
import {IDistributionComponent} from "../components/IDistributionComponent.sol";
|
24
|
-
import {IPoolComponent} from "../components/IPoolComponent.sol";
|
25
|
-
import {IProductComponent} from "../components/IProductComponent.sol";
|
26
21
|
|
27
22
|
contract InstanceService is
|
28
23
|
Service,
|
@@ -72,10 +67,9 @@ contract InstanceService is
|
|
72
67
|
{
|
73
68
|
address instanceOwner = msg.sender;
|
74
69
|
IRegistry registry = getRegistry();
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
IRegistryService registryService = IRegistryService(registryServiceAddress);
|
70
|
+
IRegistryService registryService = IRegistryService(
|
71
|
+
registry.getServiceAddress(
|
72
|
+
REGISTRY(), getVersion().toMajorPart()));
|
79
73
|
|
80
74
|
clonedOzAccessManager = AccessManagerUpgradeableInitializeable(
|
81
75
|
Clones.clone(_masterOzAccessManager));
|
@@ -89,7 +83,7 @@ contract InstanceService is
|
|
89
83
|
clonedInstance = Instance(Clones.clone(_masterInstance));
|
90
84
|
clonedInstance.initialize(
|
91
85
|
address(clonedOzAccessManager),
|
92
|
-
|
86
|
+
address(registry),
|
93
87
|
instanceOwner);
|
94
88
|
|
95
89
|
clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
|
@@ -113,7 +107,6 @@ contract InstanceService is
|
|
113
107
|
|
114
108
|
IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
|
115
109
|
clonedInstanceNftId = info.nftId;
|
116
|
-
// clonedInstance.linkToRegisteredNftId();
|
117
110
|
|
118
111
|
emit LogInstanceCloned(
|
119
112
|
address(clonedOzAccessManager),
|
@@ -248,11 +241,12 @@ contract InstanceService is
|
|
248
241
|
function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
249
242
|
// configure authorization for claim/payout services on instance
|
250
243
|
address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getVersion().toMajorPart());
|
251
|
-
clonedAccessManager.grantRole(
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
244
|
+
clonedAccessManager.grantRole(CLAIM_SERVICE_ROLE(), claimServiceAddress);
|
245
|
+
bytes4[] memory instanceClaimServiceSelectors = new bytes4[](4);
|
246
|
+
instanceClaimServiceSelectors[0] = clonedInstance.createClaim.selector;
|
247
|
+
instanceClaimServiceSelectors[1] = clonedInstance.updateClaim.selector;
|
248
|
+
instanceClaimServiceSelectors[2] = clonedInstance.createPayout.selector;
|
249
|
+
instanceClaimServiceSelectors[3] = clonedInstance.updatePayout.selector;
|
256
250
|
clonedAccessManager.setCoreTargetFunctionRole(
|
257
251
|
"Instance",
|
258
252
|
instanceClaimServiceSelectors,
|
@@ -395,18 +389,6 @@ contract InstanceService is
|
|
395
389
|
return _masterInstanceReader;
|
396
390
|
}
|
397
391
|
|
398
|
-
function getMasterInstance() external view returns (address) {
|
399
|
-
return _masterInstance;
|
400
|
-
}
|
401
|
-
|
402
|
-
function getMasterInstanceAccessManager() external view returns (address) {
|
403
|
-
return _masterInstanceAccessManager;
|
404
|
-
}
|
405
|
-
|
406
|
-
function getMasterInstanceBundleManager() external view returns (address) {
|
407
|
-
return _masterInstanceBundleManager;
|
408
|
-
}
|
409
|
-
|
410
392
|
// From IService
|
411
393
|
function getDomain() public pure override returns(ObjectType) {
|
412
394
|
return INSTANCE();
|
@@ -460,6 +442,7 @@ contract InstanceService is
|
|
460
442
|
// TODO called by component, but target can be component helper...so needs target name
|
461
443
|
// TODO check that targetName associated with component...how???
|
462
444
|
function setComponentLocked(bool locked) onlyComponent external {
|
445
|
+
|
463
446
|
address componentAddress = msg.sender;
|
464
447
|
IRegistry registry = getRegistry();
|
465
448
|
NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
|
@@ -4,8 +4,8 @@ pragma solidity ^0.8.20;
|
|
4
4
|
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
5
|
|
6
6
|
import {NftId} from "../../types/NftId.sol";
|
7
|
-
import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
|
8
|
-
import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED,
|
7
|
+
import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK, CLAIM} from "../../types/ObjectType.sol";
|
8
|
+
import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, COLLATERALIZED, REVOKED, SUBMITTED, CONFIRMED, DECLINED} from "../../types/StateId.sol";
|
9
9
|
import {ILifecycle} from "./ILifecycle.sol";
|
10
10
|
|
11
11
|
contract Lifecycle is
|
@@ -25,6 +25,7 @@ contract Lifecycle is
|
|
25
25
|
_setupBundleLifecycle();
|
26
26
|
_setupComponentLifecycle();
|
27
27
|
_setupPolicyLifecycle();
|
28
|
+
_setupClaimLifecycle();
|
28
29
|
_setupRiskLifecycle();
|
29
30
|
}
|
30
31
|
|
@@ -95,11 +96,18 @@ contract Lifecycle is
|
|
95
96
|
_initialState[POLICY()] = APPLIED();
|
96
97
|
_isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
|
97
98
|
_isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
|
98
|
-
_isValidTransition[POLICY()][APPLIED()][
|
99
|
-
_isValidTransition[POLICY()][
|
99
|
+
_isValidTransition[POLICY()][APPLIED()][COLLATERALIZED()] = true;
|
100
|
+
_isValidTransition[POLICY()][COLLATERALIZED()][ACTIVE()] = true;
|
100
101
|
_isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
|
101
102
|
}
|
102
103
|
|
104
|
+
function _setupClaimLifecycle() internal {
|
105
|
+
_initialState[CLAIM()] = SUBMITTED();
|
106
|
+
_isValidTransition[CLAIM()][SUBMITTED()][CONFIRMED()] = true;
|
107
|
+
_isValidTransition[CLAIM()][SUBMITTED()][DECLINED()] = true;
|
108
|
+
_isValidTransition[CLAIM()][CONFIRMED()][CLOSED()] = true;
|
109
|
+
}
|
110
|
+
|
103
111
|
function _setupRiskLifecycle() internal {
|
104
112
|
_initialState[RISK()] = ACTIVE();
|
105
113
|
_isValidTransition[RISK()][ACTIVE()][PAUSED()] = true;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
+
import {Amount} from "../../types/Amount.sol";
|
4
5
|
import {NftId} from "../../types/NftId.sol";
|
5
6
|
import {ClaimId} from "../../types/ClaimId.sol";
|
6
7
|
import {ReferralId} from "../../types/Referral.sol";
|
@@ -42,13 +43,13 @@ interface IPolicy {
|
|
42
43
|
RiskId riskId;
|
43
44
|
uint256 sumInsuredAmount;
|
44
45
|
uint256 premiumAmount;
|
45
|
-
uint256 premiumPaidAmount;
|
46
|
+
uint256 premiumPaidAmount; // when lower than premium amount: max payout decreased accordingly
|
46
47
|
Seconds lifetime;
|
47
48
|
bytes applicationData;
|
48
49
|
bytes policyData;
|
49
50
|
uint16 claimsCount;
|
50
51
|
uint16 openClaimsCount;
|
51
|
-
|
52
|
+
Amount payoutAmount;
|
52
53
|
Timestamp activatedAt; // time of underwriting
|
53
54
|
Timestamp expiredAt; // no new claims (activatedAt + lifetime)
|
54
55
|
Timestamp closedAt; // no locked capital (or declinedAt)
|
@@ -56,16 +57,20 @@ interface IPolicy {
|
|
56
57
|
|
57
58
|
// claimId neeeds to be encoded policyNftId:claimId combination
|
58
59
|
struct ClaimInfo {
|
59
|
-
|
60
|
-
|
60
|
+
Amount claimAmount;
|
61
|
+
Amount paidAmount;
|
62
|
+
uint8 payoutsCount;
|
63
|
+
uint8 openPayoutsCount;
|
61
64
|
bytes data;
|
62
|
-
|
65
|
+
// TODO consider to add processData that may include information supporting confirm or decline
|
66
|
+
Timestamp closedAt; // payment of confirmed claim amount (or declinedAt)
|
63
67
|
}
|
64
68
|
|
65
69
|
// claimId neeeds to be encoded policyNftId:claimId combination
|
66
70
|
struct PayoutInfo {
|
67
71
|
ClaimId claimId;
|
68
|
-
|
72
|
+
Amount amount;
|
73
|
+
// TODO consider to add a beneficiary address that will be the receiver of the payout tokens
|
69
74
|
bytes data;
|
70
75
|
Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
|
71
76
|
}
|
@@ -23,12 +23,13 @@ import {TokenHandler} from "../../shared/TokenHandler.sol";
|
|
23
23
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
24
24
|
import {Versionable} from "../../shared/Versionable.sol";
|
25
25
|
|
26
|
+
import {AmountLib} from "../../types/Amount.sol";
|
26
27
|
import {Seconds} from "../../types/Seconds.sol";
|
27
28
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
28
29
|
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
29
30
|
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
30
31
|
import {ObjectType, DISTRIBUTION, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE} from "../../types/ObjectType.sol";
|
31
|
-
import {APPLIED, REVOKED,
|
32
|
+
import {APPLIED, REVOKED, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
|
32
33
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
33
34
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
34
35
|
import {ReferralId} from "../../types/Referral.sol";
|
@@ -129,7 +130,7 @@ contract ApplicationService is
|
|
129
130
|
"",
|
130
131
|
0,
|
131
132
|
0,
|
132
|
-
|
133
|
+
AmountLib.zero(),
|
133
134
|
zeroTimestamp(),
|
134
135
|
zeroTimestamp(),
|
135
136
|
zeroTimestamp()
|
@@ -262,7 +263,7 @@ contract ApplicationService is
|
|
262
263
|
{
|
263
264
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
264
265
|
if(bundleInfo.poolNftId != poolNftId) {
|
265
|
-
revert
|
266
|
+
revert ErrorApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
|
266
267
|
}
|
267
268
|
uint256 t = bundleInfo.fee.fixedFee;
|
268
269
|
premium.bundleFeeFixAmount = t;
|
@@ -316,7 +317,7 @@ contract ApplicationService is
|
|
316
317
|
{
|
317
318
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
318
319
|
if(bundleInfo.poolNftId != poolNftId) {
|
319
|
-
revert
|
320
|
+
revert ErrorApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
|
320
321
|
}
|
321
322
|
uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * bundleInfo.fee.fractionalFee).toInt();
|
322
323
|
premium.bundleFeeVarAmount = t;
|
@@ -344,7 +345,11 @@ contract ApplicationService is
|
|
344
345
|
function _getAndVerifyProduct(NftId productNftId) internal view returns (Product product) {
|
345
346
|
IRegistry registry = getRegistry();
|
346
347
|
IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productNftId);
|
347
|
-
|
348
|
+
|
349
|
+
if(productInfo.objectType != PRODUCT()) {
|
350
|
+
revert ErrorApplicationServiceNotProduct(productNftId, productInfo.objectType);
|
351
|
+
}
|
352
|
+
|
348
353
|
product = Product(productInfo.objectAddress);
|
349
354
|
}
|
350
355
|
}
|
@@ -182,8 +182,13 @@ contract BundleService is
|
|
182
182
|
InstanceReader instanceReader = instance.getInstanceReader();
|
183
183
|
|
184
184
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
185
|
-
|
186
|
-
|
185
|
+
if(bundleInfo.poolNftId.eqz()) {
|
186
|
+
revert ErrorBundleServiceBundleUnknown(bundleNftId);
|
187
|
+
}
|
188
|
+
|
189
|
+
if(bundleInfo.poolNftId != poolNftId) {
|
190
|
+
revert ErrorBundleServiceBundlePoolMismatch(poolNftId, bundleInfo.poolNftId );
|
191
|
+
}
|
187
192
|
|
188
193
|
bundleInfo.fee = fee;
|
189
194
|
|
@@ -385,7 +390,7 @@ contract BundleService is
|
|
385
390
|
|
386
391
|
// ensure policy is closeable
|
387
392
|
if ( TimestampLib.blockTimestamp() < policyInfo.expiredAt
|
388
|
-
&& policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
|
393
|
+
&& policyInfo.payoutAmount.toInt() < policyInfo.sumInsuredAmount)
|
389
394
|
{
|
390
395
|
revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
|
391
396
|
}
|