@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e9a637d-547

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 (256) hide show
  1. package/README.md +0 -71
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +68 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +68 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +158 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +158 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +184 -149
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +158 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +114 -189
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +68 -0
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +214 -2063
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +196 -51
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +363 -2832
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +491 -127
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +101 -167
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +333 -171
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -23
  38. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  39. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2677 -0
  40. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  41. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
  42. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +85 -30
  44. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
  52. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  54. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  55. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +124 -53
  62. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +21 -13
  64. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +384 -249
  66. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -14
  68. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +104 -41
  70. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +11 -7
  72. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +195 -121
  74. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +51 -47
  76. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +80 -14
  78. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +212 -186
  80. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +80 -14
  82. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +101 -24
  84. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +90 -24
  86. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +511 -14
  88. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
  90. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +136 -65
  92. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +27 -19
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +561 -51
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +24 -12
  98. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +114 -51
  100. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
  106. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -24
  108. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  110. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
  112. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  114. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +17 -36
  116. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
  118. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  120. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  122. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  123. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  126. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.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 +80 -14
  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/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  134. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  136. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  139. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  140. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  141. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Service.sol/Service.json +86 -15
  143. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  144. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  145. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  147. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  154. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestService.sol/TestService.json +101 -26
  156. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  159. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  161. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  162. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  163. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  164. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  165. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  167. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  171. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  173. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  174. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  175. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  177. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  178. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  179. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  182. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  185. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  187. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  189. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  192. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +2 -2
  194. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  196. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  198. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  200. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  202. package/contracts/components/Component.sol +42 -10
  203. package/contracts/components/IComponent.sol +9 -1
  204. package/contracts/components/IPoolComponent.sol +5 -43
  205. package/contracts/components/Pool.sol +47 -122
  206. package/contracts/components/Product.sol +4 -0
  207. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  208. package/contracts/instance/BundleManager.sol +6 -4
  209. package/contracts/instance/Cloneable.sol +7 -2
  210. package/contracts/instance/IInstance.sol +23 -55
  211. package/contracts/instance/IInstanceService.sol +31 -6
  212. package/contracts/instance/Instance.sol +90 -182
  213. package/contracts/instance/InstanceAccessManager.sol +402 -159
  214. package/contracts/instance/InstanceReader.sol +12 -12
  215. package/contracts/instance/InstanceService.sol +287 -246
  216. package/contracts/instance/InstanceStore.sol +219 -0
  217. package/contracts/instance/ObjectManager.sol +6 -8
  218. package/contracts/instance/base/ComponentService.sol +17 -30
  219. package/contracts/instance/base/KeyValueStore.sol +13 -5
  220. package/contracts/instance/base/Lifecycle.sol +11 -2
  221. package/contracts/instance/module/IAccess.sol +21 -14
  222. package/contracts/instance/module/IBundle.sol +6 -4
  223. package/contracts/instance/module/IComponents.sol +41 -0
  224. package/contracts/instance/module/ISetup.sol +3 -16
  225. package/contracts/instance/service/ApplicationService.sol +18 -16
  226. package/contracts/instance/service/BundleService.sol +213 -81
  227. package/contracts/instance/service/ClaimService.sol +3 -3
  228. package/contracts/instance/service/DistributionService.sol +57 -70
  229. package/contracts/instance/service/IBundleService.sol +63 -25
  230. package/contracts/instance/service/IDistributionService.sol +1 -0
  231. package/contracts/instance/service/IPoolService.sol +82 -3
  232. package/contracts/instance/service/PolicyService.sol +68 -100
  233. package/contracts/instance/service/PoolService.sol +214 -20
  234. package/contracts/instance/service/ProductService.sol +34 -58
  235. package/contracts/registry/ChainNft.sol +8 -0
  236. package/contracts/registry/IRegistry.sol +2 -0
  237. package/contracts/registry/IRegistryService.sol +4 -3
  238. package/contracts/registry/ITransferInterceptor.sol +1 -0
  239. package/contracts/registry/Registry.sol +23 -20
  240. package/contracts/registry/RegistryService.sol +10 -11
  241. package/contracts/registry/ReleaseManager.sol +20 -18
  242. package/contracts/shared/IService.sol +4 -6
  243. package/contracts/shared/Service.sol +21 -7
  244. package/contracts/shared/TokenHandler.sol +11 -5
  245. package/contracts/test/TestService.sol +1 -1
  246. package/contracts/types/Amount.sol +60 -0
  247. package/contracts/types/Blocknumber.sol +1 -0
  248. package/contracts/types/Fee.sol +13 -5
  249. package/contracts/types/NftId.sol +8 -0
  250. package/contracts/types/ObjectType.sol +1 -0
  251. package/contracts/types/RoleId.sol +6 -4
  252. package/contracts/types/StateId.sol +1 -0
  253. package/contracts/types/Timestamp.sol +1 -0
  254. package/contracts/types/UFixed.sol +1 -0
  255. package/contracts/types/Version.sol +1 -0
  256. package/package.json +1 -1
@@ -2,53 +2,66 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
+ import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
5
6
 
6
- import {Instance} from "./Instance.sol";
7
- import {IInstance} from "./IInstance.sol";
8
- import {InstanceAccessManager} from "./InstanceAccessManager.sol";
9
- import {IInstanceService} from "./IInstanceService.sol";
10
- import {InstanceReader} from "./InstanceReader.sol";
11
- import {BundleManager} from "./BundleManager.sol";
12
- import {IRegistry} from "../registry/IRegistry.sol";
13
- import {IRegistryService} from "../registry/IRegistryService.sol";
14
- import {ChainNft} from "../registry/ChainNft.sol";
15
- import {Service} from "../../contracts/shared/Service.sol";
16
- import {IService} from "../shared/IService.sol";
17
7
  import {NftId} from "../../contracts/types/NftId.sol";
18
8
  import {RoleId} from "../types/RoleId.sol";
19
- import {ADMIN_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, PUBLIC_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, APPLICATION_SERVICE_ROLE, POLICY_SERVICE_ROLE, CLAIM_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
9
+ import {ADMIN_ROLE, INSTANCE_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, APPLICATION_SERVICE_ROLE, POLICY_SERVICE_ROLE, CLAIM_SERVICE_ROLE, BUNDLE_SERVICE_ROLE, INSTANCE_ROLE} from "../types/RoleId.sol";
20
10
  import {ObjectType, INSTANCE, BUNDLE, APPLICATION, POLICY, CLAIM, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
11
+
12
+ import {Service} from "../shared/Service.sol";
13
+ import {IService} from "../shared/IService.sol";
14
+
21
15
  import {IDistributionComponent} from "../components/IDistributionComponent.sol";
22
16
  import {IPoolComponent} from "../components/IPoolComponent.sol";
23
17
  import {IProductComponent} from "../components/IProductComponent.sol";
24
18
 
19
+ import {IRegistry} from "../registry/IRegistry.sol";
20
+ import {IRegistryService} from "../registry/IRegistryService.sol";
21
+ import {ChainNft} from "../registry/ChainNft.sol";
22
+
23
+ import {Instance} from "./Instance.sol";
24
+ import {IInstance} from "./IInstance.sol";
25
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
26
+ import {IInstanceService} from "./IInstanceService.sol";
27
+ import {InstanceReader} from "./InstanceReader.sol";
28
+ import {BundleManager} from "./BundleManager.sol";
29
+ import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
30
+ import {InstanceStore} from "./InstanceStore.sol";
31
+
32
+
25
33
  contract InstanceService is
26
34
  Service,
27
35
  IInstanceService
28
36
  {
29
-
37
+ address internal _masterOzAccessManager;
30
38
  address internal _masterInstanceAccessManager;
31
39
  address internal _masterInstance;
32
40
  address internal _masterInstanceReader;
33
41
  address internal _masterInstanceBundleManager;
42
+ address internal _masterInstanceStore;
34
43
 
35
44
  // TODO update to real hash when instance is stable
36
45
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
37
46
 
38
- modifier onlyInstanceOwner(NftId instanceNftId) {
39
- IRegistry registry = getRegistry();
40
- ChainNft chainNft = ChainNft(registry.getChainNftAddress());
41
-
42
- if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
43
- revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
47
+ modifier onlyInstanceOwner(NftId instanceNftId) {
48
+ if(msg.sender != getRegistry().ownerOf(instanceNftId)) {
49
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
44
50
  }
45
51
  _;
46
52
  }
47
-
53
+ // TODO check service domain?
54
+ // TODO check release version?
48
55
  modifier onlyRegisteredService() {
49
- address caller = msg.sender;
50
- if (! getRegistry().isRegisteredService(caller)) {
51
- revert ErrorInstanceServiceRequestUnauhorized(caller);
56
+ if (! getRegistry().isRegisteredService(msg.sender)) {
57
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
58
+ }
59
+ _;
60
+ }
61
+ // TODO check release version?
62
+ modifier onlyComponent() {
63
+ if (! getRegistry().isRegisteredComponent(msg.sender)) {
64
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
52
65
  }
53
66
  _;
54
67
  }
@@ -56,189 +69,226 @@ contract InstanceService is
56
69
  function createInstanceClone()
57
70
  external
58
71
  returns (
59
- InstanceAccessManager clonedAccessManager,
72
+ AccessManagerUpgradeableInitializeable clonedOzAccessManager,
73
+ InstanceAccessManager clonedInstanceAccessManager,
60
74
  Instance clonedInstance,
61
75
  NftId clonedInstanceNftId,
62
76
  InstanceReader clonedInstanceReader,
63
- BundleManager clonedBundleManager
77
+ BundleManager clonedBundleManager,
78
+ InstanceStore clonedInstanceStore
64
79
  )
65
80
  {
66
81
  address instanceOwner = msg.sender;
67
82
  IRegistry registry = getRegistry();
68
- address registryAddress = address(registry);
69
- NftId registryNftId = registry.getNftId(registryAddress);
70
- address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
71
- IRegistryService registryService = IRegistryService(registryServiceAddress);
83
+ NftId registryNftId = registry.getNftId(address(registry));
84
+ IRegistryService registryService = IRegistryService(
85
+ registry.getServiceAddress(REGISTRY(), getVersion().toMajorPart())
86
+ );
87
+
88
+ clonedOzAccessManager = AccessManagerUpgradeableInitializeable(Clones.clone(_masterOzAccessManager));
72
89
 
73
- // initially set the authority of the access managar to this (being the instance service).
74
- // This will allow the instance service to bootstrap the authorizations of the instance
75
- // and then transfer the ownership of the access manager to the instance owner once everything is setup
76
- clonedAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
77
- clonedAccessManager.initialize(address(this));
90
+ // initially grants ADMIN_ROLE to this (being the instance service).
91
+ // This will allow the instance service to bootstrap the authorizations of the instance.
92
+ // Instance service will not use oz access manager directlly but through instance access manager instead
93
+ // Instance service will renounce ADMIN_ROLE when bootstraping is finished
94
+ clonedOzAccessManager.initialize(address(this));
78
95
 
79
96
  clonedInstance = Instance(Clones.clone(_masterInstance));
80
- clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
97
+ clonedInstance.initialize(
98
+ address(clonedOzAccessManager),
99
+ address(registry),
100
+ instanceOwner);
101
+ // initialize and set before instance reader
102
+ clonedInstanceStore = InstanceStore(Clones.clone(address(_masterInstanceStore)));
103
+ clonedInstanceStore.initialize(address(clonedInstance));
104
+ clonedInstance.setInstanceStore(clonedInstanceStore);
81
105
 
82
106
  clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
83
- clonedInstanceReader.initialize(registryAddress, address(clonedInstance));
107
+ clonedInstanceReader.initialize(address(clonedInstance));
84
108
  clonedInstance.setInstanceReader(clonedInstanceReader);
85
109
 
86
110
  clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
87
- clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, address(clonedInstance));
111
+ clonedBundleManager.initialize(address(clonedInstance));
88
112
  clonedInstance.setBundleManager(clonedBundleManager);
89
113
 
114
+ clonedInstanceAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
115
+ clonedOzAccessManager.grantRole(ADMIN_ROLE().toInt(), address(clonedInstanceAccessManager), 0);
116
+ clonedInstanceAccessManager.initialize(address(clonedInstance));
117
+ clonedInstance.setInstanceAccessManager(clonedInstanceAccessManager);
118
+
90
119
  // TODO amend setters with instance specific , policy manager ...
91
120
 
92
- _grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
121
+ _grantInitialAuthorizations(clonedInstanceAccessManager, clonedInstance, clonedBundleManager, clonedInstanceStore, instanceOwner);
93
122
 
94
- // to complete setup switch instance ownership to the instance owner
95
- // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
96
- clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
97
- clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
123
+ clonedOzAccessManager.renounceRole(ADMIN_ROLE().toInt(), address(this));
98
124
 
99
125
  IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
100
126
  clonedInstanceNftId = info.nftId;
101
- // clonedInstance.linkToRegisteredNftId();
102
127
 
103
- emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
128
+ emit LogInstanceCloned(
129
+ address(clonedOzAccessManager),
130
+ address(clonedInstanceAccessManager),
131
+ address(clonedInstance),
132
+ address(clonedInstanceStore),
133
+ address(clonedBundleManager),
134
+ address(clonedInstanceReader),
135
+ clonedInstanceNftId);
104
136
  }
105
137
 
106
- function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
107
- _createGifRoles(clonedAccessManager);
108
- _createGifTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
109
- _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
110
- _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
111
- _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
112
- _grantApplicationServiceAuthorizations(clonedAccessManager, clonedInstance);
113
- _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
114
- _grantClaimServiceAuthorizations(clonedAccessManager, clonedInstance);
115
- _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
138
+ function _grantInitialAuthorizations(
139
+ InstanceAccessManager clonedAccessManager,
140
+ Instance clonedInstance,
141
+ BundleManager clonedBundleManager,
142
+ InstanceStore clonedInstanceStore,
143
+ address instanceOwner)
144
+ internal
145
+ {
146
+ _createCoreAndGifRoles(clonedAccessManager);
147
+ _createCoreTargets(clonedAccessManager, clonedInstance, clonedBundleManager, clonedInstanceStore);
148
+ _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstanceStore);
149
+ _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstanceStore);
150
+ _grantProductServiceAuthorizations(clonedAccessManager, clonedInstanceStore);
151
+ _grantApplicationServiceAuthorizations(clonedAccessManager, clonedInstanceStore);
152
+ _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstanceStore);
153
+ _grantClaimServiceAuthorizations(clonedAccessManager, clonedInstanceStore);
154
+ _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstanceStore, clonedBundleManager);
116
155
  _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
156
+ _grantInstanceAuthorizations(clonedAccessManager);
157
+ _grantInstanceOwnerAuthorizations(clonedAccessManager, clonedInstance);
117
158
  }
118
159
 
119
- function _createGifRoles(InstanceAccessManager clonedAccessManager) internal {
120
- clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole");
121
- clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole");
122
- clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole");
123
-
124
- clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
125
- clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
126
- clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
127
- clonedAccessManager.createGifRole(APPLICATION_SERVICE_ROLE(), "ApplicationServiceRole");
128
- clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
129
- clonedAccessManager.createGifRole(CLAIM_SERVICE_ROLE(), "ClaimServiceRole");
130
- clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
131
- clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
160
+ function _createCoreAndGifRoles(InstanceAccessManager clonedAccessManager) internal {
161
+ // default roles controlled by ADMIN_ROLE -> core roles
162
+ // all set/granted only once during cloning (the only exception is INSTANCE_OWNER_ROLE, hooked to instance nft)
163
+ clonedAccessManager.createCoreRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
164
+ clonedAccessManager.createCoreRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
165
+ clonedAccessManager.createCoreRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
166
+ clonedAccessManager.createCoreRole(APPLICATION_SERVICE_ROLE(), "ApplicationServiceRole");
167
+ clonedAccessManager.createCoreRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
168
+ clonedAccessManager.createCoreRole(CLAIM_SERVICE_ROLE(), "ClaimServiceRole");
169
+ clonedAccessManager.createCoreRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
170
+ clonedAccessManager.createCoreRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
171
+ // default roles controlled by INSTANCE_OWNER_ROLE -> gif roles
172
+ clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole", INSTANCE_OWNER_ROLE());
173
+ clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole", INSTANCE_OWNER_ROLE());
174
+ clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole", INSTANCE_OWNER_ROLE());
132
175
  }
133
176
 
134
- function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
135
- clonedAccessManager.createGifTarget(address(clonedAccessManager), "InstanceAccessManager");
136
- clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
137
- clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
138
- }
177
+ function _createCoreTargets(
178
+ InstanceAccessManager clonedAccessManager,
179
+ Instance clonedInstance,
180
+ BundleManager clonedBundleManager,
181
+ InstanceStore clonedInstanceStore)
182
+ internal
183
+ {
184
+ clonedAccessManager.createCoreTarget(address(clonedAccessManager), "InstanceAccessManager");// TODO create in instance access manager initializer?
185
+ clonedAccessManager.createCoreTarget(address(clonedInstance), "Instance");// TODO create in instance access manager initializer?
186
+ clonedAccessManager.createCoreTarget(address(clonedBundleManager), "BundleManager");
187
+ clonedAccessManager.createCoreTarget(address(clonedInstanceStore), "InstanceStore");
188
+ }
139
189
 
140
- function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
190
+ function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, InstanceStore clonedInstanceStore) internal {
141
191
  // configure authorization for distribution service on instance
142
- IRegistry registry = getRegistry();
143
- address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
192
+ address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart());
144
193
  clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
145
194
  bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
146
- instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
147
- instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
148
- instanceDistributionServiceSelectors[2] = clonedInstance.createDistributorType.selector;
149
- instanceDistributionServiceSelectors[3] = clonedInstance.updateDistributorType.selector;
150
- instanceDistributionServiceSelectors[4] = clonedInstance.updateDistributorTypeState.selector;
151
- instanceDistributionServiceSelectors[5] = clonedInstance.createDistributor.selector;
152
- instanceDistributionServiceSelectors[6] = clonedInstance.updateDistributor.selector;
153
- instanceDistributionServiceSelectors[7] = clonedInstance.updateDistributorState.selector;
154
- instanceDistributionServiceSelectors[8] = clonedInstance.createReferral.selector;
155
- instanceDistributionServiceSelectors[9] = clonedInstance.updateReferral.selector;
156
- instanceDistributionServiceSelectors[10] = clonedInstance.updateReferralState.selector;
157
- clonedAccessManager.setTargetFunctionRole(
158
- "Instance",
195
+ instanceDistributionServiceSelectors[0] = clonedInstanceStore.createDistributionSetup.selector;
196
+ instanceDistributionServiceSelectors[1] = clonedInstanceStore.updateDistributionSetup.selector;
197
+ instanceDistributionServiceSelectors[2] = clonedInstanceStore.createDistributorType.selector;
198
+ instanceDistributionServiceSelectors[3] = clonedInstanceStore.updateDistributorType.selector;
199
+ instanceDistributionServiceSelectors[4] = clonedInstanceStore.updateDistributorTypeState.selector;
200
+ instanceDistributionServiceSelectors[5] = clonedInstanceStore.createDistributor.selector;
201
+ instanceDistributionServiceSelectors[6] = clonedInstanceStore.updateDistributor.selector;
202
+ instanceDistributionServiceSelectors[7] = clonedInstanceStore.updateDistributorState.selector;
203
+ instanceDistributionServiceSelectors[8] = clonedInstanceStore.createReferral.selector;
204
+ instanceDistributionServiceSelectors[9] = clonedInstanceStore.updateReferral.selector;
205
+ instanceDistributionServiceSelectors[10] = clonedInstanceStore.updateReferralState.selector;
206
+ clonedAccessManager.setCoreTargetFunctionRole(
207
+ "InstanceStore",
159
208
  instanceDistributionServiceSelectors,
160
209
  DISTRIBUTION_SERVICE_ROLE());
161
210
  }
162
211
 
163
- function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
212
+ function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, InstanceStore clonedInstanceStore) internal {
164
213
  // configure authorization for pool service on instance
165
- address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getMajorVersion());
214
+ address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart());
166
215
  clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
167
216
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
168
- instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
169
- instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
170
- clonedAccessManager.setTargetFunctionRole(
171
- "Instance",
217
+ instancePoolServiceSelectors[0] = clonedInstanceStore.createPoolSetup.selector;
218
+ instancePoolServiceSelectors[1] = clonedInstanceStore.updatePoolSetup.selector;
219
+ clonedAccessManager.setCoreTargetFunctionRole(
220
+ "InstanceStore",
172
221
  instancePoolServiceSelectors,
173
222
  POOL_SERVICE_ROLE());
174
223
  }
175
224
 
176
- function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
225
+ function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, InstanceStore clonedInstanceStore) internal {
177
226
  // configure authorization for product service on instance
178
- address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getMajorVersion());
227
+ address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getVersion().toMajorPart());
179
228
  clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
180
229
  bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
181
- instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
182
- instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
183
- instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
184
- instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
185
- instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
186
- clonedAccessManager.setTargetFunctionRole(
187
- "Instance",
230
+ instanceProductServiceSelectors[0] = clonedInstanceStore.createProductSetup.selector;
231
+ instanceProductServiceSelectors[1] = clonedInstanceStore.updateProductSetup.selector;
232
+ instanceProductServiceSelectors[2] = clonedInstanceStore.createRisk.selector;
233
+ instanceProductServiceSelectors[3] = clonedInstanceStore.updateRisk.selector;
234
+ instanceProductServiceSelectors[4] = clonedInstanceStore.updateRiskState.selector;
235
+ clonedAccessManager.setCoreTargetFunctionRole(
236
+ "InstanceStore",
188
237
  instanceProductServiceSelectors,
189
238
  PRODUCT_SERVICE_ROLE());
190
239
  }
191
240
 
192
- function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
241
+ function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, InstanceStore clonedInstanceStore) internal {
193
242
  // configure authorization for application services on instance
194
- address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getMajorVersion());
243
+ address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getVersion().toMajorPart());
195
244
  clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
196
245
  bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
197
- instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
198
- instanceApplicationServiceSelectors[1] = clonedInstance.updateApplication.selector;
199
- instanceApplicationServiceSelectors[2] = clonedInstance.updateApplicationState.selector;
200
- clonedAccessManager.setTargetFunctionRole(
201
- "Instance",
246
+ instanceApplicationServiceSelectors[0] = clonedInstanceStore.createApplication.selector;
247
+ instanceApplicationServiceSelectors[1] = clonedInstanceStore.updateApplication.selector;
248
+ instanceApplicationServiceSelectors[2] = clonedInstanceStore.updateApplicationState.selector;
249
+ clonedAccessManager.setCoreTargetFunctionRole(
250
+ "InstanceStore",
202
251
  instanceApplicationServiceSelectors,
203
252
  APPLICATION_SERVICE_ROLE());
204
253
  }
205
254
 
206
- function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
255
+ function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, InstanceStore clonedInstanceStore) internal {
207
256
  // configure authorization for policy services on instance
208
- address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getMajorVersion());
257
+ address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart());
209
258
  clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), policyServiceAddress);
210
259
  bytes4[] memory instancePolicyServiceSelectors = new bytes4[](2);
211
- instancePolicyServiceSelectors[0] = clonedInstance.updatePolicy.selector;
212
- instancePolicyServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
213
- clonedAccessManager.setTargetFunctionRole(
214
- "Instance",
260
+ instancePolicyServiceSelectors[0] = clonedInstanceStore.updatePolicy.selector;
261
+ instancePolicyServiceSelectors[1] = clonedInstanceStore.updatePolicyState.selector;
262
+ clonedAccessManager.setCoreTargetFunctionRole(
263
+ "InstanceStore",
215
264
  instancePolicyServiceSelectors,
216
265
  POLICY_SERVICE_ROLE());
217
266
  }
218
267
 
219
- function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
268
+ function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, InstanceStore clonedInstanceStore) internal {
220
269
  // configure authorization for claim/payout services on instance
221
- address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getMajorVersion());
270
+ address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getVersion().toMajorPart());
222
271
  clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), claimServiceAddress);
223
272
  // TODO add claims function authz
224
273
  bytes4[] memory instanceClaimServiceSelectors = new bytes4[](0);
225
- // instanceClaimServiceSelectors[0] = clonedInstance.updatePolicy.selector;
226
- // instanceClaimServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
227
- clonedAccessManager.setTargetFunctionRole(
228
- "Instance",
274
+ // instanceClaimServiceSelectors[0] = clonedInstanceStore.updatePolicy.selector;
275
+ // instanceClaimServiceSelectors[1] = clonedInstanceStore.updatePolicyState.selector;
276
+ clonedAccessManager.setCoreTargetFunctionRole(
277
+ "InstanceStore",
229
278
  instanceClaimServiceSelectors,
230
279
  CLAIM_SERVICE_ROLE());
231
280
  }
232
281
 
233
- function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
282
+ function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, InstanceStore clonedInstanceStore, BundleManager clonedBundleManager) internal {
234
283
  // configure authorization for bundle service on instance
235
- address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getMajorVersion());
284
+ address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart());
236
285
  clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
237
- bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
238
- instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
239
- instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
240
- clonedAccessManager.setTargetFunctionRole(
241
- "Instance",
286
+ bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
287
+ instanceBundleServiceSelectors[0] = clonedInstanceStore.createBundle.selector;
288
+ instanceBundleServiceSelectors[1] = clonedInstanceStore.updateBundle.selector;
289
+ instanceBundleServiceSelectors[2] = clonedInstanceStore.updateBundleState.selector;
290
+ clonedAccessManager.setCoreTargetFunctionRole(
291
+ "InstanceStore",
242
292
  instanceBundleServiceSelectors,
243
293
  BUNDLE_SERVICE_ROLE());
244
294
 
@@ -249,69 +299,107 @@ contract InstanceService is
249
299
  bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
250
300
  bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
251
301
  bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
252
- clonedAccessManager.setTargetFunctionRole(
302
+ clonedAccessManager.setCoreTargetFunctionRole(
253
303
  "BundleManager",
254
304
  bundleManagerBundleServiceSelectors,
255
305
  BUNDLE_SERVICE_ROLE());
256
306
  }
257
307
 
258
308
  function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
259
- // configure authorization for instance service on instance
260
- address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
309
+ // configure authorization for instance service on instance
310
+ address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getVersion().toMajorPart());
261
311
  clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
262
312
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
263
313
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
264
- clonedAccessManager.setTargetFunctionRole(
314
+ clonedAccessManager.setCoreTargetFunctionRole(
265
315
  "Instance",
266
316
  instanceInstanceServiceSelectors,
267
317
  INSTANCE_SERVICE_ROLE());
268
318
 
269
- bytes4[] memory instanceAccessManagerInstanceServiceSelectors = new bytes4[](1);
270
- instanceAccessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
271
- clonedAccessManager.setTargetFunctionRole(
319
+ // configure authorizations for instance service on instance access manager
320
+ bytes4[] memory accessManagerInstanceServiceSelectors = new bytes4[](3);
321
+ accessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
322
+ accessManagerInstanceServiceSelectors[1] = clonedAccessManager.setTargetLockedByService.selector;
323
+ accessManagerInstanceServiceSelectors[2] = clonedAccessManager.setCoreTargetFunctionRole.selector;
324
+ clonedAccessManager.setCoreTargetFunctionRole(
272
325
  "InstanceAccessManager",
273
- instanceAccessManagerInstanceServiceSelectors,
326
+ accessManagerInstanceServiceSelectors,
274
327
  INSTANCE_SERVICE_ROLE());
275
328
  }
276
329
 
277
- function setAndRegisterMasterInstance(address instanceAddress)
330
+ function _grantInstanceAuthorizations(InstanceAccessManager clonedAccessManager) internal {
331
+ bytes4[] memory accessManagerInstanceSelectors = new bytes4[](4);
332
+ accessManagerInstanceSelectors[0] = clonedAccessManager.createRole.selector;
333
+ accessManagerInstanceSelectors[1] = clonedAccessManager.createTarget.selector;
334
+ accessManagerInstanceSelectors[2] = clonedAccessManager.setTargetFunctionRole.selector;
335
+ accessManagerInstanceSelectors[3] = clonedAccessManager.setTargetLockedByInstance.selector;
336
+ clonedAccessManager.setCoreTargetFunctionRole(
337
+ "InstanceAccessManager",
338
+ accessManagerInstanceSelectors,
339
+ INSTANCE_ROLE());
340
+ }
341
+
342
+ function _grantInstanceOwnerAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
343
+ // configure authorization for instance owner on instance access manager
344
+ // instance owner role is granted/revoked ONLY by INSTANCE_ROLE
345
+ bytes4[] memory instanceInstanceOwnerSelectors = new bytes4[](4);
346
+ instanceInstanceOwnerSelectors[0] = clonedInstance.createRole.selector;
347
+ instanceInstanceOwnerSelectors[1] = clonedInstance.createTarget.selector;
348
+ instanceInstanceOwnerSelectors[2] = clonedInstance.setTargetFunctionRole.selector;
349
+ instanceInstanceOwnerSelectors[3] = clonedInstance.setTargetLocked.selector;
350
+ clonedAccessManager.setCoreTargetFunctionRole(
351
+ "Instance",
352
+ instanceInstanceOwnerSelectors,
353
+ INSTANCE_OWNER_ROLE());
354
+ }
355
+
356
+ function setAndRegisterMasterInstance(address instanceAddress)
278
357
  external
279
358
  onlyOwner
280
359
  returns(NftId masterInstanceNftId)
281
360
  {
282
361
  if(_masterInstance != address(0)) { revert ErrorInstanceServiceMasterInstanceAlreadySet(); }
362
+ if(_masterOzAccessManager != address(0)) { revert ErrorInstanceServiceMasterOzAccessManagerAlreadySet(); }
283
363
  if(_masterInstanceAccessManager != address(0)) { revert ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet(); }
284
364
  if(_masterInstanceBundleManager != address(0)) { revert ErrorInstanceServiceMasterBundleManagerAlreadySet(); }
285
365
 
286
366
  if(instanceAddress == address(0)) { revert ErrorInstanceServiceInstanceAddressZero(); }
287
367
 
288
368
  IInstance instance = IInstance(instanceAddress);
289
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
290
- address accessManagerAddress = address(accessManager);
369
+ AccessManagerUpgradeableInitializeable ozAccessManager = AccessManagerUpgradeableInitializeable(instance.authority());
370
+ address ozAccessManagerAddress = address(ozAccessManager);
371
+ InstanceAccessManager instanceAccessManager = instance.getInstanceAccessManager();
372
+ address instanceAccessManagerAddress = address(instanceAccessManager);
291
373
  InstanceReader instanceReader = instance.getInstanceReader();
292
374
  address instanceReaderAddress = address(instanceReader);
293
375
  BundleManager bundleManager = instance.getBundleManager();
294
376
  address bundleManagerAddress = address(bundleManager);
377
+ InstanceStore instanceStore = instance.getInstanceStore();
378
+ address instanceStoreAddress = address(instanceStore);
295
379
 
296
- if(accessManagerAddress == address(0)) { revert ErrorInstanceServiceAccessManagerZero(); }
380
+ if(ozAccessManagerAddress == address(0)) { revert ErrorInstanceServiceOzAccessManagerZero();}
381
+ if(instanceAccessManagerAddress == address(0)) { revert ErrorInstanceServiceInstanceAccessManagerZero(); }
297
382
  if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderZero(); }
298
383
  if(bundleManagerAddress == address(0)) { revert ErrorInstanceServiceBundleManagerZero(); }
384
+ if(instanceStoreAddress == address(0)) { revert ErrorInstanceServiceInstanceStoreZero(); }
299
385
 
300
- if(instance.authority() != accessManagerAddress) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
386
+ if(instance.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
387
+ if(bundleManager.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceBundleManagerAuthorityMismatch(); }
388
+ if(instanceStore.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceInstanceStoreAuthorityMismatch(); }
301
389
  if(instanceReader.getInstance() != instance) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch2(); }
302
390
  if(bundleManager.getInstance() != instance) { revert ErrorInstanceServiceBundleMangerInstanceMismatch(); }
303
391
 
304
- _masterInstanceAccessManager = accessManagerAddress;
392
+ _masterOzAccessManager = ozAccessManagerAddress;
393
+ _masterInstanceAccessManager = instanceAccessManagerAddress;
305
394
  _masterInstance = instanceAddress;
306
395
  _masterInstanceReader = instanceReaderAddress;
307
396
  _masterInstanceBundleManager = bundleManagerAddress;
397
+ _masterInstanceStore = instanceStoreAddress;
308
398
 
309
- IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getMajorVersion()));
399
+ IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getVersion().toMajorPart()));
310
400
  IInstance masterInstance = IInstance(_masterInstance);
311
401
  IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
312
402
  masterInstanceNftId = info.nftId;
313
-
314
- // masterInstance.linkToRegisteredNftId();
315
403
  }
316
404
 
317
405
  function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
@@ -325,19 +413,16 @@ contract InstanceService is
325
413
  _masterInstanceReader = instanceReaderAddress;
326
414
  }
327
415
 
328
- // TODO access restriction
329
- function upgradeInstanceReader(NftId instanceNftId) external {
416
+ function upgradeInstanceReader(NftId instanceNftId)
417
+ external
418
+ onlyInstanceOwner(instanceNftId)
419
+ {
330
420
  IRegistry registry = getRegistry();
331
421
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
332
422
  Instance instance = Instance(instanceInfo.objectAddress);
333
- address owner = instance.getOwner();
334
-
335
- if (msg.sender != owner) {
336
- revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
337
- }
338
423
 
339
424
  InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
340
- upgradedInstanceReaderClone.initialize(address(registry), address(instance));
425
+ upgradedInstanceReaderClone.initialize(address(instance));
341
426
  instance.setInstanceReader(upgradedInstanceReaderClone);
342
427
  }
343
428
 
@@ -358,7 +443,7 @@ contract InstanceService is
358
443
  }
359
444
 
360
445
  // From IService
361
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
446
+ function getDomain() public pure override returns(ObjectType) {
362
447
  return INSTANCE();
363
448
  }
364
449
 
@@ -376,114 +461,70 @@ contract InstanceService is
376
461
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
377
462
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
378
463
  // owner is InstanceServiceManager deployer
379
- initializeService(registryAddress, owner);
464
+ initializeService(registryAddress, address(0), owner);
380
465
  registerInterface(type(IInstanceService).interfaceId);
381
466
  }
382
467
 
383
- function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
384
- Instance instance = Instance(instanceAddress);
385
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
386
- return accessManager.hasRole(role, account);
387
- }
468
+ // all gif targets MUST be childs of instanceNftId
469
+ function createGifTarget(
470
+ NftId instanceNftId,
471
+ address targetAddress,
472
+ string memory targetName,
473
+ bytes4[][] memory selectors,
474
+ RoleId[] memory roles
475
+ )
476
+ external
477
+ onlyRegisteredService
478
+ {
479
+ (
480
+ IInstance instance, // or instanceInfo
481
+ NftId targetNftId // or targetInfo
482
+ ) = _validateInstanceAndComponent(instanceNftId, targetAddress);
388
483
 
389
- function createGifTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
390
- IRegistry registry = getRegistry();
391
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
392
- Instance instance = Instance(instanceInfo.objectAddress);
393
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
484
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
394
485
  accessManager.createGifTarget(targetAddress, targetName);
395
- }
396
-
397
- function grantDistributionDefaultPermissions(NftId instanceNftId, address distributionAddress, string memory distributionName) external onlyRegisteredService {
398
- IRegistry registry = getRegistry();
399
- IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionAddress);
400
-
401
- if (distributionInfo.objectType != DISTRIBUTION()) {
402
- revert ErrorInstanceServiceInvalidComponentType(distributionAddress, DISTRIBUTION(), distributionInfo.objectType);
486
+ // set proposed target config
487
+ // TODO restriction: gif targets are set only once and only here?
488
+ // assume config is a mix of gif and custom roles and no further configuration by INSTANCE_OWNER_ROLE is ever needed?
489
+ for(uint roleIdx = 0; roleIdx < roles.length; roleIdx++)
490
+ {
491
+ accessManager.setCoreTargetFunctionRole(targetName, selectors[roleIdx], roles[roleIdx]);
403
492
  }
404
-
405
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
406
- Instance instance = Instance(instanceInfo.objectAddress);
407
- InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
408
-
409
- bytes4[] memory fctSelectors = new bytes4[](1);
410
- fctSelectors[0] = IDistributionComponent.setFees.selector;
411
- instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors, DISTRIBUTION_OWNER_ROLE());
412
-
413
- bytes4[] memory fctSelectors2 = new bytes4[](1);
414
- fctSelectors2[0] = IDistributionComponent.processRenewal.selector;
415
- instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors2, PRODUCT_SERVICE_ROLE());
416
493
  }
417
494
 
418
- function grantPoolDefaultPermissions(NftId instanceNftId, address poolAddress, string memory poolName) external onlyRegisteredService {
495
+ // TODO called by component, but target can be component helper...so needs target name
496
+ // TODO check that targetName associated with component...how???
497
+ function setComponentLocked(bool locked) onlyComponent external {
498
+ address componentAddress = msg.sender;
419
499
  IRegistry registry = getRegistry();
420
- IRegistry.ObjectInfo memory poolInfo = registry.getObjectInfo(poolAddress);
500
+ NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
421
501
 
422
- if (poolInfo.objectType != POOL()) {
423
- revert ErrorInstanceServiceInvalidComponentType(poolAddress, POOL(), poolInfo.objectType);
424
- }
502
+ IInstance instance = IInstance(
503
+ registry.getObjectInfo(
504
+ instanceNftId).objectAddress);
425
505
 
426
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
427
- Instance instance = Instance(instanceInfo.objectAddress);
428
- InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
429
-
430
- bytes4[] memory fctSelectors = new bytes4[](1);
431
- fctSelectors[0] = IPoolComponent.setFees.selector;
432
- instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors, POOL_OWNER_ROLE());
433
-
434
- bytes4[] memory fctSelectors2 = new bytes4[](1);
435
- fctSelectors2[0] = IPoolComponent.verifyApplication.selector;
436
- instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors2, POLICY_SERVICE_ROLE());
437
-
438
- // bundle owner specific functions
439
- bytes4[] memory fctSelectors3 = new bytes4[](7);
440
- fctSelectors3[0] = IPoolComponent.stake.selector;
441
- fctSelectors3[1] = IPoolComponent.unstake.selector;
442
- fctSelectors3[2] = IPoolComponent.extend.selector;
443
- fctSelectors3[3] = IPoolComponent.lockBundle.selector;
444
- fctSelectors3[4] = IPoolComponent.unlockBundle.selector;
445
- fctSelectors3[5] = IPoolComponent.close.selector;
446
- fctSelectors3[6] = IPoolComponent.setBundleFee.selector;
447
- instanceAccessManager.setTargetFunctionRole(
448
- poolName,
449
- fctSelectors3,
450
- IPoolComponent(poolAddress).getBundleOwnerRole());
506
+ instance.getInstanceAccessManager().setTargetLockedByService(
507
+ componentAddress,
508
+ locked);
451
509
  }
452
510
 
453
- function grantProductDefaultPermissions(NftId instanceNftId, address productAddress, string memory productName) external onlyRegisteredService {
511
+ function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress)
512
+ internal
513
+ view
514
+ returns (IInstance instance, NftId componentNftId)
515
+ {
454
516
  IRegistry registry = getRegistry();
455
- IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productAddress);
456
-
457
- if (productInfo.objectType != PRODUCT()) {
458
- revert ErrorInstanceServiceInvalidComponentType(productAddress, PRODUCT(), productInfo.objectType);
459
- }
460
-
461
517
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
462
- Instance instance = Instance(instanceInfo.objectAddress);
463
- InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
464
-
465
- bytes4[] memory fctSelectors = new bytes4[](1);
466
- fctSelectors[0] = IProductComponent.setFees.selector;
467
- instanceAccessManager.setTargetFunctionRole(productName, fctSelectors, PRODUCT_OWNER_ROLE());
468
- }
518
+ if(instanceInfo.objectType != INSTANCE()) {
519
+ revert ErrorInstanceServiceNotInstance(instanceNftId);
520
+ }
469
521
 
470
- function setTargetLocked(string memory targetName, bool locked) external {
471
- address componentAddress = msg.sender;
472
- IRegistry registry = getRegistry();
473
522
  IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
474
- if (componentInfo.nftId.eqz()) {
475
- revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
523
+ if(componentInfo.parentNftId != instanceNftId) {
524
+ revert ErrorInstanceServiceInstanceComponentMismatch(instanceNftId, componentInfo.nftId);
476
525
  }
477
526
 
478
- // TODO validate component type
479
-
480
-
481
- address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
482
- IInstance instance = IInstance(instanceAddress);
483
-
484
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
485
- accessManager.setTargetClosed(targetName, locked);
527
+ instance = Instance(instanceInfo.objectAddress);
528
+ componentNftId = componentInfo.nftId;
486
529
  }
487
-
488
- }
489
-
530
+ }