@etherisc/gif-next 0.0.2-a6faeb6-912 → 0.0.2-a7954cc-097

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.
Files changed (219) hide show
  1. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +29 -0
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +33 -102
  5. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +29 -0
  7. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  8. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  11. package/artifacts/contracts/components/Pool.sol/Pool.json +33 -130
  12. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  13. package/artifacts/contracts/components/Product.sol/Product.json +33 -113
  14. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  15. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  34. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  35. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  36. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  37. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +39 -0
  40. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +88 -14
  43. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  44. package/artifacts/contracts/instance/Instance.sol/Instance.json +92 -600
  45. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  46. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +221 -114
  47. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  48. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +2 -2
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +129 -189
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -98
  55. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  56. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  57. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  58. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +24 -32
  59. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  66. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  72. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +945 -0
  74. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +432 -0
  76. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +39 -52
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +49 -72
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +13 -37
  82. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -0
  84. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +13 -13
  86. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
  88. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
  90. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +12 -241
  92. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -241
  94. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +993 -0
  96. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
  98. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +32 -354
  100. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +13 -57
  102. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +40 -410
  104. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +13 -81
  106. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  108. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +132 -133
  110. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -65
  112. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  113. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/Registry.sol/Registry.json +145 -227
  115. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  116. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  117. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  118. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +30 -128
  119. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  120. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -104
  121. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  122. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +546 -0
  123. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  124. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  125. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  126. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  127. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IService.sol/IService.json +13 -13
  131. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  134. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  136. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  138. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  140. package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
  141. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  142. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  143. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  145. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  147. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  149. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  151. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  154. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  155. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  156. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  161. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  163. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  169. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  175. package/contracts/components/BaseComponent.sol +35 -8
  176. package/contracts/components/Distribution.sol +1 -1
  177. package/contracts/components/IBaseComponent.sol +3 -0
  178. package/contracts/components/Pool.sol +10 -6
  179. package/contracts/components/Product.sol +9 -6
  180. package/contracts/instance/IInstance.sol +6 -0
  181. package/contracts/instance/IInstanceService.sol +9 -3
  182. package/contracts/instance/Instance.sol +24 -202
  183. package/contracts/instance/InstanceAccessManager.sol +92 -77
  184. package/contracts/instance/InstanceService.sol +154 -57
  185. package/contracts/instance/InstanceServiceManager.sol +5 -8
  186. package/contracts/instance/base/ComponentServiceBase.sol +32 -84
  187. package/contracts/instance/module/IAccess.sol +27 -17
  188. package/contracts/instance/service/BundleService.sol +260 -0
  189. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  190. package/contracts/instance/service/ComponentOwnerService.sol +4 -6
  191. package/contracts/instance/service/DistributionService.sol +45 -20
  192. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  193. package/contracts/instance/service/IBundleService.sol +45 -0
  194. package/contracts/instance/service/IPolicyService.sol +87 -0
  195. package/contracts/instance/service/IPoolService.sol +2 -33
  196. package/contracts/instance/service/IProductService.sol +2 -72
  197. package/contracts/instance/service/PolicyService.sol +503 -0
  198. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  199. package/contracts/instance/service/PoolService.sol +43 -206
  200. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  201. package/contracts/instance/service/ProductService.sol +56 -456
  202. package/contracts/registry/ChainNft.sol +1 -1
  203. package/contracts/registry/IRegistry.sol +26 -16
  204. package/contracts/registry/IRegistryService.sol +13 -5
  205. package/contracts/registry/Registry.sol +149 -201
  206. package/contracts/registry/RegistryAccessManager.sol +210 -0
  207. package/contracts/registry/RegistryService.sol +48 -83
  208. package/contracts/registry/RegistryServiceManager.sol +18 -36
  209. package/contracts/registry/ReleaseManager.sol +348 -0
  210. package/contracts/registry/TokenRegistry.sol +5 -6
  211. package/contracts/shared/IService.sol +2 -1
  212. package/contracts/shared/ProxyManager.sol +1 -1
  213. package/contracts/shared/Service.sol +10 -7
  214. package/contracts/test/TestService.sol +3 -2
  215. package/contracts/types/RoleId.sol +10 -10
  216. package/package.json +1 -1
  217. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  218. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  219. package/contracts/instance/IAccessManagerSimple.sol +0 -391
@@ -4,37 +4,21 @@ 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 {ObjectType, INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE} from "../../types/ObjectType.sol";
8
- import {NftId, NftIdLib} from "../../types/NftId.sol";
9
- import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
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";
10
11
 
11
- import {BaseComponent} from "../../components/BaseComponent.sol";
12
- import {Product} from "../../components/Product.sol";
13
- import {INftOwnable} from "../../shared/INftOwnable.sol";
14
12
  import {Service} from "../../shared/Service.sol";
15
13
  import {InstanceService} from "../InstanceService.sol";
16
- import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
14
+ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
17
15
 
18
16
  abstract contract ComponentServiceBase is Service {
19
17
 
18
+ error ErrorComponentServiceBaseComponentLocked(address componentAddress);
20
19
  error ExpectedRoleMissing(RoleId expected, address caller);
21
20
  error ComponentTypeInvalid(ObjectType componentType);
22
21
 
23
- mapping (ObjectType => RoleId) internal _objectTypeToExpectedRole;
24
-
25
- /// @dev modifier to check if caller has a role on the instance the component is registered in
26
- modifier onlyComponentOwnerRole(address componentAddress) {
27
- BaseComponent component = BaseComponent(componentAddress);
28
- ObjectType objectType = _getObjectType(component);
29
- RoleId expectedRole = _objectTypeToExpectedRole[objectType];
30
-
31
- address componentOwner = msg.sender;
32
- INftOwnable nftOwnable = INftOwnable(address(component.getInstance()));
33
- if(! getInstanceService().hasRole(componentOwner, expectedRole, nftOwnable.getNftId())) {
34
- revert ExpectedRoleMissing(expectedRole, componentOwner);
35
- }
36
- _;
37
- }
38
22
 
39
23
  /// @dev modifier to check if caller is a registered service
40
24
  modifier onlyService() {
@@ -43,72 +27,34 @@ abstract contract ComponentServiceBase is Service {
43
27
  _;
44
28
  }
45
29
 
46
- function _initializeService(
47
- address registry,
48
- address initialOwner
49
- )
50
- internal
51
- override
52
- {
53
- super._initializeService(registry, initialOwner);
54
- _objectTypeToExpectedRole[PRODUCT()] = PRODUCT_OWNER_ROLE();
55
- _objectTypeToExpectedRole[POOL()] = POOL_OWNER_ROLE();
56
- _objectTypeToExpectedRole[DISTRIBUTION()] = DISTRIBUTION_OWNER_ROLE();
57
- _objectTypeToExpectedRole[ORACLE()] = ORACLE_OWNER_ROLE();
30
+ // view functions
31
+
32
+ function getRegistryService() public view virtual returns (IRegistryService) {
33
+ address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
34
+ return IRegistryService(service);
58
35
  }
59
36
 
60
37
  function getInstanceService() public view returns (InstanceService) {
61
- return InstanceService(getRegistry().getServiceAddress("InstanceService", getMajorVersion()));
38
+ address service = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
39
+ return InstanceService(service);
62
40
  }
63
41
 
64
- function register(address componentAddress)
65
- external
66
- onlyComponentOwnerRole(componentAddress)
67
- returns (NftId componentNftId)
68
- {
69
- address componentOwner = msg.sender;
70
- BaseComponent component = BaseComponent(componentAddress);
71
- ObjectType objectType = _getObjectType(component);
72
- IRegistryService registryService = getRegistryService();
73
-
74
- IRegistry.ObjectInfo memory objInfo;
75
- bytes memory initialObjData;
76
-
77
- if (objectType == DISTRIBUTION()) {
78
- (objInfo, initialObjData) = registryService.registerDistribution(component, componentOwner);
79
- } else if (objectType == PRODUCT()) {
80
- (objInfo, initialObjData) = registryService.registerProduct(component, componentOwner);
81
- } else if (objectType == POOL()) {
82
- (objInfo, initialObjData) = registryService.registerPool(component, componentOwner);
83
- // TODO: implement this for oracle - currently missing in registry
84
- // } else if (objectType == ORACLE()) {
85
- // (objInfo, initialObjData) = registryService.registerOracle(component, componentOwner);
86
- } else {
87
- revert ComponentTypeInvalid(objectType);
88
- }
42
+ // internal view functions
89
43
 
90
- componentNftId = objInfo.nftId;
91
- {
92
- IInstance instance = _getInstance(objInfo);
93
- _finalizeComponentRegistration(componentNftId, initialObjData, instance);
94
- }
44
+ function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
45
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
46
+ return IInstance(instanceInfo.objectAddress);
95
47
  }
96
48
 
97
- function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal virtual;
98
-
99
- function _getObjectType(BaseComponent component) internal view returns (ObjectType) {
100
- (IRegistry.ObjectInfo memory compInitialInfo, ) = component.getInitialInfo();
101
- return compInitialInfo.objectType;
102
- }
103
-
104
- function _getInstance(IRegistry.ObjectInfo memory compObjInfo) internal view returns (IInstance) {
49
+ function _getInstanceNftId(IRegistry.ObjectInfo memory compObjInfo) internal view returns (NftId) {
105
50
  IRegistry registry = getRegistry();
106
51
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(compObjInfo.parentNftId);
107
- return IInstance(instanceInfo.objectAddress);
52
+ return instanceInfo.nftId;
108
53
  }
109
54
 
110
55
  function _getAndVerifyComponentInfoAndInstance(
111
- ObjectType objectType
56
+ //address component,
57
+ ObjectType expectedType
112
58
  )
113
59
  internal
114
60
  view
@@ -117,18 +63,20 @@ abstract contract ComponentServiceBase is Service {
117
63
  IInstance instance
118
64
  )
119
65
  {
120
- NftId componentNftId = _registry.getNftId(msg.sender);
121
- require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
66
+ IRegistry registry = getRegistry();
67
+ //TODO redundant check -> just check type
68
+ //NftId componentNftId = registry.getNftId(component);
69
+ //require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
122
70
 
123
- info = getRegistry().getObjectInfo(componentNftId);
124
- require(info.objectType == objectType, "OBJECT_TYPE_INVALID");
71
+ info = registry.getObjectInfo(msg.sender);
72
+ require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
125
73
 
126
- address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
74
+ address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
127
75
  instance = IInstance(instanceAddress);
128
- }
129
76
 
130
- function getRegistryService() public view virtual returns (IRegistryService) {
131
- address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
132
- return IRegistryService(service);
77
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
78
+ if (accessManager.isTargetLocked(info.objectAddress)) {
79
+ revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
80
+ }
133
81
  }
134
82
  }
@@ -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 ErrorTargetAddressZero();
21
- error ErrorTargetAlreadyExists(address target, ShortString name);
22
- error ErrorTargetDoesNotExist(address target);
23
- error ErrorTargetNameEmpty(address target);
24
- error ErrorTargetNameExists(address target, address existingTarget, ShortString name);
25
-
26
- error ErrorRoleIdInvalid(RoleId roleId);
27
- error ErrorRoleIdTooBig(RoleId roleId);
28
- error ErrorRoleIdTooSmall(RoleId roleId);
29
- error ErrorRoleIdAlreadyExists(RoleId roleId, ShortString name);
30
- error ErrorRoleIdNotActive(RoleId roleId);
31
- error ErrorRoleNameEmpty(RoleId roleId);
32
- error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
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
  }
@@ -0,0 +1,260 @@
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
+ /// @dev links policy to bundle
190
+ function linkPolicy(IInstance instance, NftId policyNftId)
191
+ internal
192
+ onlyService
193
+ {
194
+ InstanceReader instanceReader = instance.getInstanceReader();
195
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
196
+
197
+ // ensure policy has not yet been activated
198
+ if (policyInfo.activatedAt.gtz()) {
199
+ revert BundleManager.ErrorBundleManagerErrorPolicyAlreadyActivated(policyNftId);
200
+ }
201
+
202
+ BundleManager bundleManager = instance.getBundleManager();
203
+ bundleManager.linkPolicy(policyNftId);
204
+ }
205
+
206
+ /// @dev unlinks policy from bundle
207
+ function unlinkPolicy(IInstance instance, NftId policyNftId)
208
+ internal
209
+ onlyService
210
+ {
211
+ InstanceReader instanceReader = instance.getInstanceReader();
212
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
213
+
214
+ // ensure policy has no open claims
215
+ if (policyInfo.openClaimsCount > 0) {
216
+ revert BundleManager.ErrorBundleManagerPolicyWithOpenClaims(
217
+ policyNftId,
218
+ policyInfo.openClaimsCount);
219
+ }
220
+
221
+ // ensure policy is closeable
222
+ if (policyInfo.expiredAt < TimestampLib.blockTimestamp()
223
+ || policyInfo.payoutAmount < policyInfo.sumInsuredAmount)
224
+ {
225
+ revert BundleManager.ErrorBundleManagerPolicyNotCloseable(policyNftId);
226
+ }
227
+
228
+ BundleManager bundleManager = instance.getBundleManager();
229
+ bundleManager.unlinkPolicy(policyNftId);
230
+ }
231
+
232
+ function _processStakingByTreasury(
233
+ InstanceReader instanceReader,
234
+ NftId poolNftId,
235
+ NftId bundleNftId,
236
+ uint256 stakingAmount
237
+ )
238
+ internal
239
+ {
240
+ // process token transfer(s)
241
+ if(stakingAmount > 0) {
242
+ ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
243
+ TokenHandler tokenHandler = poolInfo.tokenHandler;
244
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
245
+ Fee memory stakingFee = poolInfo.stakingFee;
246
+
247
+ tokenHandler.transfer(
248
+ bundleOwner,
249
+ poolInfo.wallet,
250
+ stakingAmount
251
+ );
252
+
253
+
254
+ if (! FeeLib.feeIsZero(stakingFee)) {
255
+ (uint256 stakingFeeAmount, uint256 netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
256
+ // TODO: track staking fees in pool's state (issue #177)
257
+ }
258
+ }
259
+ }
260
+ }
@@ -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 getName() public pure override(IService, Service) returns(string memory name) {
72
- return NAME;
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("RegistryService", getMajorVersion());
91
+ address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
94
92
  return IRegistryService(service);
95
93
  }
96
94