@etherisc/gif-next 0.0.2-e4b632c-016 → 0.0.2-e545d2c-624
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 +67 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +168 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +156 -91
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +130 -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 +28 -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 +188 -120
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +164 -143
- 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} +74 -3
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1463 -93
- 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 +153 -660
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +243 -126
- 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 +177 -38
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +268 -60
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +52 -24
- 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 +60 -9
- 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 +118 -29
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +18 -26
- 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 -77
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -240
- 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 +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +420 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
- 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 +263 -63
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +187 -83
- 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 +233 -192
- 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 +31 -97
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -91
- 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 +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
- 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/ERC165.sol/ERC165.json +2 -2
- 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 +4 -4
- 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/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- 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 +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/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
- 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/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/BaseComponent.sol +87 -14
- package/contracts/components/Distribution.sol +17 -19
- package/contracts/components/IBaseComponent.sol +10 -0
- package/contracts/components/IDistributionComponent.sol +1 -0
- package/contracts/components/IPoolComponent.sol +5 -1
- package/contracts/components/Pool.sol +45 -32
- package/contracts/components/Product.sol +52 -48
- 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 +36 -7
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +13 -3
- package/contracts/instance/Instance.sol +56 -226
- package/contracts/instance/InstanceAccessManager.sol +93 -78
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceReader.sol +26 -1
- package/contracts/instance/InstanceService.sol +278 -71
- package/contracts/instance/InstanceServiceManager.sol +10 -12
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +50 -13
- package/contracts/instance/module/IAccess.sol +27 -17
- package/contracts/instance/module/IBundle.sol +1 -0
- package/contracts/instance/module/ISetup.sol +3 -0
- 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 +64 -14
- package/contracts/instance/service/DistributionServiceManager.sol +11 -13
- package/contracts/instance/service/IBundleService.sol +44 -0
- package/contracts/instance/service/IPolicyService.sol +94 -0
- package/contracts/instance/service/IPoolService.sol +6 -23
- package/contracts/instance/service/IProductService.sol +6 -73
- package/contracts/instance/service/PolicyService.sol +539 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +145 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +213 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +39 -6
- package/contracts/registry/IRegistryService.sol +36 -13
- package/contracts/registry/Registry.sol +172 -199
- package/contracts/registry/RegistryAccessManager.sol +210 -0
- package/contracts/registry/RegistryService.sol +78 -202
- package/contracts/registry/RegistryServiceManager.sol +20 -22
- package/contracts/registry/ReleaseManager.sol +342 -0
- package/contracts/registry/TokenRegistry.sol +110 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/IService.sol +2 -1
- package/contracts/shared/NftOwnable.sol +2 -4
- package/contracts/shared/ProxyManager.sol +1 -1
- package/contracts/shared/Registerable.sol +1 -0
- package/contracts/shared/Service.sol +11 -7
- package/contracts/test/TestService.sol +3 -2
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/RoleId.sol +14 -6
- package/contracts/types/Version.sol +4 -1
- 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 -122
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
@@ -4,16 +4,51 @@ pragma solidity ^0.8.19;
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
5
|
import {IRegistryService} from "../../registry/IRegistryService.sol";
|
6
6
|
import {IInstance} from "../../instance/IInstance.sol";
|
7
|
-
import {
|
8
|
-
import {
|
7
|
+
import {IAccess} from "../module/IAccess.sol";
|
8
|
+
import {ObjectType, INSTANCE, REGISTRY} from "../../types/ObjectType.sol";
|
9
|
+
import {NftId} from "../../types/NftId.sol";
|
10
|
+
import {RoleId} from "../../types/RoleId.sol";
|
9
11
|
|
10
12
|
import {Service} from "../../shared/Service.sol";
|
11
|
-
import {
|
13
|
+
import {InstanceService} from "../InstanceService.sol";
|
14
|
+
import {InstanceAccessManager} from "../InstanceAccessManager.sol";
|
12
15
|
|
13
16
|
abstract contract ComponentServiceBase is Service {
|
14
17
|
|
18
|
+
error ErrorComponentServiceBaseComponentLocked(address componentAddress);
|
19
|
+
error ExpectedRoleMissing(RoleId expected, address caller);
|
20
|
+
error ComponentTypeInvalid(ObjectType componentType);
|
21
|
+
|
22
|
+
|
23
|
+
/// @dev modifier to check if caller is a registered service
|
24
|
+
modifier onlyService() {
|
25
|
+
address caller = msg.sender;
|
26
|
+
require(getRegistry().isRegisteredService(caller), "ERROR_NOT_SERVICE");
|
27
|
+
_;
|
28
|
+
}
|
29
|
+
|
30
|
+
// view functions
|
31
|
+
|
32
|
+
function getRegistryService() public view virtual returns (IRegistryService) {
|
33
|
+
address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
|
34
|
+
return IRegistryService(service);
|
35
|
+
}
|
36
|
+
|
37
|
+
function getInstanceService() public view returns (InstanceService) {
|
38
|
+
address service = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
|
39
|
+
return InstanceService(service);
|
40
|
+
}
|
41
|
+
|
42
|
+
// internal view functions
|
43
|
+
|
44
|
+
function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
|
45
|
+
IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
|
46
|
+
return IInstance(instanceInfo.objectAddress);
|
47
|
+
}
|
48
|
+
|
15
49
|
function _getAndVerifyComponentInfoAndInstance(
|
16
|
-
|
50
|
+
//address component,
|
51
|
+
ObjectType expectedType
|
17
52
|
)
|
18
53
|
internal
|
19
54
|
view
|
@@ -22,18 +57,20 @@ abstract contract ComponentServiceBase is Service {
|
|
22
57
|
IInstance instance
|
23
58
|
)
|
24
59
|
{
|
25
|
-
|
26
|
-
|
60
|
+
IRegistry registry = getRegistry();
|
61
|
+
//TODO redundant check -> just check type
|
62
|
+
//NftId componentNftId = registry.getNftId(component);
|
63
|
+
//require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
|
27
64
|
|
28
|
-
info =
|
29
|
-
require(info.objectType ==
|
65
|
+
info = registry.getObjectInfo(msg.sender);
|
66
|
+
require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
|
30
67
|
|
31
|
-
address instanceAddress =
|
68
|
+
address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
|
32
69
|
instance = IInstance(instanceAddress);
|
33
|
-
}
|
34
70
|
|
35
|
-
|
36
|
-
|
37
|
-
|
71
|
+
InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
|
72
|
+
if (accessManager.isTargetLocked(info.objectAddress)) {
|
73
|
+
revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
|
74
|
+
}
|
38
75
|
}
|
39
76
|
}
|
@@ -5,34 +5,44 @@ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet
|
|
5
5
|
import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
|
6
6
|
|
7
7
|
import {RoleId} from "../../types/RoleId.sol";
|
8
|
+
import {Timestamp} from "../../types/Timestamp.sol";
|
8
9
|
|
9
10
|
interface IAccess {
|
11
|
+
|
10
12
|
struct RoleInfo {
|
11
13
|
ShortString name;
|
12
14
|
bool isCustom;
|
15
|
+
bool isLocked;
|
16
|
+
Timestamp createdAt;
|
17
|
+
Timestamp updatedAt;
|
13
18
|
}
|
14
19
|
|
15
20
|
struct TargetInfo {
|
16
21
|
ShortString name;
|
17
22
|
bool isCustom;
|
23
|
+
bool isLocked;
|
24
|
+
Timestamp createdAt;
|
25
|
+
Timestamp updatedAt;
|
18
26
|
}
|
19
27
|
|
20
|
-
error
|
21
|
-
error
|
22
|
-
error
|
23
|
-
error
|
24
|
-
error
|
25
|
-
|
26
|
-
error
|
27
|
-
error
|
28
|
-
error
|
29
|
-
error
|
30
|
-
error
|
31
|
-
error
|
32
|
-
error
|
33
|
-
error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
|
34
|
-
error ErrorGrantNonexstentRole(RoleId roleId);
|
35
|
-
error ErrorRevokeNonexstentRole(RoleId roleId);
|
36
|
-
error ErrorRenounceNonexstentRole(RoleId roleId);
|
28
|
+
error ErrorIAccessRoleIdInvalid(RoleId roleId);
|
29
|
+
error ErrorIAccessRoleIdTooBig(RoleId roleId);
|
30
|
+
error ErrorIAccessRoleIdTooSmall(RoleId roleId);
|
31
|
+
error ErrorIAccessRoleIdAlreadyExists(RoleId roleId, ShortString name);
|
32
|
+
error ErrorIAccessRoleIdNotActive(RoleId roleId);
|
33
|
+
error ErrorIAccessRoleNameEmpty(RoleId roleId);
|
34
|
+
error ErrorIAccessRoleNameNotUnique(RoleId roleId, ShortString name);
|
35
|
+
error ErrorIAccessRoleInvalidUpdate(RoleId roleId, bool isCustom);
|
36
|
+
error ErrorIAccessRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
|
37
|
+
error ErrorIAccessSetLockedForNonexstentRole(RoleId roleId);
|
38
|
+
error ErrorIAccessGrantNonexstentRole(RoleId roleId);
|
39
|
+
error ErrorIAccessRevokeNonexstentRole(RoleId roleId);
|
40
|
+
error ErrorIAccessRenounceNonexstentRole(RoleId roleId);
|
37
41
|
|
42
|
+
error ErrorIAccessTargetAddressZero();
|
43
|
+
error ErrorIAccessTargetAlreadyExists(address target, ShortString name);
|
44
|
+
error ErrorIAccessTargetNameEmpty(address target);
|
45
|
+
error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
|
46
|
+
error ErrorIAccessSetLockedForNonexstentTarget(address target);
|
47
|
+
error ErrorIAccessTargetLocked(address target);
|
38
48
|
}
|
@@ -13,6 +13,7 @@ interface IBundle {
|
|
13
13
|
uint256 capitalAmount; // net investment capital + net premiums - payouts
|
14
14
|
uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
|
15
15
|
uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
|
16
|
+
uint256 lifetime;
|
16
17
|
Timestamp expiredAt; // no new policies
|
17
18
|
Timestamp closedAt; // no open policies, locked amount = 0
|
18
19
|
}
|
@@ -20,6 +20,8 @@ interface ISetup {
|
|
20
20
|
Fee poolFee; // pool fee on net premium
|
21
21
|
Fee stakingFee; // pool fee on staked capital from investor
|
22
22
|
Fee performanceFee; // pool fee on profits from capital investors
|
23
|
+
bool isIntercepting; // intercepts nft transfers (for products)
|
24
|
+
address wallet;
|
23
25
|
}
|
24
26
|
|
25
27
|
struct DistributionSetupInfo {
|
@@ -38,6 +40,7 @@ interface ISetup {
|
|
38
40
|
Fee stakingFee; // pool fee on staked capital from investor
|
39
41
|
Fee performanceFee; // pool fee on profits from capital investors
|
40
42
|
bool isIntercepting; // intercepts nft transfers (for bundles)
|
43
|
+
bool isConfirmingApplication; // confirms applications before they are underwritten
|
41
44
|
address wallet;
|
42
45
|
}
|
43
46
|
}
|
@@ -0,0 +1,294 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Pool} from "../../components/Pool.sol";
|
5
|
+
import {IRegistry} from "../../registry/IRegistry.sol";
|
6
|
+
import {IInstance} from "../../instance/IInstance.sol";
|
7
|
+
import {IBundle} from "../../instance/module/IBundle.sol";
|
8
|
+
import {TokenHandler} from "../../instance/module/ITreasury.sol";
|
9
|
+
import {ISetup} from "../module/ISetup.sol";
|
10
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
11
|
+
|
12
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
13
|
+
import {Versionable} from "../../shared/Versionable.sol";
|
14
|
+
import {INftOwnable} from "../../shared/INftOwnable.sol";
|
15
|
+
|
16
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
17
|
+
import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
|
18
|
+
import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
|
19
|
+
import {Fee, FeeLib} from "../../types/Fee.sol";
|
20
|
+
import {Version, VersionLib} from "../../types/Version.sol";
|
21
|
+
import {KEEP_STATE, StateId} from "../../types/StateId.sol";
|
22
|
+
import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
23
|
+
|
24
|
+
import {IService} from "../../shared/IService.sol";
|
25
|
+
import {Service} from "../../shared/Service.sol";
|
26
|
+
import {BundleManager} from "../BundleManager.sol";
|
27
|
+
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
28
|
+
import {IBundleService} from "./IBundleService.sol";
|
29
|
+
import {IRegistryService} from "../../registry/IRegistryService.sol";
|
30
|
+
import {InstanceService} from "../InstanceService.sol";
|
31
|
+
import {InstanceReader} from "../InstanceReader.sol";
|
32
|
+
import {IBaseComponent} from "../../components/IBaseComponent.sol";
|
33
|
+
|
34
|
+
string constant BUNDLE_SERVICE_NAME = "BundleService";
|
35
|
+
|
36
|
+
contract BundleService is
|
37
|
+
ComponentServiceBase,
|
38
|
+
IBundleService
|
39
|
+
{
|
40
|
+
using NftIdLib for NftId;
|
41
|
+
|
42
|
+
string public constant NAME = "BundleService";
|
43
|
+
|
44
|
+
address internal _registryAddress;
|
45
|
+
|
46
|
+
function _initialize(
|
47
|
+
address owner,
|
48
|
+
bytes memory data
|
49
|
+
)
|
50
|
+
internal
|
51
|
+
initializer
|
52
|
+
virtual override
|
53
|
+
{
|
54
|
+
address registryAddress;
|
55
|
+
address initialOwner;
|
56
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
57
|
+
// TODO while PoolService is not deployed in PoolServiceManager constructor
|
58
|
+
// owner is PoolServiceManager deployer
|
59
|
+
_initializeService(registryAddress, owner);
|
60
|
+
|
61
|
+
_registerInterface(type(IBundleService).interfaceId);
|
62
|
+
}
|
63
|
+
|
64
|
+
function getDomain() public pure override(Service, IService) returns(ObjectType) {
|
65
|
+
return BUNDLE();
|
66
|
+
}
|
67
|
+
|
68
|
+
function createBundle(
|
69
|
+
address owner,
|
70
|
+
Fee memory fee,
|
71
|
+
uint256 stakingAmount,
|
72
|
+
uint256 lifetime,
|
73
|
+
bytes calldata filter
|
74
|
+
)
|
75
|
+
external
|
76
|
+
override
|
77
|
+
returns(NftId bundleNftId)
|
78
|
+
{
|
79
|
+
(IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
80
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
81
|
+
NftId poolNftId = info.nftId;
|
82
|
+
|
83
|
+
IBundle.BundleInfo memory bundleInfo = IBundle.BundleInfo(
|
84
|
+
poolNftId,
|
85
|
+
fee,
|
86
|
+
filter,
|
87
|
+
stakingAmount,
|
88
|
+
0,
|
89
|
+
stakingAmount,
|
90
|
+
lifetime,
|
91
|
+
zeroTimestamp(),
|
92
|
+
zeroTimestamp()
|
93
|
+
);
|
94
|
+
|
95
|
+
// register bundle with registry
|
96
|
+
bundleNftId = getRegistryService().registerBundle(
|
97
|
+
IRegistry.ObjectInfo(
|
98
|
+
zeroNftId(),
|
99
|
+
poolNftId,
|
100
|
+
BUNDLE(),
|
101
|
+
false, // intercepting property for bundles is defined on pool
|
102
|
+
address(0),
|
103
|
+
owner,
|
104
|
+
abi.encode(bundleInfo)
|
105
|
+
)
|
106
|
+
);
|
107
|
+
|
108
|
+
// create bundle info in instance
|
109
|
+
instance.createBundle(bundleNftId, bundleInfo);
|
110
|
+
|
111
|
+
BundleManager bundleManager = instance.getBundleManager();
|
112
|
+
bundleManager.add(bundleNftId);
|
113
|
+
|
114
|
+
_processStakingByTreasury(
|
115
|
+
instanceReader,
|
116
|
+
poolNftId,
|
117
|
+
bundleNftId,
|
118
|
+
stakingAmount);
|
119
|
+
|
120
|
+
// TODO add logging
|
121
|
+
}
|
122
|
+
|
123
|
+
function setBundleFee(
|
124
|
+
NftId bundleNftId,
|
125
|
+
Fee memory fee
|
126
|
+
)
|
127
|
+
external
|
128
|
+
override
|
129
|
+
{
|
130
|
+
(IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
131
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
132
|
+
NftId poolNftId = info.nftId;
|
133
|
+
|
134
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
135
|
+
require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
|
136
|
+
require(poolNftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
|
137
|
+
|
138
|
+
bundleInfo.fee = fee;
|
139
|
+
|
140
|
+
instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
141
|
+
}
|
142
|
+
|
143
|
+
function updateBundle(NftId instanceNftId, NftId bundleNftId, IBundle.BundleInfo memory bundleInfo, StateId state)
|
144
|
+
external
|
145
|
+
onlyService
|
146
|
+
{
|
147
|
+
IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
|
148
|
+
IInstance instance = IInstance(instanceInfo.objectAddress);
|
149
|
+
instance.updateBundle(bundleNftId, bundleInfo, state);
|
150
|
+
}
|
151
|
+
|
152
|
+
function lockBundle(NftId bundleNftId)
|
153
|
+
external
|
154
|
+
{
|
155
|
+
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
156
|
+
BundleManager bundleManager = instance.getBundleManager();
|
157
|
+
bundleManager.lock(bundleNftId);
|
158
|
+
}
|
159
|
+
|
160
|
+
function unlockBundle(NftId bundleNftId)
|
161
|
+
external
|
162
|
+
{
|
163
|
+
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
164
|
+
BundleManager bundleManager = instance.getBundleManager();
|
165
|
+
bundleManager.unlock(bundleNftId);
|
166
|
+
}
|
167
|
+
|
168
|
+
function underwritePolicy(IInstance instance,
|
169
|
+
NftId policyNftId,
|
170
|
+
NftId bundleNftId,
|
171
|
+
uint256 collateralAmount,
|
172
|
+
uint256 netPremiumAmount
|
173
|
+
)
|
174
|
+
external
|
175
|
+
onlyService
|
176
|
+
{
|
177
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
178
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
179
|
+
|
180
|
+
// lock collateral
|
181
|
+
bundleInfo.lockedAmount += collateralAmount;
|
182
|
+
bundleInfo.balanceAmount += netPremiumAmount;
|
183
|
+
|
184
|
+
instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
185
|
+
|
186
|
+
linkPolicy(instance, policyNftId);
|
187
|
+
}
|
188
|
+
|
189
|
+
function increaseBalance(IInstance instance,
|
190
|
+
NftId bundleNftId,
|
191
|
+
uint256 amount
|
192
|
+
)
|
193
|
+
external
|
194
|
+
onlyService
|
195
|
+
{
|
196
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
197
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
198
|
+
|
199
|
+
bundleInfo.balanceAmount += amount;
|
200
|
+
|
201
|
+
instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
202
|
+
}
|
203
|
+
|
204
|
+
function closePolicy(IInstance instance,
|
205
|
+
NftId policyNftId,
|
206
|
+
NftId bundleNftId,
|
207
|
+
uint256 collateralAmount
|
208
|
+
)
|
209
|
+
external
|
210
|
+
onlyService
|
211
|
+
{
|
212
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
213
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
214
|
+
|
215
|
+
// lock collateral
|
216
|
+
bundleInfo.lockedAmount -= collateralAmount;
|
217
|
+
|
218
|
+
instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
219
|
+
|
220
|
+
unlinkPolicy(instance, policyNftId);
|
221
|
+
}
|
222
|
+
|
223
|
+
/// @dev links policy to bundle
|
224
|
+
function linkPolicy(IInstance instance, NftId policyNftId)
|
225
|
+
internal
|
226
|
+
onlyService
|
227
|
+
{
|
228
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
229
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
230
|
+
|
231
|
+
// ensure policy has not yet been activated
|
232
|
+
if (policyInfo.activatedAt.gtz()) {
|
233
|
+
revert BundleManager.ErrorBundleManagerErrorPolicyAlreadyActivated(policyNftId);
|
234
|
+
}
|
235
|
+
|
236
|
+
BundleManager bundleManager = instance.getBundleManager();
|
237
|
+
bundleManager.linkPolicy(policyNftId);
|
238
|
+
}
|
239
|
+
|
240
|
+
/// @dev unlinks policy from bundle
|
241
|
+
function unlinkPolicy(IInstance instance, NftId policyNftId)
|
242
|
+
internal
|
243
|
+
onlyService
|
244
|
+
{
|
245
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
246
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
247
|
+
|
248
|
+
// ensure policy has no open claims
|
249
|
+
if (policyInfo.openClaimsCount > 0) {
|
250
|
+
revert BundleManager.ErrorBundleManagerPolicyWithOpenClaims(
|
251
|
+
policyNftId,
|
252
|
+
policyInfo.openClaimsCount);
|
253
|
+
}
|
254
|
+
|
255
|
+
// ensure policy is closeable
|
256
|
+
if ( TimestampLib.blockTimestamp() < policyInfo.expiredAt
|
257
|
+
&& policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
|
258
|
+
{
|
259
|
+
revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
|
260
|
+
}
|
261
|
+
|
262
|
+
BundleManager bundleManager = instance.getBundleManager();
|
263
|
+
bundleManager.unlinkPolicy(policyNftId);
|
264
|
+
}
|
265
|
+
|
266
|
+
function _processStakingByTreasury(
|
267
|
+
InstanceReader instanceReader,
|
268
|
+
NftId poolNftId,
|
269
|
+
NftId bundleNftId,
|
270
|
+
uint256 stakingAmount
|
271
|
+
)
|
272
|
+
internal
|
273
|
+
{
|
274
|
+
// process token transfer(s)
|
275
|
+
if(stakingAmount > 0) {
|
276
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
277
|
+
TokenHandler tokenHandler = poolInfo.tokenHandler;
|
278
|
+
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
279
|
+
Fee memory stakingFee = poolInfo.stakingFee;
|
280
|
+
|
281
|
+
tokenHandler.transfer(
|
282
|
+
bundleOwner,
|
283
|
+
poolInfo.wallet,
|
284
|
+
stakingAmount
|
285
|
+
);
|
286
|
+
|
287
|
+
|
288
|
+
if (! FeeLib.feeIsZero(stakingFee)) {
|
289
|
+
(uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
|
290
|
+
// TODO: track staking fees in pool's state (issue #177)
|
291
|
+
}
|
292
|
+
}
|
293
|
+
}
|
294
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
5
|
+
import {ProxyManager} from "../../shared/ProxyManager.sol";
|
6
|
+
import {BundleService} from "./BundleService.sol";
|
7
|
+
import {Registry} from "../../registry/Registry.sol";
|
8
|
+
import {RegistryService} from "../../registry/RegistryService.sol";
|
9
|
+
import {ObjectType, REGISTRY} from "../../types/ObjectType.sol";
|
10
|
+
|
11
|
+
contract BundleServiceManager is ProxyManager {
|
12
|
+
|
13
|
+
BundleService private _bundleService;
|
14
|
+
|
15
|
+
/// @dev initializes proxy manager with pool service implementation
|
16
|
+
constructor(
|
17
|
+
address registryAddress
|
18
|
+
)
|
19
|
+
ProxyManager()
|
20
|
+
{
|
21
|
+
BundleService bundleSrv = new BundleService();
|
22
|
+
bytes memory data = abi.encode(registryAddress, address(this));
|
23
|
+
IVersionable versionable = deploy(
|
24
|
+
address(bundleSrv),
|
25
|
+
data);
|
26
|
+
|
27
|
+
_bundleService = BundleService(address(versionable));
|
28
|
+
|
29
|
+
// TODO `this` must have a role or own nft to register service
|
30
|
+
//Registry registry = Registry(registryAddress);
|
31
|
+
//address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _bundleService.getMajorVersion());
|
32
|
+
//RegistryService registryService = RegistryService(registryServiceAddress);
|
33
|
+
//registryService.registerService(_poolService);
|
34
|
+
|
35
|
+
// TODO no nft to link yet
|
36
|
+
// link ownership of instance service manager ot nft owner of instance service
|
37
|
+
//_linkToNftOwnable(
|
38
|
+
// address(registryAddress),
|
39
|
+
// address(_poolService));
|
40
|
+
}
|
41
|
+
|
42
|
+
//--- view functions ----------------------------------------------------//
|
43
|
+
function getBundleService()
|
44
|
+
external
|
45
|
+
view
|
46
|
+
returns (BundleService)
|
47
|
+
{
|
48
|
+
return _bundleService;
|
49
|
+
}
|
50
|
+
|
51
|
+
}
|
@@ -16,7 +16,7 @@ import {IVersionable} from "../../shared/IVersionable.sol";
|
|
16
16
|
import {Versionable} from "../../shared/Versionable.sol";
|
17
17
|
|
18
18
|
import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
|
19
|
-
import {ObjectType, TOKEN, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
|
19
|
+
import {ObjectType, REGISTRY, TOKEN, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
|
20
20
|
import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
|
21
21
|
import {Key32} from "../../types/Key32.sol";
|
22
22
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
@@ -50,8 +50,6 @@ contract ComponentOwnerService is
|
|
50
50
|
|
51
51
|
error CollateralizationLevelIsZero();
|
52
52
|
|
53
|
-
string public constant NAME = "ComponentOwnerService";
|
54
|
-
|
55
53
|
modifier onlyRegisteredComponent(IBaseComponent component) {
|
56
54
|
NftId nftId = getRegistry().getNftId(address(component));
|
57
55
|
require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
|
@@ -68,8 +66,8 @@ contract ComponentOwnerService is
|
|
68
66
|
_registerInterface(type(IComponentOwnerService).interfaceId);
|
69
67
|
}
|
70
68
|
|
71
|
-
function
|
72
|
-
return
|
69
|
+
function getDomain() public pure override(Service, IService) returns(ObjectType) {
|
70
|
+
return COMPONENT();
|
73
71
|
}
|
74
72
|
|
75
73
|
function getRoleForType(
|
@@ -90,7 +88,7 @@ contract ComponentOwnerService is
|
|
90
88
|
}
|
91
89
|
|
92
90
|
function getRegistryService() public view virtual returns (IRegistryService) {
|
93
|
-
address service = getRegistry().getServiceAddress(
|
91
|
+
address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
|
94
92
|
return IRegistryService(service);
|
95
93
|
}
|
96
94
|
|
@@ -3,14 +3,15 @@ pragma solidity ^0.8.19;
|
|
3
3
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
5
|
import {IInstance} from "../../instance/IInstance.sol";
|
6
|
+
import {InstanceAccessManager} from "../InstanceAccessManager.sol";
|
6
7
|
import {InstanceReader} from "../../instance/InstanceReader.sol";
|
7
8
|
import {ISetup} from "../../instance/module/ISetup.sol";
|
8
|
-
import {ITreasury} from "../../instance/module/ITreasury.sol";
|
9
9
|
|
10
|
-
import {NftId} from "../../types/NftId.sol";
|
10
|
+
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
11
11
|
import {Fee} from "../../types/Fee.sol";
|
12
|
+
import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
|
12
13
|
import {KEEP_STATE} from "../../types/StateId.sol";
|
13
|
-
import {DISTRIBUTION} from "../../types/ObjectType.sol";
|
14
|
+
import {ObjectType, DISTRIBUTION} from "../../types/ObjectType.sol";
|
14
15
|
import {Version, VersionLib} from "../../types/Version.sol";
|
15
16
|
|
16
17
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
@@ -19,37 +20,86 @@ import {Versionable} from "../../shared/Versionable.sol";
|
|
19
20
|
import {IService} from "../../shared/IService.sol";
|
20
21
|
import {Service} from "../../shared/Service.sol";
|
21
22
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
23
|
+
import {InstanceService} from "../InstanceService.sol";
|
22
24
|
import {IDistributionService} from "./IDistributionService.sol";
|
25
|
+
import {IBaseComponent} from "../../components/IBaseComponent.sol";
|
23
26
|
|
24
|
-
string constant DISTRIBUTION_SERVICE_NAME = "DistributionService";
|
25
27
|
|
26
28
|
contract DistributionService is
|
27
29
|
ComponentServiceBase,
|
28
30
|
IDistributionService
|
29
31
|
{
|
30
|
-
|
32
|
+
using NftIdLib for NftId;
|
33
|
+
|
31
34
|
address internal _registryAddress;
|
32
35
|
|
33
|
-
function
|
36
|
+
function _initialize(
|
34
37
|
address owner,
|
35
38
|
bytes memory data
|
36
39
|
)
|
37
40
|
internal
|
38
41
|
initializer
|
39
|
-
virtual
|
42
|
+
virtual override
|
40
43
|
{
|
41
|
-
address initialOwner
|
42
|
-
|
43
|
-
|
44
|
-
//
|
44
|
+
address initialOwner;
|
45
|
+
address registryAddress;
|
46
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
47
|
+
// TODO while DistributionService is not deployed in DistributionServiceManager constructor
|
48
|
+
// owner is DistributionServiceManager deployer
|
49
|
+
_initializeService(registryAddress, owner);
|
45
50
|
|
46
|
-
_initializeService(_registryAddress, initialOwner);
|
47
51
|
_registerInterface(type(IDistributionService).interfaceId);
|
48
52
|
}
|
49
53
|
|
54
|
+
function getDomain() public pure override(Service, IService) returns(ObjectType) {
|
55
|
+
return DISTRIBUTION();
|
56
|
+
}
|
57
|
+
|
58
|
+
function register(address distributionAddress)
|
59
|
+
external
|
60
|
+
returns(NftId distributionNftId)
|
61
|
+
{
|
62
|
+
address distributionOwner = msg.sender;
|
63
|
+
IBaseComponent distribution = IBaseComponent(distributionAddress);
|
64
|
+
|
65
|
+
IRegistry.ObjectInfo memory info;
|
66
|
+
bytes memory data;
|
67
|
+
(info, data) = getRegistryService().registerDistribution(distribution, distributionOwner);
|
68
|
+
|
69
|
+
NftId instanceNftId = info.parentNftId;
|
70
|
+
IInstance instance = _getInstance(instanceNftId);
|
71
|
+
InstanceService instanceService = getInstanceService();
|
72
|
+
|
73
|
+
bool hasRole = instanceService.hasRole(
|
74
|
+
distributionOwner,
|
75
|
+
DISTRIBUTION_OWNER_ROLE(),
|
76
|
+
address(instance));
|
77
|
+
|
78
|
+
if(!hasRole) {
|
79
|
+
revert ExpectedRoleMissing(DISTRIBUTION_OWNER_ROLE(), distributionOwner);
|
80
|
+
}
|
81
|
+
|
82
|
+
distributionNftId = info.nftId;
|
83
|
+
string memory distributionName;
|
84
|
+
ISetup.DistributionSetupInfo memory initialSetup;
|
85
|
+
(distributionName, initialSetup) = _decodeAndVerifyDistributionData(data);
|
86
|
+
instance.createDistributionSetup(distributionNftId, initialSetup);
|
87
|
+
|
88
|
+
instanceService.createTarget(instanceNftId, distributionAddress, distributionName);
|
89
|
+
|
90
|
+
distribution.linkToRegisteredNftId();
|
91
|
+
}
|
92
|
+
|
93
|
+
function _decodeAndVerifyDistributionData(bytes memory data)
|
94
|
+
internal
|
95
|
+
returns(string memory name, ISetup.DistributionSetupInfo memory setup)
|
96
|
+
{
|
97
|
+
(name, setup) = abi.decode(
|
98
|
+
data,
|
99
|
+
(string, ISetup.DistributionSetupInfo)
|
100
|
+
);
|
50
101
|
|
51
|
-
|
52
|
-
return DISTRIBUTION_SERVICE_NAME;
|
102
|
+
// TODO add checks if applicable
|
53
103
|
}
|
54
104
|
|
55
105
|
function setFees(
|