@etherisc/gif-next 0.0.2-83d1db6-607 → 0.0.2-83e248c-054
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 +26 -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 +380 -116
- 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 +310 -303
- 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 +171 -47
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +208 -101
- 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 +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/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 +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 +333 -160
- 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 +183 -141
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +45 -57
- 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 +169 -113
- 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 +438 -41
- 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 +575 -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 +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/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/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/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 +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 +185 -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/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 +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/Component.sol +4 -2
- package/contracts/components/Distribution.sol +6 -2
- package/contracts/components/IComponent.sol +3 -1
- package/contracts/components/IPoolComponent.sol +1 -1
- package/contracts/components/Pool.sol +11 -8
- 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 -102
- package/contracts/instance/InstanceAccessManager.sol +16 -11
- package/contracts/instance/InstanceReader.sol +31 -4
- package/contracts/instance/InstanceService.sol +29 -46
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +8 -3
- package/contracts/instance/base/Lifecycle.sol +12 -4
- 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/module/IPolicy.sol +11 -6
- package/contracts/instance/service/ApplicationService.sol +19 -14
- package/contracts/instance/service/BundleService.sol +163 -63
- package/contracts/instance/service/ClaimService.sol +114 -26
- package/contracts/instance/service/DistributionService.sol +38 -74
- package/contracts/instance/service/IApplicationService.sol +3 -7
- package/contracts/instance/service/IBundleService.sol +56 -22
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IDistributionService.sol +1 -0
- package/contracts/instance/service/IPolicyService.sol +70 -5
- package/contracts/instance/service/IPoolService.sol +65 -1
- package/contracts/instance/service/PolicyService.sol +254 -116
- package/contracts/instance/service/PoolService.sol +132 -49
- package/contracts/instance/service/ProductService.sol +21 -52
- 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 +65 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +12 -5
- 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
@@ -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),
|
@@ -169,7 +162,7 @@ contract InstanceService is
|
|
169
162
|
|
170
163
|
function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
171
164
|
// configure authorization for distribution service on instance
|
172
|
-
address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(),
|
165
|
+
address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart());
|
173
166
|
clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
|
174
167
|
bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
|
175
168
|
instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
|
@@ -191,7 +184,7 @@ contract InstanceService is
|
|
191
184
|
|
192
185
|
function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
193
186
|
// configure authorization for pool service on instance
|
194
|
-
address poolServiceAddress = getRegistry().getServiceAddress(POOL(),
|
187
|
+
address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart());
|
195
188
|
clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
|
196
189
|
bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
|
197
190
|
instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
|
@@ -204,7 +197,7 @@ contract InstanceService is
|
|
204
197
|
|
205
198
|
function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
206
199
|
// configure authorization for product service on instance
|
207
|
-
address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(),
|
200
|
+
address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getVersion().toMajorPart());
|
208
201
|
clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
|
209
202
|
bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
|
210
203
|
instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
|
@@ -220,7 +213,7 @@ contract InstanceService is
|
|
220
213
|
|
221
214
|
function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
222
215
|
// configure authorization for application services on instance
|
223
|
-
address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(),
|
216
|
+
address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getVersion().toMajorPart());
|
224
217
|
clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
|
225
218
|
bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
|
226
219
|
instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
|
@@ -234,7 +227,7 @@ contract InstanceService is
|
|
234
227
|
|
235
228
|
function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
236
229
|
// configure authorization for policy services on instance
|
237
|
-
address policyServiceAddress = getRegistry().getServiceAddress(POLICY(),
|
230
|
+
address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart());
|
238
231
|
clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), policyServiceAddress);
|
239
232
|
bytes4[] memory instancePolicyServiceSelectors = new bytes4[](2);
|
240
233
|
instancePolicyServiceSelectors[0] = clonedInstance.updatePolicy.selector;
|
@@ -247,12 +240,13 @@ contract InstanceService is
|
|
247
240
|
|
248
241
|
function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
249
242
|
// configure authorization for claim/payout services on instance
|
250
|
-
address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(),
|
251
|
-
clonedAccessManager.grantRole(
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
243
|
+
address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getVersion().toMajorPart());
|
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,
|
@@ -261,7 +255,7 @@ contract InstanceService is
|
|
261
255
|
|
262
256
|
function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
263
257
|
// configure authorization for bundle service on instance
|
264
|
-
address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(),
|
258
|
+
address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart());
|
265
259
|
clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
|
266
260
|
bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
|
267
261
|
instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
|
@@ -287,7 +281,7 @@ contract InstanceService is
|
|
287
281
|
|
288
282
|
function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
289
283
|
// configure authorization for instance service on instance
|
290
|
-
address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(),
|
284
|
+
address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getVersion().toMajorPart());
|
291
285
|
clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
|
292
286
|
bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
|
293
287
|
instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
|
@@ -359,7 +353,7 @@ contract InstanceService is
|
|
359
353
|
_masterInstanceReader = instanceReaderAddress;
|
360
354
|
_masterInstanceBundleManager = bundleManagerAddress;
|
361
355
|
|
362
|
-
IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(),
|
356
|
+
IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getVersion().toMajorPart()));
|
363
357
|
IInstance masterInstance = IInstance(_masterInstance);
|
364
358
|
IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
|
365
359
|
masterInstanceNftId = info.nftId;
|
@@ -395,20 +389,8 @@ 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
|
-
function getDomain() public pure override
|
393
|
+
function getDomain() public pure override returns(ObjectType) {
|
412
394
|
return INSTANCE();
|
413
395
|
}
|
414
396
|
|
@@ -426,7 +408,7 @@ contract InstanceService is
|
|
426
408
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
427
409
|
// TODO while InstanceService is not deployed in InstanceServiceManager constructor
|
428
410
|
// owner is InstanceServiceManager deployer
|
429
|
-
initializeService(registryAddress, owner);
|
411
|
+
initializeService(registryAddress, address(0), owner);
|
430
412
|
registerInterface(type(IInstanceService).interfaceId);
|
431
413
|
}
|
432
414
|
|
@@ -459,18 +441,19 @@ contract InstanceService is
|
|
459
441
|
|
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
|
-
//function setTargetLocked(string memory targetName, bool locked) onlyComponent external {
|
463
444
|
function setComponentLocked(bool locked) onlyComponent external {
|
445
|
+
|
464
446
|
address componentAddress = msg.sender;
|
465
447
|
IRegistry registry = getRegistry();
|
466
448
|
NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
|
467
|
-
address instanceAddress = registry.getObjectInfo(instanceNftId).objectAddress;
|
468
|
-
IInstance instance = IInstance(instanceAddress);
|
469
449
|
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
450
|
+
IInstance instance = IInstance(
|
451
|
+
registry.getObjectInfo(
|
452
|
+
instanceNftId).objectAddress);
|
453
|
+
|
454
|
+
instance.getInstanceAccessManager().setTargetLocked(
|
455
|
+
componentAddress,
|
456
|
+
locked);
|
474
457
|
}
|
475
458
|
|
476
459
|
function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress)
|
@@ -16,7 +16,6 @@ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
|
|
16
16
|
|
17
17
|
abstract contract ComponentService is Service {
|
18
18
|
|
19
|
-
error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
|
20
19
|
error ErrorComponentServiceNotComponent(address component);
|
21
20
|
error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
|
22
21
|
error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
|
@@ -33,13 +32,15 @@ abstract contract ComponentService is Service {
|
|
33
32
|
// view functions
|
34
33
|
|
35
34
|
function getRegistryService() public view virtual returns (IRegistryService) {
|
36
|
-
|
37
|
-
return IRegistryService(service);
|
35
|
+
return IRegistryService(_getServiceAddress(REGISTRY()));
|
38
36
|
}
|
39
37
|
|
40
38
|
function getInstanceService() public view returns (InstanceService) {
|
41
|
-
|
42
|
-
|
39
|
+
return InstanceService(_getServiceAddress(INSTANCE()));
|
40
|
+
}
|
41
|
+
|
42
|
+
function _getServiceAddress(ObjectType domain) internal view returns (address) {
|
43
|
+
return getRegistry().getServiceAddress(domain, getVersion().toMajorPart());
|
43
44
|
}
|
44
45
|
|
45
46
|
// internal functions
|
@@ -60,12 +61,6 @@ abstract contract ComponentService is Service {
|
|
60
61
|
// component may only be registerd by initial owner of component
|
61
62
|
owner = msg.sender;
|
62
63
|
|
63
|
-
// check component has not already been registerd
|
64
|
-
NftId compoentNftId = getRegistry().getNftId(componentAddress);
|
65
|
-
if(compoentNftId.gtz()) {
|
66
|
-
revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
|
67
|
-
}
|
68
|
-
|
69
64
|
// check this is a component
|
70
65
|
component = IComponent(componentAddress);
|
71
66
|
if(!component.supportsInterface(type(IComponent).interfaceId)) {
|
@@ -87,48 +82,40 @@ abstract contract ComponentService is Service {
|
|
87
82
|
// check instance has assigned required role to owner
|
88
83
|
instanceNftId = componentInfo.parentNftId;
|
89
84
|
instance = _getInstance(instanceNftId);
|
90
|
-
|
91
|
-
bool hasRole = accessManager.hasRole(
|
92
|
-
requiredRole,
|
93
|
-
owner);
|
94
|
-
|
95
|
-
if(!hasRole) {
|
85
|
+
if(!instance.getInstanceAccessManager().hasRole(requiredRole, owner)) {
|
96
86
|
revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
|
97
87
|
}
|
98
88
|
}
|
99
89
|
|
100
90
|
// internal view functions
|
101
91
|
|
102
|
-
function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
|
103
|
-
IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
|
104
|
-
return IInstance(instanceInfo.objectAddress);
|
105
|
-
}
|
106
|
-
|
107
92
|
function _getAndVerifyComponentInfoAndInstance(
|
108
|
-
//address component,
|
109
93
|
ObjectType expectedType
|
110
94
|
)
|
111
95
|
internal
|
112
96
|
view
|
113
97
|
returns(
|
98
|
+
NftId nftId,
|
114
99
|
IRegistry.ObjectInfo memory info,
|
115
100
|
IInstance instance
|
116
101
|
)
|
117
102
|
{
|
118
103
|
IRegistry registry = getRegistry();
|
119
|
-
//TODO redundant check -> just check type
|
120
|
-
//NftId componentNftId = registry.getNftId(component);
|
121
|
-
//require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
|
122
104
|
|
123
105
|
info = registry.getObjectInfo(msg.sender);
|
124
106
|
require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
|
125
107
|
|
126
|
-
|
127
|
-
instance =
|
108
|
+
nftId = info.nftId;
|
109
|
+
instance = _getInstance(info.parentNftId);
|
128
110
|
|
129
|
-
|
130
|
-
if (accessManager.isTargetLocked(info.objectAddress)) {
|
111
|
+
if (instance.getInstanceAccessManager().isTargetLocked(info.objectAddress)) {
|
131
112
|
revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
|
132
113
|
}
|
133
114
|
}
|
115
|
+
|
116
|
+
function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
|
117
|
+
return IInstance(
|
118
|
+
getRegistry().getObjectInfo(
|
119
|
+
instanceNftId).objectAddress);
|
120
|
+
}
|
134
121
|
}
|
@@ -5,7 +5,7 @@ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blockn
|
|
5
5
|
import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
|
6
6
|
import {NftId} from "../../types/NftId.sol";
|
7
7
|
import {ObjectType} from "../../types/ObjectType.sol";
|
8
|
-
import {StateId, ACTIVE} from "../../types/StateId.sol";
|
8
|
+
import {StateId, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
|
9
9
|
import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
|
10
10
|
|
11
11
|
import {Lifecycle} from "./Lifecycle.sol";
|
@@ -79,10 +79,15 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
|
|
79
79
|
// update data
|
80
80
|
_value[key32].data = data;
|
81
81
|
|
82
|
-
// update
|
82
|
+
// update state
|
83
|
+
if(state != KEEP_STATE()) {
|
84
|
+
metadata.state = state;
|
85
|
+
}
|
86
|
+
|
87
|
+
// update reest of metadata
|
83
88
|
address updatedBy = msg.sender;
|
84
89
|
Blocknumber lastUpdatedIn = metadata.updatedIn;
|
85
|
-
|
90
|
+
|
86
91
|
metadata.updatedBy = updatedBy;
|
87
92
|
metadata.updatedIn = blockBlocknumber();
|
88
93
|
|
@@ -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;
|
@@ -43,9 +43,9 @@ interface IAccess {
|
|
43
43
|
error ErrorIAccessRoleTypeInvalid(RoleId roleId, Type rtype);
|
44
44
|
|
45
45
|
error ErrorIAccessTargetAddressZero();
|
46
|
-
error ErrorIAccessTargetDoesNotExist(
|
46
|
+
error ErrorIAccessTargetDoesNotExist(address target);
|
47
47
|
error ErrorIAccessTargetExists(address target, ShortString name);
|
48
|
-
error ErrorIAccessTargetTypeInvalid(
|
48
|
+
error ErrorIAccessTargetTypeInvalid(address target, Type ttype);
|
49
49
|
error ErrorIAccessTargetNameEmpty(address target);
|
50
50
|
error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
|
51
51
|
error ErrorIAccessTargetLocked(address target);
|
@@ -1,21 +1,23 @@
|
|
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 {Fee} from "../../types/Fee.sol";
|
6
7
|
import {Seconds} from "../../types/Seconds.sol";
|
7
8
|
import {Timestamp} from "../../types/Timestamp.sol";
|
8
9
|
|
9
10
|
interface IBundle {
|
11
|
+
|
10
12
|
struct BundleInfo {
|
11
13
|
NftId poolNftId;
|
12
14
|
Fee fee; // bundle fee on net premium amounts
|
13
15
|
bytes filter; // required conditions for applications to be considered for collateralization by this bundle
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
Amount capitalAmount; // net stakings + net premiums - payouts
|
17
|
+
Amount lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= capital amount)
|
18
|
+
Amount feeAmount; // accumulated fee amount
|
17
19
|
Seconds lifetime;
|
18
|
-
Timestamp expiredAt; // no new policies
|
20
|
+
Timestamp expiredAt; // no new policies starting with this timestamp
|
19
21
|
Timestamp closedAt; // no open policies, locked amount = 0
|
20
22
|
}
|
21
23
|
}
|
@@ -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 {Amount} from "../../types/Amount.sol";
|
6
7
|
import {Fee} from "../../types/Fee.sol";
|
7
8
|
import {NftId} from "../../types/NftId.sol";
|
8
9
|
import {RoleId} from "../../types/RoleId.sol";
|
@@ -16,13 +17,18 @@ interface IComponents {
|
|
16
17
|
IERC20Metadata token;
|
17
18
|
TokenHandler tokenHandler;
|
18
19
|
address wallet;
|
20
|
+
Amount balanceAmount; // calculated balance (may not necessarily match withg wallet balance)
|
21
|
+
Amount feeAmount; // accumulated fees belonging to component owner
|
19
22
|
bytes data; // will hold component type specific additional info (eg encoded pool info)
|
20
23
|
}
|
21
24
|
|
22
25
|
struct PoolInfo {
|
23
26
|
NftId productNftId; // the nft of the product this pool is linked to
|
24
27
|
RoleId bundleOwnerRole; // the required role for bundle owners
|
28
|
+
// TODO maxCapitalAmount -> maxBalanceAmount
|
25
29
|
uint256 maxCapitalAmount; // max capital amount allowed for pool
|
30
|
+
uint256 balanceAmount; // current pool balance (accounting view)
|
31
|
+
uint256 feeAmount; // accumulated fee amount
|
26
32
|
bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
|
27
33
|
bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
|
28
34
|
bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
|
@@ -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";
|
@@ -65,14 +66,14 @@ contract ApplicationService is
|
|
65
66
|
address initialOwner;
|
66
67
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
67
68
|
|
68
|
-
initializeService(registryAddress, owner);
|
69
|
+
initializeService(registryAddress, address(0), owner);
|
69
70
|
registerInterface(type(IApplicationService).interfaceId);
|
70
71
|
|
71
|
-
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(),
|
72
|
+
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart()));
|
72
73
|
}
|
73
74
|
|
74
75
|
|
75
|
-
function getDomain() public pure override
|
76
|
+
function getDomain() public pure override returns(ObjectType) {
|
76
77
|
return APPLICATION();
|
77
78
|
}
|
78
79
|
|
@@ -90,13 +91,13 @@ contract ApplicationService is
|
|
90
91
|
virtual
|
91
92
|
returns (NftId applicationNftId)
|
92
93
|
{
|
93
|
-
(
|
94
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
94
95
|
// TODO: add validations (see create bundle in pool service)
|
95
96
|
|
96
97
|
applicationNftId = getRegistryService().registerPolicy(
|
97
98
|
IRegistry.ObjectInfo(
|
98
99
|
zeroNftId(),
|
99
|
-
|
100
|
+
productNftId,
|
100
101
|
POLICY(),
|
101
102
|
false, // intercepting property for policies is defined on product
|
102
103
|
address(0),
|
@@ -107,7 +108,7 @@ contract ApplicationService is
|
|
107
108
|
|
108
109
|
// (uint256 premiumAmount,,,,,) = calculatePremium(
|
109
110
|
IPolicy.Premium memory premium = calculatePremium(
|
110
|
-
|
111
|
+
productNftId,
|
111
112
|
riskId,
|
112
113
|
sumInsuredAmount,
|
113
114
|
lifetime,
|
@@ -117,7 +118,7 @@ contract ApplicationService is
|
|
117
118
|
);
|
118
119
|
|
119
120
|
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
120
|
-
|
121
|
+
productNftId,
|
121
122
|
bundleNftId,
|
122
123
|
referralId,
|
123
124
|
riskId,
|
@@ -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()
|
@@ -172,7 +173,7 @@ contract ApplicationService is
|
|
172
173
|
external
|
173
174
|
virtual override
|
174
175
|
{
|
175
|
-
(
|
176
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
176
177
|
instance.updateApplicationState(applicationNftId, REVOKED());
|
177
178
|
}
|
178
179
|
|
@@ -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;
|
@@ -337,14 +338,18 @@ contract ApplicationService is
|
|
337
338
|
|
338
339
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
339
340
|
IRegistry.ObjectInfo memory productInfo;
|
340
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
341
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
341
342
|
product = Product(productInfo.objectAddress);
|
342
343
|
}
|
343
344
|
|
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
|
}
|