@etherisc/gif-next 0.0.2-984cc08-642 → 0.0.2-989147f-853

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 (495) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1376 -0
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +819 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +840 -0
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +68 -54
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +273 -1592
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +264 -218
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +443 -2515
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +479 -178
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +442 -249
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +413 -390
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +330 -95
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2847 -0
  32. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  33. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +6 -1
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +93 -14
  39. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +38 -13
  41. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +256 -0
  43. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +58 -75
  45. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  47. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  48. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  53. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  54. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  55. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  56. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +735 -0
  57. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  58. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +291 -276
  59. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  60. package/artifacts/contracts/{components/Pool.sol/Pool.json → pool/IPoolComponent.sol/IPoolComponent.json} +438 -201
  61. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  62. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  63. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  64. package/artifacts/contracts/pool/Pool.sol/Pool.json +1407 -0
  65. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  66. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  67. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  68. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +747 -0
  69. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  70. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  71. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  72. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +687 -0
  73. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  74. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  75. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  76. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +787 -0
  77. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  78. package/artifacts/contracts/{instance/service/IDistributionService.sol/IDistributionService.json → product/IApplicationService.sol/IApplicationService.json} +219 -172
  79. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  80. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  81. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  82. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +182 -302
  83. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  84. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +241 -230
  85. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  86. package/artifacts/contracts/{components/Product.sol/Product.json → product/IProductComponent.sol/IProductComponent.json} +239 -169
  87. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  88. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +72 -166
  89. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  90. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  91. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  92. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +779 -0
  93. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  94. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  95. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +727 -0
  97. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  98. package/artifacts/contracts/product/Product.sol/Product.json +1198 -0
  99. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  100. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  101. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  102. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +679 -0
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  105. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +170 -17
  107. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +208 -229
  109. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  111. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/Registry.sol/Registry.json +196 -43
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +50 -97
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +323 -258
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +331 -81
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +397 -81
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +142 -54
  123. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  124. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  125. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  126. package/artifacts/contracts/shared/Component.sol/Component.json +873 -0
  127. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  128. package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +199 -163
  129. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  131. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  132. package/artifacts/contracts/{components/Distribution.sol/Distribution.json → shared/IComponent.sol/IComponent.json} +163 -218
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  136. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -34
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  140. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  141. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  142. package/artifacts/contracts/shared/IService.sol/IService.json +71 -165
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +109 -29
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  148. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  150. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +310 -61
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -53
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  154. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  155. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Service.sol/Service.json +173 -153
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  163. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  164. package/artifacts/contracts/{components/Component.sol/Component.json → staking/IStakingService.sol/IStakingService.json} +219 -194
  165. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  166. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
  167. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  168. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +667 -0
  169. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  170. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  171. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  172. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  173. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  174. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  175. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  176. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  177. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  178. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  179. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  180. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  181. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  182. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  183. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +166 -0
  185. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  186. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  187. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  188. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  189. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  190. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  191. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  192. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  193. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  194. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  195. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  196. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  197. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  198. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -0
  199. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  200. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  201. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  202. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +39 -8
  203. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  204. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  205. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  206. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  207. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  208. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  209. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  210. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  211. package/contracts/distribution/Distribution.sol +285 -0
  212. package/contracts/distribution/DistributionService.sol +351 -0
  213. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +15 -12
  214. package/contracts/distribution/IDistributionComponent.sol +71 -0
  215. package/contracts/distribution/IDistributionService.sol +87 -0
  216. package/contracts/instance/BundleManager.sol +15 -14
  217. package/contracts/instance/IInstance.sol +55 -40
  218. package/contracts/instance/IInstanceService.sol +49 -16
  219. package/contracts/instance/Instance.sol +149 -179
  220. package/contracts/instance/InstanceAccessManager.sol +406 -166
  221. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  222. package/contracts/instance/InstanceReader.sol +101 -26
  223. package/contracts/instance/InstanceService.sol +192 -253
  224. package/contracts/instance/InstanceServiceManager.sol +11 -8
  225. package/contracts/instance/InstanceStore.sol +211 -0
  226. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +8 -3
  227. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  228. package/contracts/instance/base/ILifecycle.sol +3 -3
  229. package/contracts/instance/base/KeyValueStore.sol +44 -47
  230. package/contracts/instance/base/Lifecycle.sol +28 -7
  231. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +12 -14
  232. package/contracts/instance/module/IAccess.sol +24 -18
  233. package/contracts/instance/module/IBundle.sol +11 -8
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +7 -4
  236. package/contracts/instance/module/IPolicy.sol +50 -17
  237. package/contracts/instance/module/IRisk.sol +1 -1
  238. package/contracts/instance/module/ISetup.sol +9 -22
  239. package/contracts/instance/module/ITreasury.sol +2 -2
  240. package/contracts/pool/BundleService.sol +384 -0
  241. package/contracts/{instance/service → pool}/BundleServiceManager.sol +15 -12
  242. package/contracts/pool/IBundleService.sol +118 -0
  243. package/contracts/pool/IPoolComponent.sol +114 -0
  244. package/contracts/pool/IPoolService.sol +114 -0
  245. package/contracts/pool/Pool.sol +302 -0
  246. package/contracts/pool/PoolService.sol +416 -0
  247. package/contracts/{instance/service → pool}/PoolServiceManager.sol +15 -12
  248. package/contracts/product/ApplicationService.sol +187 -0
  249. package/contracts/product/ApplicationServiceManager.sol +38 -0
  250. package/contracts/product/ClaimService.sol +443 -0
  251. package/contracts/product/ClaimServiceManager.sol +38 -0
  252. package/contracts/product/IApplicationService.sol +62 -0
  253. package/contracts/product/IClaimService.sol +93 -0
  254. package/contracts/product/IPolicyService.sol +80 -0
  255. package/contracts/product/IPricingService.sol +37 -0
  256. package/contracts/product/IProductComponent.sol +41 -0
  257. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  258. package/contracts/product/PolicyService.sol +378 -0
  259. package/contracts/{instance/service → product}/PolicyServiceManager.sol +16 -13
  260. package/contracts/product/PricingService.sol +276 -0
  261. package/contracts/product/PricingServiceManager.sol +42 -0
  262. package/contracts/product/Product.sol +379 -0
  263. package/contracts/product/ProductService.sol +212 -0
  264. package/contracts/{instance/service → product}/ProductServiceManager.sol +16 -13
  265. package/contracts/registry/ChainNft.sol +8 -0
  266. package/contracts/registry/IRegistry.sol +36 -21
  267. package/contracts/registry/IRegistryService.sol +33 -32
  268. package/contracts/registry/ITransferInterceptor.sol +1 -0
  269. package/contracts/registry/Registry.sol +160 -89
  270. package/contracts/registry/RegistryAccessManager.sol +51 -129
  271. package/contracts/registry/RegistryService.sol +79 -165
  272. package/contracts/registry/RegistryServiceManager.sol +28 -18
  273. package/contracts/registry/ReleaseManager.sol +235 -197
  274. package/contracts/registry/TokenRegistry.sol +21 -15
  275. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +13 -0
  276. package/contracts/shared/Component.sol +271 -0
  277. package/contracts/shared/ComponentService.sol +141 -0
  278. package/contracts/shared/ERC165.sol +14 -12
  279. package/contracts/shared/IComponent.sol +90 -0
  280. package/contracts/shared/INftOwnable.sol +12 -11
  281. package/contracts/shared/IPolicyHolder.sol +40 -0
  282. package/contracts/shared/IRegisterable.sol +4 -4
  283. package/contracts/shared/IRegistryLinked.sol +11 -0
  284. package/contracts/shared/IService.sol +6 -4
  285. package/contracts/shared/IVersionable.sol +5 -48
  286. package/contracts/shared/NftOwnable.sol +64 -82
  287. package/contracts/shared/PolicyHolder.sol +94 -0
  288. package/contracts/shared/ProxyManager.sol +126 -25
  289. package/contracts/shared/Registerable.sol +26 -41
  290. package/contracts/shared/RegistryLinked.sol +43 -0
  291. package/contracts/shared/Service.sol +33 -21
  292. package/contracts/shared/TokenHandler.sol +14 -6
  293. package/contracts/shared/Versionable.sol +4 -92
  294. package/contracts/staking/IStakingService.sol +102 -0
  295. package/contracts/staking/StakingService.sol +169 -0
  296. package/contracts/staking/StakingServiceManager.sol +40 -0
  297. package/contracts/type/Amount.sol +109 -0
  298. package/contracts/{types → type}/Blocknumber.sol +1 -0
  299. package/contracts/type/ClaimId.sol +75 -0
  300. package/contracts/{types → type}/DistributorType.sol +2 -2
  301. package/contracts/{types → type}/Fee.sol +17 -8
  302. package/contracts/{types → type}/NftId.sol +8 -0
  303. package/contracts/{types → type}/NftIdSet.sol +1 -1
  304. package/contracts/{types → type}/ObjectType.sol +17 -7
  305. package/contracts/type/PayoutId.sol +82 -0
  306. package/contracts/{types → type}/Referral.sol +4 -0
  307. package/contracts/type/RoleId.sol +139 -0
  308. package/contracts/type/Seconds.sol +54 -0
  309. package/contracts/{types → type}/StateId.sol +7 -2
  310. package/contracts/{types → type}/Timestamp.sol +18 -13
  311. package/contracts/{types → type}/UFixed.sol +1 -0
  312. package/contracts/{types → type}/Version.sol +1 -0
  313. package/package.json +3 -3
  314. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  315. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  316. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  317. package/artifacts/contracts/components/IComponent.sol/IComponent.json +0 -413
  318. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  319. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -152
  320. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  321. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -275
  322. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  323. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -157
  324. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  325. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  328. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  330. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  332. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  334. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  336. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  338. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  340. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  342. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  344. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  346. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  349. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  350. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  351. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  352. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  353. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  354. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  355. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  356. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  357. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  358. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  359. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  360. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  361. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  362. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  363. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  364. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  365. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  366. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  367. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  368. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  369. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -619
  370. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  371. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  372. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  373. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +0 -261
  374. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  375. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  376. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -100
  377. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  378. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1094
  379. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  380. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -436
  381. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  382. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -764
  383. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  384. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -424
  385. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  386. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  387. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  388. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  389. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  390. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  391. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1219
  392. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  393. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -492
  394. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  395. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -798
  396. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  397. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -424
  398. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  399. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -848
  400. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  401. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -424
  402. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  403. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  404. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  405. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  406. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  407. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
  408. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  409. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  410. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  411. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -600
  412. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  413. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  414. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  415. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  416. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  417. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -286
  418. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  419. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  420. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  421. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  422. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  423. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  424. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  425. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  426. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  427. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  428. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  429. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  430. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  431. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  432. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  433. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  434. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  435. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -123
  436. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  437. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  438. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  439. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  440. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  441. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  442. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  443. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  444. package/contracts/components/Component.sol +0 -177
  445. package/contracts/components/Distribution.sol +0 -154
  446. package/contracts/components/IComponent.sol +0 -37
  447. package/contracts/components/IDistributionComponent.sol +0 -44
  448. package/contracts/components/IPoolComponent.sol +0 -66
  449. package/contracts/components/IProductComponent.sol +0 -35
  450. package/contracts/components/Pool.sol +0 -258
  451. package/contracts/components/Product.sol +0 -295
  452. package/contracts/experiment/cloning/Cloner.sol +0 -47
  453. package/contracts/experiment/errors/Require.sol +0 -38
  454. package/contracts/experiment/errors/Revert.sol +0 -44
  455. package/contracts/experiment/inheritance/A.sol +0 -53
  456. package/contracts/experiment/inheritance/B.sol +0 -28
  457. package/contracts/experiment/inheritance/C.sol +0 -34
  458. package/contracts/experiment/inheritance/IA.sol +0 -13
  459. package/contracts/experiment/inheritance/IB.sol +0 -10
  460. package/contracts/experiment/inheritance/IC.sol +0 -12
  461. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  462. package/contracts/experiment/statemachine/ISM.sol +0 -25
  463. package/contracts/experiment/statemachine/SM.sol +0 -57
  464. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  465. package/contracts/experiment/types/TypeA.sol +0 -47
  466. package/contracts/experiment/types/TypeB.sol +0 -29
  467. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  468. package/contracts/instance/IInstanceBase.sol +0 -27
  469. package/contracts/instance/InstanceBase.sol +0 -38
  470. package/contracts/instance/base/ComponentService.sol +0 -133
  471. package/contracts/instance/base/IInstanceBase.sol +0 -21
  472. package/contracts/instance/service/BundleService.sol +0 -293
  473. package/contracts/instance/service/DistributionService.sol +0 -115
  474. package/contracts/instance/service/IBundleService.sol +0 -44
  475. package/contracts/instance/service/IDistributionService.sol +0 -12
  476. package/contracts/instance/service/IPolicyService.sol +0 -94
  477. package/contracts/instance/service/IPoolService.sol +0 -20
  478. package/contracts/instance/service/PolicyService.sol +0 -538
  479. package/contracts/instance/service/PoolService.sol +0 -142
  480. package/contracts/instance/service/ProductService.sol +0 -241
  481. package/contracts/shared/ContractDeployerLib.sol +0 -72
  482. package/contracts/test/TestFee.sol +0 -25
  483. package/contracts/test/TestRegisterable.sol +0 -18
  484. package/contracts/test/TestRoleId.sol +0 -14
  485. package/contracts/test/TestService.sol +0 -25
  486. package/contracts/test/TestToken.sol +0 -26
  487. package/contracts/test/TestVersion.sol +0 -44
  488. package/contracts/test/TestVersionable.sol +0 -17
  489. package/contracts/test/Usdc.sol +0 -26
  490. package/contracts/types/ChainId.sol +0 -38
  491. package/contracts/types/NumberId.sol +0 -52
  492. package/contracts/types/RoleId.sol +0 -90
  493. /package/contracts/{types → type}/AddressSet.sol +0 -0
  494. /package/contracts/{types → type}/Key32.sol +0 -0
  495. /package/contracts/{types → type}/RiskId.sol +0 -0
@@ -2,6 +2,24 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
5
+ import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
6
+
7
+ import {NftId} from "../type/NftId.sol";
8
+ import {RoleId} from "../type/RoleId.sol";
9
+ import {ADMIN_ROLE, INSTANCE_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, APPLICATION_SERVICE_ROLE, POLICY_SERVICE_ROLE, CLAIM_SERVICE_ROLE, BUNDLE_SERVICE_ROLE, INSTANCE_ROLE} from "../type/RoleId.sol";
10
+ import {ObjectType, INSTANCE, BUNDLE, APPLICATION, POLICY, CLAIM, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../type/ObjectType.sol";
11
+
12
+ import {Service} from "../shared/Service.sol";
13
+ import {IService} from "../shared/IService.sol";
14
+ import {AccessManagerUpgradeableInitializeable} from "../shared/AccessManagerUpgradeableInitializeable.sol";
15
+
16
+ import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
17
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
18
+ import {IProductComponent} from "../product/IProductComponent.sol";
19
+
20
+ import {IRegistry} from "../registry/IRegistry.sol";
21
+ import {IRegistryService} from "../registry/IRegistryService.sol";
22
+ import {ChainNft} from "../registry/ChainNft.sol";
5
23
 
6
24
  import {Instance} from "./Instance.sol";
7
25
  import {IInstance} from "./IInstance.sol";
@@ -9,40 +27,36 @@ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
9
27
  import {IInstanceService} from "./IInstanceService.sol";
10
28
  import {InstanceReader} from "./InstanceReader.sol";
11
29
  import {BundleManager} from "./BundleManager.sol";
12
- import {IRegistry} from "../registry/IRegistry.sol";
13
- import {IRegistryService} from "../registry/IRegistryService.sol";
14
- import {ChainNft} from "../registry/ChainNft.sol";
15
- import {Service} from "../../contracts/shared/Service.sol";
16
- import {IService} from "../shared/IService.sol";
17
- import {NftId} from "../../contracts/types/NftId.sol";
18
- import {RoleId} from "../types/RoleId.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, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
20
- import {ObjectType, INSTANCE, BUNDLE, POLICY, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
30
+ import {InstanceStore} from "./InstanceStore.sol";
31
+ import {InstanceAuthorizationsLib} from "./InstanceAuthorizationsLib.sol";
32
+
33
+ contract InstanceService is
34
+ Service,
35
+ IInstanceService
36
+ {
21
37
 
22
- contract InstanceService is Service, IInstanceService {
38
+ // TODO update to real hash when instance is stable
39
+ bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
23
40
 
41
+ IRegistryService internal _registryService;
42
+ address internal _masterOzAccessManager;
24
43
  address internal _masterInstanceAccessManager;
25
44
  address internal _masterInstance;
26
45
  address internal _masterInstanceReader;
27
46
  address internal _masterInstanceBundleManager;
47
+ address internal _masterInstanceStore;
28
48
 
29
- // TODO update to real hash when instance is stable
30
- bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
31
-
32
- modifier onlyInstanceOwner(NftId instanceNftId) {
33
- IRegistry registry = getRegistry();
34
- ChainNft chainNft = registry.getChainNft();
35
-
36
- if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
37
- revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
49
+ modifier onlyInstanceOwner(NftId instanceNftId) {
50
+ if(msg.sender != getRegistry().ownerOf(instanceNftId)) {
51
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
38
52
  }
39
53
  _;
40
54
  }
41
55
 
42
- modifier onlyRegisteredService() {
43
- address caller = msg.sender;
44
- if (! getRegistry().isRegisteredService(caller)) {
45
- revert ErrorInstanceServiceRequestUnauhorized(caller);
56
+ // TODO check component - service - instance version match
57
+ modifier onlyComponent() {
58
+ if (! getRegistry().isRegisteredComponent(msg.sender)) {
59
+ revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
46
60
  }
47
61
  _;
48
62
  }
@@ -50,260 +64,192 @@ contract InstanceService is Service, IInstanceService {
50
64
  function createInstanceClone()
51
65
  external
52
66
  returns (
53
- InstanceAccessManager clonedAccessManager,
54
67
  Instance clonedInstance,
55
- NftId clonedInstanceNftId,
56
- InstanceReader clonedInstanceReader,
57
- BundleManager clonedBundleManager
68
+ NftId clonedInstanceNftId
58
69
  )
59
70
  {
60
71
  address instanceOwner = msg.sender;
61
- IRegistry registry = getRegistry();
62
- address registryAddress = address(registry);
63
- NftId registryNftId = registry.getNftId(registryAddress);
64
- address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
65
- IRegistryService registryService = IRegistryService(registryServiceAddress);
72
+ AccessManagerUpgradeableInitializeable clonedOzAccessManager = AccessManagerUpgradeableInitializeable(
73
+ Clones.clone(_masterOzAccessManager));
66
74
 
67
- // initially set the authority of the access managar to this (being the instance service).
68
- // This will allow the instance service to bootstrap the authorizations of the instance
69
- // and then transfer the ownership of the access manager to the instance owner once everything is setup
70
- clonedAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
71
- clonedAccessManager.__InstanceAccessManager_initialize(address(this));
75
+ // initially grants ADMIN_ROLE to this (being the instance service).
76
+ // This will allow the instance service to bootstrap the authorizations of the instance.
77
+ // Instance service will not use oz access manager directlly but through instance access manager instead
78
+ // Instance service will renounce ADMIN_ROLE when bootstraping is finished
79
+ clonedOzAccessManager.initialize(address(this));
72
80
 
73
81
  clonedInstance = Instance(Clones.clone(_masterInstance));
74
- clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
82
+ clonedInstance.initialize(
83
+ address(clonedOzAccessManager),
84
+ address(getRegistry()),
85
+ instanceOwner);
86
+ // initialize and set before instance reader
87
+ InstanceStore clonedInstanceStore = InstanceStore(Clones.clone(address(_masterInstanceStore)));
88
+ clonedInstanceStore.initialize(address(clonedInstance));
89
+ clonedInstance.setInstanceStore(clonedInstanceStore);
75
90
 
76
- clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
77
- clonedInstanceReader.initialize(registryAddress, address(clonedInstance));
91
+ InstanceReader clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
92
+ clonedInstanceReader.initialize(address(clonedInstance));
78
93
  clonedInstance.setInstanceReader(clonedInstanceReader);
79
94
 
80
- clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
81
- clonedBundleManager.initialize(address(clonedAccessManager), registryAddress, address(clonedInstance));
95
+ BundleManager clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
96
+ clonedBundleManager.initialize(address(clonedInstance));
82
97
  clonedInstance.setBundleManager(clonedBundleManager);
83
98
 
99
+ InstanceAccessManager clonedInstanceAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
100
+ clonedOzAccessManager.grantRole(ADMIN_ROLE().toInt(), address(clonedInstanceAccessManager), 0);
101
+ clonedInstanceAccessManager.initialize(address(clonedInstance));
102
+ clonedInstance.setInstanceAccessManager(clonedInstanceAccessManager);
103
+
84
104
  // TODO amend setters with instance specific , policy manager ...
85
105
 
86
- _grantInitialAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
106
+ // TODO library does external calls -> but it is registry and access manager -> find out is it best practice
107
+ InstanceAuthorizationsLib.grantInitialAuthorizations(
108
+ clonedInstanceAccessManager,
109
+ clonedInstance,
110
+ clonedBundleManager,
111
+ clonedInstanceStore,
112
+ instanceOwner,
113
+ getRegistry(),
114
+ getVersion().toMajorPart());
87
115
 
88
- // to complete setup switch instance ownership to the instance owner
89
- // TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
90
- clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
91
- clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
116
+ clonedOzAccessManager.renounceRole(ADMIN_ROLE().toInt(), address(this));
92
117
 
93
- ( IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(clonedInstance, instanceOwner);
118
+ IRegistry.ObjectInfo memory info = _registryService.registerInstance(clonedInstance, instanceOwner);
94
119
  clonedInstanceNftId = info.nftId;
95
- clonedInstance.linkToRegisteredNftId();
96
-
97
- emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
98
- }
99
-
100
- function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
101
- _createGifRoles(clonedAccessManager);
102
- _createGifTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
103
- _grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
104
- _grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
105
- _grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
106
- _grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
107
- _grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
108
- _grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
109
- }
110
120
 
111
- function _createGifRoles(InstanceAccessManager clonedAccessManager) internal {
112
- clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole");
113
- clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole");
114
- clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole");
115
-
116
- clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
117
- clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
118
- clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
119
- clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
120
- clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
121
- clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
121
+ emit LogInstanceCloned(
122
+ address(clonedOzAccessManager),
123
+ address(clonedInstanceAccessManager),
124
+ address(clonedInstance),
125
+ address(clonedInstanceStore),
126
+ address(clonedBundleManager),
127
+ address(clonedInstanceReader),
128
+ clonedInstanceNftId);
122
129
  }
123
130
 
124
- function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
125
- clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
126
- clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
127
- }
128
-
129
- function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
130
- // configure authorization for distribution service on instance
131
- IRegistry registry = getRegistry();
132
- address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
133
- clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
134
- bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
135
- instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
136
- instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
137
- clonedAccessManager.setTargetFunctionRole(
138
- "Instance",
139
- instanceDistributionServiceSelectors,
140
- DISTRIBUTION_SERVICE_ROLE());
141
- }
142
-
143
- function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
144
- // configure authorization for pool service on instance
145
- address poolServiceAddress = _registry.getServiceAddress(POOL(), getMajorVersion());
146
- clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
147
- bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
148
- instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
149
- instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
150
- clonedAccessManager.setTargetFunctionRole(
151
- "Instance",
152
- instancePoolServiceSelectors,
153
- POOL_SERVICE_ROLE());
154
- }
155
-
156
- function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
157
- // configure authorization for product service on instance
158
- address productServiceAddress = _registry.getServiceAddress(PRODUCT(), getMajorVersion());
159
- clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
160
- bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
161
- instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
162
- instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
163
- instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
164
- instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
165
- instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
166
- clonedAccessManager.setTargetFunctionRole(
167
- "Instance",
168
- instanceProductServiceSelectors,
169
- PRODUCT_SERVICE_ROLE());
170
- }
171
-
172
- function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
173
- // configure authorization for policy service on instance
174
- address policyServiceAddress = _registry.getServiceAddress(POLICY(), getMajorVersion());
175
- clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
176
- bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
177
- instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
178
- instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
179
- instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
180
- clonedAccessManager.setTargetFunctionRole(
181
- "Instance",
182
- instancePolicyServiceSelectors,
183
- POLICY_SERVICE_ROLE());
184
- }
185
-
186
- function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
187
- // configure authorization for bundle service on instance
188
- address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(), getMajorVersion());
189
- clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
190
- bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
191
- instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
192
- instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
193
- clonedAccessManager.setTargetFunctionRole(
194
- "Instance",
195
- instanceBundleServiceSelectors,
196
- BUNDLE_SERVICE_ROLE());
197
-
198
- // configure authorization for bundle service on bundle manager
199
- bytes4[] memory bundleManagerBundleServiceSelectors = new bytes4[](5);
200
- bundleManagerBundleServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
201
- bundleManagerBundleServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
202
- bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
203
- bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
204
- bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
205
- clonedAccessManager.setTargetFunctionRole(
206
- "BundleManager",
207
- bundleManagerBundleServiceSelectors,
208
- BUNDLE_SERVICE_ROLE());
209
- }
210
-
211
- function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
212
- // configure authorization for instance service on instance
213
- address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(), getMajorVersion());
214
- clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
215
- bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
216
- instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
217
- clonedAccessManager.setTargetFunctionRole(
218
- "Instance",
219
- instanceInstanceServiceSelectors,
220
- INSTANCE_SERVICE_ROLE());
221
- }
222
-
223
- function setMasterInstance(
224
- address accessManagerAddress,
225
- address instanceAddress,
226
- address instanceReaderAddress,
227
- address bundleManagerAddress)
131
+ function setAndRegisterMasterInstance(address instanceAddress)
228
132
  external
229
133
  onlyOwner
230
134
  returns(NftId masterInstanceNftId)
231
135
  {
232
- require(_masterInstanceAccessManager == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
233
- require(_masterInstance == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
234
- require(_masterInstanceBundleManager == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
136
+ if(_masterInstance != address(0)) { revert ErrorInstanceServiceMasterInstanceAlreadySet(); }
137
+ if(_masterOzAccessManager != address(0)) { revert ErrorInstanceServiceMasterOzAccessManagerAlreadySet(); }
138
+ if(_masterInstanceAccessManager != address(0)) { revert ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet(); }
139
+ if(_masterInstanceBundleManager != address(0)) { revert ErrorInstanceServiceMasterBundleManagerAlreadySet(); }
235
140
 
236
- require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
237
- require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
238
- require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
239
- require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
141
+ if(instanceAddress == address(0)) { revert ErrorInstanceServiceInstanceAddressZero(); }
240
142
 
241
143
  IInstance instance = IInstance(instanceAddress);
242
- InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
243
- BundleManager bundleManager = BundleManager(bundleManagerAddress);
244
-
245
- require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
246
- require(instanceReader.getInstance() == instance, "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
247
- require(bundleManager.getInstance() == instance, "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
248
-
249
- _masterInstanceAccessManager = accessManagerAddress;
144
+ InstanceAccessManager instanceAccessManager = instance.getInstanceAccessManager();
145
+ address instanceAccessManagerAddress = address(instanceAccessManager);
146
+ InstanceReader instanceReader = instance.getInstanceReader();
147
+ address instanceReaderAddress = address(instanceReader);
148
+ BundleManager bundleManager = instance.getBundleManager();
149
+ address bundleManagerAddress = address(bundleManager);
150
+ InstanceStore instanceStore = instance.getInstanceStore();
151
+ address instanceStoreAddress = address(instanceStore);
152
+
153
+ if(instanceAccessManagerAddress == address(0)) { revert ErrorInstanceServiceInstanceAccessManagerZero(); }
154
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderZero(); }
155
+ if(bundleManagerAddress == address(0)) { revert ErrorInstanceServiceBundleManagerZero(); }
156
+ if(instanceStoreAddress == address(0)) { revert ErrorInstanceServiceInstanceStoreZero(); }
157
+
158
+ if(instance.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
159
+ if(bundleManager.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceBundleManagerAuthorityMismatch(); }
160
+ if(instanceStore.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceInstanceStoreAuthorityMismatch(); }
161
+ if(bundleManager.getInstance() != instance) { revert ErrorInstanceServiceBundleMangerInstanceMismatch(); }
162
+ if(instanceReader.getInstance() != instance) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch2(); }
163
+
164
+ _masterOzAccessManager = instance.authority();
165
+ _masterInstanceAccessManager = instanceAccessManagerAddress;
250
166
  _masterInstance = instanceAddress;
251
167
  _masterInstanceReader = instanceReaderAddress;
252
168
  _masterInstanceBundleManager = bundleManagerAddress;
169
+ _masterInstanceStore = instanceStoreAddress;
253
170
 
254
- IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getMajorVersion()));
255
171
  IInstance masterInstance = IInstance(_masterInstance);
256
- (IRegistry.ObjectInfo memory info, ) = registryService.registerInstance(masterInstance, getOwner());
172
+ IRegistry.ObjectInfo memory info = _registryService.registerInstance(masterInstance, getOwner());
257
173
  masterInstanceNftId = info.nftId;
258
-
259
- masterInstance.linkToRegisteredNftId();
260
174
  }
261
175
 
262
176
  function setMasterInstanceReader(address instanceReaderAddress) external onlyOwner {
263
- require(_masterInstanceReader != address(0), "ERROR:CRD-003:INSTANCE_READER_MASTER_NOT_SET");
264
- require (instanceReaderAddress != address(0), "ERROR:CRD-012:INSTANCE_READER_ZERO");
265
- require(instanceReaderAddress != _masterInstanceReader, "ERROR:CRD-014:INSTANCE_READER_MASTER_SAME_AS_NEW");
177
+ if(_masterInstanceReader == address(0)) { revert ErrorInstanceServiceMasterInstanceReaderNotSet(); }
178
+ if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderAddressZero(); }
179
+ if(instanceReaderAddress == _masterInstanceReader) { revert ErrorInstanceServiceInstanceReaderSameAsMasterInstanceReader(); }
266
180
 
267
181
  InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
268
- require(instanceReader.getInstance() == IInstance(_masterInstance), "ERROR:CRD-015:INSTANCE_READER_INSTANCE_MISMATCH");
182
+ if(instanceReader.getInstance() != IInstance(_masterInstance)) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch(); }
269
183
 
270
184
  _masterInstanceReader = instanceReaderAddress;
271
185
  }
272
186
 
273
- // TODO access restriction
274
- function upgradeInstanceReader(NftId instanceNftId) external {
187
+ function upgradeInstanceReader(NftId instanceNftId)
188
+ external
189
+ onlyInstanceOwner(instanceNftId)
190
+ {
275
191
  IRegistry registry = getRegistry();
276
192
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
277
193
  Instance instance = Instance(instanceInfo.objectAddress);
278
- address owner = instance.getOwner();
279
-
280
- if (msg.sender != owner) {
281
- revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
282
- }
283
194
 
284
195
  InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
285
- upgradedInstanceReaderClone.initialize(address(registry), address(instance));
196
+ upgradedInstanceReaderClone.initialize(address(instance));
286
197
  instance.setInstanceReader(upgradedInstanceReaderClone);
287
198
  }
288
199
 
289
- function getMasterInstanceReader() external view returns (address) {
290
- return _masterInstanceReader;
291
- }
292
200
 
293
- function getMasterInstance() external view returns (address) {
294
- return _masterInstance;
201
+ // all gif targets MUST be childs of instanceNftId
202
+ function createGifTarget(
203
+ NftId instanceNftId,
204
+ address targetAddress,
205
+ string memory targetName,
206
+ bytes4[][] memory selectors,
207
+ RoleId[] memory roles
208
+ )
209
+ external
210
+ restricted
211
+ {
212
+ (
213
+ IInstance instance, // or instanceInfo
214
+ // or targetInfo
215
+ ) = _validateInstanceAndComponent(instanceNftId, targetAddress);
216
+
217
+ InstanceAccessManager accessManager = instance.getInstanceAccessManager();
218
+ accessManager.createGifTarget(targetAddress, targetName);
219
+ // set proposed target config
220
+ // TODO restriction: gif targets are set only once and only here?
221
+ // assume config is a mix of gif and custom roles and no further configuration by INSTANCE_OWNER_ROLE is ever needed?
222
+ for(uint roleIdx = 0; roleIdx < roles.length; roleIdx++)
223
+ {
224
+ accessManager.setCoreTargetFunctionRole(targetName, selectors[roleIdx], roles[roleIdx]);
225
+ }
295
226
  }
296
227
 
297
- function getMasterInstanceAccessManager() external view returns (address) {
298
- return _masterInstanceAccessManager;
228
+
229
+ // TODO called by component, but target can be component helper...so needs target name
230
+ // TODO check that targetName associated with component...how???
231
+ function setComponentLocked(bool locked) onlyComponent external {
232
+
233
+ address componentAddress = msg.sender;
234
+ IRegistry registry = getRegistry();
235
+ NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
236
+
237
+ IInstance instance = IInstance(
238
+ registry.getObjectInfo(
239
+ instanceNftId).objectAddress);
240
+
241
+ instance.getInstanceAccessManager().setTargetLockedByService(
242
+ componentAddress,
243
+ locked);
299
244
  }
300
245
 
301
- function getMasterInstanceBundleManager() external view returns (address) {
302
- return _masterInstanceBundleManager;
246
+
247
+ function getMasterInstanceReader() external view returns (address) {
248
+ return _masterInstanceReader;
303
249
  }
304
250
 
305
251
  // From IService
306
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
252
+ function getDomain() public pure override returns(ObjectType) {
307
253
  return INSTANCE();
308
254
  }
309
255
 
@@ -316,47 +262,40 @@ contract InstanceService is Service, IInstanceService {
316
262
  initializer
317
263
  virtual override
318
264
  {
319
- address initialOwner;
320
- address registryAddress;
321
- (registryAddress, initialOwner) = abi.decode(data, (address, address));
322
- // TODO while InstanceService is not deployed in InstanceServiceManager constructor
323
- // owner is InstanceServiceManager deployer
324
- _initializeService(registryAddress, owner);
325
-
326
- _registerInterface(type(IInstanceService).interfaceId);
327
- }
265
+ (
266
+ address registryAddress,,
267
+ //address managerAddress
268
+ address authority
269
+ ) = abi.decode(data, (address, address, address));
270
+
271
+ initializeService(registryAddress, authority, owner);
328
272
 
329
- function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
330
- Instance instance = Instance(instanceAddress);
331
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
332
- return accessManager.hasRole(role, account);
273
+ _registryService = IRegistryService(
274
+ IRegistry(registryAddress).getServiceAddress(
275
+ REGISTRY(),
276
+ getVersion().toMajorPart()));
277
+
278
+ registerInterface(type(IInstanceService).interfaceId);
333
279
  }
334
280
 
335
- function createTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
281
+
282
+ function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress)
283
+ internal
284
+ view
285
+ returns (IInstance instance, NftId componentNftId)
286
+ {
336
287
  IRegistry registry = getRegistry();
337
288
  IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
338
- Instance instance = Instance(instanceInfo.objectAddress);
339
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
340
- accessManager.createTarget(targetAddress, targetName);
341
- }
289
+ if(instanceInfo.objectType != INSTANCE()) {
290
+ revert ErrorInstanceServiceNotInstance(instanceNftId);
291
+ }
342
292
 
343
- function setTargetLocked(string memory targetName, bool locked) external {
344
- address componentAddress = msg.sender;
345
- IRegistry registry = getRegistry();
346
293
  IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
347
- if (componentInfo.nftId.eqz()) {
348
- revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
294
+ if(componentInfo.parentNftId != instanceNftId) {
295
+ revert ErrorInstanceServiceInstanceComponentMismatch(instanceNftId, componentInfo.nftId);
349
296
  }
350
297
 
351
- // TODO validate component type
352
-
353
-
354
- address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
355
- IInstance instance = IInstance(instanceAddress);
356
-
357
- InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
358
- accessManager.setTargetClosed(targetName, locked);
298
+ instance = Instance(instanceInfo.objectAddress);
299
+ componentNftId = componentInfo.nftId;
359
300
  }
360
-
361
- }
362
-
301
+ }
@@ -7,7 +7,7 @@ import {ProxyManager} from "../shared/ProxyManager.sol";
7
7
  import {InstanceService} from "./InstanceService.sol";
8
8
  import {Registry} from "../registry/Registry.sol";
9
9
  import {RegistryService} from "../registry/RegistryService.sol";
10
- import {REGISTRY} from "../types/ObjectType.sol";
10
+ import {REGISTRY} from "../type/ObjectType.sol";
11
11
 
12
12
  contract InstanceServiceManager is ProxyManager {
13
13
 
@@ -15,16 +15,19 @@ contract InstanceServiceManager is ProxyManager {
15
15
 
16
16
  /// @dev initializes proxy manager with instance service implementation and deploys instance
17
17
  constructor(
18
- address registryAddress
19
- )
20
- ProxyManager()
18
+ address authority,
19
+ address registryAddress,
20
+ bytes32 salt
21
+ )
22
+ ProxyManager(registryAddress)
21
23
  {
22
- InstanceService instSrv = new InstanceService();
24
+ InstanceService instSrv = new InstanceService{salt: salt}();
23
25
  // bytes memory initCode = type(InstanceService).creationCode;
24
- bytes memory data = abi.encode(registryAddress, address(this));
25
- IVersionable versionable = deploy(
26
+ bytes memory data = abi.encode(registryAddress, address(this), authority);
27
+ IVersionable versionable = deployDetermenistic(
26
28
  address(instSrv),
27
- data);
29
+ data,
30
+ salt);
28
31
 
29
32
  _instanceService = InstanceService(address(versionable));
30
33