@etherisc/gif-next 0.0.2-979c9aa-391 → 0.0.2-984cc08-642

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 (232) hide show
  1. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  2. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → Component.sol/Component.json} +36 -7
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +38 -119
  5. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  6. package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → IComponent.sol/IComponent.json} +36 -7
  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/IProductComponent.sol/IProductComponent.json +5 -5
  11. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  12. package/artifacts/contracts/components/Pool.sol/Pool.json +38 -147
  13. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  14. package/artifacts/contracts/components/Product.sol/Product.json +43 -135
  15. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  35. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  36. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
  38. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  40. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +261 -26
  41. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +171 -0
  43. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  44. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +42 -13
  45. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  46. package/artifacts/contracts/instance/Instance.sol/Instance.json +56 -82
  47. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  48. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +101 -111
  49. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  50. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +11 -11
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +41 -82
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  54. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +116 -183
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  56. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -90
  57. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  58. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
  59. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  60. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +111 -37
  61. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -13
  63. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  66. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +11 -0
  69. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  76. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +232 -61
  77. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  78. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +20 -24
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +140 -60
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +17 -21
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +64 -13
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -13
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +120 -13
  89. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +13 -13
  91. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +13 -13
  93. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +321 -86
  95. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +51 -23
  97. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +140 -60
  99. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +17 -21
  101. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +146 -66
  103. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +17 -13
  105. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  106. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  107. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +132 -133
  109. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  110. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +102 -68
  111. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  112. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/Registry.sol/Registry.json +145 -227
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  115. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  117. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +37 -143
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  119. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -104
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  121. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +530 -0
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  123. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  124. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  125. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  126. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IService.sol/IService.json +13 -13
  130. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  133. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  134. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  135. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  137. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  138. package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
  139. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  140. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  141. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  143. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  145. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  147. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
  149. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  152. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  153. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  154. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  155. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  159. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  161. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  167. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  173. package/contracts/components/{BaseComponent.sol → Component.sol} +69 -40
  174. package/contracts/components/Distribution.sol +5 -14
  175. package/contracts/components/{IBaseComponent.sol → IComponent.sol} +12 -7
  176. package/contracts/components/IProductComponent.sol +2 -2
  177. package/contracts/components/Pool.sol +7 -20
  178. package/contracts/components/Product.sol +21 -18
  179. package/contracts/instance/BundleManager.sol +7 -11
  180. package/contracts/instance/IInstance.sol +4 -4
  181. package/contracts/instance/IInstanceBase.sol +3 -2
  182. package/contracts/instance/IInstanceService.sol +4 -2
  183. package/contracts/instance/Instance.sol +11 -28
  184. package/contracts/instance/InstanceAccessManager.sol +15 -16
  185. package/contracts/instance/InstanceBase.sol +0 -3
  186. package/contracts/instance/InstanceReader.sol +3 -25
  187. package/contracts/instance/InstanceService.sol +115 -47
  188. package/contracts/instance/InstanceServiceManager.sol +5 -8
  189. package/contracts/instance/ObjectManager.sol +7 -24
  190. package/contracts/instance/base/ComponentService.sol +133 -0
  191. package/contracts/instance/base/IInstanceBase.sol +0 -2
  192. package/contracts/instance/module/IAccess.sol +1 -1
  193. package/contracts/instance/service/BundleService.sol +41 -8
  194. package/contracts/instance/service/BundleServiceManager.sol +5 -8
  195. package/contracts/instance/service/DistributionService.sol +36 -39
  196. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  197. package/contracts/instance/service/IBundleService.sol +5 -6
  198. package/contracts/instance/service/IPolicyService.sol +7 -0
  199. package/contracts/instance/service/PolicyService.sol +67 -37
  200. package/contracts/instance/service/PoolService.sol +49 -31
  201. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  202. package/contracts/instance/service/ProductService.sol +106 -38
  203. package/contracts/registry/ChainNft.sol +1 -1
  204. package/contracts/registry/IRegistry.sol +26 -16
  205. package/contracts/registry/IRegistryService.sol +17 -10
  206. package/contracts/registry/Registry.sol +149 -201
  207. package/contracts/registry/RegistryAccessManager.sol +210 -0
  208. package/contracts/registry/RegistryService.sol +55 -96
  209. package/contracts/registry/RegistryServiceManager.sol +18 -36
  210. package/contracts/registry/ReleaseManager.sol +342 -0
  211. package/contracts/registry/TokenRegistry.sol +5 -6
  212. package/contracts/shared/IRegisterable.sol +0 -2
  213. package/contracts/shared/IService.sol +2 -1
  214. package/contracts/shared/NftOwnable.sol +2 -0
  215. package/contracts/shared/ProxyManager.sol +1 -1
  216. package/contracts/shared/Service.sol +13 -8
  217. package/contracts/test/TestService.sol +3 -2
  218. package/contracts/types/RoleId.sol +4 -5
  219. package/package.json +1 -1
  220. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  221. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  222. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  223. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  224. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  225. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  226. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -466
  227. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  228. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  229. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  230. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  231. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  232. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -19,15 +19,9 @@ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
19
19
  import {BundleManager} from "./BundleManager.sol";
20
20
  import {NftId} from "../types/NftId.sol";
21
21
  import {NumberId} from "../types/NumberId.sol";
22
- import {ObjectType, BUNDLE, DISTRIBUTION, INSTANCE, POLICY, POOL, ROLE, PRODUCT, TARGET} from "../types/ObjectType.sol";
23
- import {RiskId, RiskIdLib} from "../types/RiskId.sol";
24
- import {RoleId, RoleIdLib} from "../types/RoleId.sol";
25
- import {StateId, ACTIVE} from "../types/StateId.sol";
26
- import {TimestampLib} from "../types/Timestamp.sol";
27
- import {ERC165} from "../shared/ERC165.sol";
28
- import {Registerable} from "../shared/Registerable.sol";
29
- import {ComponentOwnerService} from "./service/ComponentOwnerService.sol";
30
- import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
22
+ import {ObjectType, BUNDLE, DISTRIBUTION, INSTANCE, POLICY, POOL, ROLE, PRODUCT, TARGET, COMPONENT} from "../types/ObjectType.sol";
23
+ import {RiskId} from "../types/RiskId.sol";
24
+ import {StateId} from "../types/StateId.sol";
31
25
  import {IDistributionService} from "./service/IDistributionService.sol";
32
26
  import {IPoolService} from "./service/IPoolService.sol";
33
27
  import {IProductService} from "./service/IProductService.sol";
@@ -37,8 +31,8 @@ import {VersionPart} from "../types/Version.sol";
37
31
  import {InstanceBase} from "./InstanceBase.sol";
38
32
 
39
33
  contract Instance is
40
- AccessManagedUpgradeable,
41
34
  IInstance,
35
+ AccessManagedUpgradeable,
42
36
  // Initializable,
43
37
  InstanceBase
44
38
  {
@@ -51,7 +45,6 @@ contract Instance is
51
45
 
52
46
  bool private _initialized;
53
47
 
54
- InstanceAccessManager internal _accessManager;
55
48
  InstanceReader internal _instanceReader;
56
49
  BundleManager internal _bundleManager;
57
50
 
@@ -62,8 +55,6 @@ contract Instance is
62
55
  require(!_initialized, "Contract instance has already been initialized");
63
56
 
64
57
  __AccessManaged_init(accessManagerAddress);
65
-
66
- _accessManager = InstanceAccessManager(accessManagerAddress);
67
58
 
68
59
  _initializeRegisterable(registryAddress, registryNftId, INSTANCE(), false, initialOwner, "");
69
60
 
@@ -227,36 +218,28 @@ contract Instance is
227
218
  return policyNftId.toKey32(POLICY());
228
219
  }
229
220
 
230
- function getComponentOwnerService() external view returns (IComponentOwnerService) {
231
- return ComponentOwnerService(_registry.getServiceAddress("ComponentOwnerService", VersionPart.wrap(3)));
232
- }
233
-
234
221
  function getDistributionService() external view returns (IDistributionService) {
235
- return IDistributionService(_registry.getServiceAddress("DistributionService", VersionPart.wrap(3)));
222
+ return IDistributionService(_registry.getServiceAddress(DISTRIBUTION(), VersionPart.wrap(3)));
236
223
  }
237
224
 
238
225
  function getProductService() external view returns (IProductService) {
239
- return IProductService(_registry.getServiceAddress("ProductService", VersionPart.wrap(3)));
226
+ return IProductService(_registry.getServiceAddress(PRODUCT(), VersionPart.wrap(3)));
240
227
  }
241
228
 
242
229
  function getPoolService() external view returns (IPoolService) {
243
- return IPoolService(_registry.getServiceAddress("PoolService", VersionPart.wrap(3)));
230
+ return IPoolService(_registry.getServiceAddress(POOL(), VersionPart.wrap(3)));
244
231
  }
245
232
 
246
233
  function getPolicyService() external view returns (IPolicyService) {
247
- return IPolicyService(_registry.getServiceAddress("PolicyService", VersionPart.wrap(3)));
234
+ return IPolicyService(_registry.getServiceAddress(POLICY(), VersionPart.wrap(3)));
248
235
  }
249
236
 
250
237
  function getBundleService() external view returns (IBundleService) {
251
- return IBundleService(_registry.getServiceAddress("BundleService", VersionPart.wrap(3)));
252
- }
253
-
254
- function getInstanceAccessManager() external view returns (InstanceAccessManager) {
255
- return _accessManager;
238
+ return IBundleService(_registry.getServiceAddress(BUNDLE(), VersionPart.wrap(3)));
256
239
  }
257
240
 
258
241
  function setInstanceReader(InstanceReader instanceReader) external restricted() {
259
- require(instanceReader.getInstanceNftId() == getNftId(), "NFT ID of InstanceReader does not match");
242
+ require(instanceReader.getInstance() == Instance(this), "InstanceReader instance mismatch");
260
243
  _instanceReader = instanceReader;
261
244
  }
262
245
 
@@ -266,7 +249,7 @@ contract Instance is
266
249
 
267
250
  function setBundleManager(BundleManager bundleManager) external restricted() {
268
251
  require(address(_bundleManager) == address(0), "BundleManager is set");
269
- require(bundleManager.getInstanceNftId() == getNftId(), "NFT ID of BundleManager does not match");
252
+ require(bundleManager.getInstance() == Instance(this), "BundleManager instance mismatch");
270
253
  _bundleManager = bundleManager;
271
254
  }
272
255
 
@@ -6,7 +6,7 @@ import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStri
6
6
  import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
7
7
 
8
8
  import {AccessManagerUpgradeableInitializeable} from "../../contracts/instance/AccessManagerUpgradeableInitializeable.sol";
9
- import {RoleId, RoleIdLib, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE, INSTANCE_SERVICE_ROLE } from "../types/RoleId.sol";
9
+ import {RoleId, RoleIdLib } from "../types/RoleId.sol";
10
10
  import {TimestampLib} from "../types/Timestamp.sol";
11
11
  import {IAccess} from "./module/IAccess.sol";
12
12
 
@@ -46,21 +46,6 @@ contract InstanceAccessManager is
46
46
 
47
47
  _createRole(RoleIdLib.toRoleId(_accessManager.ADMIN_ROLE()), ADMIN_ROLE_NAME, false, false);
48
48
  _createRole(RoleIdLib.toRoleId(_accessManager.PUBLIC_ROLE()), PUBLIC_ROLE_NAME, false, false);
49
-
50
- createDefaultGifRoles();
51
- }
52
-
53
- function createDefaultGifRoles() public restricted() {
54
- _createRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole", false, true);
55
- _createRole(POOL_OWNER_ROLE(), "PoolOwnerRole", false, true);
56
- _createRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole", false, true);
57
-
58
- _createRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole", false, true);
59
- _createRole(POOL_SERVICE_ROLE(), "PoolServiceRole", false, true);
60
- _createRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole", false, true);
61
- _createRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole", false, true);
62
- _createRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole", false, true);
63
- _createRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole", false, true);
64
49
  }
65
50
 
66
51
  //--- Role ------------------------------------------------------//
@@ -251,6 +236,13 @@ contract InstanceAccessManager is
251
236
  _validateTargetParameters(target, name, isCustom);
252
237
  }
253
238
 
239
+ if (_target[target].createdAt.gtz()) {
240
+ revert IAccess.ErrorIAccessTargetAlreadyExists(target, _target[target].name);
241
+ }
242
+ if (_targetForName[ShortStrings.toShortString(name)] != address(0)) {
243
+ revert IAccess.ErrorIAccessTargetNameExists(target, _targetForName[ShortStrings.toShortString(name)], ShortStrings.toShortString(name));
244
+ }
245
+
254
246
  IAccess.TargetInfo memory info = IAccess.TargetInfo(
255
247
  ShortStrings.toShortString(name),
256
248
  isCustom,
@@ -291,9 +283,16 @@ contract InstanceAccessManager is
291
283
 
292
284
  function setTargetClosed(string memory targetName, bool closed) public restricted() {
293
285
  address target = _targetForName[ShortStrings.toShortString(targetName)];
286
+ if (target == address(0)) {
287
+ revert IAccess.ErrorIAccessTargetAddressZero();
288
+ }
294
289
  _accessManager.setTargetClosed(target, closed);
295
290
  }
296
291
 
292
+ function isTargetLocked(address target) public view returns (bool locked) {
293
+ return _accessManager.isTargetClosed(target);
294
+ }
295
+
297
296
  function canCall(
298
297
  address caller,
299
298
  address target,
@@ -22,8 +22,6 @@ import {RoleId, RoleIdLib} from "../types/RoleId.sol";
22
22
  import {StateId, ACTIVE} from "../types/StateId.sol";
23
23
  import {ERC165} from "../shared/ERC165.sol";
24
24
  import {Registerable} from "../shared/Registerable.sol";
25
- import {ComponentOwnerService} from "./service/ComponentOwnerService.sol";
26
- import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
27
25
  import {IDistributionService} from "./service/IDistributionService.sol";
28
26
  import {IPoolService} from "./service/IPoolService.sol";
29
27
  import {IProductService} from "./service/IProductService.sol";
@@ -33,7 +31,6 @@ import {IInstanceBase} from "./IInstanceBase.sol";
33
31
  contract InstanceBase is
34
32
  IInstanceBase,
35
33
  KeyValueStore,
36
- ERC165,
37
34
  Registerable
38
35
  {
39
36
 
@@ -31,39 +31,21 @@ contract InstanceReader {
31
31
  bool private _initialized;
32
32
 
33
33
  IRegistry internal _registry;
34
- NftId internal _instanceNftId;
35
34
  IInstance internal _instance;
36
35
  IKeyValueStore internal _store;
37
36
 
38
- constructor(
39
- address registry,
40
- NftId instanceNftId
41
- )
42
- {
43
- initialize(registry, instanceNftId);
44
- }
45
-
46
- function initialize(address registry, NftId instanceNftId) public {
37
+ function initialize(address registry, address instance) public {
47
38
  require(!_initialized, "ERROR:CRD-000:ALREADY_INITIALIZED");
48
39
 
49
40
  require(
50
41
  address(registry) != address(0),
51
42
  "ERROR:CRD-001:REGISTRY_ZERO");
52
43
 
53
- require(
54
- instanceNftId.gtz(),
55
- "ERROR:CRD-002:NFT_ID_ZERO");
56
44
 
57
45
  _registry = IRegistry(registry);
58
- _instanceNftId = instanceNftId;
59
- IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(_instanceNftId);
60
46
 
61
- require(
62
- instanceInfo.objectType == INSTANCE(),
63
- "ERROR:CRD-003:PARENT_NOT_INSTANCE");
64
-
65
- _instance = IInstance(instanceInfo.objectAddress);
66
- _store = IKeyValueStore(instanceInfo.objectAddress);
47
+ _instance = IInstance(instance);
48
+ _store = IKeyValueStore(instance);
67
49
 
68
50
  _initialized = true;
69
51
  }
@@ -301,10 +283,6 @@ contract InstanceReader {
301
283
  return _store;
302
284
  }
303
285
 
304
- function getInstanceNftId() external view returns (NftId nftId) {
305
- return _instanceNftId;
306
- }
307
-
308
286
  function toUFixed(uint256 value, int8 exp) public pure returns (UFixed) {
309
287
  return UFixedLib.toUFixed(value, exp);
310
288
  }
@@ -4,19 +4,20 @@ pragma solidity ^0.8.20;
4
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
5
 
6
6
  import {Instance} from "./Instance.sol";
7
+ import {IInstance} from "./IInstance.sol";
7
8
  import {InstanceAccessManager} from "./InstanceAccessManager.sol";
8
9
  import {IInstanceService} from "./IInstanceService.sol";
9
10
  import {InstanceReader} from "./InstanceReader.sol";
10
11
  import {BundleManager} from "./BundleManager.sol";
11
12
  import {IRegistry} from "../registry/IRegistry.sol";
12
- import {RegistryService} from "../registry/RegistryService.sol";
13
+ import {IRegistryService} from "../registry/IRegistryService.sol";
13
14
  import {ChainNft} from "../registry/ChainNft.sol";
14
15
  import {Service} from "../../contracts/shared/Service.sol";
15
16
  import {IService} from "../shared/IService.sol";
16
17
  import {NftId} from "../../contracts/types/NftId.sol";
17
18
  import {RoleId} from "../types/RoleId.sol";
18
- import {VersionLib} from "../types/Version.sol";
19
- import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
19
+ import {ADMIN_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
20
+ import {ObjectType, INSTANCE, BUNDLE, POLICY, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
20
21
 
21
22
  contract InstanceService is Service, IInstanceService {
22
23
 
@@ -27,7 +28,6 @@ contract InstanceService is Service, IInstanceService {
27
28
 
28
29
  // TODO update to real hash when instance is stable
29
30
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
30
- string public constant NAME = "InstanceService";
31
31
 
32
32
  modifier onlyInstanceOwner(NftId instanceNftId) {
33
33
  IRegistry registry = getRegistry();
@@ -39,6 +39,14 @@ contract InstanceService is Service, IInstanceService {
39
39
  _;
40
40
  }
41
41
 
42
+ modifier onlyRegisteredService() {
43
+ address caller = msg.sender;
44
+ if (! getRegistry().isRegisteredService(caller)) {
45
+ revert ErrorInstanceServiceRequestUnauhorized(caller);
46
+ }
47
+ _;
48
+ }
49
+
42
50
  function createInstanceClone()
43
51
  external
44
52
  returns (
@@ -53,8 +61,8 @@ contract InstanceService is Service, IInstanceService {
53
61
  IRegistry registry = getRegistry();
54
62
  address registryAddress = address(registry);
55
63
  NftId registryNftId = registry.getNftId(registryAddress);
56
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
57
- RegistryService registryService = RegistryService(registryServiceAddress);
64
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
65
+ IRegistryService registryService = IRegistryService(registryServiceAddress);
58
66
 
59
67
  // initially set the authority of the access managar to this (being the instance service).
60
68
  // This will allow the instance service to bootstrap the authorizations of the instance
@@ -64,15 +72,13 @@ contract InstanceService is Service, IInstanceService {
64
72
 
65
73
  clonedInstance = Instance(Clones.clone(_masterInstance));
66
74
  clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
67
- ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
68
- clonedInstanceNftId = info.nftId;
69
75
 
70
76
  clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
71
- clonedInstanceReader.initialize(registryAddress, clonedInstanceNftId);
77
+ clonedInstanceReader.initialize(registryAddress, address(clonedInstance));
72
78
  clonedInstance.setInstanceReader(clonedInstanceReader);
73
79
 
74
80
  clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
75
- clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, clonedInstanceNftId);
81
+ clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, address(clonedInstance));
76
82
  clonedInstance.setBundleManager(clonedBundleManager);
77
83
 
78
84
  // TODO amend setters with instance specific , policy manager ...
@@ -84,10 +90,16 @@ contract InstanceService is Service, IInstanceService {
84
90
  clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
85
91
  clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
86
92
 
93
+ ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance, instanceOwner);
94
+ clonedInstanceNftId = info.nftId;
95
+ clonedInstance.linkToRegisteredNftId();
96
+
87
97
  emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
88
98
  }
89
99
 
90
100
  function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
101
+ _createGifRoles(clonedAccessManager);
102
+ _createGifTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
91
103
  _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
92
104
  _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
93
105
  _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
@@ -96,36 +108,54 @@ contract InstanceService is Service, IInstanceService {
96
108
  _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
97
109
  }
98
110
 
111
+ function _createGifRoles(InstanceAccessManager clonedAccessManager) internal {
112
+ clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole");
113
+ clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole");
114
+ clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole");
115
+
116
+ clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
117
+ clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
118
+ clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
119
+ clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
120
+ clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
121
+ clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
122
+ }
123
+
124
+ function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
125
+ clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
126
+ clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
127
+ }
128
+
99
129
  function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
100
130
  // configure authorization for distribution service on instance
101
131
  IRegistry registry = getRegistry();
102
- address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
103
- clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), address(distributionServiceAddress));
132
+ address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
133
+ clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
104
134
  bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
105
135
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
106
136
  instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
107
137
  clonedAccessManager.setTargetFunctionRole(
108
- address(clonedInstance),
138
+ "Instance",
109
139
  instanceDistributionServiceSelectors,
110
- DISTRIBUTION_SERVICE_ROLE().toInt());
140
+ DISTRIBUTION_SERVICE_ROLE());
111
141
  }
112
142
 
113
143
  function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
114
144
  // configure authorization for pool service on instance
115
- address poolServiceAddress = _registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
145
+ address poolServiceAddress = _registry.getServiceAddress(POOL(), getMajorVersion());
116
146
  clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
117
147
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
118
148
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
119
149
  instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
120
150
  clonedAccessManager.setTargetFunctionRole(
121
- address(clonedInstance),
151
+ "Instance",
122
152
  instancePoolServiceSelectors,
123
- POOL_SERVICE_ROLE().toInt());
153
+ POOL_SERVICE_ROLE());
124
154
  }
125
155
 
126
156
  function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
127
157
  // configure authorization for product service on instance
128
- address productServiceAddress = _registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
158
+ address productServiceAddress = _registry.getServiceAddress(PRODUCT(), getMajorVersion());
129
159
  clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
130
160
  bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
131
161
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
@@ -134,36 +164,36 @@ contract InstanceService is Service, IInstanceService {
134
164
  instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
135
165
  instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
136
166
  clonedAccessManager.setTargetFunctionRole(
137
- address(clonedInstance),
167
+ "Instance",
138
168
  instanceProductServiceSelectors,
139
- PRODUCT_SERVICE_ROLE().toInt());
169
+ PRODUCT_SERVICE_ROLE());
140
170
  }
141
171
 
142
172
  function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
143
173
  // configure authorization for policy service on instance
144
- address policyServiceAddress = _registry.getServiceAddress("PolicyService", VersionLib.toVersion(3, 0, 0).toMajorPart());
174
+ address policyServiceAddress = _registry.getServiceAddress(POLICY(), getMajorVersion());
145
175
  clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
146
176
  bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
147
177
  instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
148
178
  instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
149
179
  instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
150
180
  clonedAccessManager.setTargetFunctionRole(
151
- address(clonedInstance),
181
+ "Instance",
152
182
  instancePolicyServiceSelectors,
153
- POLICY_SERVICE_ROLE().toInt());
183
+ POLICY_SERVICE_ROLE());
154
184
  }
155
185
 
156
186
  function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
157
187
  // configure authorization for bundle service on instance
158
- address bundleServiceAddress = _registry.getServiceAddress("BundleService", VersionLib.toVersion(3, 0, 0).toMajorPart());
188
+ address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(), getMajorVersion());
159
189
  clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
160
190
  bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
161
191
  instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
162
192
  instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
163
193
  clonedAccessManager.setTargetFunctionRole(
164
- address(clonedInstance),
194
+ "Instance",
165
195
  instanceBundleServiceSelectors,
166
- BUNDLE_SERVICE_ROLE().toInt());
196
+ BUNDLE_SERVICE_ROLE());
167
197
 
168
198
  // configure authorization for bundle service on bundle manager
169
199
  bytes4[] memory bundleManagerBundleServiceSelectors = new bytes4[](5);
@@ -173,24 +203,32 @@ contract InstanceService is Service, IInstanceService {
173
203
  bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
174
204
  bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
175
205
  clonedAccessManager.setTargetFunctionRole(
176
- address(clonedBundleManager),
206
+ "BundleManager",
177
207
  bundleManagerBundleServiceSelectors,
178
- BUNDLE_SERVICE_ROLE().toInt());
208
+ BUNDLE_SERVICE_ROLE());
179
209
  }
180
210
 
181
211
  function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
182
212
  // configure authorization for instance service on instance
183
- address instanceServiceAddress = _registry.getServiceAddress("InstanceService", VersionLib.toVersion(3, 0, 0).toMajorPart());
213
+ address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(), getMajorVersion());
184
214
  clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
185
215
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
186
216
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
187
217
  clonedAccessManager.setTargetFunctionRole(
188
- address(clonedInstance),
218
+ "Instance",
189
219
  instanceInstanceServiceSelectors,
190
- INSTANCE_SERVICE_ROLE().toInt());
220
+ INSTANCE_SERVICE_ROLE());
191
221
  }
192
222
 
193
- function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
223
+ function setMasterInstance(
224
+ address accessManagerAddress,
225
+ address instanceAddress,
226
+ address instanceReaderAddress,
227
+ address bundleManagerAddress)
228
+ external
229
+ onlyOwner
230
+ returns(NftId masterInstanceNftId)
231
+ {
194
232
  require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
195
233
  require(_masterInstance == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
196
234
  require(_masterInstanceBundleManager == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
@@ -200,18 +238,25 @@ contract InstanceService is Service, IInstanceService {
200
238
  require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
201
239
  require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
202
240
 
203
- Instance instance = Instance(instanceAddress);
241
+ IInstance instance = IInstance(instanceAddress);
204
242
  InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
205
243
  BundleManager bundleManager = BundleManager(bundleManagerAddress);
206
244
 
207
245
  require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
208
- require(instanceReader.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
209
- require(bundleManager.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
246
+ require(instanceReader.getInstance() == instance, "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
247
+ require(bundleManager.getInstance() == instance, "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
210
248
 
211
249
  _masterInstanceAccessManager = accessManagerAddress;
212
250
  _masterInstance = instanceAddress;
213
251
  _masterInstanceReader = instanceReaderAddress;
214
252
  _masterInstanceBundleManager = bundleManagerAddress;
253
+
254
+ IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getMajorVersion()));
255
+ IInstance masterInstance = IInstance(_masterInstance);
256
+ (IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(masterInstance, getOwner());
257
+ masterInstanceNftId = info.nftId;
258
+
259
+ masterInstance.linkToRegisteredNftId();
215
260
  }
216
261
 
217
262
  function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
@@ -220,11 +265,12 @@ contract InstanceService is Service, IInstanceService {
220
265
  require(instanceReaderAddress != _masterInstanceReader, "ERROR:CRD-014:INSTANCE_READER_MASTER_SAME_AS_NEW");
221
266
 
222
267
  InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
223
- require(instanceReader.getInstanceNftId() == Instance(_masterInstance).getNftId(), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
268
+ require(instanceReader.getInstance() == IInstance(_masterInstance), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
224
269
 
225
270
  _masterInstanceReader = instanceReaderAddress;
226
271
  }
227
272
 
273
+ // TODO access restriction
228
274
  function upgradeInstanceReader(NftId instanceNftId) external {
229
275
  IRegistry registry = getRegistry();
230
276
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
@@ -236,7 +282,7 @@ contract InstanceService is Service, IInstanceService {
236
282
  }
237
283
 
238
284
  InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
239
- upgradedInstanceReaderClone.initialize(address(registry), instanceNftId);
285
+ upgradedInstanceReaderClone.initialize(address(registry), address(instance));
240
286
  instance.setInstanceReader(upgradedInstanceReaderClone);
241
287
  }
242
288
 
@@ -257,15 +303,11 @@ contract InstanceService is Service, IInstanceService {
257
303
  }
258
304
 
259
305
  // From IService
260
- function getName() public pure override(IService, Service) returns(string memory) {
261
- return NAME;
306
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
307
+ return INSTANCE();
262
308
  }
263
309
 
264
310
  /// @dev top level initializer
265
- // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
266
- // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
267
- // 3) deploy registry -> pass registry service address as constructor argument
268
- // registry is getting instantiated and locked to registry service address forever
269
311
  function _initialize(
270
312
  address owner,
271
313
  bytes memory data
@@ -274,21 +316,47 @@ contract InstanceService is Service, IInstanceService {
274
316
  initializer
275
317
  virtual override
276
318
  {
277
- address initialOwner = address(0);
278
- address registryAddress = address(0);
319
+ address initialOwner;
320
+ address registryAddress;
279
321
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
280
322
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
281
323
  // owner is InstanceServiceManager deployer
282
324
  _initializeService(registryAddress, owner);
283
325
 
284
- _registerInterface(type(IService).interfaceId);
285
326
  _registerInterface(type(IInstanceService).interfaceId);
286
327
  }
287
328
 
288
329
  function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
289
330
  Instance instance = Instance(instanceAddress);
290
- InstanceAccessManager accessManager = instance.getInstanceAccessManager();
331
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
291
332
  return accessManager.hasRole(role, account);
292
333
  }
334
+
335
+ function createTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
336
+ IRegistry registry = getRegistry();
337
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
338
+ Instance instance = Instance(instanceInfo.objectAddress);
339
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
340
+ accessManager.createTarget(targetAddress, targetName);
341
+ }
342
+
343
+ function setTargetLocked(string memory targetName, bool locked) external {
344
+ address componentAddress = msg.sender;
345
+ IRegistry registry = getRegistry();
346
+ IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
347
+ if (componentInfo.nftId.eqz()) {
348
+ revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
349
+ }
350
+
351
+ // TODO validate component type
352
+
353
+
354
+ address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
355
+ IInstance instance = IInstance(instanceAddress);
356
+
357
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
358
+ accessManager.setTargetClosed(targetName, locked);
359
+ }
360
+
293
361
  }
294
362
 
@@ -7,7 +7,7 @@ import {ProxyManager} from "../shared/ProxyManager.sol";
7
7
  import {InstanceService} from "./InstanceService.sol";
8
8
  import {Registry} from "../registry/Registry.sol";
9
9
  import {RegistryService} from "../registry/RegistryService.sol";
10
- import {VersionLib} from "../types/Version.sol";
10
+ import {REGISTRY} from "../types/ObjectType.sol";
11
11
 
12
12
  contract InstanceServiceManager is ProxyManager {
13
13
 
@@ -28,10 +28,10 @@ contract InstanceServiceManager is ProxyManager {
28
28
 
29
29
  _instanceService = InstanceService(address(versionable));
30
30
 
31
- Registry registry = Registry(registryAddress);
32
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
33
- RegistryService registryService = RegistryService(registryServiceAddress);
34
- // TODO this must have a role or own nft to register service
31
+ // TODO `this` must have a role or own nft to register service
32
+ //Registry registry = Registry(registryAddress);
33
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _instanceService.getMajorVersion());
34
+ //RegistryService registryService = RegistryService(registryServiceAddress);
35
35
  //registryService.registerService(_instanceService);
36
36
  // RegistryService registryService = _instanceService.getRegistryService();
37
37
 
@@ -40,9 +40,6 @@ contract InstanceServiceManager is ProxyManager {
40
40
  //_linkToNftOwnable(
41
41
  // address(registryAddress),
42
42
  // address(_instanceService));
43
-
44
- // implies that after this constructor call only upgrade functionality is available
45
- _isDeployed = true;
46
43
  }
47
44
 
48
45
  //--- view functions ----------------------------------------------------//