@etherisc/gif-next 0.0.2-fb8d07b-779 → 0.0.2-fd275d2-234
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 +43 -0
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +10 -10
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.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/IPoolComponent.sol/IPoolComponent.json +2 -2
- 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/Pool.sol/Pool.json +16 -11
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +18 -64
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +809 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +963 -18
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +150 -81
- 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 +74 -40
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +128 -49
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +52 -32
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +272 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.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/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- 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/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/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +16 -16
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +12 -12
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +17 -21
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +108 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +40 -31
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +146 -30
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +23 -23
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +1147 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
- 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/IRegistry.sol/IRegistry.json +2 -110
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -0
- 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 +35 -146
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +76 -20
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +26 -34
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +12 -12
- 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/IRegisterable.sol/IRegisterable.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/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/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
- 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 +4 -4
- 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 +9 -9
- 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/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
- 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/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/Distribution.sol +6 -3
- package/contracts/components/IPoolComponent.sol +1 -1
- package/contracts/components/Pool.sol +13 -9
- package/contracts/components/Product.sol +33 -41
- package/contracts/instance/BundleManager.sol +152 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +21 -4
- package/contracts/instance/IInstanceService.sol +3 -1
- package/contracts/instance/Instance.sol +15 -4
- package/contracts/instance/InstanceReader.sol +9 -0
- package/contracts/instance/InstanceService.sol +62 -12
- package/contracts/instance/InstanceServiceManager.sol +6 -5
- package/contracts/instance/ObjectManager.sol +95 -0
- package/contracts/instance/base/ComponentServiceBase.sol +14 -5
- package/contracts/instance/module/ISetup.sol +3 -1
- package/contracts/instance/service/DistributionService.sol +3 -2
- package/contracts/instance/service/DistributionServiceManager.sol +6 -5
- package/contracts/instance/service/IPoolService.sol +6 -0
- package/contracts/instance/service/IProductService.sol +6 -3
- package/contracts/instance/service/PoolService.sol +31 -18
- package/contracts/instance/service/PoolServiceManager.sol +6 -5
- package/contracts/instance/service/ProductService.sol +561 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/IRegistry.sol +5 -18
- package/contracts/registry/IRegistryService.sol +28 -11
- package/contracts/registry/Registry.sol +4 -45
- package/contracts/registry/RegistryService.sol +30 -71
- package/contracts/shared/NftOwnable.sol +2 -4
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/RoleId.sol +1 -0
- package/package.json +1 -1
@@ -24,6 +24,7 @@ import {TokenHandler} from "../shared/TokenHandler.sol";
|
|
24
24
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
25
25
|
import {ISetup} from "../instance/module/ISetup.sol";
|
26
26
|
import {Pool} from "../components/Pool.sol";
|
27
|
+
import {Distribution} from "../components/Distribution.sol";
|
27
28
|
|
28
29
|
import {zeroNftId} from "../types/NftId.sol";
|
29
30
|
|
@@ -32,9 +33,10 @@ contract Product is BaseComponent, IProductComponent {
|
|
32
33
|
|
33
34
|
IProductService internal _productService;
|
34
35
|
Pool internal _pool;
|
35
|
-
|
36
|
+
Distribution internal _distribution;
|
36
37
|
Fee internal _initialProductFee;
|
37
38
|
Fee internal _initialProcessingFee;
|
39
|
+
TokenHandler internal _tokenHandler;
|
38
40
|
|
39
41
|
NftId internal _poolNftId;
|
40
42
|
NftId internal _distributionNftId;
|
@@ -51,15 +53,16 @@ contract Product is BaseComponent, IProductComponent {
|
|
51
53
|
address initialOwner
|
52
54
|
) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
|
53
55
|
// TODO add validation
|
54
|
-
|
55
|
-
// _productService = _instance.getProductService();
|
56
|
+
_productService = _instance.getProductService();
|
56
57
|
_pool = Pool(pool);
|
57
|
-
_distribution = distribution;
|
58
|
+
_distribution = Distribution(distribution);
|
58
59
|
_initialProductFee = productFee;
|
59
60
|
_initialProcessingFee = processingFee;
|
60
61
|
|
62
|
+
_tokenHandler = new TokenHandler(token);
|
63
|
+
|
61
64
|
_poolNftId = getRegistry().getNftId(address(_pool));
|
62
|
-
_distributionNftId = getRegistry().getNftId(_distribution);
|
65
|
+
_distributionNftId = getRegistry().getNftId(address(_distribution));
|
63
66
|
|
64
67
|
_registerInterface(type(IProductComponent).interfaceId);
|
65
68
|
}
|
@@ -118,13 +121,13 @@ contract Product is BaseComponent, IProductComponent {
|
|
118
121
|
);
|
119
122
|
}
|
120
123
|
|
121
|
-
function
|
124
|
+
function _updateRisk(
|
122
125
|
RiskId id,
|
123
|
-
|
126
|
+
bytes memory data
|
124
127
|
) internal {
|
125
|
-
_productService.
|
128
|
+
_productService.updateRisk(
|
126
129
|
id,
|
127
|
-
|
130
|
+
data
|
128
131
|
);
|
129
132
|
}
|
130
133
|
|
@@ -202,7 +205,7 @@ contract Product is BaseComponent, IProductComponent {
|
|
202
205
|
}
|
203
206
|
|
204
207
|
function getDistributionNftId() external view override returns (NftId distributionNftId) {
|
205
|
-
return getRegistry().getNftId(_distribution);
|
208
|
+
return getRegistry().getNftId(address(_distribution));
|
206
209
|
}
|
207
210
|
|
208
211
|
// from product component
|
@@ -218,28 +221,12 @@ contract Product is BaseComponent, IProductComponent {
|
|
218
221
|
}
|
219
222
|
|
220
223
|
function getSetupInfo() public view returns (ISetup.ProductSetupInfo memory setupInfo) {
|
221
|
-
if (getNftId().eq(zeroNftId())) {
|
222
|
-
return ISetup.ProductSetupInfo(
|
223
|
-
_token,
|
224
|
-
TokenHandler(address(0)),
|
225
|
-
_distributionNftId,
|
226
|
-
_poolNftId,
|
227
|
-
FeeLib.zeroFee(), //_instance.getDistributionFee(_distributionNftId)
|
228
|
-
_initialProductFee,
|
229
|
-
_initialProcessingFee,
|
230
|
-
FeeLib.zeroFee(), //_instance.getPoolFee(_poolNftId)
|
231
|
-
FeeLib.zeroFee(), //_instance.getStakingFee(_poolNftId)
|
232
|
-
FeeLib.zeroFee() //_instance.getPerformanceFee(_poolNftId)
|
233
|
-
);
|
234
|
-
}
|
235
|
-
|
236
224
|
InstanceReader reader = _instance.getInstanceReader();
|
237
225
|
return reader.getProductSetupInfo(getNftId());
|
238
226
|
}
|
239
227
|
|
240
228
|
// from IRegisterable
|
241
229
|
|
242
|
-
// TODO used only once, occupies space
|
243
230
|
function getInitialInfo()
|
244
231
|
public
|
245
232
|
view
|
@@ -251,7 +238,7 @@ contract Product is BaseComponent, IProductComponent {
|
|
251
238
|
IRegistry.ObjectInfo memory productInfo,
|
252
239
|
bytes memory data
|
253
240
|
) = super.getInitialInfo();
|
254
|
-
|
241
|
+
|
255
242
|
// TODO read pool & distribution fees
|
256
243
|
// 1) from pool -> the only option -> pool must be registered first?
|
257
244
|
// 2) from instance -> all fees are set into instance at product registration which is ongoing here
|
@@ -261,35 +248,40 @@ contract Product is BaseComponent, IProductComponent {
|
|
261
248
|
|
262
249
|
// from PoolComponent
|
263
250
|
(
|
264
|
-
|
251
|
+
,
|
265
252
|
bytes memory poolData
|
266
253
|
) = _pool.getInitialInfo();
|
254
|
+
|
255
|
+
(
|
256
|
+
ISetup.PoolSetupInfo memory poolSetupInfo
|
257
|
+
) = abi.decode(poolData, (ISetup.PoolSetupInfo));
|
267
258
|
|
259
|
+
// from DistributionComponent
|
268
260
|
(
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
Fee memory initialPoolFee,
|
273
|
-
Fee memory initialStakingFee,
|
274
|
-
Fee memory initialPerformanceFee
|
275
|
-
) = abi.decode(poolData, (ISetup.PoolSetupInfo, address, IERC20Metadata, Fee, Fee, Fee));
|
261
|
+
,
|
262
|
+
bytes memory distributionData
|
263
|
+
) = _distribution.getInitialInfo();
|
276
264
|
|
277
|
-
|
265
|
+
(
|
266
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo
|
267
|
+
) = abi.decode(distributionData, (ISetup.DistributionSetupInfo));
|
278
268
|
|
279
269
|
return (
|
280
270
|
productInfo,
|
281
271
|
abi.encode(
|
282
272
|
ISetup.ProductSetupInfo(
|
283
273
|
_token,
|
284
|
-
|
274
|
+
_tokenHandler,
|
285
275
|
_distributionNftId,
|
286
276
|
_poolNftId,
|
287
|
-
|
277
|
+
distributionSetupInfo.distributionFee,
|
288
278
|
_initialProductFee,
|
289
279
|
_initialProcessingFee,
|
290
|
-
|
291
|
-
|
292
|
-
|
280
|
+
poolSetupInfo.poolFee,
|
281
|
+
poolSetupInfo.stakingFee,
|
282
|
+
poolSetupInfo.performanceFee,
|
283
|
+
false,
|
284
|
+
_wallet
|
293
285
|
)
|
294
286
|
)
|
295
287
|
);
|
@@ -0,0 +1,152 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IInstance} from "./IInstance.sol";
|
5
|
+
import {INSTANCE} from "../types/ObjectType.sol";
|
6
|
+
import {InstanceReader} from "./InstanceReader.sol";
|
7
|
+
import {IPolicy} from "../instance/module/IPolicy.sol";
|
8
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
9
|
+
import {LibNftIdSet} from "../types/NftIdSet.sol";
|
10
|
+
import {NftId} from "../types/NftId.sol";
|
11
|
+
import {TimestampLib} from "../types/Timestamp.sol";
|
12
|
+
|
13
|
+
import {ObjectManager} from "./ObjectManager.sol";
|
14
|
+
|
15
|
+
contract BundleManager is
|
16
|
+
ObjectManager
|
17
|
+
{
|
18
|
+
|
19
|
+
event LogBundleManagerPolicyLinked(NftId bundleNftId, NftId policyNftId);
|
20
|
+
event LogBundleManagerPolicyUnlinked(NftId bundleNftId, NftId policyNftId);
|
21
|
+
|
22
|
+
event LogBundleManagerBundleAdded(NftId poolNftId, NftId bundleNftId);
|
23
|
+
event LogBundleManagerBundleUnlocked(NftId poolNftId, NftId bundleNftId);
|
24
|
+
event LogBundleManagerBundleLocked(NftId poolNftId, NftId bundleNftId);
|
25
|
+
|
26
|
+
error ErrorBundleManagerErrorPolicyAlreadyActivated(NftId policyNftId);
|
27
|
+
error ErrorBundleManagerErrorBundleLocked(NftId bundleNftId, NftId policyNftId);
|
28
|
+
error ErrorBundleManagerPolicyWithOpenClaims(NftId policyNftId, uint256 openClaimsCount);
|
29
|
+
error ErrorBundleManagerPolicyNotCloseable(NftId policyNftId);
|
30
|
+
error ErrorBundleManagerBundleUnknown(NftId bundleNftId);
|
31
|
+
error ErrorBundleManagerBundleNotRegistered(NftId bundleNftId);
|
32
|
+
|
33
|
+
mapping(NftId bundleNftId => LibNftIdSet.Set policies) internal _activePolicies;
|
34
|
+
|
35
|
+
constructor() ObjectManager() {
|
36
|
+
}
|
37
|
+
|
38
|
+
|
39
|
+
/// @dev links a policy with its bundle
|
40
|
+
// to link a policy it MUST NOT yet have been activated
|
41
|
+
// the bundle MUST be unlocked (active) for linking (underwriting) and registered with this instance
|
42
|
+
// TODO decide what is checked here (non upgradeable) and what is checked in the service (upgradeable)
|
43
|
+
function linkPolicy(NftId policyNftId) external restricted() {
|
44
|
+
IPolicy.PolicyInfo memory policyInfo = _instanceReader.getPolicyInfo(policyNftId);
|
45
|
+
|
46
|
+
// ensure policy has not yet been activated
|
47
|
+
if (policyInfo.activatedAt.gtz()) {
|
48
|
+
revert ErrorBundleManagerErrorPolicyAlreadyActivated(policyNftId);
|
49
|
+
}
|
50
|
+
|
51
|
+
NftId bundleNftId = policyInfo.bundleNftId;
|
52
|
+
// TODO decide to use instance reader or registry
|
53
|
+
// decision will likely depend on the decision what to check here and what in the service
|
54
|
+
NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
|
55
|
+
|
56
|
+
// ensure bundle is unlocked (in active set) and registered with this instance
|
57
|
+
if (!_isActive(poolNftId, bundleNftId)) {
|
58
|
+
revert ErrorBundleManagerErrorBundleLocked(bundleNftId, policyNftId);
|
59
|
+
}
|
60
|
+
|
61
|
+
LibNftIdSet.add(_activePolicies[bundleNftId], policyNftId);
|
62
|
+
emit LogBundleManagerPolicyLinked(bundleNftId, policyNftId);
|
63
|
+
}
|
64
|
+
|
65
|
+
|
66
|
+
/// @dev unlinks a policy from its bundle
|
67
|
+
// to unlink a policy it must closable, ie. meet one of the following criterias
|
68
|
+
// - the policy MUST be past its expiry period and it MUST NOT have any open claims
|
69
|
+
// - the policy's payoutAmount MUST be equal to its sumInsuredAmount and MUST NOT have any open claims
|
70
|
+
// TODO decide what is checked here (non upgradeable) and what is checked in the service (upgradeable)
|
71
|
+
function unlinkPolicy(NftId policyNftId) external restricted() {
|
72
|
+
IPolicy.PolicyInfo memory policyInfo = _instanceReader.getPolicyInfo(policyNftId);
|
73
|
+
|
74
|
+
// ensure policy has no open claims
|
75
|
+
if (policyInfo.openClaimsCount > 0) {
|
76
|
+
revert ErrorBundleManagerPolicyWithOpenClaims(
|
77
|
+
policyNftId,
|
78
|
+
policyInfo.openClaimsCount);
|
79
|
+
}
|
80
|
+
|
81
|
+
// ensure policy is closeable
|
82
|
+
if (policyInfo.expiredAt < TimestampLib.blockTimestamp()
|
83
|
+
|| policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
|
84
|
+
{
|
85
|
+
revert ErrorBundleManagerPolicyNotCloseable(policyNftId);
|
86
|
+
}
|
87
|
+
|
88
|
+
NftId bundleNftId = policyInfo.bundleNftId;
|
89
|
+
// TODO decide to use instance reader or registry
|
90
|
+
// decision will likely depend on the decision what to check here and what in the service
|
91
|
+
NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
|
92
|
+
|
93
|
+
// ensure bundle is registered with this instance
|
94
|
+
if (!_contains(poolNftId, bundleNftId)) {
|
95
|
+
revert ErrorBundleManagerBundleUnknown(bundleNftId);
|
96
|
+
}
|
97
|
+
|
98
|
+
LibNftIdSet.remove(_activePolicies[bundleNftId], policyNftId);
|
99
|
+
emit LogBundleManagerPolicyUnlinked(policyInfo.bundleNftId, policyNftId);
|
100
|
+
}
|
101
|
+
|
102
|
+
|
103
|
+
/// @dev add a new bundle to a riskpool registerd with this instance
|
104
|
+
// the corresponding pool is fetched via instance reader
|
105
|
+
function add(NftId bundleNftId) external restricted() {
|
106
|
+
NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
|
107
|
+
|
108
|
+
// ensure pool is registered with instance
|
109
|
+
if(poolNftId.eqz()) {
|
110
|
+
revert ErrorBundleManagerBundleNotRegistered(bundleNftId);
|
111
|
+
}
|
112
|
+
|
113
|
+
_add(poolNftId, bundleNftId);
|
114
|
+
emit LogBundleManagerBundleAdded(poolNftId, bundleNftId);
|
115
|
+
}
|
116
|
+
|
117
|
+
/// @dev unlocked (active) bundles are available to underwrite new policies
|
118
|
+
function unlock(NftId poolNftId , NftId bundleNftId) external restricted() {
|
119
|
+
_activate(poolNftId, bundleNftId);
|
120
|
+
emit LogBundleManagerBundleUnlocked(poolNftId, bundleNftId);
|
121
|
+
}
|
122
|
+
|
123
|
+
/// @dev locked (deactivated) bundles may not underwrite any new policies
|
124
|
+
function lock(NftId poolNftId , NftId bundleNftId) external restricted() {
|
125
|
+
_deactivate(poolNftId, bundleNftId);
|
126
|
+
emit LogBundleManagerBundleLocked(poolNftId, bundleNftId);
|
127
|
+
}
|
128
|
+
|
129
|
+
function bundles(NftId poolNftId) external view returns(uint256) {
|
130
|
+
return _objects(poolNftId);
|
131
|
+
}
|
132
|
+
|
133
|
+
function getBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
|
134
|
+
return _getObject(poolNftId, idx);
|
135
|
+
}
|
136
|
+
|
137
|
+
function activeBundles(NftId poolNftId) external view returns(uint256) {
|
138
|
+
return _activeObjs(poolNftId);
|
139
|
+
}
|
140
|
+
|
141
|
+
function getActiveBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
|
142
|
+
return _getActiveObject(poolNftId, idx);
|
143
|
+
}
|
144
|
+
|
145
|
+
function activePolicies(NftId bundleNftId) external view returns(uint256) {
|
146
|
+
return LibNftIdSet.size(_activePolicies[bundleNftId]);
|
147
|
+
}
|
148
|
+
|
149
|
+
function getActivePolicy(NftId bundleNftId, uint256 idx) external view returns(NftId policyNftId) {
|
150
|
+
return LibNftIdSet.getElementAt(_activePolicies[bundleNftId], idx);
|
151
|
+
}
|
152
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
5
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
6
|
+
|
7
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
8
|
+
|
9
|
+
abstract contract Cloneable is
|
10
|
+
AccessManagedUpgradeable
|
11
|
+
{
|
12
|
+
event CloneableInitialized(address authority, address registry);
|
13
|
+
|
14
|
+
error CloneableRegistryInvalid(address registry);
|
15
|
+
|
16
|
+
IRegistry internal _registry;
|
17
|
+
|
18
|
+
constructor() {
|
19
|
+
_registry = IRegistry(address(0));
|
20
|
+
}
|
21
|
+
|
22
|
+
/// @dev call to initialize MUST be made in the same transaction as cloning of the contract
|
23
|
+
function initialize(
|
24
|
+
address authority,
|
25
|
+
address registry
|
26
|
+
)
|
27
|
+
public
|
28
|
+
initializer
|
29
|
+
{
|
30
|
+
// check/handle access managed
|
31
|
+
__AccessManaged_init(authority);
|
32
|
+
|
33
|
+
// check/handle registry
|
34
|
+
if (registry.code.length == 0) {
|
35
|
+
revert CloneableRegistryInvalid(registry);
|
36
|
+
}
|
37
|
+
|
38
|
+
_registry = IRegistry(registry);
|
39
|
+
|
40
|
+
emit CloneableInitialized(authority, registry);
|
41
|
+
}
|
42
|
+
|
43
|
+
function getRegistry() external view returns (IRegistry) {
|
44
|
+
return _registry;
|
45
|
+
}
|
46
|
+
}
|
@@ -3,6 +3,7 @@ pragma solidity ^0.8.20;
|
|
3
3
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
5
|
|
6
|
+
import {BundleManager} from "./BundleManager.sol";
|
6
7
|
import {InstanceReader} from "./InstanceReader.sol";
|
7
8
|
|
8
9
|
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
@@ -13,16 +14,19 @@ import {IBundle} from "./module/IBundle.sol";
|
|
13
14
|
import {ISetup} from "./module/ISetup.sol";
|
14
15
|
import {NftId} from "../types/NftId.sol";
|
15
16
|
import {StateId} from "../types/StateId.sol";
|
17
|
+
import {RiskId} from "../types/RiskId.sol";
|
18
|
+
import {IRisk} from "./module/IRisk.sol";
|
19
|
+
import {IPolicy} from "./module/IPolicy.sol";
|
20
|
+
import {IKeyValueStore} from "./base/IKeyValueStore.sol";
|
16
21
|
|
17
|
-
|
22
|
+
|
23
|
+
interface IInstance is IERC165, IKeyValueStore {
|
18
24
|
|
19
25
|
function getComponentOwnerService() external view returns (IComponentOwnerService);
|
20
26
|
function getDistributionService() external view returns (IDistributionService);
|
21
|
-
|
27
|
+
function getProductService() external view returns (IProductService);
|
22
28
|
function getPoolService() external view returns (IPoolService);
|
23
29
|
|
24
|
-
function createProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup) external;
|
25
|
-
|
26
30
|
function createDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup) external;
|
27
31
|
function updateDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup, StateId newState) external;
|
28
32
|
function updateDistributionSetupState(NftId distributionNftId, StateId newState) external;
|
@@ -35,5 +39,18 @@ interface IInstance is IERC165 {
|
|
35
39
|
function updateBundle(NftId bundleNftId, IBundle.BundleInfo memory bundle, StateId newState) external;
|
36
40
|
function updateBundleState(NftId bundleNftId, StateId newState) external;
|
37
41
|
|
42
|
+
function createProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup) external;
|
43
|
+
function updateProductSetup(NftId productNftId, ISetup.ProductSetupInfo memory setup, StateId newState) external;
|
44
|
+
function updateProductSetupState(NftId productNftId, StateId newState) external;
|
45
|
+
|
46
|
+
function createRisk(RiskId riskId, IRisk.RiskInfo memory risk) external;
|
47
|
+
function updateRisk(RiskId riskId, IRisk.RiskInfo memory risk, StateId newState) external;
|
48
|
+
function updateRiskState(RiskId riskId, StateId newState) external;
|
49
|
+
|
50
|
+
function createPolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy) external;
|
51
|
+
function updatePolicy(NftId policyNftId, IPolicy.PolicyInfo memory policy, StateId newState) external;
|
52
|
+
function updatePolicyState(NftId policyNftId, StateId newState) external;
|
53
|
+
|
38
54
|
function getInstanceReader() external view returns (InstanceReader);
|
55
|
+
function getBundleManager() external view returns (BundleManager);
|
39
56
|
}
|
@@ -13,6 +13,7 @@ import {IBaseComponent} from "../components/IBaseComponent.sol";
|
|
13
13
|
import {AccessManagerSimple} from "./AccessManagerSimple.sol";
|
14
14
|
import {Instance} from "./Instance.sol";
|
15
15
|
import {InstanceReader} from "./InstanceReader.sol";
|
16
|
+
import {BundleManager} from "./BundleManager.sol";
|
16
17
|
|
17
18
|
interface IInstanceService is IService {
|
18
19
|
|
@@ -24,7 +25,8 @@ interface IInstanceService is IService {
|
|
24
25
|
AccessManagerSimple clonedAccessManager,
|
25
26
|
Instance clonedInstance,
|
26
27
|
NftId instanceNftId,
|
27
|
-
InstanceReader clonedInstanceReader
|
28
|
+
InstanceReader clonedInstanceReader,
|
29
|
+
BundleManager clonedBundleManager
|
28
30
|
);
|
29
31
|
}
|
30
32
|
|
@@ -15,6 +15,7 @@ import {Key32, KeyId, Key32Lib} from "../types/Key32.sol";
|
|
15
15
|
import {KeyValueStore} from "./base/KeyValueStore.sol";
|
16
16
|
import {IInstance} from "./IInstance.sol";
|
17
17
|
import {InstanceReader} from "./InstanceReader.sol";
|
18
|
+
import {BundleManager} from "./BundleManager.sol";
|
18
19
|
import {NftId} from "../types/NftId.sol";
|
19
20
|
import {NumberId} from "../types/NumberId.sol";
|
20
21
|
import {ObjectType, BUNDLE, DISTRIBUTION, INSTANCE, POLICY, POOL, ROLE, PRODUCT, TARGET} from "../types/ObjectType.sol";
|
@@ -27,6 +28,7 @@ import {ComponentOwnerService} from "./service/ComponentOwnerService.sol";
|
|
27
28
|
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
28
29
|
import {IDistributionService} from "./service/IDistributionService.sol";
|
29
30
|
import {IPoolService} from "./service/IPoolService.sol";
|
31
|
+
import {IProductService} from "./service/IProductService.sol";
|
30
32
|
import {VersionPart} from "../types/Version.sol";
|
31
33
|
|
32
34
|
contract Instance is
|
@@ -53,6 +55,7 @@ contract Instance is
|
|
53
55
|
|
54
56
|
AccessManagerSimple internal _accessManager;
|
55
57
|
InstanceReader internal _instanceReader;
|
58
|
+
BundleManager internal _bundleManager;
|
56
59
|
|
57
60
|
constructor(address accessManagerAddress, address registryAddress, NftId registryNftId)
|
58
61
|
{
|
@@ -423,10 +426,9 @@ contract Instance is
|
|
423
426
|
return IDistributionService(_registry.getServiceAddress("DistributionService", VersionPart.wrap(3)));
|
424
427
|
}
|
425
428
|
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
// }
|
429
|
+
function getProductService() external view returns (IProductService) {
|
430
|
+
return IProductService(_registry.getServiceAddress("ProductService", VersionPart.wrap(3)));
|
431
|
+
}
|
430
432
|
|
431
433
|
function getPoolService() external view returns (IPoolService) {
|
432
434
|
return IPoolService(_registry.getServiceAddress("PoolService", VersionPart.wrap(3)));
|
@@ -440,4 +442,13 @@ contract Instance is
|
|
440
442
|
function getInstanceReader() external view returns (InstanceReader) {
|
441
443
|
return _instanceReader;
|
442
444
|
}
|
445
|
+
|
446
|
+
function setBundleManager(BundleManager bundleManager) external restricted() {
|
447
|
+
require(address(_bundleManager) == address(0), "BundleManager is set");
|
448
|
+
_bundleManager = bundleManager;
|
449
|
+
}
|
450
|
+
|
451
|
+
function getBundleManager() external view returns (BundleManager) {
|
452
|
+
return _bundleManager;
|
453
|
+
}
|
443
454
|
}
|
@@ -13,6 +13,7 @@ import {Registerable} from "../shared/Registerable.sol";
|
|
13
13
|
import {RiskId} from "../types/RiskId.sol";
|
14
14
|
import {UFixed, MathLib, UFixedLib} from "../types/UFixed.sol";
|
15
15
|
import {Version} from "../types/Version.sol";
|
16
|
+
import {StateId} from "../types/StateId.sol";
|
16
17
|
|
17
18
|
import {IRegistry} from "../registry/IRegistry.sol";
|
18
19
|
import {IBundle} from "../instance/module/IBundle.sol";
|
@@ -81,6 +82,14 @@ contract InstanceReader {
|
|
81
82
|
}
|
82
83
|
}
|
83
84
|
|
85
|
+
function getPolicyState(NftId policyNftId)
|
86
|
+
public
|
87
|
+
view
|
88
|
+
returns (StateId state)
|
89
|
+
{
|
90
|
+
return _instance.getState(toPolicyKey(policyNftId));
|
91
|
+
}
|
92
|
+
|
84
93
|
function getRiskInfo(RiskId riskId)
|
85
94
|
public
|
86
95
|
view
|
@@ -8,6 +8,7 @@ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
|
|
8
8
|
import {Instance} from "./Instance.sol";
|
9
9
|
import {IInstanceService} from "./IInstanceService.sol";
|
10
10
|
import {InstanceReader} from "./InstanceReader.sol";
|
11
|
+
import {BundleManager} from "./BundleManager.sol";
|
11
12
|
import {IRegistry} from "../registry/IRegistry.sol";
|
12
13
|
import {Registry} from "../registry/Registry.sol";
|
13
14
|
import {RegistryService} from "../registry/RegistryService.sol";
|
@@ -17,7 +18,7 @@ import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
|
17
18
|
import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
|
18
19
|
import {RoleId} from "../types/RoleId.sol";
|
19
20
|
import {VersionLib} from "../types/Version.sol";
|
20
|
-
import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE} from "../types/RoleId.sol";
|
21
|
+
import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../types/RoleId.sol";
|
21
22
|
|
22
23
|
contract InstanceService is Service, IInstanceService {
|
23
24
|
|
@@ -25,6 +26,7 @@ contract InstanceService is Service, IInstanceService {
|
|
25
26
|
address internal _accessManagerMaster;
|
26
27
|
address internal _instanceMaster;
|
27
28
|
address internal _instanceReaderMaster;
|
29
|
+
address internal _instanceBundleManagerMaster;
|
28
30
|
|
29
31
|
// TODO update to real hash when instance is stable
|
30
32
|
bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
|
@@ -35,8 +37,9 @@ contract InstanceService is Service, IInstanceService {
|
|
35
37
|
returns (
|
36
38
|
AccessManagerSimple clonedAccessManager,
|
37
39
|
Instance clonedInstance,
|
38
|
-
NftId
|
39
|
-
InstanceReader clonedInstanceReader
|
40
|
+
NftId clonedInstanceNftId,
|
41
|
+
InstanceReader clonedInstanceReader,
|
42
|
+
BundleManager clonedBundleManager
|
40
43
|
)
|
41
44
|
{
|
42
45
|
address instanceOwner = msg.sender;
|
@@ -54,24 +57,30 @@ contract InstanceService is Service, IInstanceService {
|
|
54
57
|
clonedInstance = Instance(Clones.clone(_instanceMaster));
|
55
58
|
clonedInstance.initialize(address(clonedAccessManager), _registryAddress, registryNftId, msg.sender);
|
56
59
|
( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
|
57
|
-
|
60
|
+
clonedInstanceNftId = info.nftId;
|
58
61
|
|
59
62
|
clonedInstanceReader = InstanceReader(Clones.clone(address(_instanceReaderMaster)));
|
60
|
-
clonedInstanceReader.initialize(_registryAddress,
|
63
|
+
clonedInstanceReader.initialize(_registryAddress, clonedInstanceNftId);
|
64
|
+
clonedInstance.setInstanceReader(clonedInstanceReader);
|
61
65
|
|
62
|
-
|
66
|
+
clonedBundleManager = BundleManager(Clones.clone(_instanceBundleManagerMaster));
|
67
|
+
clonedBundleManager.initialize(address(clonedAccessManager), _registryAddress, clonedInstanceNftId);
|
68
|
+
clonedInstance.setBundleManager(clonedBundleManager);
|
69
|
+
|
70
|
+
// TODO amend setters with instance specific , policy manager ...
|
71
|
+
|
72
|
+
_grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
|
63
73
|
|
64
|
-
clonedInstance.setInstanceReader(clonedInstanceReader);
|
65
|
-
|
66
74
|
// to complete setup switch instance ownership to the instance owner
|
67
75
|
// TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
|
68
76
|
clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
|
69
77
|
clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
|
70
78
|
|
71
|
-
emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader),
|
79
|
+
emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
|
72
80
|
}
|
73
81
|
|
74
|
-
function _grantInitialAuthorizations(AccessManagerSimple clonedAccessManager, Instance clonedInstance) internal {
|
82
|
+
function _grantInitialAuthorizations(AccessManagerSimple clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
83
|
+
// configure authorization for distribution service on instance
|
75
84
|
address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
76
85
|
clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
|
77
86
|
bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
|
@@ -82,6 +91,7 @@ contract InstanceService is Service, IInstanceService {
|
|
82
91
|
instanceDistributionServiceSelectors,
|
83
92
|
DISTRIBUTION_SERVICE_ROLE().toInt());
|
84
93
|
|
94
|
+
// configure authorization for pool service on instance
|
85
95
|
address poolServiceAddress = _registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
86
96
|
clonedAccessManager.grantRole(POOL_SERVICE_ROLE().toInt(), address(poolServiceAddress), 0);
|
87
97
|
bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
|
@@ -93,7 +103,35 @@ contract InstanceService is Service, IInstanceService {
|
|
93
103
|
address(clonedInstance),
|
94
104
|
instancePoolServiceSelectors,
|
95
105
|
POOL_SERVICE_ROLE().toInt());
|
106
|
+
|
107
|
+
// configure authorization for pool service on bundle manager
|
108
|
+
bytes4[] memory bundleManagerPoolServiceSelectors = new bytes4[](5);
|
109
|
+
bundleManagerPoolServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
|
110
|
+
bundleManagerPoolServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
|
111
|
+
bundleManagerPoolServiceSelectors[2] = clonedBundleManager.add.selector;
|
112
|
+
bundleManagerPoolServiceSelectors[3] = clonedBundleManager.lock.selector;
|
113
|
+
bundleManagerPoolServiceSelectors[4] = clonedBundleManager.unlock.selector;
|
114
|
+
clonedAccessManager.setTargetFunctionRole(
|
115
|
+
address(clonedBundleManager),
|
116
|
+
bundleManagerPoolServiceSelectors,
|
117
|
+
POOL_SERVICE_ROLE().toInt());
|
96
118
|
|
119
|
+
// configure authorization for product service on instance
|
120
|
+
address productServiceAddress = _registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
121
|
+
clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE().toInt(), address(productServiceAddress), 0);
|
122
|
+
bytes4[] memory instanceProductServiceSelectors = new bytes4[](9);
|
123
|
+
instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
|
124
|
+
instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
|
125
|
+
instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
|
126
|
+
instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
|
127
|
+
instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
|
128
|
+
instanceProductServiceSelectors[5] = clonedInstance.createPolicy.selector;
|
129
|
+
instanceProductServiceSelectors[6] = clonedInstance.updatePolicy.selector;
|
130
|
+
instanceProductServiceSelectors[7] = clonedInstance.updatePolicyState.selector;
|
131
|
+
clonedAccessManager.setTargetFunctionRole(
|
132
|
+
address(clonedInstance),
|
133
|
+
instanceProductServiceSelectors,
|
134
|
+
PRODUCT_SERVICE_ROLE().toInt());
|
97
135
|
}
|
98
136
|
|
99
137
|
function setAccessManagerMaster(address accessManagerMaster) external {
|
@@ -117,6 +155,13 @@ contract InstanceService is Service, IInstanceService {
|
|
117
155
|
_instanceReaderMaster = instanceReaderMaster;
|
118
156
|
}
|
119
157
|
|
158
|
+
function setBundleManagerMaster(address bundleManagerMaster) external {
|
159
|
+
require(
|
160
|
+
_instanceBundleManagerMaster == address(0),
|
161
|
+
"ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
|
162
|
+
_instanceBundleManagerMaster = bundleManagerMaster;
|
163
|
+
}
|
164
|
+
|
120
165
|
function getInstanceReaderMaster() external view returns (address) {
|
121
166
|
return _instanceReaderMaster;
|
122
167
|
}
|
@@ -129,6 +174,10 @@ contract InstanceService is Service, IInstanceService {
|
|
129
174
|
return _accessManagerMaster;
|
130
175
|
}
|
131
176
|
|
177
|
+
function getBundleManagerMaster() external view returns (address) {
|
178
|
+
return _instanceBundleManagerMaster;
|
179
|
+
}
|
180
|
+
|
132
181
|
// From IService
|
133
182
|
function getName() public pure override(IService, Service) returns(string memory) {
|
134
183
|
return NAME;
|
@@ -160,8 +209,9 @@ contract InstanceService is Service, IInstanceService {
|
|
160
209
|
|
161
210
|
address initialOwner = address(0);
|
162
211
|
(_registryAddress, initialOwner) = abi.decode(data, (address, address));
|
163
|
-
|
164
|
-
|
212
|
+
// TODO while InstanceService is not deployed in InstanceServiceManager constructor
|
213
|
+
// owner is InstanceServiceManager deployer
|
214
|
+
_initializeService(_registryAddress, owner);
|
165
215
|
|
166
216
|
_registerInterface(type(IService).interfaceId);
|
167
217
|
_registerInterface(type(IInstanceService).interfaceId);
|