@etherisc/gif-next 0.0.2-836e6e4-400 → 0.0.2-83e16a6-272

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 (303) hide show
  1. package/README.md +73 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +853 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +874 -257
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +147 -103
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +791 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +655 -43
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +654 -5
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +590 -235
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +524 -161
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  40. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
  41. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +875 -128
  44. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  45. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +122 -165
  46. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/Instance.sol/Instance.json +790 -437
  48. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +103 -176
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +61 -97
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +387 -231
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +331 -82
  56. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  57. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
  58. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +175 -155
  60. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  64. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +24 -13
  68. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +858 -0
  76. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +657 -0
  78. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +394 -232
  80. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +308 -79
  82. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +743 -0
  84. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  86. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +441 -177
  88. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +328 -71
  90. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +187 -191
  92. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +157 -204
  94. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  95. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → instance/service/IClaimService.sol/IClaimService.json} +151 -137
  96. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +184 -150
  98. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +125 -217
  100. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +16 -179
  102. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +16 -179
  104. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +384 -246
  106. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +339 -86
  108. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +209 -198
  110. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +305 -76
  112. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  113. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +209 -198
  114. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +305 -76
  116. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  117. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +98 -5
  119. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  120. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +104 -201
  121. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  122. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  123. package/artifacts/contracts/registry/Registry.sol/Registry.json +112 -27
  124. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +18 -18
  126. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  127. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +209 -238
  128. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  129. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +300 -81
  130. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  131. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +70 -69
  132. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  133. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +151 -50
  134. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  137. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  139. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  140. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  141. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  143. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +48 -0
  145. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  146. package/artifacts/contracts/shared/IService.sol/IService.json +16 -179
  147. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  149. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  150. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  151. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  152. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  153. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  154. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  155. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  157. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  158. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  159. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  160. package/artifacts/contracts/shared/Service.sol/Service.json +106 -160
  161. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  162. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  163. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  164. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  165. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  166. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  169. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  170. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  171. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestService.sol/TestService.json +127 -217
  173. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  174. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  177. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  178. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  179. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  182. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  188. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  190. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  192. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  195. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  196. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  209. package/contracts/components/Component.sol +241 -0
  210. package/contracts/components/Distribution.sol +209 -64
  211. package/contracts/components/IComponent.sol +54 -0
  212. package/contracts/components/IDistributionComponent.sol +59 -3
  213. package/contracts/components/IPoolComponent.sol +50 -29
  214. package/contracts/components/IProductComponent.sol +7 -3
  215. package/contracts/components/Pool.sol +135 -152
  216. package/contracts/components/Product.sol +114 -121
  217. package/contracts/instance/BundleManager.sol +7 -11
  218. package/contracts/instance/IInstance.sol +42 -12
  219. package/contracts/instance/IInstanceService.sol +23 -2
  220. package/contracts/instance/Instance.sol +84 -69
  221. package/contracts/instance/InstanceAccessManager.sol +31 -38
  222. package/contracts/instance/InstanceReader.sol +3 -25
  223. package/contracts/instance/InstanceService.sol +234 -58
  224. package/contracts/instance/InstanceServiceManager.sol +1 -1
  225. package/contracts/instance/ObjectManager.sol +7 -24
  226. package/contracts/instance/base/ComponentService.sol +134 -0
  227. package/contracts/instance/module/IAccess.sol +4 -5
  228. package/contracts/instance/module/IPolicy.sol +4 -2
  229. package/contracts/instance/module/ISetup.sol +5 -4
  230. package/contracts/instance/service/ApplicationService.sol +268 -0
  231. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  232. package/contracts/instance/service/BundleService.sol +49 -11
  233. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  234. package/contracts/instance/service/ClaimService.sol +151 -0
  235. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  236. package/contracts/instance/service/DistributionService.sol +206 -43
  237. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  238. package/contracts/instance/service/IApplicationService.sol +82 -0
  239. package/contracts/instance/service/IBundleService.sol +12 -3
  240. package/contracts/instance/service/IClaimService.sol +61 -0
  241. package/contracts/instance/service/IDistributionService.sol +53 -0
  242. package/contracts/instance/service/IPolicyService.sol +48 -46
  243. package/contracts/instance/service/PolicyService.sol +153 -182
  244. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  245. package/contracts/instance/service/PoolService.sol +24 -37
  246. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  247. package/contracts/instance/service/ProductService.sol +99 -34
  248. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  249. package/contracts/registry/IRegistry.sol +16 -8
  250. package/contracts/registry/IRegistryService.sol +19 -10
  251. package/contracts/registry/Registry.sol +120 -52
  252. package/contracts/registry/RegistryAccessManager.sol +31 -25
  253. package/contracts/registry/RegistryService.sol +94 -134
  254. package/contracts/registry/RegistryServiceManager.sol +13 -13
  255. package/contracts/registry/ReleaseManager.sol +94 -120
  256. package/contracts/registry/TokenRegistry.sol +19 -13
  257. package/contracts/shared/ERC165.sol +14 -12
  258. package/contracts/shared/INftOwnable.sol +11 -10
  259. package/contracts/shared/IPolicyHolder.sol +26 -0
  260. package/contracts/shared/IRegisterable.sol +4 -6
  261. package/contracts/shared/IRegistryLinked.sol +12 -0
  262. package/contracts/shared/IVersionable.sol +4 -47
  263. package/contracts/shared/NftOwnable.sol +66 -80
  264. package/contracts/shared/PolicyHolder.sol +81 -0
  265. package/contracts/shared/ProxyManager.sol +100 -25
  266. package/contracts/shared/Registerable.sol +14 -30
  267. package/contracts/shared/RegistryLinked.sol +48 -0
  268. package/contracts/shared/Service.sol +19 -19
  269. package/contracts/shared/Versionable.sol +4 -92
  270. package/contracts/test/TestRegisterable.sol +1 -1
  271. package/contracts/test/TestService.sol +1 -1
  272. package/contracts/types/ClaimId.sol +52 -0
  273. package/contracts/types/DistributorType.sol +2 -2
  274. package/contracts/types/ObjectType.sol +9 -5
  275. package/contracts/types/PayoutId.sol +54 -0
  276. package/contracts/types/RoleId.sol +5 -5
  277. package/package.json +3 -3
  278. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  279. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  280. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  281. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  282. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  283. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  284. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  285. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  286. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  287. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  288. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  289. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  290. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
  291. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  292. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  293. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  294. package/contracts/components/BaseComponent.sol +0 -148
  295. package/contracts/components/IBaseComponent.sol +0 -32
  296. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  297. package/contracts/instance/IInstanceBase.sol +0 -26
  298. package/contracts/instance/InstanceBase.sol +0 -41
  299. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  300. package/contracts/instance/base/IInstanceBase.sol +0 -23
  301. package/contracts/instance/service/ComponentOwnerService.sol +0 -315
  302. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  303. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -4,21 +4,28 @@ pragma solidity ^0.8.20;
4
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
5
 
6
6
  import {Instance} from "./Instance.sol";
7
+ import {IInstance} from "./IInstance.sol";
7
8
  import {InstanceAccessManager} from "./InstanceAccessManager.sol";
8
9
  import {IInstanceService} from "./IInstanceService.sol";
9
10
  import {InstanceReader} from "./InstanceReader.sol";
10
11
  import {BundleManager} from "./BundleManager.sol";
11
12
  import {IRegistry} from "../registry/IRegistry.sol";
12
- import {RegistryService} from "../registry/RegistryService.sol";
13
+ import {IRegistryService} from "../registry/IRegistryService.sol";
13
14
  import {ChainNft} from "../registry/ChainNft.sol";
14
15
  import {Service} from "../../contracts/shared/Service.sol";
15
16
  import {IService} from "../shared/IService.sol";
16
17
  import {NftId} from "../../contracts/types/NftId.sol";
17
18
  import {RoleId} from "../types/RoleId.sol";
18
- import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
19
- import {ObjectType, REGISTRY, INSTANCE, PRODUCT, POOL, DISTRIBUTION, POLICY, BUNDLE} from "../types/ObjectType.sol";
19
+ import {ADMIN_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} from "../types/RoleId.sol";
20
+ import {ObjectType, INSTANCE, BUNDLE, APPLICATION, POLICY, CLAIM, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
21
+ import {IDistributionComponent} from "../components/IDistributionComponent.sol";
22
+ import {IPoolComponent} from "../components/IPoolComponent.sol";
23
+ import {IProductComponent} from "../components/IProductComponent.sol";
20
24
 
21
- contract InstanceService is Service, IInstanceService {
25
+ contract InstanceService is
26
+ Service,
27
+ IInstanceService
28
+ {
22
29
 
23
30
  address internal _masterInstanceAccessManager;
24
31
  address internal _masterInstance;
@@ -27,11 +34,10 @@ contract InstanceService is Service, IInstanceService {
27
34
 
28
35
  // TODO update to real hash when instance is stable
29
36
  bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
30
- string public constant NAME = "InstanceService";
31
37
 
32
38
  modifier onlyInstanceOwner(NftId instanceNftId) {
33
39
  IRegistry registry = getRegistry();
34
- ChainNft chainNft = registry.getChainNft();
40
+ ChainNft chainNft = ChainNft(registry.getChainNftAddress());
35
41
 
36
42
  if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
37
43
  revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
@@ -39,6 +45,14 @@ contract InstanceService is Service, IInstanceService {
39
45
  _;
40
46
  }
41
47
 
48
+ modifier onlyRegisteredService() {
49
+ address caller = msg.sender;
50
+ if (! getRegistry().isRegisteredService(caller)) {
51
+ revert ErrorInstanceServiceRequestUnauhorized(caller);
52
+ }
53
+ _;
54
+ }
55
+
42
56
  function createInstanceClone()
43
57
  external
44
58
  returns (
@@ -54,25 +68,23 @@ contract InstanceService is Service, IInstanceService {
54
68
  address registryAddress = address(registry);
55
69
  NftId registryNftId = registry.getNftId(registryAddress);
56
70
  address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
57
- RegistryService registryService = RegistryService(registryServiceAddress);
71
+ IRegistryService registryService = IRegistryService(registryServiceAddress);
58
72
 
59
73
  // initially set the authority of the access managar to this (being the instance service).
60
74
  // This will allow the instance service to bootstrap the authorizations of the instance
61
75
  // and then transfer the ownership of the access manager to the instance owner once everything is setup
62
76
  clonedAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
63
- clonedAccessManager.__InstanceAccessManager_initialize(address(this));
77
+ clonedAccessManager.initialize(address(this));
64
78
 
65
79
  clonedInstance = Instance(Clones.clone(_masterInstance));
66
80
  clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
67
- ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance);
68
- clonedInstanceNftId = info.nftId;
69
81
 
70
82
  clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
71
- clonedInstanceReader.initialize(registryAddress, clonedInstanceNftId);
83
+ clonedInstanceReader.initialize(registryAddress, address(clonedInstance));
72
84
  clonedInstance.setInstanceReader(clonedInstanceReader);
73
85
 
74
86
  clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
75
- clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, clonedInstanceNftId);
87
+ clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, address(clonedInstance));
76
88
  clonedInstance.setBundleManager(clonedBundleManager);
77
89
 
78
90
  // TODO amend setters with instance specific , policy manager ...
@@ -84,20 +96,43 @@ contract InstanceService is Service, IInstanceService {
84
96
  clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
85
97
  clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
86
98
 
99
+ IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
100
+ clonedInstanceNftId = info.nftId;
101
+ // clonedInstance.linkToRegisteredNftId();
102
+
87
103
  emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
88
104
  }
89
105
 
90
106
  function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
107
+ _createGifRoles(clonedAccessManager);
91
108
  _createGifTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
92
109
  _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
93
110
  _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
94
111
  _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
112
+ _grantApplicationServiceAuthorizations(clonedAccessManager, clonedInstance);
95
113
  _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
114
+ _grantClaimServiceAuthorizations(clonedAccessManager, clonedInstance);
96
115
  _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
97
116
  _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
98
117
  }
99
118
 
119
+ function _createGifRoles(InstanceAccessManager clonedAccessManager) internal {
120
+ clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole");
121
+ clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole");
122
+ clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole");
123
+
124
+ clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
125
+ clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
126
+ clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
127
+ clonedAccessManager.createGifRole(APPLICATION_SERVICE_ROLE(), "ApplicationServiceRole");
128
+ clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
129
+ clonedAccessManager.createGifRole(CLAIM_SERVICE_ROLE(), "ClaimServiceRole");
130
+ clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
131
+ clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
132
+ }
133
+
100
134
  function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
135
+ clonedAccessManager.createGifTarget(address(clonedAccessManager), "InstanceAccessManager");
101
136
  clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
102
137
  clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
103
138
  }
@@ -107,18 +142,27 @@ contract InstanceService is Service, IInstanceService {
107
142
  IRegistry registry = getRegistry();
108
143
  address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
109
144
  clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
110
- bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
145
+ bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
111
146
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
112
147
  instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
148
+ instanceDistributionServiceSelectors[2] = clonedInstance.createDistributorType.selector;
149
+ instanceDistributionServiceSelectors[3] = clonedInstance.updateDistributorType.selector;
150
+ instanceDistributionServiceSelectors[4] = clonedInstance.updateDistributorTypeState.selector;
151
+ instanceDistributionServiceSelectors[5] = clonedInstance.createDistributor.selector;
152
+ instanceDistributionServiceSelectors[6] = clonedInstance.updateDistributor.selector;
153
+ instanceDistributionServiceSelectors[7] = clonedInstance.updateDistributorState.selector;
154
+ instanceDistributionServiceSelectors[8] = clonedInstance.createReferral.selector;
155
+ instanceDistributionServiceSelectors[9] = clonedInstance.updateReferral.selector;
156
+ instanceDistributionServiceSelectors[10] = clonedInstance.updateReferralState.selector;
113
157
  clonedAccessManager.setTargetFunctionRole(
114
158
  "Instance",
115
159
  instanceDistributionServiceSelectors,
116
- DISTRIBUTION_SERVICE_ROLE());
160
+ DISTRIBUTION_SERVICE_ROLE());
117
161
  }
118
162
 
119
163
  function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
120
164
  // configure authorization for pool service on instance
121
- address poolServiceAddress = _registry.getServiceAddress(POOL(), getMajorVersion());
165
+ address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getMajorVersion());
122
166
  clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
123
167
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
124
168
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
@@ -131,7 +175,7 @@ contract InstanceService is Service, IInstanceService {
131
175
 
132
176
  function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
133
177
  // configure authorization for product service on instance
134
- address productServiceAddress = _registry.getServiceAddress(PRODUCT(), getMajorVersion());
178
+ address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getMajorVersion());
135
179
  clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
136
180
  bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
137
181
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
@@ -145,23 +189,50 @@ contract InstanceService is Service, IInstanceService {
145
189
  PRODUCT_SERVICE_ROLE());
146
190
  }
147
191
 
192
+ function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
193
+ // configure authorization for application services on instance
194
+ address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getMajorVersion());
195
+ clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
196
+ bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
197
+ instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
198
+ instanceApplicationServiceSelectors[1] = clonedInstance.updateApplication.selector;
199
+ instanceApplicationServiceSelectors[2] = clonedInstance.updateApplicationState.selector;
200
+ clonedAccessManager.setTargetFunctionRole(
201
+ "Instance",
202
+ instanceApplicationServiceSelectors,
203
+ APPLICATION_SERVICE_ROLE());
204
+ }
205
+
148
206
  function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
149
- // configure authorization for policy service on instance
150
- address policyServiceAddress = _registry.getServiceAddress(POLICY(), getMajorVersion());
151
- clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
152
- bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
153
- instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
154
- instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
155
- instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
207
+ // configure authorization for policy services on instance
208
+ address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getMajorVersion());
209
+ clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), policyServiceAddress);
210
+ bytes4[] memory instancePolicyServiceSelectors = new bytes4[](2);
211
+ instancePolicyServiceSelectors[0] = clonedInstance.updatePolicy.selector;
212
+ instancePolicyServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
156
213
  clonedAccessManager.setTargetFunctionRole(
157
214
  "Instance",
158
215
  instancePolicyServiceSelectors,
159
216
  POLICY_SERVICE_ROLE());
160
217
  }
161
218
 
219
+ function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
220
+ // configure authorization for claim/payout services on instance
221
+ address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getMajorVersion());
222
+ clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), claimServiceAddress);
223
+ // TODO add claims function authz
224
+ bytes4[] memory instanceClaimServiceSelectors = new bytes4[](0);
225
+ // instanceClaimServiceSelectors[0] = clonedInstance.updatePolicy.selector;
226
+ // instanceClaimServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
227
+ clonedAccessManager.setTargetFunctionRole(
228
+ "Instance",
229
+ instanceClaimServiceSelectors,
230
+ CLAIM_SERVICE_ROLE());
231
+ }
232
+
162
233
  function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
163
234
  // configure authorization for bundle service on instance
164
- address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(), getMajorVersion());
235
+ address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getMajorVersion());
165
236
  clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
166
237
  bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
167
238
  instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
@@ -186,7 +257,7 @@ contract InstanceService is Service, IInstanceService {
186
257
 
187
258
  function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
188
259
  // configure authorization for instance service on instance
189
- address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(), getMajorVersion());
260
+ address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
190
261
  clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
191
262
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
192
263
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
@@ -194,43 +265,67 @@ contract InstanceService is Service, IInstanceService {
194
265
  "Instance",
195
266
  instanceInstanceServiceSelectors,
196
267
  INSTANCE_SERVICE_ROLE());
197
- }
198
-
199
- function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
200
- require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
201
- require(_masterInstance == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
202
- require(_masterInstanceBundleManager == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
203
268
 
204
- require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
205
- require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
206
- require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
207
- require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
208
-
209
- Instance instance = Instance(instanceAddress);
210
- InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
211
- BundleManager bundleManager = BundleManager(bundleManagerAddress);
269
+ bytes4[] memory instanceAccessManagerInstanceServiceSelectors = new bytes4[](1);
270
+ instanceAccessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
271
+ clonedAccessManager.setTargetFunctionRole(
272
+ "InstanceAccessManager",
273
+ instanceAccessManagerInstanceServiceSelectors,
274
+ INSTANCE_SERVICE_ROLE());
275
+ }
212
276
 
213
- require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
214
- require(instanceReader.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
215
- require(bundleManager.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
277
+ function setAndRegisterMasterInstance(address instanceAddress)
278
+ external
279
+ onlyOwner
280
+ returns(NftId masterInstanceNftId)
281
+ {
282
+ if(_masterInstance != address(0)) { revert ErrorInstanceServiceMasterInstanceAlreadySet(); }
283
+ if(_masterInstanceAccessManager != address(0)) { revert ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet(); }
284
+ if(_masterInstanceBundleManager != address(0)) { revert ErrorInstanceServiceMasterBundleManagerAlreadySet(); }
285
+
286
+ if(instanceAddress == address(0)) { revert ErrorInstanceServiceInstanceAddressZero(); }
287
+
288
+ IInstance instance = IInstance(instanceAddress);
289
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
290
+ address accessManagerAddress = address(accessManager);
291
+ InstanceReader instanceReader = instance.getInstanceReader();
292
+ address instanceReaderAddress = address(instanceReader);
293
+ BundleManager bundleManager = instance.getBundleManager();
294
+ address bundleManagerAddress = address(bundleManager);
295
+
296
+ if(accessManagerAddress == address(0)) { revert ErrorInstanceServiceAccessManagerZero(); }
297
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderZero(); }
298
+ if(bundleManagerAddress == address(0)) { revert ErrorInstanceServiceBundleManagerZero(); }
299
+
300
+ if(instance.authority() != accessManagerAddress) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
301
+ if(instanceReader.getInstance() != instance) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch2(); }
302
+ if(bundleManager.getInstance() != instance) { revert ErrorInstanceServiceBundleMangerInstanceMismatch(); }
216
303
 
217
304
  _masterInstanceAccessManager = accessManagerAddress;
218
305
  _masterInstance = instanceAddress;
219
306
  _masterInstanceReader = instanceReaderAddress;
220
307
  _masterInstanceBundleManager = bundleManagerAddress;
308
+
309
+ IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getMajorVersion()));
310
+ IInstance masterInstance = IInstance(_masterInstance);
311
+ IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
312
+ masterInstanceNftId = info.nftId;
313
+
314
+ // masterInstance.linkToRegisteredNftId();
221
315
  }
222
316
 
223
317
  function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
224
- require(_masterInstanceReader != address(0), "ERROR:CRD-003:INSTANCE_READER_MASTER_NOT_SET");
225
- require (instanceReaderAddress != address(0), "ERROR:CRD-012:INSTANCE_READER_ZERO");
226
- require(instanceReaderAddress != _masterInstanceReader, "ERROR:CRD-014:INSTANCE_READER_MASTER_SAME_AS_NEW");
318
+ if(_masterInstanceReader == address(0)) { revert ErrorInstanceServiceMasterInstanceReaderNotSet(); }
319
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderAddressZero(); }
320
+ if(instanceReaderAddress == _masterInstanceReader) { revert ErrorInstanceServiceInstanceReaderSameAsMasterInstanceReader(); }
227
321
 
228
322
  InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
229
- require(instanceReader.getInstanceNftId() == Instance(_masterInstance).getNftId(), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
323
+ if(instanceReader.getInstance() != IInstance(_masterInstance)) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch(); }
230
324
 
231
325
  _masterInstanceReader = instanceReaderAddress;
232
326
  }
233
327
 
328
+ // TODO access restriction
234
329
  function upgradeInstanceReader(NftId instanceNftId) external {
235
330
  IRegistry registry = getRegistry();
236
331
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
@@ -242,7 +337,7 @@ contract InstanceService is Service, IInstanceService {
242
337
  }
243
338
 
244
339
  InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
245
- upgradedInstanceReaderClone.initialize(address(registry), instanceNftId);
340
+ upgradedInstanceReaderClone.initialize(address(registry), address(instance));
246
341
  instance.setInstanceReader(upgradedInstanceReaderClone);
247
342
  }
248
343
 
@@ -268,10 +363,6 @@ contract InstanceService is Service, IInstanceService {
268
363
  }
269
364
 
270
365
  /// @dev top level initializer
271
- // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
272
- // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
273
- // 3) deploy registry -> pass registry service address as constructor argument
274
- // registry is getting instantiated and locked to registry service address forever
275
366
  function _initialize(
276
367
  address owner,
277
368
  bytes memory data
@@ -280,21 +371,106 @@ contract InstanceService is Service, IInstanceService {
280
371
  initializer
281
372
  virtual override
282
373
  {
283
- address initialOwner = address(0);
284
- address registryAddress = address(0);
374
+ address initialOwner;
375
+ address registryAddress;
285
376
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
286
377
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
287
378
  // owner is InstanceServiceManager deployer
288
- _initializeService(registryAddress, owner);
289
-
290
- _registerInterface(type(IService).interfaceId);
291
- _registerInterface(type(IInstanceService).interfaceId);
379
+ initializeService(registryAddress, owner);
380
+ registerInterface(type(IInstanceService).interfaceId);
292
381
  }
293
382
 
294
383
  function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
295
384
  Instance instance = Instance(instanceAddress);
296
- InstanceAccessManager accessManager = instance.getInstanceAccessManager();
385
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
297
386
  return accessManager.hasRole(role, account);
298
387
  }
388
+
389
+ function createGifTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
390
+ IRegistry registry = getRegistry();
391
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
392
+ Instance instance = Instance(instanceInfo.objectAddress);
393
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
394
+ accessManager.createGifTarget(targetAddress, targetName);
395
+ }
396
+
397
+ function grantDistributionDefaultPermissions(NftId instanceNftId, address distributionAddress, string memory distributionName) external onlyRegisteredService {
398
+ IRegistry registry = getRegistry();
399
+ IRegistry.ObjectInfo memory distributionInfo = registry.getObjectInfo(distributionAddress);
400
+
401
+ if (distributionInfo.objectType != DISTRIBUTION()) {
402
+ revert ErrorInstanceServiceInvalidComponentType(distributionAddress, DISTRIBUTION(), distributionInfo.objectType);
403
+ }
404
+
405
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
406
+ Instance instance = Instance(instanceInfo.objectAddress);
407
+ InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
408
+
409
+ bytes4[] memory fctSelectors = new bytes4[](1);
410
+ fctSelectors[0] = IDistributionComponent.setFees.selector;
411
+ instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors, DISTRIBUTION_OWNER_ROLE());
412
+
413
+ bytes4[] memory fctSelectors2 = new bytes4[](2);
414
+ fctSelectors2[0] = IDistributionComponent.processSale.selector;
415
+ fctSelectors2[1] = IDistributionComponent.processRenewal.selector;
416
+ instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors2, PRODUCT_SERVICE_ROLE());
417
+ }
418
+
419
+ function grantPoolDefaultPermissions(NftId instanceNftId, address poolAddress, string memory poolName) external onlyRegisteredService {
420
+ IRegistry registry = getRegistry();
421
+ IRegistry.ObjectInfo memory poolInfo = registry.getObjectInfo(poolAddress);
422
+
423
+ if (poolInfo.objectType != POOL()) {
424
+ revert ErrorInstanceServiceInvalidComponentType(poolAddress, POOL(), poolInfo.objectType);
425
+ }
426
+
427
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
428
+ Instance instance = Instance(instanceInfo.objectAddress);
429
+ InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
430
+
431
+ bytes4[] memory fctSelectors = new bytes4[](1);
432
+ fctSelectors[0] = IPoolComponent.setFees.selector;
433
+ instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors, POOL_OWNER_ROLE());
434
+
435
+ bytes4[] memory fctSelectors2 = new bytes4[](1);
436
+ fctSelectors2[0] = IPoolComponent.verifyApplication.selector;
437
+ instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors2, POLICY_SERVICE_ROLE());
438
+ }
439
+
440
+ function grantProductDefaultPermissions(NftId instanceNftId, address productAddress, string memory productName) external onlyRegisteredService {
441
+ IRegistry registry = getRegistry();
442
+ IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productAddress);
443
+
444
+ if (productInfo.objectType != PRODUCT()) {
445
+ revert ErrorInstanceServiceInvalidComponentType(productAddress, PRODUCT(), productInfo.objectType);
446
+ }
447
+
448
+ IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
449
+ Instance instance = Instance(instanceInfo.objectAddress);
450
+ InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
451
+
452
+ bytes4[] memory fctSelectors = new bytes4[](1);
453
+ fctSelectors[0] = IProductComponent.setFees.selector;
454
+ instanceAccessManager.setTargetFunctionRole(productName, fctSelectors, PRODUCT_OWNER_ROLE());
455
+ }
456
+
457
+ function setTargetLocked(string memory targetName, bool locked) external {
458
+ address componentAddress = msg.sender;
459
+ IRegistry registry = getRegistry();
460
+ IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
461
+ if (componentInfo.nftId.eqz()) {
462
+ revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
463
+ }
464
+
465
+ // TODO validate component type
466
+
467
+
468
+ address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
469
+ IInstance instance = IInstance(instanceAddress);
470
+
471
+ InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
472
+ accessManager.setTargetClosed(targetName, locked);
473
+ }
474
+
299
475
  }
300
476
 
@@ -17,7 +17,7 @@ contract InstanceServiceManager is ProxyManager {
17
17
  constructor(
18
18
  address registryAddress
19
19
  )
20
- ProxyManager()
20
+ ProxyManager(registryAddress)
21
21
  {
22
22
  InstanceService instSrv = new InstanceService();
23
23
  // bytes memory initCode = type(InstanceService).creationCode;
@@ -14,49 +14,32 @@ contract ObjectManager is
14
14
  Cloneable
15
15
  {
16
16
 
17
- event LogObjectManagerInitialized(NftId instanceNftId, address instanceReader);
17
+ event LogObjectManagerInitialized(address instance);
18
18
 
19
19
  error ErrorObjectManagerNftIdInvalid(NftId instanceNftId);
20
20
  error ErrorObjectManagerAlreadyAdded(NftId componentNftId, NftId objectNftId);
21
21
 
22
22
  mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _activeObjects;
23
23
  mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _allObjects;
24
- NftId internal _instanceNftId;
25
- InstanceReader internal _instanceReader;
26
-
27
- constructor() Cloneable() {
28
- _instanceReader = InstanceReader(address(0));
29
- }
24
+ IInstance internal _instance; // store instance address -> more flexible, instance may not be registered during ObjectManager initialization
30
25
 
31
26
  /// @dev call to initialize MUST be made in the same transaction as cloning of the contract
32
27
  function initialize(
33
28
  address authority,
34
29
  address registry,
35
- NftId instanceNftId
30
+ address instance
36
31
  )
37
32
  external
38
33
  {
39
34
  initialize(authority, registry);
40
35
 
41
- // check/handle instance nft id/instance reader
42
- IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(instanceNftId);
43
- if (instanceInfo.objectType != INSTANCE()) {
44
- revert ErrorObjectManagerNftIdInvalid(instanceNftId);
45
- }
46
-
47
- IInstance instance = IInstance(instanceInfo.objectAddress);
48
- _instanceReader = instance.getInstanceReader();
49
- _instanceNftId = instanceNftId;
36
+ _instance = IInstance(instance);
50
37
 
51
- emit LogObjectManagerInitialized(instanceNftId, address(_instanceReader));
52
- }
53
-
54
- function getInstanceReader() external view returns (InstanceReader) {
55
- return _instanceReader;
38
+ emit LogObjectManagerInitialized(instance);
56
39
  }
57
40
 
58
- function getInstanceNftId() external view returns (NftId) {
59
- return _instanceNftId;
41
+ function getInstance() external view returns (IInstance) {
42
+ return _instance;
60
43
  }
61
44
 
62
45
  function _add(NftId componentNftId, NftId objectNftId) internal {