@etherisc/gif-next 0.0.2-e1f23dc-329 → 0.0.2-e26c262-698

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 (379) hide show
  1. package/README.md +136 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +832 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +931 -230
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → components/IComponent.sol/IComponent.json} +211 -172
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +743 -26
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +755 -50
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +582 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +817 -243
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +628 -190
  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 +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +91 -2
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1058 -366
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +252 -165
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +929 -1212
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +571 -177
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +126 -254
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +412 -310
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +302 -109
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +189 -177
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +69 -43
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1093 -0
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1229 -213
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +440 -79
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +630 -0
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IClaimService.sol/IClaimService.json} +146 -179
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +727 -160
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +540 -0
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +84 -304
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +39 -394
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1021 -0
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +278 -380
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +298 -89
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +211 -528
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +292 -115
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +244 -133
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +158 -215
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +257 -235
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +202 -318
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +31 -183
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +127 -170
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +148 -227
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  173. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  175. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  177. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  179. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  181. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  183. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  186. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  194. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  196. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  198. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  200. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  202. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  204. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  208. package/contracts/components/Component.sol +251 -0
  209. package/contracts/components/Distribution.sol +200 -79
  210. package/contracts/components/IComponent.sol +74 -0
  211. package/contracts/components/IDistributionComponent.sol +44 -17
  212. package/contracts/components/IPoolComponent.sol +88 -37
  213. package/contracts/components/IProductComponent.sol +10 -5
  214. package/contracts/components/Pool.sol +215 -158
  215. package/contracts/components/Product.sol +125 -116
  216. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  217. package/contracts/instance/BundleManager.sol +127 -0
  218. package/contracts/instance/Cloneable.sol +51 -0
  219. package/contracts/instance/IInstance.sol +58 -14
  220. package/contracts/instance/IInstanceService.sol +47 -5
  221. package/contracts/instance/Instance.sol +144 -260
  222. package/contracts/instance/InstanceAccessManager.sol +410 -176
  223. package/contracts/instance/InstanceReader.sol +9 -34
  224. package/contracts/instance/InstanceService.sol +418 -121
  225. package/contracts/instance/InstanceServiceManager.sol +6 -9
  226. package/contracts/instance/ObjectManager.sol +82 -0
  227. package/contracts/instance/base/ComponentService.sol +134 -0
  228. package/contracts/instance/base/KeyValueStore.sol +5 -2
  229. package/contracts/instance/base/Lifecycle.sol +11 -2
  230. package/contracts/instance/module/IAccess.sol +36 -20
  231. package/contracts/instance/module/IBundle.sol +2 -1
  232. package/contracts/instance/module/IComponents.sol +35 -0
  233. package/contracts/instance/module/IDistribution.sol +2 -0
  234. package/contracts/instance/module/IPolicy.sol +30 -3
  235. package/contracts/instance/module/ISetup.sol +9 -20
  236. package/contracts/instance/service/ApplicationService.sol +350 -0
  237. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  238. package/contracts/instance/service/BundleService.sol +336 -0
  239. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  240. package/contracts/instance/service/ClaimService.sol +151 -0
  241. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  242. package/contracts/instance/service/DistributionService.sol +408 -29
  243. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  244. package/contracts/instance/service/IApplicationService.sol +82 -0
  245. package/contracts/instance/service/IBundleService.sol +62 -0
  246. package/contracts/instance/service/IClaimService.sol +61 -0
  247. package/contracts/instance/service/IDistributionService.sol +86 -0
  248. package/contracts/instance/service/IPolicyService.sol +72 -0
  249. package/contracts/instance/service/IPoolService.sol +20 -26
  250. package/contracts/instance/service/IProductService.sol +3 -70
  251. package/contracts/instance/service/PolicyService.sol +403 -0
  252. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  253. package/contracts/instance/service/PoolService.sol +150 -131
  254. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  255. package/contracts/instance/service/ProductService.sol +131 -454
  256. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  257. package/contracts/registry/ChainNft.sol +9 -1
  258. package/contracts/registry/IRegistry.sol +39 -19
  259. package/contracts/registry/IRegistryService.sol +30 -13
  260. package/contracts/registry/ITransferInterceptor.sol +1 -0
  261. package/contracts/registry/Registry.sol +243 -224
  262. package/contracts/registry/RegistryAccessManager.sol +216 -0
  263. package/contracts/registry/RegistryService.sol +96 -171
  264. package/contracts/registry/RegistryServiceManager.sol +21 -39
  265. package/contracts/registry/ReleaseManager.sol +322 -0
  266. package/contracts/registry/TokenRegistry.sol +22 -17
  267. package/contracts/shared/ERC165.sol +14 -12
  268. package/contracts/shared/INftOwnable.sol +11 -10
  269. package/contracts/shared/IPolicyHolder.sol +26 -0
  270. package/contracts/shared/IRegisterable.sol +4 -6
  271. package/contracts/shared/IRegistryLinked.sol +12 -0
  272. package/contracts/shared/IService.sol +4 -1
  273. package/contracts/shared/IVersionable.sol +4 -47
  274. package/contracts/shared/NftOwnable.sol +66 -80
  275. package/contracts/shared/PolicyHolder.sol +81 -0
  276. package/contracts/shared/ProxyManager.sol +100 -25
  277. package/contracts/shared/Registerable.sol +16 -32
  278. package/contracts/shared/RegistryLinked.sol +48 -0
  279. package/contracts/shared/Service.sol +25 -22
  280. package/contracts/shared/TokenHandler.sol +11 -5
  281. package/contracts/shared/Versionable.sol +4 -92
  282. package/contracts/test/TestRegisterable.sol +1 -1
  283. package/contracts/test/TestService.sol +4 -3
  284. package/contracts/types/Blocknumber.sol +1 -0
  285. package/contracts/types/ClaimId.sol +52 -0
  286. package/contracts/types/DistributorType.sol +2 -2
  287. package/contracts/types/Fee.sol +1 -0
  288. package/contracts/types/NftId.sol +8 -0
  289. package/contracts/types/NftIdSet.sol +26 -24
  290. package/contracts/types/ObjectType.sol +10 -5
  291. package/contracts/types/PayoutId.sol +54 -0
  292. package/contracts/types/Referral.sol +4 -0
  293. package/contracts/types/RoleId.sol +26 -19
  294. package/contracts/types/Seconds.sol +54 -0
  295. package/contracts/types/StateId.sol +1 -0
  296. package/contracts/types/Timestamp.sol +13 -13
  297. package/contracts/types/UFixed.sol +1 -0
  298. package/contracts/types/Version.sol +1 -0
  299. package/package.json +3 -3
  300. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  301. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  302. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  306. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  310. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  312. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  314. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  316. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  318. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  320. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  322. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  324. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  326. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  329. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  331. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  333. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  335. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  337. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  339. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  341. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  343. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  344. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  345. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  346. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  347. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  348. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  349. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  350. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  351. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  352. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  353. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  354. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  355. package/contracts/components/BaseComponent.sol +0 -91
  356. package/contracts/components/IBaseComponent.sol +0 -25
  357. package/contracts/experiment/cloning/Cloner.sol +0 -47
  358. package/contracts/experiment/errors/Require.sol +0 -38
  359. package/contracts/experiment/errors/Revert.sol +0 -44
  360. package/contracts/experiment/inheritance/A.sol +0 -53
  361. package/contracts/experiment/inheritance/B.sol +0 -28
  362. package/contracts/experiment/inheritance/C.sol +0 -34
  363. package/contracts/experiment/inheritance/IA.sol +0 -13
  364. package/contracts/experiment/inheritance/IB.sol +0 -10
  365. package/contracts/experiment/inheritance/IC.sol +0 -12
  366. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  367. package/contracts/experiment/statemachine/ISM.sol +0 -25
  368. package/contracts/experiment/statemachine/SM.sol +0 -57
  369. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  370. package/contracts/experiment/types/TypeA.sol +0 -47
  371. package/contracts/experiment/types/TypeB.sol +0 -29
  372. package/contracts/instance/AccessManagedSimple.sol +0 -115
  373. package/contracts/instance/AccessManagerSimple.sol +0 -692
  374. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  375. package/contracts/instance/base/ComponentServiceBase.sol +0 -134
  376. package/contracts/instance/base/IInstanceBase.sol +0 -23
  377. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  378. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  379. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -2,158 +2,417 @@
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 {AccessManagerSimple} from "./AccessManagerSimple.sol";
7
- import {InstanceAccessManager} from "./InstanceAccessManager.sol";
8
7
  import {Instance} from "./Instance.sol";
8
+ import {IInstance} from "./IInstance.sol";
9
+ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
9
10
  import {IInstanceService} from "./IInstanceService.sol";
10
11
  import {InstanceReader} from "./InstanceReader.sol";
12
+ import {BundleManager} from "./BundleManager.sol";
13
+ import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
11
14
  import {IRegistry} from "../registry/IRegistry.sol";
12
- import {Registry} from "../registry/Registry.sol";
13
- import {RegistryService} from "../registry/RegistryService.sol";
15
+ import {IRegistryService} from "../registry/IRegistryService.sol";
16
+ import {ChainNft} from "../registry/ChainNft.sol";
14
17
  import {Service} from "../../contracts/shared/Service.sol";
15
18
  import {IService} from "../shared/IService.sol";
16
- import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
17
- import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
19
+ import {NftId} from "../../contracts/types/NftId.sol";
18
20
  import {RoleId} from "../types/RoleId.sol";
19
- import {VersionLib} from "../types/Version.sol";
20
- import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../types/RoleId.sol";
21
-
22
- contract InstanceService is Service, IInstanceService {
21
+ 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";
22
+ import {ObjectType, INSTANCE, BUNDLE, APPLICATION, POLICY, CLAIM, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
23
+ import {IDistributionComponent} from "../components/IDistributionComponent.sol";
24
+ import {IPoolComponent} from "../components/IPoolComponent.sol";
25
+ import {IProductComponent} from "../components/IProductComponent.sol";
23
26
 
24
- address internal _registryAddress;
25
- address internal _accessManagerMaster;
26
- address internal _instanceMaster;
27
- address internal _instanceReaderMaster;
27
+ contract InstanceService is
28
+ Service,
29
+ IInstanceService
30
+ {
31
+ address internal _masterOzAccessManager;
32
+ address internal _masterInstanceAccessManager;
33
+ address internal _masterInstance;
34
+ address internal _masterInstanceReader;
35
+ address internal _masterInstanceBundleManager;
28
36
 
29
37
  // TODO update to real hash when instance is stable
30
38
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
31
- string public constant NAME = "InstanceService";
39
+
40
+ modifier onlyInstanceOwner(NftId instanceNftId) {
41
+ if(msg.sender != getRegistry().ownerOf(instanceNftId)) {
42
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
43
+ }
44
+ _;
45
+ }
46
+ // TODO check service domain?
47
+ // TODO check release version?
48
+ modifier onlyRegisteredService() {
49
+ if (! getRegistry().isRegisteredService(msg.sender)) {
50
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
51
+ }
52
+ _;
53
+ }
54
+ // TODO check release version?
55
+ modifier onlyComponent() {
56
+ if (! getRegistry().isRegisteredComponent(msg.sender)) {
57
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
58
+ }
59
+ _;
60
+ }
32
61
 
33
62
  function createInstanceClone()
34
63
  external
35
64
  returns (
36
- AccessManagerSimple clonedAccessManager,
65
+ AccessManagerUpgradeableInitializeable clonedOzAccessManager,
66
+ InstanceAccessManager clonedInstanceAccessManager,
37
67
  Instance clonedInstance,
38
- NftId instanceNftId,
39
- InstanceReader clonedInstanceReader
68
+ NftId clonedInstanceNftId,
69
+ InstanceReader clonedInstanceReader,
70
+ BundleManager clonedBundleManager
40
71
  )
41
72
  {
42
73
  address instanceOwner = msg.sender;
43
- Registry registry = Registry(_registryAddress);
44
- NftId registryNftId = registry.getNftId(_registryAddress);
45
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
46
- RegistryService registryService = RegistryService(registryServiceAddress);
47
-
48
- // initially set the authority of the access managar to this (being the instance service).
49
- // This will allow the instance service to bootstrap the authorizations of the instance
50
- // and then transfer the ownership of the access manager to the instance owner once everything is setup
51
- clonedAccessManager = AccessManagerSimple(Clones.clone(_accessManagerMaster));
52
- clonedAccessManager.initialize(address(this));
53
-
54
- clonedInstance = Instance(Clones.clone(_instanceMaster));
55
- clonedInstance.initialize(address(clonedAccessManager), _registryAddress, registryNftId, msg.sender);
56
- ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
57
- instanceNftId = info.nftId;
58
-
59
- clonedInstanceReader = InstanceReader(Clones.clone(address(_instanceReaderMaster)));
60
- clonedInstanceReader.initialize(_registryAddress, instanceNftId);
74
+ IRegistry registry = getRegistry();
75
+ address registryAddress = address(registry);
76
+ NftId registryNftId = registry.getNftId(registryAddress);
77
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
78
+ IRegistryService registryService = IRegistryService(registryServiceAddress);
61
79
 
62
- _grantInitialAuthorizations(clonedAccessManager, clonedInstance);
80
+ clonedOzAccessManager = AccessManagerUpgradeableInitializeable(
81
+ Clones.clone(_masterOzAccessManager));
63
82
 
64
- clonedInstance.setInstanceReader(clonedInstanceReader);
83
+ // initially grants ADMIN_ROLE to this (being the instance service).
84
+ // This will allow the instance service to bootstrap the authorizations of the instance.
85
+ // Instance service will not use oz access manager directlly but through instance access manager instead
86
+ // Instance service will renounce ADMIN_ROLE when bootstraping is finished
87
+ clonedOzAccessManager.initialize(address(this));
88
+
89
+ clonedInstance = Instance(Clones.clone(_masterInstance));
90
+ clonedInstance.initialize(
91
+ address(clonedOzAccessManager),
92
+ registryAddress,
93
+ instanceOwner);
65
94
 
66
- // to complete setup switch instance ownership to the instance owner
67
- // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
68
- clonedAccessManager.grantRole(ADMIN_ROLE().toInt(), instanceOwner, 0);
69
- clonedAccessManager.revokeRole(ADMIN_ROLE().toInt(), address(this));
95
+ clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
96
+ clonedInstanceReader.initialize(address(clonedInstance));
97
+ clonedInstance.setInstanceReader(clonedInstanceReader);
98
+
99
+ clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
100
+ clonedBundleManager.initialize(address(clonedInstance));
101
+ clonedInstance.setBundleManager(clonedBundleManager);
102
+
103
+ clonedInstanceAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
104
+ clonedOzAccessManager.grantRole(ADMIN_ROLE().toInt(), address(clonedInstanceAccessManager), 0);
105
+ clonedInstanceAccessManager.initialize(address(clonedInstance));
106
+ clonedInstance.setInstanceAccessManager(clonedInstanceAccessManager);
107
+
108
+ // TODO amend setters with instance specific , policy manager ...
70
109
 
71
- emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), instanceNftId);
110
+ _grantInitialAuthorizations(clonedInstanceAccessManager, clonedInstance, clonedBundleManager, instanceOwner);
111
+
112
+ clonedOzAccessManager.renounceRole(ADMIN_ROLE().toInt(), address(this));
113
+
114
+ IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
115
+ clonedInstanceNftId = info.nftId;
116
+ // clonedInstance.linkToRegisteredNftId();
117
+
118
+ emit LogInstanceCloned(
119
+ address(clonedOzAccessManager),
120
+ address(clonedInstanceAccessManager),
121
+ address(clonedInstance),
122
+ address(clonedBundleManager),
123
+ address(clonedInstanceReader),
124
+ clonedInstanceNftId);
72
125
  }
73
126
 
74
- function _grantInitialAuthorizations(AccessManagerSimple clonedAccessManager, Instance clonedInstance) internal {
75
- address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
76
- clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
77
- bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
127
+ function _grantInitialAuthorizations(
128
+ InstanceAccessManager clonedAccessManager,
129
+ Instance clonedInstance,
130
+ BundleManager clonedBundleManager,
131
+ address instanceOwner)
132
+ internal
133
+ {
134
+ _createCoreAndGifRoles(clonedAccessManager);
135
+ _createCoreTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
136
+ _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
137
+ _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
138
+ _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
139
+ _grantApplicationServiceAuthorizations(clonedAccessManager, clonedInstance);
140
+ _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
141
+ _grantClaimServiceAuthorizations(clonedAccessManager, clonedInstance);
142
+ _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
143
+ _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
144
+ _grantInstanceOwnerAuthorizations(clonedAccessManager, instanceOwner);
145
+ }
146
+
147
+ function _createCoreAndGifRoles(InstanceAccessManager clonedAccessManager) internal {
148
+ // default roles controlled by ADMIN_ROLE -> core roles
149
+ // all set/granted only once during cloning (the only exception is INSTANCE_OWNER_ROLE, hooked to instance nft)
150
+ clonedAccessManager.createCoreRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
151
+ clonedAccessManager.createCoreRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
152
+ clonedAccessManager.createCoreRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
153
+ clonedAccessManager.createCoreRole(APPLICATION_SERVICE_ROLE(), "ApplicationServiceRole");
154
+ clonedAccessManager.createCoreRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
155
+ clonedAccessManager.createCoreRole(CLAIM_SERVICE_ROLE(), "ClaimServiceRole");
156
+ clonedAccessManager.createCoreRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
157
+ clonedAccessManager.createCoreRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
158
+ // default roles controlled by INSTANCE_OWNER_ROLE -> gif roles
159
+ clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole", INSTANCE_OWNER_ROLE());
160
+ clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole", INSTANCE_OWNER_ROLE());
161
+ clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole", INSTANCE_OWNER_ROLE());
162
+ }
163
+
164
+ function _createCoreTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
165
+ clonedAccessManager.createCoreTarget(address(clonedAccessManager), "InstanceAccessManager");
166
+ clonedAccessManager.createCoreTarget(address(clonedInstance), "Instance");
167
+ clonedAccessManager.createCoreTarget(address(clonedBundleManager), "BundleManager");
168
+ }
169
+
170
+ function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
171
+ // configure authorization for distribution service on instance
172
+ address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion());
173
+ clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
174
+ bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
78
175
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
79
176
  instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
80
- clonedAccessManager.setTargetFunctionRole(
81
- address(clonedInstance),
177
+ instanceDistributionServiceSelectors[2] = clonedInstance.createDistributorType.selector;
178
+ instanceDistributionServiceSelectors[3] = clonedInstance.updateDistributorType.selector;
179
+ instanceDistributionServiceSelectors[4] = clonedInstance.updateDistributorTypeState.selector;
180
+ instanceDistributionServiceSelectors[5] = clonedInstance.createDistributor.selector;
181
+ instanceDistributionServiceSelectors[6] = clonedInstance.updateDistributor.selector;
182
+ instanceDistributionServiceSelectors[7] = clonedInstance.updateDistributorState.selector;
183
+ instanceDistributionServiceSelectors[8] = clonedInstance.createReferral.selector;
184
+ instanceDistributionServiceSelectors[9] = clonedInstance.updateReferral.selector;
185
+ instanceDistributionServiceSelectors[10] = clonedInstance.updateReferralState.selector;
186
+ clonedAccessManager.setCoreTargetFunctionRole(
187
+ "Instance",
82
188
  instanceDistributionServiceSelectors,
83
- DISTRIBUTION_SERVICE_ROLE().toInt());
189
+ DISTRIBUTION_SERVICE_ROLE());
190
+ }
84
191
 
85
- address poolServiceAddress = _registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
86
- clonedAccessManager.grantRole(POOL_SERVICE_ROLE().toInt(), address(poolServiceAddress), 0);
192
+ function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
193
+ // configure authorization for pool service on instance
194
+ address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getMajorVersion());
195
+ clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
87
196
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
88
197
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
89
198
  instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
90
- instancePoolServiceSelectors[2] = clonedInstance.createBundle.selector;
91
- instancePoolServiceSelectors[3] = clonedInstance.updateBundle.selector;
92
- clonedAccessManager.setTargetFunctionRole(
93
- address(clonedInstance),
199
+ clonedAccessManager.setCoreTargetFunctionRole(
200
+ "Instance",
94
201
  instancePoolServiceSelectors,
95
- POOL_SERVICE_ROLE().toInt());
202
+ POOL_SERVICE_ROLE());
203
+ }
96
204
 
97
- address productServiceAddress = _registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
98
- clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE().toInt(), address(productServiceAddress), 0);
99
- bytes4[] memory instanceProductServiceSelectors = new bytes4[](9);
205
+ function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
206
+ // configure authorization for product service on instance
207
+ address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getMajorVersion());
208
+ clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
209
+ bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
100
210
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
101
211
  instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
102
212
  instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
103
213
  instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
104
214
  instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
105
- instanceProductServiceSelectors[5] = clonedInstance.createPolicy.selector;
106
- instanceProductServiceSelectors[6] = clonedInstance.updatePolicy.selector;
107
- instanceProductServiceSelectors[7] = clonedInstance.updatePolicyState.selector;
108
- clonedAccessManager.setTargetFunctionRole(
109
- address(clonedInstance),
215
+ clonedAccessManager.setCoreTargetFunctionRole(
216
+ "Instance",
110
217
  instanceProductServiceSelectors,
111
- PRODUCT_SERVICE_ROLE().toInt());
218
+ PRODUCT_SERVICE_ROLE());
219
+ }
220
+
221
+ function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
222
+ // configure authorization for application services on instance
223
+ address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getMajorVersion());
224
+ clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
225
+ bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
226
+ instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
227
+ instanceApplicationServiceSelectors[1] = clonedInstance.updateApplication.selector;
228
+ instanceApplicationServiceSelectors[2] = clonedInstance.updateApplicationState.selector;
229
+ clonedAccessManager.setCoreTargetFunctionRole(
230
+ "Instance",
231
+ instanceApplicationServiceSelectors,
232
+ APPLICATION_SERVICE_ROLE());
233
+ }
234
+
235
+ function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
236
+ // configure authorization for policy services on instance
237
+ address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getMajorVersion());
238
+ clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), policyServiceAddress);
239
+ bytes4[] memory instancePolicyServiceSelectors = new bytes4[](2);
240
+ instancePolicyServiceSelectors[0] = clonedInstance.updatePolicy.selector;
241
+ instancePolicyServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
242
+ clonedAccessManager.setCoreTargetFunctionRole(
243
+ "Instance",
244
+ instancePolicyServiceSelectors,
245
+ POLICY_SERVICE_ROLE());
246
+ }
247
+
248
+ function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
249
+ // configure authorization for claim/payout services on instance
250
+ address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getMajorVersion());
251
+ clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), claimServiceAddress);
252
+ // TODO add claims function authz
253
+ bytes4[] memory instanceClaimServiceSelectors = new bytes4[](0);
254
+ // instanceClaimServiceSelectors[0] = clonedInstance.updatePolicy.selector;
255
+ // instanceClaimServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
256
+ clonedAccessManager.setCoreTargetFunctionRole(
257
+ "Instance",
258
+ instanceClaimServiceSelectors,
259
+ CLAIM_SERVICE_ROLE());
260
+ }
261
+
262
+ function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
263
+ // configure authorization for bundle service on instance
264
+ address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getMajorVersion());
265
+ clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
266
+ bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
267
+ instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
268
+ instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
269
+ instanceBundleServiceSelectors[2] = clonedInstance.updateBundleState.selector;
270
+ clonedAccessManager.setCoreTargetFunctionRole(
271
+ "Instance",
272
+ instanceBundleServiceSelectors,
273
+ BUNDLE_SERVICE_ROLE());
274
+
275
+ // configure authorization for bundle service on bundle manager
276
+ bytes4[] memory bundleManagerBundleServiceSelectors = new bytes4[](5);
277
+ bundleManagerBundleServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
278
+ bundleManagerBundleServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
279
+ bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
280
+ bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
281
+ bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
282
+ clonedAccessManager.setCoreTargetFunctionRole(
283
+ "BundleManager",
284
+ bundleManagerBundleServiceSelectors,
285
+ BUNDLE_SERVICE_ROLE());
286
+ }
287
+
288
+ function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
289
+ // configure authorization for instance service on instance
290
+ address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
291
+ clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
292
+ bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
293
+ instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
294
+ clonedAccessManager.setCoreTargetFunctionRole(
295
+ "Instance",
296
+ instanceInstanceServiceSelectors,
297
+ INSTANCE_SERVICE_ROLE());
298
+
299
+ // configure authorizations for instance service on instance access manager
300
+ bytes4[] memory accessManagerInstanceServiceSelectors = new bytes4[](3);
301
+ accessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
302
+ accessManagerInstanceServiceSelectors[1] = clonedAccessManager.setTargetLocked.selector;
303
+ accessManagerInstanceServiceSelectors[2] = clonedAccessManager.setCoreTargetFunctionRole.selector;
304
+ clonedAccessManager.setCoreTargetFunctionRole(
305
+ "InstanceAccessManager",
306
+ accessManagerInstanceServiceSelectors,
307
+ INSTANCE_SERVICE_ROLE());
112
308
  }
113
309
 
114
- function setAccessManagerMaster(address accessManagerMaster) external {
115
- require(
116
- _accessManagerMaster == address(0),
117
- "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
118
- _accessManagerMaster = accessManagerMaster;
310
+ function _grantInstanceOwnerAuthorizations(InstanceAccessManager clonedAccessManager, address instanceOwner) internal {
311
+ // configure authorization for instance owner on instance access manager
312
+ // instance owner role is granted/revoked ONLY by INSTANCE_ROLE
313
+ bytes4[] memory accessManagerInstanceOwnerSelectors = new bytes4[](3);
314
+ accessManagerInstanceOwnerSelectors[0] = clonedAccessManager.createRole.selector;
315
+ accessManagerInstanceOwnerSelectors[1] = clonedAccessManager.createTarget.selector;
316
+ accessManagerInstanceOwnerSelectors[2] = clonedAccessManager.setTargetFunctionRole.selector;
317
+ clonedAccessManager.setCoreTargetFunctionRole(
318
+ "InstanceAccessManager",
319
+ accessManagerInstanceOwnerSelectors,
320
+ INSTANCE_OWNER_ROLE());
321
+ }
322
+
323
+
324
+ function setAndRegisterMasterInstance(address instanceAddress)
325
+ external
326
+ onlyOwner
327
+ returns(NftId masterInstanceNftId)
328
+ {
329
+ if(_masterInstance != address(0)) { revert ErrorInstanceServiceMasterInstanceAlreadySet(); }
330
+ if(_masterOzAccessManager != address(0)) { revert ErrorInstanceServiceMasterOzAccessManagerAlreadySet(); }
331
+ if(_masterInstanceAccessManager != address(0)) { revert ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet(); }
332
+ if(_masterInstanceBundleManager != address(0)) { revert ErrorInstanceServiceMasterBundleManagerAlreadySet(); }
333
+
334
+ if(instanceAddress == address(0)) { revert ErrorInstanceServiceInstanceAddressZero(); }
335
+
336
+ IInstance instance = IInstance(instanceAddress);
337
+ AccessManagerUpgradeableInitializeable ozAccessManager = AccessManagerUpgradeableInitializeable(instance.authority());
338
+ address ozAccessManagerAddress = address(ozAccessManager);
339
+ InstanceAccessManager instanceAccessManager = instance.getInstanceAccessManager();
340
+ address instanceAccessManagerAddress = address(instanceAccessManager);
341
+ InstanceReader instanceReader = instance.getInstanceReader();
342
+ address instanceReaderAddress = address(instanceReader);
343
+ BundleManager bundleManager = instance.getBundleManager();
344
+ address bundleManagerAddress = address(bundleManager);
345
+
346
+ if(ozAccessManagerAddress == address(0)) { revert ErrorInstanceServiceOzAccessManagerZero();}
347
+ if(instanceAccessManagerAddress == address(0)) { revert ErrorInstanceServiceInstanceAccessManagerZero(); }
348
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderZero(); }
349
+ if(bundleManagerAddress == address(0)) { revert ErrorInstanceServiceBundleManagerZero(); }
350
+
351
+ if(instance.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
352
+ if(bundleManager.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceBundleManagerAuthorityMismatch(); }
353
+ if(instanceReader.getInstance() != instance) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch2(); }
354
+ if(bundleManager.getInstance() != instance) { revert ErrorInstanceServiceBundleMangerInstanceMismatch(); }
355
+
356
+ _masterOzAccessManager = ozAccessManagerAddress;
357
+ _masterInstanceAccessManager = instanceAccessManagerAddress;
358
+ _masterInstance = instanceAddress;
359
+ _masterInstanceReader = instanceReaderAddress;
360
+ _masterInstanceBundleManager = bundleManagerAddress;
361
+
362
+ IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getMajorVersion()));
363
+ IInstance masterInstance = IInstance(_masterInstance);
364
+ IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
365
+ masterInstanceNftId = info.nftId;
366
+
367
+ // masterInstance.linkToRegisteredNftId();
119
368
  }
120
369
 
121
- function setInstanceMaster(address instanceMaster) external {
122
- require(
123
- _instanceMaster == address(0),
124
- "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
125
- _instanceMaster = instanceMaster;
370
+ function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
371
+ if(_masterInstanceReader == address(0)) { revert ErrorInstanceServiceMasterInstanceReaderNotSet(); }
372
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderAddressZero(); }
373
+ if(instanceReaderAddress == _masterInstanceReader) { revert ErrorInstanceServiceInstanceReaderSameAsMasterInstanceReader(); }
374
+
375
+ InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
376
+ if(instanceReader.getInstance() != IInstance(_masterInstance)) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch(); }
377
+
378
+ _masterInstanceReader = instanceReaderAddress;
126
379
  }
127
380
 
128
- function setInstanceReaderMaster(address instanceReaderMaster) external {
129
- require(
130
- _instanceReaderMaster == address(0),
131
- "ERROR:CRD-003:INSTANCE_READER_MASTER_ALREADY_SET");
132
- _instanceReaderMaster = instanceReaderMaster;
381
+ function upgradeInstanceReader(NftId instanceNftId)
382
+ external
383
+ onlyInstanceOwner(instanceNftId)
384
+ {
385
+ IRegistry registry = getRegistry();
386
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
387
+ Instance instance = Instance(instanceInfo.objectAddress);
388
+
389
+ InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
390
+ upgradedInstanceReaderClone.initialize(address(instance));
391
+ instance.setInstanceReader(upgradedInstanceReaderClone);
133
392
  }
134
393
 
135
- function getInstanceReaderMaster() external view returns (address) {
136
- return _instanceReaderMaster;
394
+ function getMasterInstanceReader() external view returns (address) {
395
+ return _masterInstanceReader;
137
396
  }
138
397
 
139
- function getInstanceMaster() external view returns (address) {
140
- return _instanceMaster;
398
+ function getMasterInstance() external view returns (address) {
399
+ return _masterInstance;
141
400
  }
142
401
 
143
- function getAccessManagerMaster() external view returns (address) {
144
- return _accessManagerMaster;
402
+ function getMasterInstanceAccessManager() external view returns (address) {
403
+ return _masterInstanceAccessManager;
404
+ }
405
+
406
+ function getMasterInstanceBundleManager() external view returns (address) {
407
+ return _masterInstanceBundleManager;
145
408
  }
146
409
 
147
410
  // From IService
148
- function getName() public pure override(IService, Service) returns(string memory) {
149
- return NAME;
411
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
412
+ return INSTANCE();
150
413
  }
151
414
 
152
415
  /// @dev top level initializer
153
- // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
154
- // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
155
- // 3) deploy registry -> pass registry service address as constructor argument
156
- // registry is getting instantiated and locked to registry service address forever
157
416
  function _initialize(
158
417
  address owner,
159
418
  bytes memory data
@@ -162,37 +421,75 @@ contract InstanceService is Service, IInstanceService {
162
421
  initializer
163
422
  virtual override
164
423
  {
165
- // bytes memory encodedConstructorArguments = abi.encode(
166
- // _registryAddress);
167
-
168
- // bytes memory instanceCreationCode = ContractDeployerLib.getCreationCode(
169
- // instanceByteCodeWithInitCode,
170
- // encodedConstructorArguments);
171
-
172
- // address instanceAddress = ContractDeployerLib.deploy(
173
- // instanceCreationCode,
174
- // INSTANCE_CREATION_CODE_HASH);
175
-
176
- address initialOwner = address(0);
177
- (_registryAddress, initialOwner) = abi.decode(data, (address, address));
424
+ address initialOwner;
425
+ address registryAddress;
426
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
178
427
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
179
428
  // owner is InstanceServiceManager deployer
180
- _initializeService(_registryAddress, owner);
181
-
182
- _registerInterface(type(IService).interfaceId);
183
- _registerInterface(type(IInstanceService).interfaceId);
429
+ initializeService(registryAddress, owner);
430
+ registerInterface(type(IInstanceService).interfaceId);
184
431
  }
185
432
 
186
- function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
187
- IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
188
- address instanceAddress = instanceObjectInfo.objectAddress;
189
- Instance instance = Instance(instanceAddress);
190
- AccessManagerSimple accessManager = AccessManagerSimple(instance.authority());
191
- (bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
192
- if (executionDelay > 0) {
193
- return false;
194
- }
195
- return isMember;
433
+ // all gif targets MUST be childs of instanceNftId
434
+ function createGifTarget(
435
+ NftId instanceNftId,
436
+ address targetAddress,
437
+ string memory targetName,
438
+ bytes4[][] memory selectors,
439
+ RoleId[] memory roles
440
+ )
441
+ external
442
+ onlyRegisteredService
443
+ {
444
+ (
445
+ IInstance instance, // or instanceInfo
446
+ NftId targetNftId // or targetInfo
447
+ ) = _validateInstanceAndComponent(instanceNftId, targetAddress);
448
+
449
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
450
+ accessManager.createGifTarget(targetAddress, targetName);
451
+ // set proposed target config
452
+ // TODO restriction: for gif targets can set only once and only here?
453
+ // assume config is a mix of gif and custom roles and no further configuration by INSTANCE_OWNER_ROLE is ever needed?
454
+ for(uint roleIdx = 0; roleIdx < roles.length; roleIdx++)
455
+ {
456
+ accessManager.setCoreTargetFunctionRole(targetName, selectors[roleIdx], roles[roleIdx]);
457
+ }
196
458
  }
197
- }
198
459
 
460
+ // TODO called by component, but target can be component helper...so needs target name
461
+ // TODO check that targetName associated with component...how???
462
+ //function setTargetLocked(string memory targetName, bool locked) onlyComponent external {
463
+ function setComponentLocked(bool locked) onlyComponent external {
464
+ address componentAddress = msg.sender;
465
+ IRegistry registry = getRegistry();
466
+ NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
467
+ address instanceAddress = registry.getObjectInfo(instanceNftId).objectAddress;
468
+ IInstance instance = IInstance(instanceAddress);
469
+
470
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
471
+ // TODO setLocked by target address?
472
+ string memory componentName = ShortStrings.toString(accessManager.getTargetInfo(componentAddress).name);
473
+ accessManager.setTargetLocked(componentName, locked);
474
+ }
475
+
476
+ function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress)
477
+ internal
478
+ view
479
+ returns (IInstance instance, NftId componentNftId)
480
+ {
481
+ IRegistry registry = getRegistry();
482
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
483
+ if(instanceInfo.objectType != INSTANCE()) {
484
+ revert ErrorInstanceServiceNotInstance(instanceNftId);
485
+ }
486
+
487
+ IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
488
+ if(componentInfo.parentNftId != instanceNftId) {
489
+ revert ErrorInstanceServiceInstanceComponentMismatch(instanceNftId, componentInfo.nftId);
490
+ }
491
+
492
+ instance = Instance(instanceInfo.objectAddress);
493
+ componentNftId = componentInfo.nftId;
494
+ }
495
+ }