@etherisc/gif-next 0.0.2-d02cb80-460 → 0.0.2-d086e6d-456

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 (381) hide show
  1. package/README.md +78 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +853 -296
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +225 -89
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +846 -57
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +725 -316
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +524 -240
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +15 -15
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -79
  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 +1038 -395
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +290 -220
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1038 -784
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +432 -186
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +137 -270
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +448 -418
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +303 -138
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -40
  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} +278 -157
  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 +61 -67
  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 +1058 -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 +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +625 -290
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +356 -79
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +844 -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 +1385 -247
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +450 -73
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +646 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +278 -264
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +227 -194
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +791 -134
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +216 -250
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +502 -133
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +95 -157
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +474 -347
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +321 -96
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +801 -255
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +307 -78
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +308 -209
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +305 -76
  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 +95 -157
  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 +195 -148
  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 +213 -202
  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/Amount.sol/AmountLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  170. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  172. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  174. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  175. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  177. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  184. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  185. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  188. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  190. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  192. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  194. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  196. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  198. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  200. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  202. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  204. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  210. package/contracts/components/Component.sol +253 -0
  211. package/contracts/components/Distribution.sol +200 -83
  212. package/contracts/components/IComponent.sol +76 -0
  213. package/contracts/components/IDistributionComponent.sol +44 -17
  214. package/contracts/components/IPoolComponent.sol +88 -41
  215. package/contracts/components/IProductComponent.sol +10 -5
  216. package/contracts/components/Pool.sol +217 -185
  217. package/contracts/components/Product.sol +125 -124
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
  219. package/contracts/instance/BundleManager.sol +14 -16
  220. package/contracts/instance/Cloneable.sol +7 -2
  221. package/contracts/instance/IInstance.sol +52 -14
  222. package/contracts/instance/IInstanceService.sol +39 -9
  223. package/contracts/instance/Instance.sol +126 -75
  224. package/contracts/instance/InstanceAccessManager.sol +383 -166
  225. package/contracts/instance/InstanceReader.sol +10 -34
  226. package/contracts/instance/InstanceService.sol +312 -128
  227. package/contracts/instance/InstanceServiceManager.sol +6 -9
  228. package/contracts/instance/ObjectManager.sol +10 -29
  229. package/contracts/instance/base/ComponentService.sol +136 -0
  230. package/contracts/instance/base/KeyValueStore.sol +13 -5
  231. package/contracts/instance/base/Lifecycle.sol +11 -2
  232. package/contracts/instance/module/IAccess.sol +23 -17
  233. package/contracts/instance/module/IBundle.sol +8 -5
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +2 -0
  236. package/contracts/instance/module/IPolicy.sol +30 -3
  237. package/contracts/instance/module/ISetup.sol +7 -20
  238. package/contracts/instance/service/ApplicationService.sol +350 -0
  239. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  240. package/contracts/instance/service/BundleService.sol +239 -68
  241. package/contracts/instance/service/BundleServiceManager.sol +6 -9
  242. package/contracts/instance/service/ClaimService.sol +151 -0
  243. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  244. package/contracts/instance/service/DistributionService.sol +367 -50
  245. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  246. package/contracts/instance/service/IApplicationService.sol +82 -0
  247. package/contracts/instance/service/IBundleService.sol +67 -19
  248. package/contracts/instance/service/IClaimService.sol +61 -0
  249. package/contracts/instance/service/IDistributionService.sol +86 -0
  250. package/contracts/instance/service/IPolicyService.sol +34 -49
  251. package/contracts/instance/service/IPoolService.sol +82 -3
  252. package/contracts/instance/service/PolicyService.sol +199 -347
  253. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  254. package/contracts/instance/service/PoolService.sol +264 -45
  255. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  256. package/contracts/instance/service/ProductService.sol +93 -56
  257. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  258. package/contracts/registry/ChainNft.sol +9 -1
  259. package/contracts/registry/IRegistry.sol +39 -19
  260. package/contracts/registry/IRegistryService.sol +31 -13
  261. package/contracts/registry/ITransferInterceptor.sol +1 -0
  262. package/contracts/registry/Registry.sol +243 -224
  263. package/contracts/registry/RegistryAccessManager.sol +216 -0
  264. package/contracts/registry/RegistryService.sol +100 -173
  265. package/contracts/registry/RegistryServiceManager.sol +21 -39
  266. package/contracts/registry/ReleaseManager.sol +322 -0
  267. package/contracts/registry/TokenRegistry.sol +22 -17
  268. package/contracts/shared/ERC165.sol +14 -12
  269. package/contracts/shared/INftOwnable.sol +11 -10
  270. package/contracts/shared/IPolicyHolder.sol +26 -0
  271. package/contracts/shared/IRegisterable.sol +4 -6
  272. package/contracts/shared/IRegistryLinked.sol +12 -0
  273. package/contracts/shared/IService.sol +8 -2
  274. package/contracts/shared/IVersionable.sol +4 -47
  275. package/contracts/shared/NftOwnable.sol +66 -80
  276. package/contracts/shared/PolicyHolder.sol +81 -0
  277. package/contracts/shared/ProxyManager.sol +100 -25
  278. package/contracts/shared/Registerable.sol +16 -32
  279. package/contracts/shared/RegistryLinked.sol +48 -0
  280. package/contracts/shared/Service.sol +30 -22
  281. package/contracts/shared/TokenHandler.sol +11 -5
  282. package/contracts/shared/Versionable.sol +4 -92
  283. package/contracts/test/TestRegisterable.sol +1 -1
  284. package/contracts/test/TestService.sol +4 -3
  285. package/contracts/types/Amount.sol +60 -0
  286. package/contracts/types/Blocknumber.sol +1 -0
  287. package/contracts/types/ClaimId.sol +52 -0
  288. package/contracts/types/DistributorType.sol +2 -2
  289. package/contracts/types/Fee.sol +13 -5
  290. package/contracts/types/NftId.sol +8 -0
  291. package/contracts/types/ObjectType.sol +10 -5
  292. package/contracts/types/PayoutId.sol +54 -0
  293. package/contracts/types/Referral.sol +4 -0
  294. package/contracts/types/RoleId.sol +19 -15
  295. package/contracts/types/Seconds.sol +54 -0
  296. package/contracts/types/StateId.sol +1 -0
  297. package/contracts/types/Timestamp.sol +13 -13
  298. package/contracts/types/UFixed.sol +1 -0
  299. package/contracts/types/Version.sol +1 -0
  300. package/package.json +3 -3
  301. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  302. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -384
  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/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  344. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  345. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  346. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  347. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  348. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  349. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  350. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  351. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  352. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  353. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  354. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  355. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  356. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  357. package/contracts/components/BaseComponent.sol +0 -145
  358. package/contracts/components/IBaseComponent.sol +0 -32
  359. package/contracts/experiment/cloning/Cloner.sol +0 -47
  360. package/contracts/experiment/errors/Require.sol +0 -38
  361. package/contracts/experiment/errors/Revert.sol +0 -44
  362. package/contracts/experiment/inheritance/A.sol +0 -53
  363. package/contracts/experiment/inheritance/B.sol +0 -28
  364. package/contracts/experiment/inheritance/C.sol +0 -34
  365. package/contracts/experiment/inheritance/IA.sol +0 -13
  366. package/contracts/experiment/inheritance/IB.sol +0 -10
  367. package/contracts/experiment/inheritance/IC.sol +0 -12
  368. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  369. package/contracts/experiment/statemachine/ISM.sol +0 -25
  370. package/contracts/experiment/statemachine/SM.sol +0 -57
  371. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  372. package/contracts/experiment/types/TypeA.sol +0 -47
  373. package/contracts/experiment/types/TypeB.sol +0 -29
  374. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  375. package/contracts/instance/IInstanceBase.sol +0 -26
  376. package/contracts/instance/InstanceBase.sol +0 -41
  377. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  378. package/contracts/instance/base/IInstanceBase.sol +0 -23
  379. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  380. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  381. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -2,24 +2,33 @@
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
7
  import {Instance} from "./Instance.sol";
8
+ import {IInstance} from "./IInstance.sol";
7
9
  import {InstanceAccessManager} from "./InstanceAccessManager.sol";
8
10
  import {IInstanceService} from "./IInstanceService.sol";
9
11
  import {InstanceReader} from "./InstanceReader.sol";
10
12
  import {BundleManager} from "./BundleManager.sol";
13
+ import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
11
14
  import {IRegistry} from "../registry/IRegistry.sol";
12
- import {RegistryService} from "../registry/RegistryService.sol";
15
+ import {IRegistryService} from "../registry/IRegistryService.sol";
13
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
19
  import {NftId} from "../../contracts/types/NftId.sol";
17
20
  import {RoleId} from "../types/RoleId.sol";
18
- import {VersionLib} from "../types/Version.sol";
19
- import {ADMIN_ROLE, INSTANCE_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
20
-
21
- contract InstanceService is Service, IInstanceService {
22
-
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";
26
+
27
+ contract InstanceService is
28
+ Service,
29
+ IInstanceService
30
+ {
31
+ address internal _masterOzAccessManager;
23
32
  address internal _masterInstanceAccessManager;
24
33
  address internal _masterInstance;
25
34
  address internal _masterInstanceReader;
@@ -27,14 +36,25 @@ contract InstanceService is Service, IInstanceService {
27
36
 
28
37
  // TODO update to real hash when instance is stable
29
38
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
30
- string public constant NAME = "InstanceService";
31
39
 
32
- modifier onlyInstanceOwner(NftId instanceNftId) {
33
- IRegistry registry = getRegistry();
34
- ChainNft chainNft = registry.getChainNft();
35
-
36
- if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
37
- revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
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);
38
58
  }
39
59
  _;
40
60
  }
@@ -42,7 +62,8 @@ contract InstanceService is Service, IInstanceService {
42
62
  function createInstanceClone()
43
63
  external
44
64
  returns (
45
- InstanceAccessManager clonedAccessManager,
65
+ AccessManagerUpgradeableInitializeable clonedOzAccessManager,
66
+ InstanceAccessManager clonedInstanceAccessManager,
46
67
  Instance clonedInstance,
47
68
  NftId clonedInstanceNftId,
48
69
  InstanceReader clonedInstanceReader,
@@ -53,80 +74,137 @@ contract InstanceService is Service, IInstanceService {
53
74
  IRegistry registry = getRegistry();
54
75
  address registryAddress = address(registry);
55
76
  NftId registryNftId = registry.getNftId(registryAddress);
56
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
57
- RegistryService registryService = RegistryService(registryServiceAddress);
77
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
78
+ IRegistryService registryService = IRegistryService(registryServiceAddress);
79
+
80
+ clonedOzAccessManager = AccessManagerUpgradeableInitializeable(
81
+ Clones.clone(_masterOzAccessManager));
58
82
 
59
- // initially set the authority of the access managar to this (being the instance service).
60
- // This will allow the instance service to bootstrap the authorizations of the instance
61
- // and then transfer the ownership of the access manager to the instance owner once everything is setup
62
- clonedAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
63
- clonedAccessManager.__InstanceAccessManager_initialize(address(this));
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));
64
88
 
65
89
  clonedInstance = Instance(Clones.clone(_masterInstance));
66
- clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
67
- ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
68
- clonedInstanceNftId = info.nftId;
90
+ clonedInstance.initialize(
91
+ address(clonedOzAccessManager),
92
+ registryAddress,
93
+ instanceOwner);
69
94
 
70
95
  clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
71
- clonedInstanceReader.initialize(registryAddress, clonedInstanceNftId);
96
+ clonedInstanceReader.initialize(address(clonedInstance));
72
97
  clonedInstance.setInstanceReader(clonedInstanceReader);
73
98
 
74
99
  clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
75
- clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, clonedInstanceNftId);
100
+ clonedBundleManager.initialize(address(clonedInstance));
76
101
  clonedInstance.setBundleManager(clonedBundleManager);
77
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
+
78
108
  // TODO amend setters with instance specific , policy manager ...
79
109
 
80
- _grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
110
+ _grantInitialAuthorizations(clonedInstanceAccessManager, clonedInstance, clonedBundleManager, instanceOwner);
81
111
 
82
- // to complete setup switch instance ownership to the instance owner
83
- // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
84
- clonedAccessManager.grantRole(INSTANCE_OWNER_ROLE(), instanceOwner);
85
- clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
86
- clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
112
+ clonedOzAccessManager.renounceRole(ADMIN_ROLE().toInt(), address(this));
87
113
 
88
- emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
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);
89
125
  }
90
126
 
91
- function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
92
- _grantRegistryServiceAuthorizations(clonedAccessManager, clonedInstance);
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);
93
137
  _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
94
138
  _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
139
+ _grantApplicationServiceAuthorizations(clonedAccessManager, clonedInstance);
95
140
  _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
141
+ _grantClaimServiceAuthorizations(clonedAccessManager, clonedInstance);
96
142
  _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
97
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());
98
162
  }
99
163
 
100
- function _grantRegistryServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
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 {
101
171
  // configure authorization for distribution service on instance
102
- IRegistry registry = getRegistry();
103
- address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
104
- clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), address(distributionServiceAddress));
105
- bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
172
+ address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion());
173
+ clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
174
+ bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
106
175
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
107
176
  instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
108
- clonedAccessManager.setTargetFunctionRole(
109
- 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",
110
188
  instanceDistributionServiceSelectors,
111
- DISTRIBUTION_SERVICE_ROLE().toInt());
189
+ DISTRIBUTION_SERVICE_ROLE());
112
190
  }
113
191
 
114
192
  function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
115
193
  // configure authorization for pool service on instance
116
- address poolServiceAddress = _registry.getServiceAddress("PoolService", VersionLib.toVersion(3, 0, 0).toMajorPart());
194
+ address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getMajorVersion());
117
195
  clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
118
196
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
119
197
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
120
198
  instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
121
- clonedAccessManager.setTargetFunctionRole(
122
- address(clonedInstance),
199
+ clonedAccessManager.setCoreTargetFunctionRole(
200
+ "Instance",
123
201
  instancePoolServiceSelectors,
124
- POOL_SERVICE_ROLE().toInt());
202
+ POOL_SERVICE_ROLE());
125
203
  }
126
204
 
127
205
  function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
128
206
  // configure authorization for product service on instance
129
- address productServiceAddress = _registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
207
+ address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getMajorVersion());
130
208
  clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
131
209
  bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
132
210
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
@@ -134,37 +212,65 @@ contract InstanceService is Service, IInstanceService {
134
212
  instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
135
213
  instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
136
214
  instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
137
- clonedAccessManager.setTargetFunctionRole(
138
- address(clonedInstance),
215
+ clonedAccessManager.setCoreTargetFunctionRole(
216
+ "Instance",
139
217
  instanceProductServiceSelectors,
140
- 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());
141
233
  }
142
234
 
143
235
  function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
144
- // configure authorization for policy service on instance
145
- address policyServiceAddress = _registry.getServiceAddress("PolicyService", VersionLib.toVersion(3, 0, 0).toMajorPart());
146
- clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
147
- bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
148
- instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
149
- instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
150
- instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
151
- clonedAccessManager.setTargetFunctionRole(
152
- address(clonedInstance),
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",
153
244
  instancePolicyServiceSelectors,
154
- POLICY_SERVICE_ROLE().toInt());
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());
155
260
  }
156
261
 
157
262
  function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
158
263
  // configure authorization for bundle service on instance
159
- address bundleServiceAddress = _registry.getServiceAddress("BundleService", VersionLib.toVersion(3, 0, 0).toMajorPart());
264
+ address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getMajorVersion());
160
265
  clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
161
- bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
266
+ bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
162
267
  instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
163
268
  instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
164
- clonedAccessManager.setTargetFunctionRole(
165
- address(clonedInstance),
269
+ instanceBundleServiceSelectors[2] = clonedInstance.updateBundleState.selector;
270
+ clonedAccessManager.setCoreTargetFunctionRole(
271
+ "Instance",
166
272
  instanceBundleServiceSelectors,
167
- BUNDLE_SERVICE_ROLE().toInt());
273
+ BUNDLE_SERVICE_ROLE());
168
274
 
169
275
  // configure authorization for bundle service on bundle manager
170
276
  bytes4[] memory bundleManagerBundleServiceSelectors = new bytes4[](5);
@@ -173,71 +279,115 @@ contract InstanceService is Service, IInstanceService {
173
279
  bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
174
280
  bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
175
281
  bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
176
- clonedAccessManager.setTargetFunctionRole(
177
- address(clonedBundleManager),
282
+ clonedAccessManager.setCoreTargetFunctionRole(
283
+ "BundleManager",
178
284
  bundleManagerBundleServiceSelectors,
179
- BUNDLE_SERVICE_ROLE().toInt());
285
+ BUNDLE_SERVICE_ROLE());
180
286
  }
181
287
 
182
288
  function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
183
- // configure authorization for instance service on instance
184
- address instanceServiceAddress = _registry.getServiceAddress("InstanceService", VersionLib.toVersion(3, 0, 0).toMajorPart());
289
+ // configure authorization for instance service on instance
290
+ address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
185
291
  clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
186
292
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
187
293
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
188
- clonedAccessManager.setTargetFunctionRole(
189
- address(clonedInstance),
294
+ clonedAccessManager.setCoreTargetFunctionRole(
295
+ "Instance",
190
296
  instanceInstanceServiceSelectors,
191
- INSTANCE_SERVICE_ROLE().toInt());
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());
192
308
  }
193
309
 
194
- function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
195
- require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
196
- require(_masterInstance == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
197
- require(_masterInstanceBundleManager == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
198
-
199
- require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
200
- require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
201
- require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
202
- require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
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
+ }
203
322
 
204
- Instance instance = Instance(instanceAddress);
205
- InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
206
- BundleManager bundleManager = BundleManager(bundleManagerAddress);
207
323
 
208
- require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
209
- require(instanceReader.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
210
- require(bundleManager.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
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(); }
211
355
 
212
- _masterInstanceAccessManager = accessManagerAddress;
356
+ _masterOzAccessManager = ozAccessManagerAddress;
357
+ _masterInstanceAccessManager = instanceAccessManagerAddress;
213
358
  _masterInstance = instanceAddress;
214
359
  _masterInstanceReader = instanceReaderAddress;
215
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();
216
368
  }
217
369
 
218
370
  function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
219
- require(_masterInstanceReader != address(0), "ERROR:CRD-003:INSTANCE_READER_MASTER_NOT_SET");
220
- require (instanceReaderAddress != address(0), "ERROR:CRD-012:INSTANCE_READER_ZERO");
221
- require(instanceReaderAddress != _masterInstanceReader, "ERROR:CRD-014:INSTANCE_READER_MASTER_SAME_AS_NEW");
371
+ if(_masterInstanceReader == address(0)) { revert ErrorInstanceServiceMasterInstanceReaderNotSet(); }
372
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderAddressZero(); }
373
+ if(instanceReaderAddress == _masterInstanceReader) { revert ErrorInstanceServiceInstanceReaderSameAsMasterInstanceReader(); }
222
374
 
223
375
  InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
224
- require(instanceReader.getInstanceNftId() == Instance(_masterInstance).getNftId(), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
376
+ if(instanceReader.getInstance() != IInstance(_masterInstance)) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch(); }
225
377
 
226
378
  _masterInstanceReader = instanceReaderAddress;
227
379
  }
228
380
 
229
- function upgradeInstanceReader(NftId instanceNftId) external {
381
+ function upgradeInstanceReader(NftId instanceNftId)
382
+ external
383
+ onlyInstanceOwner(instanceNftId)
384
+ {
230
385
  IRegistry registry = getRegistry();
231
386
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
232
387
  Instance instance = Instance(instanceInfo.objectAddress);
233
- address owner = instance.getOwner();
234
-
235
- if (msg.sender != owner) {
236
- revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
237
- }
238
388
 
239
389
  InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
240
- upgradedInstanceReaderClone.initialize(address(registry), instanceNftId);
390
+ upgradedInstanceReaderClone.initialize(address(instance));
241
391
  instance.setInstanceReader(upgradedInstanceReaderClone);
242
392
  }
243
393
 
@@ -258,15 +408,11 @@ contract InstanceService is Service, IInstanceService {
258
408
  }
259
409
 
260
410
  // From IService
261
- function getName() public pure override(IService, Service) returns(string memory) {
262
- return NAME;
411
+ function getDomain() public pure override(Service, IService) returns(ObjectType) {
412
+ return INSTANCE();
263
413
  }
264
414
 
265
415
  /// @dev top level initializer
266
- // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
267
- // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
268
- // 3) deploy registry -> pass registry service address as constructor argument
269
- // registry is getting instantiated and locked to registry service address forever
270
416
  function _initialize(
271
417
  address owner,
272
418
  bytes memory data
@@ -275,37 +421,75 @@ contract InstanceService is Service, IInstanceService {
275
421
  initializer
276
422
  virtual override
277
423
  {
278
- address initialOwner = address(0);
279
- address registryAddress = address(0);
424
+ address initialOwner;
425
+ address registryAddress;
280
426
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
281
427
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
282
428
  // owner is InstanceServiceManager deployer
283
- _initializeService(registryAddress, owner);
284
-
285
- _registerInterface(type(IService).interfaceId);
286
- _registerInterface(type(IInstanceService).interfaceId);
429
+ initializeService(registryAddress, owner);
430
+ registerInterface(type(IInstanceService).interfaceId);
287
431
  }
288
432
 
289
- function createRole(RoleId role, string memory name, NftId instanceNftId) external override onlyInstanceOwner(instanceNftId) {
290
- IRegistry registry = getRegistry();
291
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
292
- Instance instance = Instance(instanceInfo.objectAddress);
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
+
293
449
  InstanceAccessManager accessManager = instance.getInstanceAccessManager();
294
- accessManager.createRole(role, name);
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
+ }
295
458
  }
296
459
 
297
- function grantRole(RoleId role, address member, NftId instanceNftId) external override onlyInstanceOwner(instanceNftId) {
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;
298
465
  IRegistry registry = getRegistry();
299
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
300
- Instance instance = Instance(instanceInfo.objectAddress);
301
- InstanceAccessManager accessManager = instance.getInstanceAccessManager();
302
- accessManager.grantRole(role, member);
303
- }
466
+ NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
467
+ address instanceAddress = registry.getObjectInfo(instanceNftId).objectAddress;
468
+ IInstance instance = IInstance(instanceAddress);
304
469
 
305
- function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
306
- Instance instance = Instance(instanceAddress);
307
470
  InstanceAccessManager accessManager = instance.getInstanceAccessManager();
308
- return accessManager.hasRole(role, account);
471
+ // TODO setLocked by target address?
472
+ string memory componentName = ShortStrings.toString(accessManager.getTargetInfo(componentAddress).name);
473
+ accessManager.setTargetLocked(componentName, locked);
309
474
  }
310
- }
311
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
+ }