@etherisc/gif-next 0.0.2-4e6a781-730 → 0.0.2-4e99ed1-062

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 (353) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +280 -94
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +632 -152
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +208 -58
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +407 -86
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +446 -151
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +212 -130
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +591 -185
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +384 -166
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +845 -458
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +240 -193
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1013 -783
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +463 -167
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +136 -228
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +455 -300
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +370 -102
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +181 -177
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +58 -75
  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 +1039 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +673 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +474 -345
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +363 -91
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +817 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +641 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1224 -198
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +453 -85
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +622 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +223 -279
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +475 -0
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +796 -147
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +91 -251
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +476 -126
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +73 -154
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +250 -385
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +317 -125
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +634 -203
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +317 -93
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +217 -233
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +309 -93
  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 +34 -2
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +75 -190
  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 +47 -15
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +191 -233
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -94
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -37
  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 -29
  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 +73 -154
  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 +113 -33
  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 -74
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +125 -55
  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 +178 -158
  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 +125 -55
  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 +195 -207
  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 +115 -78
  211. package/contracts/components/Distribution.sol +187 -57
  212. package/contracts/components/IComponent.sol +50 -17
  213. package/contracts/components/IDistributionComponent.sol +39 -15
  214. package/contracts/components/IPoolComponent.sol +84 -31
  215. package/contracts/components/IProductComponent.sol +3 -2
  216. package/contracts/components/Pool.sol +224 -148
  217. package/contracts/components/Product.sol +97 -69
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  219. package/contracts/instance/BundleManager.sol +7 -5
  220. package/contracts/instance/Cloneable.sol +7 -2
  221. package/contracts/instance/IInstance.sol +36 -10
  222. package/contracts/instance/IInstanceService.sol +35 -4
  223. package/contracts/instance/Instance.sol +101 -43
  224. package/contracts/instance/InstanceAccessManager.sol +389 -160
  225. package/contracts/instance/InstanceReader.sol +8 -10
  226. package/contracts/instance/InstanceService.sol +243 -190
  227. package/contracts/instance/InstanceServiceManager.sol +1 -1
  228. package/contracts/instance/ObjectManager.sol +6 -8
  229. package/contracts/instance/base/ComponentService.sol +17 -30
  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 +22 -16
  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 +215 -77
  241. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  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 +348 -19
  245. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  246. package/contracts/instance/service/IApplicationService.sol +82 -0
  247. package/contracts/instance/service/IBundleService.sol +70 -21
  248. package/contracts/instance/service/IClaimService.sol +61 -0
  249. package/contracts/instance/service/IDistributionService.sol +87 -0
  250. package/contracts/instance/service/IPolicyService.sol +27 -49
  251. package/contracts/instance/service/IPoolService.sol +82 -3
  252. package/contracts/instance/service/PolicyService.sol +145 -321
  253. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  254. package/contracts/instance/service/PoolService.sol +214 -21
  255. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  256. package/contracts/instance/service/ProductService.sol +34 -58
  257. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  258. package/contracts/registry/ChainNft.sol +8 -0
  259. package/contracts/registry/IRegistry.sol +5 -2
  260. package/contracts/registry/IRegistryService.sol +14 -11
  261. package/contracts/registry/ITransferInterceptor.sol +1 -0
  262. package/contracts/registry/Registry.sol +43 -28
  263. package/contracts/registry/RegistryService.sol +70 -50
  264. package/contracts/registry/RegistryServiceManager.sol +13 -13
  265. package/contracts/registry/ReleaseManager.sol +32 -40
  266. package/contracts/registry/TokenRegistry.sol +16 -12
  267. package/contracts/shared/ERC165.sol +14 -12
  268. package/contracts/shared/INftOwnable.sol +11 -10
  269. package/contracts/shared/IPolicyHolder.sol +26 -0
  270. package/contracts/shared/IRegisterable.sol +3 -3
  271. package/contracts/shared/IRegistryLinked.sol +12 -0
  272. package/contracts/shared/IService.sol +4 -4
  273. package/contracts/shared/IVersionable.sol +4 -47
  274. package/contracts/shared/NftOwnable.sol +66 -85
  275. package/contracts/shared/PolicyHolder.sol +81 -0
  276. package/contracts/shared/ProxyManager.sol +100 -25
  277. package/contracts/shared/Registerable.sol +7 -19
  278. package/contracts/shared/RegistryLinked.sol +48 -0
  279. package/contracts/shared/Service.sol +32 -20
  280. package/contracts/shared/TokenHandler.sol +11 -5
  281. package/contracts/shared/Versionable.sol +4 -92
  282. package/contracts/test/TestRegisterable.sol +1 -1
  283. package/contracts/test/TestService.sol +1 -1
  284. package/contracts/types/Amount.sol +60 -0
  285. package/contracts/types/Blocknumber.sol +1 -0
  286. package/contracts/types/ClaimId.sol +52 -0
  287. package/contracts/types/DistributorType.sol +2 -2
  288. package/contracts/types/Fee.sol +13 -5
  289. package/contracts/types/NftId.sol +8 -0
  290. package/contracts/types/ObjectType.sol +10 -5
  291. package/contracts/types/PayoutId.sol +54 -0
  292. package/contracts/types/Referral.sol +4 -0
  293. package/contracts/types/RoleId.sol +16 -9
  294. package/contracts/types/Seconds.sol +54 -0
  295. package/contracts/types/StateId.sol +1 -0
  296. package/contracts/types/Timestamp.sol +13 -13
  297. package/contracts/types/UFixed.sol +1 -0
  298. package/contracts/types/Version.sol +1 -0
  299. package/package.json +3 -3
  300. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  301. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  302. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  303. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  306. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  308. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  310. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  312. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  314. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  316. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  318. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  320. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  322. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  325. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  327. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  329. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  331. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  333. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  335. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  337. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  339. package/contracts/experiment/cloning/Cloner.sol +0 -47
  340. package/contracts/experiment/errors/Require.sol +0 -38
  341. package/contracts/experiment/errors/Revert.sol +0 -44
  342. package/contracts/experiment/inheritance/A.sol +0 -53
  343. package/contracts/experiment/inheritance/B.sol +0 -28
  344. package/contracts/experiment/inheritance/C.sol +0 -34
  345. package/contracts/experiment/inheritance/IA.sol +0 -13
  346. package/contracts/experiment/inheritance/IB.sol +0 -10
  347. package/contracts/experiment/inheritance/IC.sol +0 -12
  348. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  349. package/contracts/experiment/statemachine/ISM.sol +0 -25
  350. package/contracts/experiment/statemachine/SM.sol +0 -57
  351. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  352. package/contracts/experiment/types/TypeA.sol +0 -47
  353. package/contracts/experiment/types/TypeB.sol +0 -29
@@ -2,14 +2,15 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
+ import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
5
6
 
6
- import {Component} from "../components/Component.sol";
7
7
  import {Instance} from "./Instance.sol";
8
8
  import {IInstance} from "./IInstance.sol";
9
9
  import {InstanceAccessManager} from "./InstanceAccessManager.sol";
10
10
  import {IInstanceService} from "./IInstanceService.sol";
11
11
  import {InstanceReader} from "./InstanceReader.sol";
12
12
  import {BundleManager} from "./BundleManager.sol";
13
+ import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
13
14
  import {IRegistry} from "../registry/IRegistry.sol";
14
15
  import {IRegistryService} from "../registry/IRegistryService.sol";
15
16
  import {ChainNft} from "../registry/ChainNft.sol";
@@ -17,14 +18,17 @@ import {Service} from "../../contracts/shared/Service.sol";
17
18
  import {IService} from "../shared/IService.sol";
18
19
  import {NftId} from "../../contracts/types/NftId.sol";
19
20
  import {RoleId} from "../types/RoleId.sol";
20
- import {ADMIN_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
21
- import {ObjectType, INSTANCE, BUNDLE, POLICY, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
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";
22
23
  import {IDistributionComponent} from "../components/IDistributionComponent.sol";
23
24
  import {IPoolComponent} from "../components/IPoolComponent.sol";
24
25
  import {IProductComponent} from "../components/IProductComponent.sol";
25
26
 
26
- contract InstanceService is Service, IInstanceService {
27
-
27
+ contract InstanceService is
28
+ Service,
29
+ IInstanceService
30
+ {
31
+ address internal _masterOzAccessManager;
28
32
  address internal _masterInstanceAccessManager;
29
33
  address internal _masterInstance;
30
34
  address internal _masterInstanceReader;
@@ -33,20 +37,24 @@ contract InstanceService is Service, IInstanceService {
33
37
  // TODO update to real hash when instance is stable
34
38
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
35
39
 
36
- modifier onlyInstanceOwner(NftId instanceNftId) {
37
- IRegistry registry = getRegistry();
38
- ChainNft chainNft = registry.getChainNft();
39
-
40
- if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
41
- revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
40
+ modifier onlyInstanceOwner(NftId instanceNftId) {
41
+ if(msg.sender != getRegistry().ownerOf(instanceNftId)) {
42
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
42
43
  }
43
44
  _;
44
45
  }
45
-
46
+ // TODO check service domain?
47
+ // TODO check release version?
46
48
  modifier onlyRegisteredService() {
47
- address caller = msg.sender;
48
- if (! getRegistry().isRegisteredService(caller)) {
49
- revert ErrorInstanceServiceRequestUnauhorized(caller);
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);
50
58
  }
51
59
  _;
52
60
  }
@@ -54,7 +62,8 @@ contract InstanceService is Service, IInstanceService {
54
62
  function createInstanceClone()
55
63
  external
56
64
  returns (
57
- InstanceAccessManager clonedAccessManager,
65
+ AccessManagerUpgradeableInitializeable clonedOzAccessManager,
66
+ InstanceAccessManager clonedInstanceAccessManager,
58
67
  Instance clonedInstance,
59
68
  NftId clonedInstanceNftId,
60
69
  InstanceReader clonedInstanceReader,
@@ -65,81 +74,116 @@ contract InstanceService is Service, IInstanceService {
65
74
  IRegistry registry = getRegistry();
66
75
  address registryAddress = address(registry);
67
76
  NftId registryNftId = registry.getNftId(registryAddress);
68
- address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
77
+ address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getVersion().toMajorPart());
69
78
  IRegistryService registryService = IRegistryService(registryServiceAddress);
70
79
 
71
- // initially set the authority of the access managar to this (being the instance service).
72
- // This will allow the instance service to bootstrap the authorizations of the instance
73
- // and then transfer the ownership of the access manager to the instance owner once everything is setup
74
- clonedAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
75
- clonedAccessManager.initialize(address(this));
80
+ clonedOzAccessManager = AccessManagerUpgradeableInitializeable(
81
+ Clones.clone(_masterOzAccessManager));
82
+
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));
76
88
 
77
89
  clonedInstance = Instance(Clones.clone(_masterInstance));
78
- clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
90
+ clonedInstance.initialize(
91
+ address(clonedOzAccessManager),
92
+ registryAddress,
93
+ instanceOwner);
79
94
 
80
95
  clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
81
- clonedInstanceReader.initialize(registryAddress, address(clonedInstance));
96
+ clonedInstanceReader.initialize(address(clonedInstance));
82
97
  clonedInstance.setInstanceReader(clonedInstanceReader);
83
98
 
84
99
  clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
85
- clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, address(clonedInstance));
100
+ clonedBundleManager.initialize(address(clonedInstance));
86
101
  clonedInstance.setBundleManager(clonedBundleManager);
87
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
+
88
108
  // TODO amend setters with instance specific , policy manager ...
89
109
 
90
- _grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
110
+ _grantInitialAuthorizations(clonedInstanceAccessManager, clonedInstance, clonedBundleManager, instanceOwner);
91
111
 
92
- // to complete setup switch instance ownership to the instance owner
93
- // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
94
- clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
95
- clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
112
+ clonedOzAccessManager.renounceRole(ADMIN_ROLE().toInt(), address(this));
96
113
 
97
114
  IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
98
115
  clonedInstanceNftId = info.nftId;
99
116
  // clonedInstance.linkToRegisteredNftId();
100
117
 
101
- emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
118
+ emit LogInstanceCloned(
119
+ address(clonedOzAccessManager),
120
+ address(clonedInstanceAccessManager),
121
+ address(clonedInstance),
122
+ address(clonedBundleManager),
123
+ address(clonedInstanceReader),
124
+ clonedInstanceNftId);
102
125
  }
103
126
 
104
- function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
105
- _createGifRoles(clonedAccessManager);
106
- _createGifTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
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);
107
136
  _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
108
137
  _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
109
138
  _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
139
+ _grantApplicationServiceAuthorizations(clonedAccessManager, clonedInstance);
110
140
  _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
141
+ _grantClaimServiceAuthorizations(clonedAccessManager, clonedInstance);
111
142
  _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
112
143
  _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
144
+ _grantInstanceOwnerAuthorizations(clonedAccessManager, instanceOwner);
113
145
  }
114
146
 
115
- function _createGifRoles(InstanceAccessManager clonedAccessManager) internal {
116
- clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole");
117
- clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole");
118
- clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole");
119
-
120
- clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
121
- clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
122
- clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
123
- clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
124
- clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
125
- clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
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());
126
162
  }
127
163
 
128
- function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
129
- clonedAccessManager.createGifTarget(address(clonedAccessManager), "InstanceAccessManager");
130
- clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
131
- clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
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");
132
168
  }
133
169
 
134
170
  function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
135
171
  // configure authorization for distribution service on instance
136
- IRegistry registry = getRegistry();
137
- address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
172
+ address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart());
138
173
  clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
139
- bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
174
+ bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
140
175
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
141
176
  instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
142
- clonedAccessManager.setTargetFunctionRole(
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(
143
187
  "Instance",
144
188
  instanceDistributionServiceSelectors,
145
189
  DISTRIBUTION_SERVICE_ROLE());
@@ -147,12 +191,12 @@ contract InstanceService is Service, IInstanceService {
147
191
 
148
192
  function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
149
193
  // configure authorization for pool service on instance
150
- address poolServiceAddress = _registry.getServiceAddress(POOL(), getMajorVersion());
194
+ address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart());
151
195
  clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
152
196
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
153
197
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
154
198
  instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
155
- clonedAccessManager.setTargetFunctionRole(
199
+ clonedAccessManager.setCoreTargetFunctionRole(
156
200
  "Instance",
157
201
  instancePoolServiceSelectors,
158
202
  POOL_SERVICE_ROLE());
@@ -160,7 +204,7 @@ contract InstanceService is Service, IInstanceService {
160
204
 
161
205
  function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
162
206
  // configure authorization for product service on instance
163
- address productServiceAddress = _registry.getServiceAddress(PRODUCT(), getMajorVersion());
207
+ address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getVersion().toMajorPart());
164
208
  clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
165
209
  bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
166
210
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
@@ -168,34 +212,62 @@ contract InstanceService is Service, IInstanceService {
168
212
  instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
169
213
  instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
170
214
  instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
171
- clonedAccessManager.setTargetFunctionRole(
215
+ clonedAccessManager.setCoreTargetFunctionRole(
172
216
  "Instance",
173
217
  instanceProductServiceSelectors,
174
218
  PRODUCT_SERVICE_ROLE());
175
219
  }
176
220
 
221
+ function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
222
+ // configure authorization for application services on instance
223
+ address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getVersion().toMajorPart());
224
+ clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
225
+ bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
226
+ instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
227
+ instanceApplicationServiceSelectors[1] = clonedInstance.updateApplication.selector;
228
+ instanceApplicationServiceSelectors[2] = clonedInstance.updateApplicationState.selector;
229
+ clonedAccessManager.setCoreTargetFunctionRole(
230
+ "Instance",
231
+ instanceApplicationServiceSelectors,
232
+ APPLICATION_SERVICE_ROLE());
233
+ }
234
+
177
235
  function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
178
- // configure authorization for policy service on instance
179
- address policyServiceAddress = _registry.getServiceAddress(POLICY(), getMajorVersion());
180
- clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
181
- bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
182
- instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
183
- instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
184
- instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
185
- clonedAccessManager.setTargetFunctionRole(
236
+ // configure authorization for policy services on instance
237
+ address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart());
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(
186
243
  "Instance",
187
244
  instancePolicyServiceSelectors,
188
245
  POLICY_SERVICE_ROLE());
189
246
  }
190
247
 
248
+ function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
249
+ // configure authorization for claim/payout services on instance
250
+ address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getVersion().toMajorPart());
251
+ clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), claimServiceAddress);
252
+ // TODO add claims function authz
253
+ bytes4[] memory instanceClaimServiceSelectors = new bytes4[](0);
254
+ // instanceClaimServiceSelectors[0] = clonedInstance.updatePolicy.selector;
255
+ // instanceClaimServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
256
+ clonedAccessManager.setCoreTargetFunctionRole(
257
+ "Instance",
258
+ instanceClaimServiceSelectors,
259
+ CLAIM_SERVICE_ROLE());
260
+ }
261
+
191
262
  function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
192
263
  // configure authorization for bundle service on instance
193
- address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(), getMajorVersion());
264
+ address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart());
194
265
  clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
195
- bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
266
+ bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
196
267
  instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
197
268
  instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
198
- clonedAccessManager.setTargetFunctionRole(
269
+ instanceBundleServiceSelectors[2] = clonedInstance.updateBundleState.selector;
270
+ clonedAccessManager.setCoreTargetFunctionRole(
199
271
  "Instance",
200
272
  instanceBundleServiceSelectors,
201
273
  BUNDLE_SERVICE_ROLE());
@@ -207,65 +279,87 @@ contract InstanceService is Service, IInstanceService {
207
279
  bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
208
280
  bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
209
281
  bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
210
- clonedAccessManager.setTargetFunctionRole(
282
+ clonedAccessManager.setCoreTargetFunctionRole(
211
283
  "BundleManager",
212
284
  bundleManagerBundleServiceSelectors,
213
285
  BUNDLE_SERVICE_ROLE());
214
286
  }
215
287
 
216
288
  function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
217
- // configure authorization for instance service on instance
218
- address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(), getMajorVersion());
289
+ // configure authorization for instance service on instance
290
+ address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getVersion().toMajorPart());
219
291
  clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
220
292
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
221
293
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
222
- clonedAccessManager.setTargetFunctionRole(
294
+ clonedAccessManager.setCoreTargetFunctionRole(
223
295
  "Instance",
224
296
  instanceInstanceServiceSelectors,
225
297
  INSTANCE_SERVICE_ROLE());
226
298
 
227
- bytes4[] memory instanceAccessManagerInstanceServiceSelectors = new bytes4[](1);
228
- instanceAccessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
229
- clonedAccessManager.setTargetFunctionRole(
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(
230
305
  "InstanceAccessManager",
231
- instanceAccessManagerInstanceServiceSelectors,
306
+ accessManagerInstanceServiceSelectors,
232
307
  INSTANCE_SERVICE_ROLE());
233
308
  }
234
309
 
310
+ function _grantInstanceOwnerAuthorizations(InstanceAccessManager clonedAccessManager, address instanceOwner) internal {
311
+ // configure authorization for instance owner on instance access manager
312
+ // instance owner role is granted/revoked ONLY by INSTANCE_ROLE
313
+ bytes4[] memory accessManagerInstanceOwnerSelectors = new bytes4[](3);
314
+ accessManagerInstanceOwnerSelectors[0] = clonedAccessManager.createRole.selector;
315
+ accessManagerInstanceOwnerSelectors[1] = clonedAccessManager.createTarget.selector;
316
+ accessManagerInstanceOwnerSelectors[2] = clonedAccessManager.setTargetFunctionRole.selector;
317
+ clonedAccessManager.setCoreTargetFunctionRole(
318
+ "InstanceAccessManager",
319
+ accessManagerInstanceOwnerSelectors,
320
+ INSTANCE_OWNER_ROLE());
321
+ }
322
+
323
+
235
324
  function setAndRegisterMasterInstance(address instanceAddress)
236
325
  external
237
326
  onlyOwner
238
327
  returns(NftId masterInstanceNftId)
239
328
  {
240
- require(_masterInstance == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
241
- require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
242
- require(_masterInstanceBundleManager == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
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(); }
243
333
 
244
- require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
334
+ if(instanceAddress == address(0)) { revert ErrorInstanceServiceInstanceAddressZero(); }
245
335
 
246
336
  IInstance instance = IInstance(instanceAddress);
247
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
248
- address accessManagerAddress = address(accessManager);
337
+ AccessManagerUpgradeableInitializeable ozAccessManager = AccessManagerUpgradeableInitializeable(instance.authority());
338
+ address ozAccessManagerAddress = address(ozAccessManager);
339
+ InstanceAccessManager instanceAccessManager = instance.getInstanceAccessManager();
340
+ address instanceAccessManagerAddress = address(instanceAccessManager);
249
341
  InstanceReader instanceReader = instance.getInstanceReader();
250
342
  address instanceReaderAddress = address(instanceReader);
251
343
  BundleManager bundleManager = instance.getBundleManager();
252
344
  address bundleManagerAddress = address(bundleManager);
253
345
 
254
- require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
255
- require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
256
- require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
257
-
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(); }
258
350
 
259
- require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
260
- require(instanceReader.getInstance() == instance, "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
261
- require(bundleManager.getInstance() == instance, "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
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(); }
262
355
 
263
- _masterInstanceAccessManager = accessManagerAddress;
356
+ _masterOzAccessManager = ozAccessManagerAddress;
357
+ _masterInstanceAccessManager = instanceAccessManagerAddress;
264
358
  _masterInstance = instanceAddress;
265
359
  _masterInstanceReader = instanceReaderAddress;
266
360
  _masterInstanceBundleManager = bundleManagerAddress;
267
361
 
268
- IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getMajorVersion()));
362
+ IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getVersion().toMajorPart()));
269
363
  IInstance masterInstance = IInstance(_masterInstance);
270
364
  IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
271
365
  masterInstanceNftId = info.nftId;
@@ -274,29 +368,26 @@ contract InstanceService is Service, IInstanceService {
274
368
  }
275
369
 
276
370
  function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
277
- require(_masterInstanceReader != address(0), "ERROR:CRD-003:INSTANCE_READER_MASTER_NOT_SET");
278
- require (instanceReaderAddress != address(0), "ERROR:CRD-012:INSTANCE_READER_ZERO");
279
- 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(); }
280
374
 
281
375
  InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
282
- require(instanceReader.getInstance() == IInstance(_masterInstance), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
376
+ if(instanceReader.getInstance() != IInstance(_masterInstance)) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch(); }
283
377
 
284
378
  _masterInstanceReader = instanceReaderAddress;
285
379
  }
286
380
 
287
- // TODO access restriction
288
- function upgradeInstanceReader(NftId instanceNftId) external {
381
+ function upgradeInstanceReader(NftId instanceNftId)
382
+ external
383
+ onlyInstanceOwner(instanceNftId)
384
+ {
289
385
  IRegistry registry = getRegistry();
290
386
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
291
387
  Instance instance = Instance(instanceInfo.objectAddress);
292
- address owner = instance.getOwner();
293
-
294
- if (msg.sender != owner) {
295
- revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
296
- }
297
388
 
298
389
  InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
299
- upgradedInstanceReaderClone.initialize(address(registry), address(instance));
390
+ upgradedInstanceReaderClone.initialize(address(instance));
300
391
  instance.setInstanceReader(upgradedInstanceReaderClone);
301
392
  }
302
393
 
@@ -317,7 +408,7 @@ contract InstanceService is Service, IInstanceService {
317
408
  }
318
409
 
319
410
  // From IService
320
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
411
+ function getDomain() public pure override returns(ObjectType) {
321
412
  return INSTANCE();
322
413
  }
323
414
 
@@ -335,108 +426,70 @@ contract InstanceService is Service, IInstanceService {
335
426
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
336
427
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
337
428
  // owner is InstanceServiceManager deployer
338
- _initializeService(registryAddress, owner);
339
-
340
- _registerInterface(type(IInstanceService).interfaceId);
429
+ initializeService(registryAddress, address(0), owner);
430
+ registerInterface(type(IInstanceService).interfaceId);
341
431
  }
342
432
 
343
- function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
344
- Instance instance = Instance(instanceAddress);
345
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
346
- return accessManager.hasRole(role, account);
347
- }
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);
348
448
 
349
- function createGifTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
350
- IRegistry registry = getRegistry();
351
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
352
- Instance instance = Instance(instanceInfo.objectAddress);
353
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
449
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
354
450
  accessManager.createGifTarget(targetAddress, targetName);
355
- }
356
-
357
- function grantDistributionDefaultPermissions(NftId instanceNftId, IDistributionComponent distribution) external onlyRegisteredService {
358
- IRegistry registry = getRegistry();
359
- IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(address(distribution));
360
-
361
- if (distributionInfo.objectType != DISTRIBUTION()) {
362
- revert ErrorInstanceServiceInvalidComponentType(address(distribution), DISTRIBUTION(), distributionInfo.objectType);
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]);
363
457
  }
364
-
365
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
366
- Instance instance = Instance(instanceInfo.objectAddress);
367
- InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
368
-
369
- bytes4[] memory fctSelectors = new bytes4[](3);
370
- fctSelectors[0] = distribution.setFees.selector;
371
- fctSelectors[1] = Component.lock.selector;
372
- fctSelectors[2] = Component.unlock.selector;
373
- instanceAccessManager.setTargetFunctionRole(distribution.getName(), fctSelectors, DISTRIBUTION_OWNER_ROLE());
374
-
375
- bytes4[] memory fctSelectors2 = new bytes4[](2);
376
- fctSelectors2[0] = distribution.processSale.selector;
377
- fctSelectors2[1] = distribution.processRenewal.selector;
378
- instanceAccessManager.setTargetFunctionRole(distribution.getName(), fctSelectors2, PRODUCT_SERVICE_ROLE());
379
458
  }
380
459
 
381
- function grantPoolDefaultPermissions(NftId instanceNftId, IPoolComponent pool) external onlyRegisteredService {
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 setComponentLocked(bool locked) onlyComponent external {
463
+ address componentAddress = msg.sender;
382
464
  IRegistry registry = getRegistry();
383
- IRegistry.ObjectInfo memory poolInfo = registry.getObjectInfo(address(pool));
384
-
385
- if (poolInfo.objectType != POOL()) {
386
- revert ErrorInstanceServiceInvalidComponentType(address(pool), POOL(), poolInfo.objectType);
387
- }
465
+ NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
388
466
 
389
- IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
390
- Instance instance = Instance(instanceInfo.objectAddress);
391
- InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
467
+ IInstance instance = IInstance(
468
+ registry.getObjectInfo(
469
+ instanceNftId).objectAddress);
392
470
 
393
- bytes4[] memory fctSelectors = new bytes4[](3);
394
- fctSelectors[0] = pool.setFees.selector;
395
- fctSelectors[1] = Component.lock.selector;
396
- fctSelectors[2] = Component.unlock.selector;
397
- instanceAccessManager.setTargetFunctionRole(pool.getName(), fctSelectors, POOL_OWNER_ROLE());
398
-
399
- bytes4[] memory fctSelectors2 = new bytes4[](1);
400
- fctSelectors2[0] = pool.underwrite.selector;
401
- instanceAccessManager.setTargetFunctionRole(pool.getName(), fctSelectors2, POLICY_SERVICE_ROLE());
471
+ instance.getInstanceAccessManager().setTargetLocked(
472
+ componentAddress,
473
+ locked);
402
474
  }
403
475
 
404
- function grantProductDefaultPermissions(NftId instanceNftId, IProductComponent product) external onlyRegisteredService {
476
+ function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress)
477
+ internal
478
+ view
479
+ returns (IInstance instance, NftId componentNftId)
480
+ {
405
481
  IRegistry registry = getRegistry();
406
- IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(address(product));
407
-
408
- if (productInfo.objectType != PRODUCT()) {
409
- revert ErrorInstanceServiceInvalidComponentType(address(product), PRODUCT(), productInfo.objectType);
410
- }
411
-
412
482
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
413
- Instance instance = Instance(instanceInfo.objectAddress);
414
- InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
415
-
416
- bytes4[] memory fctSelectors = new bytes4[](3);
417
- fctSelectors[0] = product.setFees.selector;
418
- fctSelectors[1] = Component.lock.selector;
419
- fctSelectors[2] = Component.unlock.selector;
420
- instanceAccessManager.setTargetFunctionRole(product.getName(), fctSelectors, PRODUCT_OWNER_ROLE());
421
- }
483
+ if(instanceInfo.objectType != INSTANCE()) {
484
+ revert ErrorInstanceServiceNotInstance(instanceNftId);
485
+ }
422
486
 
423
- function setTargetLocked(string memory targetName, bool locked) external {
424
- address componentAddress = msg.sender;
425
- IRegistry registry = getRegistry();
426
487
  IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
427
- if (componentInfo.nftId.eqz()) {
428
- revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
488
+ if(componentInfo.parentNftId != instanceNftId) {
489
+ revert ErrorInstanceServiceInstanceComponentMismatch(instanceNftId, componentInfo.nftId);
429
490
  }
430
491
 
431
- // TODO validate component type
432
-
433
-
434
- address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
435
- IInstance instance = IInstance(instanceAddress);
436
-
437
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
438
- accessManager.setTargetClosed(targetName, locked);
492
+ instance = Instance(instanceInfo.objectAddress);
493
+ componentNftId = componentInfo.nftId;
439
494
  }
440
-
441
- }
442
-
495
+ }