@etherisc/gif-next 0.0.2-4e4966e-474 → 0.0.2-4e6a781-730

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 (245) hide show
  1. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  2. package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → Component.sol/Component.json} +300 -12
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +199 -94
  5. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  6. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +86 -84
  7. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +496 -0
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +522 -28
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +596 -5
  13. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  14. package/artifacts/contracts/components/Pool.sol/Pool.json +190 -159
  15. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  16. package/artifacts/contracts/components/Product.sol/Product.json +204 -110
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  37. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  38. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
  39. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  40. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +269 -13
  42. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +108 -18
  44. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  45. package/artifacts/contracts/instance/Instance.sol/Instance.json +95 -610
  46. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +104 -194
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +41 -82
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +217 -200
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +41 -92
  54. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
  56. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +124 -42
  58. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +62 -19
  64. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +245 -66
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +35 -26
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +153 -65
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +32 -23
  78. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +64 -18
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -18
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +120 -18
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +13 -18
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +13 -18
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +334 -91
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +66 -25
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +153 -65
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +32 -23
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +159 -71
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +32 -15
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +212 -133
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +127 -93
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.json +224 -234
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +68 -161
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -104
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  117. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +13 -29
  119. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  120. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  121. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -5
  124. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IService.sol/IService.json +13 -18
  126. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +19 -6
  129. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -6
  131. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -11
  133. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Service.sol/Service.json +26 -18
  135. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  136. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  139. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  140. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +19 -11
  141. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  143. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestService.sol/TestService.json +44 -36
  145. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  148. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  149. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  150. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  151. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  153. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  155. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  157. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  163. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  169. package/contracts/components/Component.sol +216 -0
  170. package/contracts/components/Distribution.sol +38 -51
  171. package/contracts/components/IComponent.sol +43 -0
  172. package/contracts/components/IDistributionComponent.sol +5 -2
  173. package/contracts/components/IPoolComponent.sol +6 -12
  174. package/contracts/components/IProductComponent.sol +7 -3
  175. package/contracts/components/Pool.sol +45 -89
  176. package/contracts/components/Product.sol +58 -85
  177. package/contracts/instance/BundleManager.sol +7 -11
  178. package/contracts/instance/IInstance.sol +21 -9
  179. package/contracts/instance/IInstanceService.sol +9 -2
  180. package/contracts/instance/Instance.sol +35 -231
  181. package/contracts/instance/InstanceAccessManager.sol +38 -62
  182. package/contracts/instance/InstanceReader.sol +3 -25
  183. package/contracts/instance/InstanceService.sol +215 -57
  184. package/contracts/instance/InstanceServiceManager.sol +5 -8
  185. package/contracts/instance/ObjectManager.sol +7 -24
  186. package/contracts/instance/base/ComponentService.sol +134 -0
  187. package/contracts/instance/module/IAccess.sol +20 -18
  188. package/contracts/instance/service/BundleService.sol +41 -8
  189. package/contracts/instance/service/BundleServiceManager.sol +5 -8
  190. package/contracts/instance/service/DistributionService.sol +31 -43
  191. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  192. package/contracts/instance/service/IBundleService.sol +5 -6
  193. package/contracts/instance/service/IPolicyService.sol +7 -0
  194. package/contracts/instance/service/PolicyService.sol +67 -37
  195. package/contracts/instance/service/PoolService.sol +25 -39
  196. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  197. package/contracts/instance/service/ProductService.sol +99 -38
  198. package/contracts/registry/ChainNft.sol +1 -1
  199. package/contracts/registry/IRegistry.sol +34 -17
  200. package/contracts/registry/IRegistryService.sol +28 -13
  201. package/contracts/registry/Registry.sol +214 -210
  202. package/contracts/registry/RegistryAccessManager.sol +216 -0
  203. package/contracts/registry/RegistryService.sol +61 -157
  204. package/contracts/registry/RegistryServiceManager.sol +18 -36
  205. package/contracts/registry/ReleaseManager.sol +332 -0
  206. package/contracts/registry/TokenRegistry.sol +8 -7
  207. package/contracts/shared/IRegisterable.sol +1 -3
  208. package/contracts/shared/IService.sol +2 -1
  209. package/contracts/shared/NftOwnable.sol +5 -0
  210. package/contracts/shared/ProxyManager.sol +1 -1
  211. package/contracts/shared/Registerable.sol +10 -14
  212. package/contracts/shared/Service.sol +13 -8
  213. package/contracts/test/TestService.sol +3 -2
  214. package/contracts/types/RoleId.sol +4 -6
  215. package/package.json +1 -1
  216. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  217. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  218. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  219. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  220. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  221. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  222. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  223. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  224. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  225. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  226. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  227. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  228. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  229. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  230. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  231. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  232. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -466
  233. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  234. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  235. package/contracts/components/BaseComponent.sol +0 -132
  236. package/contracts/components/IBaseComponent.sol +0 -31
  237. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  238. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  239. package/contracts/instance/IInstanceBase.sol +0 -26
  240. package/contracts/instance/InstanceBase.sol +0 -41
  241. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  242. package/contracts/instance/base/IInstanceBase.sol +0 -23
  243. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  244. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  245. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -3,19 +3,25 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
5
 
6
+ import {Component} from "../components/Component.sol";
6
7
  import {Instance} from "./Instance.sol";
8
+ import {IInstance} from "./IInstance.sol";
7
9
  import {InstanceAccessManager} from "./InstanceAccessManager.sol";
8
10
  import {IInstanceService} from "./IInstanceService.sol";
9
11
  import {InstanceReader} from "./InstanceReader.sol";
10
12
  import {BundleManager} from "./BundleManager.sol";
11
13
  import {IRegistry} from "../registry/IRegistry.sol";
12
- import {RegistryService} from "../registry/RegistryService.sol";
14
+ import {IRegistryService} from "../registry/IRegistryService.sol";
15
+ import {ChainNft} from "../registry/ChainNft.sol";
13
16
  import {Service} from "../../contracts/shared/Service.sol";
14
17
  import {IService} from "../shared/IService.sol";
15
18
  import {NftId} from "../../contracts/types/NftId.sol";
16
19
  import {RoleId} from "../types/RoleId.sol";
17
- import {VersionLib} from "../types/Version.sol";
18
- 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";
20
+ 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";
21
+ import {ObjectType, INSTANCE, BUNDLE, POLICY, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
22
+ import {IDistributionComponent} from "../components/IDistributionComponent.sol";
23
+ import {IPoolComponent} from "../components/IPoolComponent.sol";
24
+ import {IProductComponent} from "../components/IProductComponent.sol";
19
25
 
20
26
  contract InstanceService is Service, IInstanceService {
21
27
 
@@ -26,7 +32,24 @@ contract InstanceService is Service, IInstanceService {
26
32
 
27
33
  // TODO update to real hash when instance is stable
28
34
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
29
- string public constant NAME = "InstanceService";
35
+
36
+ modifier onlyInstanceOwner(NftId instanceNftId) {
37
+ IRegistry registry = getRegistry();
38
+ ChainNft chainNft = registry.getChainNft();
39
+
40
+ if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
41
+ revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
42
+ }
43
+ _;
44
+ }
45
+
46
+ modifier onlyRegisteredService() {
47
+ address caller = msg.sender;
48
+ if (! getRegistry().isRegisteredService(caller)) {
49
+ revert ErrorInstanceServiceRequestUnauhorized(caller);
50
+ }
51
+ _;
52
+ }
30
53
 
31
54
  function createInstanceClone()
32
55
  external
@@ -42,26 +65,24 @@ contract InstanceService is Service, IInstanceService {
42
65
  IRegistry registry = getRegistry();
43
66
  address registryAddress = address(registry);
44
67
  NftId registryNftId = registry.getNftId(registryAddress);
45
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
46
- RegistryService registryService = RegistryService(registryServiceAddress);
68
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
69
+ IRegistryService registryService = IRegistryService(registryServiceAddress);
47
70
 
48
71
  // initially set the authority of the access managar to this (being the instance service).
49
72
  // This will allow the instance service to bootstrap the authorizations of the instance
50
73
  // and then transfer the ownership of the access manager to the instance owner once everything is setup
51
74
  clonedAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
52
- clonedAccessManager.__InstanceAccessManager_initialize(address(this));
75
+ clonedAccessManager.initialize(address(this));
53
76
 
54
77
  clonedInstance = Instance(Clones.clone(_masterInstance));
55
78
  clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
56
- ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
57
- clonedInstanceNftId = info.nftId;
58
79
 
59
80
  clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
60
- clonedInstanceReader.initialize(registryAddress, clonedInstanceNftId);
81
+ clonedInstanceReader.initialize(registryAddress, address(clonedInstance));
61
82
  clonedInstance.setInstanceReader(clonedInstanceReader);
62
83
 
63
84
  clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
64
- clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, clonedInstanceNftId);
85
+ clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, address(clonedInstance));
65
86
  clonedInstance.setBundleManager(clonedBundleManager);
66
87
 
67
88
  // TODO amend setters with instance specific , policy manager ...
@@ -73,12 +94,17 @@ contract InstanceService is Service, IInstanceService {
73
94
  clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
74
95
  clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
75
96
 
97
+ IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
98
+ clonedInstanceNftId = info.nftId;
99
+ // clonedInstance.linkToRegisteredNftId();
100
+
76
101
  emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
77
102
  }
78
103
 
79
104
  function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
80
- clonedAccessManager.createDefaultGifRoles();
81
- _grantRegistryServiceAuthorizations(clonedAccessManager, clonedInstance);
105
+ _createGifRoles(clonedAccessManager);
106
+ _createGifTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
107
+ _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
82
108
  _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
83
109
  _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
84
110
  _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
@@ -86,36 +112,55 @@ contract InstanceService is Service, IInstanceService {
86
112
  _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
87
113
  }
88
114
 
89
- function _grantRegistryServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
115
+ function _createGifRoles(InstanceAccessManager clonedAccessManager) internal {
116
+ clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole");
117
+ clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole");
118
+ clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole");
119
+
120
+ clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
121
+ clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
122
+ clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
123
+ clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
124
+ clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
125
+ clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
126
+ }
127
+
128
+ function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
129
+ clonedAccessManager.createGifTarget(address(clonedAccessManager), "InstanceAccessManager");
130
+ clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
131
+ clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
132
+ }
133
+
134
+ function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
90
135
  // configure authorization for distribution service on instance
91
136
  IRegistry registry = getRegistry();
92
- address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
93
- clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), address(distributionServiceAddress));
137
+ address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
138
+ clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
94
139
  bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
95
140
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
96
141
  instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
97
142
  clonedAccessManager.setTargetFunctionRole(
98
- address(clonedInstance),
143
+ "Instance",
99
144
  instanceDistributionServiceSelectors,
100
- DISTRIBUTION_SERVICE_ROLE().toInt());
145
+ DISTRIBUTION_SERVICE_ROLE());
101
146
  }
102
147
 
103
148
  function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
104
149
  // configure authorization for pool service on instance
105
- address poolServiceAddress = _registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
150
+ address poolServiceAddress = _registry.getServiceAddress(POOL(), getMajorVersion());
106
151
  clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
107
152
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
108
153
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
109
154
  instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
110
155
  clonedAccessManager.setTargetFunctionRole(
111
- address(clonedInstance),
156
+ "Instance",
112
157
  instancePoolServiceSelectors,
113
- POOL_SERVICE_ROLE().toInt());
158
+ POOL_SERVICE_ROLE());
114
159
  }
115
160
 
116
161
  function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
117
162
  // configure authorization for product service on instance
118
- address productServiceAddress = _registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
163
+ address productServiceAddress = _registry.getServiceAddress(PRODUCT(), getMajorVersion());
119
164
  clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
120
165
  bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
121
166
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
@@ -124,36 +169,36 @@ contract InstanceService is Service, IInstanceService {
124
169
  instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
125
170
  instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
126
171
  clonedAccessManager.setTargetFunctionRole(
127
- address(clonedInstance),
172
+ "Instance",
128
173
  instanceProductServiceSelectors,
129
- PRODUCT_SERVICE_ROLE().toInt());
174
+ PRODUCT_SERVICE_ROLE());
130
175
  }
131
176
 
132
177
  function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
133
178
  // configure authorization for policy service on instance
134
- address policyServiceAddress = _registry.getServiceAddress("PolicyService", VersionLib.toVersion(3, 0, 0).toMajorPart());
179
+ address policyServiceAddress = _registry.getServiceAddress(POLICY(), getMajorVersion());
135
180
  clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
136
181
  bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
137
182
  instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
138
183
  instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
139
184
  instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
140
185
  clonedAccessManager.setTargetFunctionRole(
141
- address(clonedInstance),
186
+ "Instance",
142
187
  instancePolicyServiceSelectors,
143
- POLICY_SERVICE_ROLE().toInt());
188
+ POLICY_SERVICE_ROLE());
144
189
  }
145
190
 
146
191
  function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
147
192
  // configure authorization for bundle service on instance
148
- address bundleServiceAddress = _registry.getServiceAddress("BundleService", VersionLib.toVersion(3, 0, 0).toMajorPart());
193
+ address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(), getMajorVersion());
149
194
  clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
150
195
  bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
151
196
  instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
152
197
  instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
153
198
  clonedAccessManager.setTargetFunctionRole(
154
- address(clonedInstance),
199
+ "Instance",
155
200
  instanceBundleServiceSelectors,
156
- BUNDLE_SERVICE_ROLE().toInt());
201
+ BUNDLE_SERVICE_ROLE());
157
202
 
158
203
  // configure authorization for bundle service on bundle manager
159
204
  bytes4[] memory bundleManagerBundleServiceSelectors = new bytes4[](5);
@@ -163,45 +208,69 @@ contract InstanceService is Service, IInstanceService {
163
208
  bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
164
209
  bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
165
210
  clonedAccessManager.setTargetFunctionRole(
166
- address(clonedBundleManager),
211
+ "BundleManager",
167
212
  bundleManagerBundleServiceSelectors,
168
- BUNDLE_SERVICE_ROLE().toInt());
213
+ BUNDLE_SERVICE_ROLE());
169
214
  }
170
215
 
171
216
  function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
172
217
  // configure authorization for instance service on instance
173
- address instanceServiceAddress = _registry.getServiceAddress("InstanceService", VersionLib.toVersion(3, 0, 0).toMajorPart());
218
+ address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(), getMajorVersion());
174
219
  clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
175
220
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
176
221
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
177
222
  clonedAccessManager.setTargetFunctionRole(
178
- address(clonedInstance),
223
+ "Instance",
179
224
  instanceInstanceServiceSelectors,
180
- INSTANCE_SERVICE_ROLE().toInt());
225
+ INSTANCE_SERVICE_ROLE());
226
+
227
+ bytes4[] memory instanceAccessManagerInstanceServiceSelectors = new bytes4[](1);
228
+ instanceAccessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
229
+ clonedAccessManager.setTargetFunctionRole(
230
+ "InstanceAccessManager",
231
+ instanceAccessManagerInstanceServiceSelectors,
232
+ INSTANCE_SERVICE_ROLE());
181
233
  }
182
234
 
183
- function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
184
- require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
235
+ function setAndRegisterMasterInstance(address instanceAddress)
236
+ external
237
+ onlyOwner
238
+ returns(NftId masterInstanceNftId)
239
+ {
185
240
  require(_masterInstance == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
241
+ require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
186
242
  require(_masterInstanceBundleManager == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
187
243
 
188
- require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
189
244
  require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
245
+
246
+ IInstance instance = IInstance(instanceAddress);
247
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
248
+ address accessManagerAddress = address(accessManager);
249
+ InstanceReader instanceReader = instance.getInstanceReader();
250
+ address instanceReaderAddress = address(instanceReader);
251
+ BundleManager bundleManager = instance.getBundleManager();
252
+ address bundleManagerAddress = address(bundleManager);
253
+
254
+ require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
190
255
  require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
191
256
  require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
192
257
 
193
- Instance instance = Instance(instanceAddress);
194
- InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
195
- BundleManager bundleManager = BundleManager(bundleManagerAddress);
196
-
258
+
197
259
  require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
198
- require(instanceReader.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
199
- require(bundleManager.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
260
+ require(instanceReader.getInstance() == instance, "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
261
+ require(bundleManager.getInstance() == instance, "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
200
262
 
201
263
  _masterInstanceAccessManager = accessManagerAddress;
202
264
  _masterInstance = instanceAddress;
203
265
  _masterInstanceReader = instanceReaderAddress;
204
266
  _masterInstanceBundleManager = bundleManagerAddress;
267
+
268
+ IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getMajorVersion()));
269
+ IInstance masterInstance = IInstance(_masterInstance);
270
+ IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
271
+ masterInstanceNftId = info.nftId;
272
+
273
+ // masterInstance.linkToRegisteredNftId();
205
274
  }
206
275
 
207
276
  function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
@@ -210,11 +279,12 @@ contract InstanceService is Service, IInstanceService {
210
279
  require(instanceReaderAddress != _masterInstanceReader, "ERROR:CRD-014:INSTANCE_READER_MASTER_SAME_AS_NEW");
211
280
 
212
281
  InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
213
- require(instanceReader.getInstanceNftId() == Instance(_masterInstance).getNftId(), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
282
+ require(instanceReader.getInstance() == IInstance(_masterInstance), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
214
283
 
215
284
  _masterInstanceReader = instanceReaderAddress;
216
285
  }
217
286
 
287
+ // TODO access restriction
218
288
  function upgradeInstanceReader(NftId instanceNftId) external {
219
289
  IRegistry registry = getRegistry();
220
290
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
@@ -226,7 +296,7 @@ contract InstanceService is Service, IInstanceService {
226
296
  }
227
297
 
228
298
  InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
229
- upgradedInstanceReaderClone.initialize(address(registry), instanceNftId);
299
+ upgradedInstanceReaderClone.initialize(address(registry), address(instance));
230
300
  instance.setInstanceReader(upgradedInstanceReaderClone);
231
301
  }
232
302
 
@@ -247,15 +317,11 @@ contract InstanceService is Service, IInstanceService {
247
317
  }
248
318
 
249
319
  // From IService
250
- function getName() public pure override(IService, Service) returns(string memory) {
251
- return NAME;
320
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
321
+ return INSTANCE();
252
322
  }
253
323
 
254
324
  /// @dev top level initializer
255
- // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
256
- // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
257
- // 3) deploy registry -> pass registry service address as constructor argument
258
- // registry is getting instantiated and locked to registry service address forever
259
325
  function _initialize(
260
326
  address owner,
261
327
  bytes memory data
@@ -264,21 +330,113 @@ contract InstanceService is Service, IInstanceService {
264
330
  initializer
265
331
  virtual override
266
332
  {
267
- address initialOwner = address(0);
268
- address registryAddress = address(0);
333
+ address initialOwner;
334
+ address registryAddress;
269
335
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
270
336
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
271
337
  // owner is InstanceServiceManager deployer
272
338
  _initializeService(registryAddress, owner);
273
339
 
274
- _registerInterface(type(IService).interfaceId);
275
340
  _registerInterface(type(IInstanceService).interfaceId);
276
341
  }
277
342
 
278
- function hasRole(address account, RoleId role, address instanceAddress) external view returns (bool) {
343
+ function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
279
344
  Instance instance = Instance(instanceAddress);
280
- InstanceAccessManager accessManager = instance.getInstanceAccessManager();
345
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
281
346
  return accessManager.hasRole(role, account);
282
347
  }
348
+
349
+ function createGifTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
350
+ IRegistry registry = getRegistry();
351
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
352
+ Instance instance = Instance(instanceInfo.objectAddress);
353
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
354
+ accessManager.createGifTarget(targetAddress, targetName);
355
+ }
356
+
357
+ function grantDistributionDefaultPermissions(NftId instanceNftId, IDistributionComponent distribution) external onlyRegisteredService {
358
+ IRegistry registry = getRegistry();
359
+ IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(address(distribution));
360
+
361
+ if (distributionInfo.objectType != DISTRIBUTION()) {
362
+ revert ErrorInstanceServiceInvalidComponentType(address(distribution), DISTRIBUTION(), distributionInfo.objectType);
363
+ }
364
+
365
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
366
+ Instance instance = Instance(instanceInfo.objectAddress);
367
+ InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
368
+
369
+ bytes4[] memory fctSelectors = new bytes4[](3);
370
+ fctSelectors[0] = distribution.setFees.selector;
371
+ fctSelectors[1] = Component.lock.selector;
372
+ fctSelectors[2] = Component.unlock.selector;
373
+ instanceAccessManager.setTargetFunctionRole(distribution.getName(), fctSelectors, DISTRIBUTION_OWNER_ROLE());
374
+
375
+ bytes4[] memory fctSelectors2 = new bytes4[](2);
376
+ fctSelectors2[0] = distribution.processSale.selector;
377
+ fctSelectors2[1] = distribution.processRenewal.selector;
378
+ instanceAccessManager.setTargetFunctionRole(distribution.getName(), fctSelectors2, PRODUCT_SERVICE_ROLE());
379
+ }
380
+
381
+ function grantPoolDefaultPermissions(NftId instanceNftId, IPoolComponent pool) external onlyRegisteredService {
382
+ IRegistry registry = getRegistry();
383
+ IRegistry.ObjectInfo memory poolInfo = registry.getObjectInfo(address(pool));
384
+
385
+ if (poolInfo.objectType != POOL()) {
386
+ revert ErrorInstanceServiceInvalidComponentType(address(pool), POOL(), poolInfo.objectType);
387
+ }
388
+
389
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
390
+ Instance instance = Instance(instanceInfo.objectAddress);
391
+ InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
392
+
393
+ bytes4[] memory fctSelectors = new bytes4[](3);
394
+ fctSelectors[0] = pool.setFees.selector;
395
+ fctSelectors[1] = Component.lock.selector;
396
+ fctSelectors[2] = Component.unlock.selector;
397
+ instanceAccessManager.setTargetFunctionRole(pool.getName(), fctSelectors, POOL_OWNER_ROLE());
398
+
399
+ bytes4[] memory fctSelectors2 = new bytes4[](1);
400
+ fctSelectors2[0] = pool.underwrite.selector;
401
+ instanceAccessManager.setTargetFunctionRole(pool.getName(), fctSelectors2, POLICY_SERVICE_ROLE());
402
+ }
403
+
404
+ function grantProductDefaultPermissions(NftId instanceNftId, IProductComponent product) external onlyRegisteredService {
405
+ IRegistry registry = getRegistry();
406
+ IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(address(product));
407
+
408
+ if (productInfo.objectType != PRODUCT()) {
409
+ revert ErrorInstanceServiceInvalidComponentType(address(product), PRODUCT(), productInfo.objectType);
410
+ }
411
+
412
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
413
+ Instance instance = Instance(instanceInfo.objectAddress);
414
+ InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
415
+
416
+ bytes4[] memory fctSelectors = new bytes4[](3);
417
+ fctSelectors[0] = product.setFees.selector;
418
+ fctSelectors[1] = Component.lock.selector;
419
+ fctSelectors[2] = Component.unlock.selector;
420
+ instanceAccessManager.setTargetFunctionRole(product.getName(), fctSelectors, PRODUCT_OWNER_ROLE());
421
+ }
422
+
423
+ function setTargetLocked(string memory targetName, bool locked) external {
424
+ address componentAddress = msg.sender;
425
+ IRegistry registry = getRegistry();
426
+ IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
427
+ if (componentInfo.nftId.eqz()) {
428
+ revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
429
+ }
430
+
431
+ // TODO validate component type
432
+
433
+
434
+ address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
435
+ IInstance instance = IInstance(instanceAddress);
436
+
437
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
438
+ accessManager.setTargetClosed(targetName, locked);
439
+ }
440
+
283
441
  }
284
442
 
@@ -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 ----------------------------------------------------//
@@ -14,49 +14,32 @@ contract ObjectManager is
14
14
  Cloneable
15
15
  {
16
16
 
17
- event LogObjectManagerInitialized(NftId instanceNftId, address instanceReader);
17
+ event LogObjectManagerInitialized(address instance);
18
18
 
19
19
  error ErrorObjectManagerNftIdInvalid(NftId instanceNftId);
20
20
  error ErrorObjectManagerAlreadyAdded(NftId componentNftId, NftId objectNftId);
21
21
 
22
22
  mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _activeObjects;
23
23
  mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _allObjects;
24
- NftId internal _instanceNftId;
25
- InstanceReader internal _instanceReader;
26
-
27
- constructor() Cloneable() {
28
- _instanceReader = InstanceReader(address(0));
29
- }
24
+ IInstance internal _instance; // store instance address -> more flexible, instance may not be registered during ObjectManager initialization
30
25
 
31
26
  /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
32
27
  function initialize(
33
28
  address authority,
34
29
  address registry,
35
- NftId instanceNftId
30
+ address instance
36
31
  )
37
32
  external
38
33
  {
39
34
  initialize(authority, registry);
40
35
 
41
- // check/handle instance nft id/instance reader
42
- IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(instanceNftId);
43
- if (instanceInfo.objectType != INSTANCE()) {
44
- revert ErrorObjectManagerNftIdInvalid(instanceNftId);
45
- }
46
-
47
- IInstance instance = IInstance(instanceInfo.objectAddress);
48
- _instanceReader = instance.getInstanceReader();
49
- _instanceNftId = instanceNftId;
36
+ _instance = IInstance(instance);
50
37
 
51
- emit LogObjectManagerInitialized(instanceNftId, address(_instanceReader));
52
- }
53
-
54
- function getInstanceReader() external view returns (InstanceReader) {
55
- return _instanceReader;
38
+ emit LogObjectManagerInitialized(instance);
56
39
  }
57
40
 
58
- function getInstanceNftId() external view returns (NftId) {
59
- return _instanceNftId;
41
+ function getInstance() external view returns (IInstance) {
42
+ return _instance;
60
43
  }
61
44
 
62
45
  function _add(NftId componentNftId, NftId objectNftId) internal {