@etherisc/gif-next 0.0.2-b97394c-442 → 0.0.2-b9e43cf-870
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 +63 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +155 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +143 -86
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +117 -0
- 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 +26 -0
- 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 +168 -113
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +141 -95
- 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/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +129 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +104 -14
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +98 -658
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +244 -114
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +183 -151
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -74
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +24 -32
- 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/IAccess.sol/IAccess.json +59 -16
- 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/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1031 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +436 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +39 -52
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +49 -72
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +13 -37
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +720 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +13 -13
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +771 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -185
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -241
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1156 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +492 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +38 -282
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +13 -53
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +40 -410
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +13 -81
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +132 -133
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -65
- 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 +145 -227
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +30 -128
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -104
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +530 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
- 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/IService.sol/IService.json +13 -13
- 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/Service.sol/Service.json +13 -13
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
- 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/BaseComponent.sol +79 -11
- package/contracts/components/Distribution.sol +2 -1
- package/contracts/components/IBaseComponent.sol +9 -0
- package/contracts/components/IPoolComponent.sol +4 -0
- package/contracts/components/Pool.sol +29 -4
- package/contracts/components/Product.sol +22 -10
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
- package/contracts/instance/BundleManager.sol +129 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +9 -1
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +13 -3
- package/contracts/instance/Instance.sol +43 -214
- package/contracts/instance/InstanceAccessManager.sol +93 -78
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceService.sol +247 -100
- package/contracts/instance/InstanceServiceManager.sol +5 -8
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +29 -87
- package/contracts/instance/module/IAccess.sol +27 -17
- package/contracts/instance/module/ISetup.sol +0 -1
- package/contracts/instance/service/BundleService.sol +294 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ComponentOwnerService.sol +4 -6
- package/contracts/instance/service/DistributionService.sol +53 -21
- package/contracts/instance/service/DistributionServiceManager.sol +6 -9
- package/contracts/instance/service/IBundleService.sol +44 -0
- package/contracts/instance/service/IPolicyService.sol +94 -0
- package/contracts/instance/service/IPoolService.sol +3 -26
- package/contracts/instance/service/IProductService.sol +2 -72
- package/contracts/instance/service/PolicyService.sol +539 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +68 -127
- package/contracts/instance/service/PoolServiceManager.sol +5 -8
- package/contracts/instance/service/ProductService.sol +100 -448
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +26 -16
- package/contracts/registry/IRegistryService.sol +13 -5
- package/contracts/registry/Registry.sol +149 -201
- package/contracts/registry/RegistryAccessManager.sol +210 -0
- package/contracts/registry/RegistryService.sol +50 -88
- package/contracts/registry/RegistryServiceManager.sol +18 -36
- package/contracts/registry/ReleaseManager.sol +342 -0
- package/contracts/registry/TokenRegistry.sol +5 -6
- package/contracts/shared/IService.sol +2 -1
- package/contracts/shared/ProxyManager.sol +1 -1
- package/contracts/shared/Service.sol +10 -7
- package/contracts/test/TestService.sol +3 -2
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/RoleId.sol +10 -10
- package/package.json +1 -1
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/contracts/instance/AccessManagedSimple.sol +0 -115
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
@@ -1,18 +1,21 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
+
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
4
5
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
6
|
|
6
|
-
import {Registerable} from "../shared/Registerable.sol";
|
7
|
-
|
8
|
-
import {IRegistry} from "../registry/IRegistry.sol";
|
9
|
-
import {IInstance} from "../instance/IInstance.sol";
|
10
|
-
|
11
|
-
import {IInstance} from "../instance/IInstance.sol";
|
12
|
-
import {IComponentOwnerService} from "../instance/service/IComponentOwnerService.sol";
|
13
7
|
import {IBaseComponent} from "./IBaseComponent.sol";
|
8
|
+
import {IComponentOwnerService} from "../instance/service/IComponentOwnerService.sol";
|
9
|
+
import {IInstanceService} from "../instance/IInstanceService.sol";
|
10
|
+
import {IInstance} from "../instance/IInstance.sol";
|
11
|
+
import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
|
12
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
14
13
|
import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
15
|
-
import {ObjectType} from "../types/ObjectType.sol";
|
14
|
+
import {ObjectType, INSTANCE} from "../types/ObjectType.sol";
|
15
|
+
import {VersionLib} from "../types/Version.sol";
|
16
|
+
import {Registerable} from "../shared/Registerable.sol";
|
17
|
+
import {RoleId, RoleIdLib} from "../types/RoleId.sol";
|
18
|
+
import {IAccess} from "../instance/module/IAccess.sol";
|
16
19
|
|
17
20
|
abstract contract BaseComponent is
|
18
21
|
Registerable,
|
@@ -21,6 +24,7 @@ abstract contract BaseComponent is
|
|
21
24
|
using NftIdLib for NftId;
|
22
25
|
|
23
26
|
IComponentOwnerService internal _componentOwnerService;
|
27
|
+
IInstanceService internal _instanceService;
|
24
28
|
|
25
29
|
address internal _deployer;
|
26
30
|
address internal _wallet;
|
@@ -28,6 +32,23 @@ abstract contract BaseComponent is
|
|
28
32
|
IInstance internal _instance;
|
29
33
|
NftId internal _productNftId;
|
30
34
|
|
35
|
+
modifier onlyInstanceRole(uint64 roleIdNum) {
|
36
|
+
RoleId roleId = RoleIdLib.toRoleId(roleIdNum);
|
37
|
+
InstanceAccessManager accessManager = InstanceAccessManager(_instance.authority());
|
38
|
+
if( !accessManager.hasRole(roleId, msg.sender)) {
|
39
|
+
revert ErrorBaseComponentUnauthorized(msg.sender, roleIdNum);
|
40
|
+
}
|
41
|
+
_;
|
42
|
+
}
|
43
|
+
|
44
|
+
modifier isNotLocked() {
|
45
|
+
InstanceAccessManager accessManager = InstanceAccessManager(_instance.authority());
|
46
|
+
if (accessManager.isTargetLocked(address(this))) {
|
47
|
+
revert IAccess.ErrorIAccessTargetLocked(address(this));
|
48
|
+
}
|
49
|
+
_;
|
50
|
+
}
|
51
|
+
|
31
52
|
constructor(
|
32
53
|
address registry,
|
33
54
|
NftId instanceNftId,
|
@@ -48,19 +69,24 @@ abstract contract BaseComponent is
|
|
48
69
|
);
|
49
70
|
|
50
71
|
_componentOwnerService = _instance.getComponentOwnerService();
|
72
|
+
_instanceService = IInstanceService(getRegistry().getServiceAddress(INSTANCE(), VersionLib.toVersion(3, 0, 0).toMajorPart()));
|
51
73
|
_wallet = address(this);
|
52
74
|
_token = IERC20Metadata(token);
|
53
75
|
|
54
76
|
_registerInterface(type(IBaseComponent).interfaceId);
|
55
77
|
}
|
56
78
|
|
79
|
+
function getName() public pure virtual returns (string memory name);
|
80
|
+
|
57
81
|
// from component contract
|
82
|
+
// TODO only owner and instance owner
|
58
83
|
function lock() external onlyOwner override {
|
59
|
-
|
84
|
+
_instanceService.setTargetLocked(getName(), true);
|
60
85
|
}
|
61
|
-
|
86
|
+
|
87
|
+
// TODO only owner and instance owner
|
62
88
|
function unlock() external onlyOwner override {
|
63
|
-
|
89
|
+
_instanceService.setTargetLocked(getName(), false);
|
64
90
|
}
|
65
91
|
|
66
92
|
function getWallet()
|
@@ -72,6 +98,48 @@ abstract contract BaseComponent is
|
|
72
98
|
return _wallet;
|
73
99
|
}
|
74
100
|
|
101
|
+
/// @dev Sets the wallet address for the component.
|
102
|
+
/// if the current wallet has tokens, these will be transferred.
|
103
|
+
/// if the new wallet address is externally owned, an approval from the
|
104
|
+
/// owner of the external wallet for the component to move all tokens must exist.
|
105
|
+
function setWallet(address newWallet) external override onlyOwner {
|
106
|
+
address currentWallet = _wallet;
|
107
|
+
uint256 currentBalance = _token.balanceOf(currentWallet);
|
108
|
+
|
109
|
+
// checks
|
110
|
+
if (newWallet == currentWallet) {
|
111
|
+
revert ErrorBaseComponentWalletAddressIsSameAsCurrent(newWallet);
|
112
|
+
}
|
113
|
+
|
114
|
+
if (currentBalance > 0) {
|
115
|
+
if (currentWallet == address(this)) {
|
116
|
+
// move tokens from component smart contract to external wallet
|
117
|
+
} else {
|
118
|
+
// move tokens from external wallet to component smart contract or another external wallet
|
119
|
+
uint256 allowance = _token.allowance(currentWallet, address(this));
|
120
|
+
if (allowance < currentBalance) {
|
121
|
+
revert ErrorBaseComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
|
122
|
+
}
|
123
|
+
}
|
124
|
+
}
|
125
|
+
|
126
|
+
// effects
|
127
|
+
_wallet = newWallet;
|
128
|
+
emit LogBaseComponentWalletAddressChanged(newWallet);
|
129
|
+
|
130
|
+
// interactions
|
131
|
+
if (currentBalance > 0) {
|
132
|
+
// transfer tokens from current wallet to new wallet
|
133
|
+
if (currentWallet == address(this)) {
|
134
|
+
// transferFrom requires self allowance too
|
135
|
+
_token.approve(address(this), currentBalance);
|
136
|
+
}
|
137
|
+
|
138
|
+
SafeERC20.safeTransferFrom(_token, currentWallet, newWallet, currentBalance);
|
139
|
+
emit LogBaseComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
|
140
|
+
}
|
141
|
+
}
|
142
|
+
|
75
143
|
function getToken() public view override returns (IERC20Metadata token) {
|
76
144
|
return _token;
|
77
145
|
}
|
@@ -16,7 +16,7 @@ import {Registerable} from "../shared/Registerable.sol";
|
|
16
16
|
import {TokenHandler} from "../shared/TokenHandler.sol";
|
17
17
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
18
18
|
|
19
|
-
contract Distribution is
|
19
|
+
abstract contract Distribution is
|
20
20
|
BaseComponent,
|
21
21
|
IDistributionComponent
|
22
22
|
{
|
@@ -150,6 +150,7 @@ contract Distribution is
|
|
150
150
|
return (
|
151
151
|
info,
|
152
152
|
abi.encode(
|
153
|
+
getName(),
|
153
154
|
ISetup.DistributionSetupInfo(
|
154
155
|
_productNftId,
|
155
156
|
_tokenHandler,
|
@@ -8,6 +8,14 @@ import {IInstance} from "../instance/IInstance.sol";
|
|
8
8
|
import {NftId} from "../types/NftId.sol";
|
9
9
|
|
10
10
|
interface IBaseComponent is IRegisterable {
|
11
|
+
error ErrorBaseComponentWalletAddressIsSameAsCurrent(address newWallet);
|
12
|
+
error ErrorBaseComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
|
13
|
+
error ErrorBaseComponentUnauthorized(address caller, uint64 requiredRoleIdNum);
|
14
|
+
|
15
|
+
event LogBaseComponentWalletAddressChanged(address newWallet);
|
16
|
+
event LogBaseComponentWalletTokensTransferred(address from, address to, uint256 amount);
|
17
|
+
|
18
|
+
function getName() external pure virtual returns (string memory name);
|
11
19
|
|
12
20
|
function lock() external;
|
13
21
|
|
@@ -15,6 +23,7 @@ interface IBaseComponent is IRegisterable {
|
|
15
23
|
|
16
24
|
function getToken() external view returns (IERC20Metadata token);
|
17
25
|
|
26
|
+
function setWallet(address walletAddress) external;
|
18
27
|
function getWallet() external view returns (address walletAddress);
|
19
28
|
|
20
29
|
function getInstance() external view returns (IInstance instance);
|
@@ -43,6 +43,10 @@ interface IPoolComponent {
|
|
43
43
|
uint256 collateralizationAmount
|
44
44
|
) external;
|
45
45
|
|
46
|
+
function lockBundle(NftId bundleNftId) external;
|
47
|
+
|
48
|
+
function unlockBundle(NftId bundleNftId) external;
|
49
|
+
|
46
50
|
/**
|
47
51
|
* @dev returns true iff the policy application data in policyData matches
|
48
52
|
* with the bundle filter criteria encoded in bundleFilter.
|
@@ -4,6 +4,7 @@ pragma solidity ^0.8.20;
|
|
4
4
|
import {ObjectType, POOL} from "../types/ObjectType.sol";
|
5
5
|
import {IProductService} from "../instance/service/IProductService.sol";
|
6
6
|
import {IPoolService} from "../instance/service/IPoolService.sol";
|
7
|
+
import {IBundleService} from "../instance/service/IBundleService.sol";
|
7
8
|
import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
8
9
|
import {Fee} from "../types/Fee.sol";
|
9
10
|
import {UFixed} from "../types/UFixed.sol";
|
@@ -22,7 +23,7 @@ import {InstanceReader} from "../instance/InstanceReader.sol";
|
|
22
23
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
23
24
|
import {Registerable} from "../shared/Registerable.sol";
|
24
25
|
|
25
|
-
contract Pool is BaseComponent, IPoolComponent {
|
26
|
+
abstract contract Pool is BaseComponent, IPoolComponent {
|
26
27
|
using NftIdLib for NftId;
|
27
28
|
|
28
29
|
bool internal _isConfirmingApplication;
|
@@ -40,6 +41,8 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
40
41
|
// only relevant to protect callback functions for "active" pools
|
41
42
|
IProductService private _productService;
|
42
43
|
|
44
|
+
IBundleService private _bundleService;
|
45
|
+
|
43
46
|
modifier onlyPoolService() {
|
44
47
|
require(
|
45
48
|
msg.sender == address(_poolService),
|
@@ -80,6 +83,7 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
80
83
|
|
81
84
|
_poolService = _instance.getPoolService();
|
82
85
|
_productService = _instance.getProductService();
|
86
|
+
_bundleService = _instance.getBundleService();
|
83
87
|
|
84
88
|
_registerInterface(type(IPoolComponent).interfaceId);
|
85
89
|
}
|
@@ -95,7 +99,7 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
95
99
|
returns(NftId bundleNftId)
|
96
100
|
{
|
97
101
|
address owner = msg.sender;
|
98
|
-
bundleNftId =
|
102
|
+
bundleNftId = _bundleService.createBundle(
|
99
103
|
owner,
|
100
104
|
fee,
|
101
105
|
initialAmount,
|
@@ -168,7 +172,27 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
168
172
|
override
|
169
173
|
// TODO add onlyBundleOwner
|
170
174
|
{
|
171
|
-
|
175
|
+
_bundleService.setBundleFee(bundleNftId, fee);
|
176
|
+
}
|
177
|
+
|
178
|
+
function lockBundle(
|
179
|
+
NftId bundleNftId
|
180
|
+
)
|
181
|
+
external
|
182
|
+
override
|
183
|
+
// TODO add onlyBundleOwner
|
184
|
+
{
|
185
|
+
_bundleService.lockBundle(bundleNftId);
|
186
|
+
}
|
187
|
+
|
188
|
+
function unlockBundle(
|
189
|
+
NftId bundleNftId
|
190
|
+
)
|
191
|
+
external
|
192
|
+
override
|
193
|
+
// TODO add onlyBundleOwner
|
194
|
+
{
|
195
|
+
_bundleService.unlockBundle(bundleNftId);
|
172
196
|
}
|
173
197
|
|
174
198
|
function getSetupInfo() public view returns (ISetup.PoolSetupInfo memory setupInfo) {
|
@@ -193,6 +217,7 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
193
217
|
return (
|
194
218
|
info,
|
195
219
|
abi.encode(
|
220
|
+
getName(),
|
196
221
|
ISetup.PoolSetupInfo(
|
197
222
|
_productNftId,
|
198
223
|
_tokenHandler,
|
@@ -236,7 +261,7 @@ contract Pool is BaseComponent, IPoolComponent {
|
|
236
261
|
internal
|
237
262
|
returns(NftId bundleNftId)
|
238
263
|
{
|
239
|
-
bundleNftId =
|
264
|
+
bundleNftId = _bundleService.createBundle(
|
240
265
|
bundleOwner,
|
241
266
|
fee,
|
242
267
|
amount,
|
@@ -6,6 +6,7 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
|
|
6
6
|
import {IRisk} from "../instance/module/IRisk.sol";
|
7
7
|
import {ITreasury} from "../instance/module/ITreasury.sol";
|
8
8
|
import {IProductService} from "../instance/service/IProductService.sol";
|
9
|
+
import {IPolicyService} from "../instance/service/IPolicyService.sol";
|
9
10
|
import {IProductComponent} from "./IProductComponent.sol";
|
10
11
|
import {NftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
11
12
|
import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
|
@@ -28,10 +29,11 @@ import {Distribution} from "../components/Distribution.sol";
|
|
28
29
|
|
29
30
|
import {zeroNftId} from "../types/NftId.sol";
|
30
31
|
|
31
|
-
contract Product is BaseComponent, IProductComponent {
|
32
|
+
abstract contract Product is BaseComponent, IProductComponent {
|
32
33
|
using NftIdLib for NftId;
|
33
34
|
|
34
35
|
IProductService internal _productService;
|
36
|
+
IPolicyService internal _policyService;
|
35
37
|
Pool internal _pool;
|
36
38
|
Distribution internal _distribution;
|
37
39
|
Fee internal _initialProductFee;
|
@@ -54,6 +56,7 @@ contract Product is BaseComponent, IProductComponent {
|
|
54
56
|
) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
|
55
57
|
// TODO add validation
|
56
58
|
_productService = _instance.getProductService();
|
59
|
+
_policyService = _instance.getPolicyService();
|
57
60
|
_pool = Pool(pool);
|
58
61
|
_distribution = Distribution(distribution);
|
59
62
|
_initialProductFee = productFee;
|
@@ -81,7 +84,7 @@ contract Product is BaseComponent, IProductComponent {
|
|
81
84
|
override
|
82
85
|
returns (uint256 premiumAmount)
|
83
86
|
{
|
84
|
-
(premiumAmount,,,,) =
|
87
|
+
(premiumAmount,,,,) = _policyService.calculatePremium(
|
85
88
|
riskId,
|
86
89
|
sumInsuredAmount,
|
87
90
|
lifetime,
|
@@ -154,7 +157,7 @@ contract Product is BaseComponent, IProductComponent {
|
|
154
157
|
NftId bundleNftId,
|
155
158
|
ReferralId referralId
|
156
159
|
) internal returns (NftId nftId) {
|
157
|
-
nftId =
|
160
|
+
nftId = _policyService.createApplication(
|
158
161
|
applicationOwner,
|
159
162
|
riskId,
|
160
163
|
sumInsuredAmount,
|
@@ -172,7 +175,7 @@ contract Product is BaseComponent, IProductComponent {
|
|
172
175
|
)
|
173
176
|
internal
|
174
177
|
{
|
175
|
-
|
178
|
+
_policyService.underwrite(
|
176
179
|
policyNftId,
|
177
180
|
requirePremiumPayment,
|
178
181
|
activateAt);
|
@@ -184,7 +187,7 @@ contract Product is BaseComponent, IProductComponent {
|
|
184
187
|
)
|
185
188
|
internal
|
186
189
|
{
|
187
|
-
|
190
|
+
_policyService.collectPremium(
|
188
191
|
policyNftId,
|
189
192
|
activateAt);
|
190
193
|
}
|
@@ -195,11 +198,19 @@ contract Product is BaseComponent, IProductComponent {
|
|
195
198
|
)
|
196
199
|
internal
|
197
200
|
{
|
198
|
-
|
201
|
+
_policyService.activate(
|
199
202
|
policyNftId,
|
200
203
|
activateAt);
|
201
204
|
}
|
202
205
|
|
206
|
+
function _close(
|
207
|
+
NftId policyNftId
|
208
|
+
)
|
209
|
+
internal
|
210
|
+
{
|
211
|
+
_policyService.close(policyNftId);
|
212
|
+
}
|
213
|
+
|
203
214
|
function getPoolNftId() external view override returns (NftId poolNftId) {
|
204
215
|
return getRegistry().getNftId(address(_pool));
|
205
216
|
}
|
@@ -253,8 +264,8 @@ contract Product is BaseComponent, IProductComponent {
|
|
253
264
|
) = _pool.getInitialInfo();
|
254
265
|
|
255
266
|
(
|
256
|
-
ISetup.PoolSetupInfo memory poolSetupInfo
|
257
|
-
) = abi.decode(poolData, (ISetup.PoolSetupInfo));
|
267
|
+
, ISetup.PoolSetupInfo memory poolSetupInfo
|
268
|
+
) = abi.decode(poolData, (string, ISetup.PoolSetupInfo));
|
258
269
|
|
259
270
|
// from DistributionComponent
|
260
271
|
(
|
@@ -263,12 +274,13 @@ contract Product is BaseComponent, IProductComponent {
|
|
263
274
|
) = _distribution.getInitialInfo();
|
264
275
|
|
265
276
|
(
|
266
|
-
ISetup.DistributionSetupInfo memory distributionSetupInfo
|
267
|
-
) = abi.decode(distributionData, (ISetup.DistributionSetupInfo));
|
277
|
+
, ISetup.DistributionSetupInfo memory distributionSetupInfo
|
278
|
+
) = abi.decode(distributionData, (string, ISetup.DistributionSetupInfo));
|
268
279
|
|
269
280
|
return (
|
270
281
|
productInfo,
|
271
282
|
abi.encode(
|
283
|
+
getName(),
|
272
284
|
ISetup.ProductSetupInfo(
|
273
285
|
_token,
|
274
286
|
_tokenHandler,
|
@@ -0,0 +1,23 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
|
5
|
+
|
6
|
+
|
7
|
+
contract AccessManagerUpgradeableInitializeable is AccessManagerUpgradeable {
|
8
|
+
|
9
|
+
bool private _initialized;
|
10
|
+
|
11
|
+
function __AccessManagerUpgradeableInitializeable_init(address initialAdmin) public {
|
12
|
+
require(!_initialized, "AccessManager: already initialized");
|
13
|
+
|
14
|
+
if (initialAdmin == address(0)) {
|
15
|
+
revert AccessManagerInvalidInitialAdmin(address(0));
|
16
|
+
}
|
17
|
+
|
18
|
+
// admin is active immediately and without any execution delay.
|
19
|
+
_grantRole(ADMIN_ROLE, initialAdmin, 0, 0);
|
20
|
+
_initialized = true;
|
21
|
+
}
|
22
|
+
|
23
|
+
}
|
@@ -0,0 +1,129 @@
|
|
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
|
+
function linkPolicy(NftId policyNftId) external restricted() {
|
43
|
+
NftId bundleNftId = _instanceReader.getPolicyInfo(policyNftId).bundleNftId;
|
44
|
+
// decision will likely depend on the decision what to check here and what in the service
|
45
|
+
NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
|
46
|
+
|
47
|
+
// ensure bundle is unlocked (in active set) and registered with this instance
|
48
|
+
if (!_isActive(poolNftId, bundleNftId)) {
|
49
|
+
revert ErrorBundleManagerErrorBundleLocked(bundleNftId, policyNftId);
|
50
|
+
}
|
51
|
+
|
52
|
+
LibNftIdSet.add(_activePolicies[bundleNftId], policyNftId);
|
53
|
+
emit LogBundleManagerPolicyLinked(bundleNftId, policyNftId);
|
54
|
+
}
|
55
|
+
|
56
|
+
|
57
|
+
/// @dev unlinks a policy from its bundle
|
58
|
+
// to unlink a policy it must closable, ie. meet one of the following criterias
|
59
|
+
// - the policy MUST be past its expiry period and it MUST NOT have any open claims
|
60
|
+
// - the policy's payoutAmount MUST be equal to its sumInsuredAmount and MUST NOT have any open claims
|
61
|
+
function unlinkPolicy(NftId policyNftId) external restricted() {
|
62
|
+
IPolicy.PolicyInfo memory policyInfo = _instanceReader.getPolicyInfo(policyNftId);
|
63
|
+
|
64
|
+
NftId bundleNftId = policyInfo.bundleNftId;
|
65
|
+
// decision will likely depend on the decision what to check here and what in the service
|
66
|
+
NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
|
67
|
+
|
68
|
+
// ensure bundle is registered with this instance
|
69
|
+
if (!_contains(poolNftId, bundleNftId)) {
|
70
|
+
revert ErrorBundleManagerBundleUnknown(bundleNftId);
|
71
|
+
}
|
72
|
+
|
73
|
+
LibNftIdSet.remove(_activePolicies[bundleNftId], policyNftId);
|
74
|
+
emit LogBundleManagerPolicyUnlinked(policyInfo.bundleNftId, policyNftId);
|
75
|
+
}
|
76
|
+
|
77
|
+
|
78
|
+
/// @dev add a new bundle to a riskpool registerd with this instance
|
79
|
+
// the corresponding pool is fetched via instance reader
|
80
|
+
function add(NftId bundleNftId) external restricted() {
|
81
|
+
NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
|
82
|
+
|
83
|
+
// ensure pool is registered with instance
|
84
|
+
if(poolNftId.eqz()) {
|
85
|
+
revert ErrorBundleManagerBundleNotRegistered(bundleNftId);
|
86
|
+
}
|
87
|
+
|
88
|
+
_add(poolNftId, bundleNftId);
|
89
|
+
emit LogBundleManagerBundleAdded(poolNftId, bundleNftId);
|
90
|
+
}
|
91
|
+
|
92
|
+
/// @dev unlocked (active) bundles are available to underwrite new policies
|
93
|
+
function unlock(NftId bundleNftId) external restricted() {
|
94
|
+
NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
|
95
|
+
_activate(poolNftId, bundleNftId);
|
96
|
+
emit LogBundleManagerBundleUnlocked(poolNftId, bundleNftId);
|
97
|
+
}
|
98
|
+
|
99
|
+
/// @dev locked (deactivated) bundles may not underwrite any new policies
|
100
|
+
function lock(NftId bundleNftId) external restricted() {
|
101
|
+
NftId poolNftId = _instanceReader.getBundleInfo(bundleNftId).poolNftId;
|
102
|
+
_deactivate(poolNftId, bundleNftId);
|
103
|
+
emit LogBundleManagerBundleLocked(poolNftId, bundleNftId);
|
104
|
+
}
|
105
|
+
|
106
|
+
function bundles(NftId poolNftId) external view returns(uint256) {
|
107
|
+
return _objects(poolNftId);
|
108
|
+
}
|
109
|
+
|
110
|
+
function getBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
|
111
|
+
return _getObject(poolNftId, idx);
|
112
|
+
}
|
113
|
+
|
114
|
+
function activeBundles(NftId poolNftId) external view returns(uint256) {
|
115
|
+
return _activeObjs(poolNftId);
|
116
|
+
}
|
117
|
+
|
118
|
+
function getActiveBundleNftId(NftId poolNftId, uint256 idx) external view returns(NftId bundleNftId) {
|
119
|
+
return _getActiveObject(poolNftId, idx);
|
120
|
+
}
|
121
|
+
|
122
|
+
function activePolicies(NftId bundleNftId) external view returns(uint256) {
|
123
|
+
return LibNftIdSet.size(_activePolicies[bundleNftId]);
|
124
|
+
}
|
125
|
+
|
126
|
+
function getActivePolicy(NftId bundleNftId, uint256 idx) external view returns(NftId policyNftId) {
|
127
|
+
return LibNftIdSet.getElementAt(_activePolicies[bundleNftId], idx);
|
128
|
+
}
|
129
|
+
}
|
@@ -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
|
+
}
|
@@ -2,13 +2,18 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
5
6
|
|
7
|
+
import {BundleManager} from "./BundleManager.sol";
|
6
8
|
import {InstanceReader} from "./InstanceReader.sol";
|
7
9
|
|
10
|
+
import {InstanceAccessManager} from "./InstanceAccessManager.sol";
|
8
11
|
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
9
12
|
import {IDistributionService} from "./service/IDistributionService.sol";
|
10
13
|
import {IPoolService} from "./service/IPoolService.sol";
|
11
14
|
import {IProductService} from "./service/IProductService.sol";
|
15
|
+
import {IPolicyService} from "./service/IPolicyService.sol";
|
16
|
+
import {IBundleService} from "./service/IBundleService.sol";
|
12
17
|
import {IBundle} from "./module/IBundle.sol";
|
13
18
|
import {ISetup} from "./module/ISetup.sol";
|
14
19
|
import {NftId} from "../types/NftId.sol";
|
@@ -19,12 +24,14 @@ import {IPolicy} from "./module/IPolicy.sol";
|
|
19
24
|
import {IKeyValueStore} from "./base/IKeyValueStore.sol";
|
20
25
|
|
21
26
|
|
22
|
-
interface IInstance is IERC165, IKeyValueStore {
|
27
|
+
interface IInstance is IERC165, IKeyValueStore, IAccessManaged {
|
23
28
|
|
24
29
|
function getComponentOwnerService() external view returns (IComponentOwnerService);
|
25
30
|
function getDistributionService() external view returns (IDistributionService);
|
26
31
|
function getProductService() external view returns (IProductService);
|
27
32
|
function getPoolService() external view returns (IPoolService);
|
33
|
+
function getPolicyService() external view returns (IPolicyService);
|
34
|
+
function getBundleService() external view returns (IBundleService);
|
28
35
|
|
29
36
|
function createDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup) external;
|
30
37
|
function updateDistributionSetup(NftId distributionNftId, ISetup.DistributionSetupInfo memory setup, StateId newState) external;
|
@@ -51,4 +58,5 @@ interface IInstance is IERC165, IKeyValueStore {
|
|
51
58
|
function updatePolicyState(NftId policyNftId, StateId newState) external;
|
52
59
|
|
53
60
|
function getInstanceReader() external view returns (InstanceReader);
|
61
|
+
function getBundleManager() external view returns (BundleManager);
|
54
62
|
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
|
6
|
+
import {BundleManager} from "./BundleManager.sol";
|
7
|
+
import {InstanceReader} from "./InstanceReader.sol";
|
8
|
+
|
9
|
+
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
10
|
+
import {IDistributionService} from "./service/IDistributionService.sol";
|
11
|
+
import {IPoolService} from "./service/IPoolService.sol";
|
12
|
+
import {IProductService} from "./service/IProductService.sol";
|
13
|
+
import {IBundle} from "./module/IBundle.sol";
|
14
|
+
import {ISetup} from "./module/ISetup.sol";
|
15
|
+
import {NftId} from "../types/NftId.sol";
|
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";
|
21
|
+
|
22
|
+
|
23
|
+
interface IInstanceBase is IERC165, IKeyValueStore {
|
24
|
+
|
25
|
+
|
26
|
+
}
|