@etherisc/gif-next 0.0.2-e9148e0-933 → 0.0.2-e9a637d-547

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