@etherisc/gif-next 0.0.2-f5a74cc-201 → 0.0.2-f626d92-602

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/README.md +8 -13
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +753 -168
  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} +233 -81
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +846 -57
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +695 -258
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +529 -217
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +15 -15
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -66
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1063 -394
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +315 -167
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +937 -1191
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +583 -193
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +137 -270
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +482 -286
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +328 -99
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -27
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +247 -180
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +71 -45
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1039 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +673 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1231 -0
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +721 -0
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +817 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +641 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1341 -259
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +440 -79
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +622 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +659 -0
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +217 -208
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +804 -160
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  83. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IPolicyService.sol/IPolicyService.json} +328 -164
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +429 -313
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +78 -388
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1092 -0
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +697 -0
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +614 -426
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +302 -105
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +257 -564
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +289 -124
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +244 -133
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +149 -230
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +257 -235
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +200 -335
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +86 -172
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +191 -163
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +210 -214
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  170. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  172. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  174. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  175. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  177. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  184. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  185. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  188. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  190. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  192. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  194. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  196. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  198. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  200. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  202. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  204. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  210. package/contracts/components/Component.sol +253 -0
  211. package/contracts/components/Distribution.sol +200 -83
  212. package/contracts/components/IComponent.sol +76 -0
  213. package/contracts/components/IDistributionComponent.sol +44 -17
  214. package/contracts/components/IPoolComponent.sol +88 -41
  215. package/contracts/components/IProductComponent.sol +10 -5
  216. package/contracts/components/Pool.sol +218 -182
  217. package/contracts/components/Product.sol +125 -121
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
  219. package/contracts/instance/BundleManager.sol +14 -16
  220. package/contracts/instance/Cloneable.sol +7 -2
  221. package/contracts/instance/IInstance.sol +56 -14
  222. package/contracts/instance/IInstanceService.sol +43 -3
  223. package/contracts/instance/Instance.sol +133 -261
  224. package/contracts/instance/InstanceAccessManager.sol +414 -175
  225. package/contracts/instance/InstanceReader.sol +10 -34
  226. package/contracts/instance/InstanceService.sol +400 -144
  227. package/contracts/instance/InstanceServiceManager.sol +6 -9
  228. package/contracts/instance/ObjectManager.sol +11 -24
  229. package/contracts/instance/base/ComponentService.sol +121 -0
  230. package/contracts/instance/base/KeyValueStore.sol +13 -5
  231. package/contracts/instance/base/Lifecycle.sol +11 -2
  232. package/contracts/instance/module/IAccess.sol +36 -20
  233. package/contracts/instance/module/IBundle.sol +8 -5
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +2 -0
  236. package/contracts/instance/module/IPolicy.sol +30 -3
  237. package/contracts/instance/module/ISetup.sol +7 -20
  238. package/contracts/instance/service/ApplicationService.sol +350 -0
  239. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  240. package/contracts/instance/service/BundleService.sol +431 -0
  241. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  242. package/contracts/instance/service/ClaimService.sol +151 -0
  243. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  244. package/contracts/instance/service/DistributionService.sol +378 -31
  245. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  246. package/contracts/instance/service/IApplicationService.sol +82 -0
  247. package/contracts/instance/service/IBundleService.sol +93 -0
  248. package/contracts/instance/service/IClaimService.sol +61 -0
  249. package/contracts/instance/service/IDistributionService.sol +87 -0
  250. package/contracts/instance/service/IPolicyService.sol +72 -0
  251. package/contracts/instance/service/IPoolService.sol +73 -25
  252. package/contracts/instance/service/IProductService.sol +2 -72
  253. package/contracts/instance/service/PolicyService.sol +362 -0
  254. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  255. package/contracts/instance/service/PoolService.sol +203 -187
  256. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  257. package/contracts/instance/service/ProductService.sol +104 -464
  258. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  259. package/contracts/registry/ChainNft.sol +9 -1
  260. package/contracts/registry/IRegistry.sol +39 -19
  261. package/contracts/registry/IRegistryService.sol +31 -13
  262. package/contracts/registry/ITransferInterceptor.sol +1 -0
  263. package/contracts/registry/Registry.sol +243 -224
  264. package/contracts/registry/RegistryAccessManager.sol +216 -0
  265. package/contracts/registry/RegistryService.sol +97 -173
  266. package/contracts/registry/RegistryServiceManager.sol +21 -39
  267. package/contracts/registry/ReleaseManager.sol +324 -0
  268. package/contracts/registry/TokenRegistry.sol +22 -17
  269. package/contracts/shared/ERC165.sol +14 -12
  270. package/contracts/shared/INftOwnable.sol +11 -10
  271. package/contracts/shared/IPolicyHolder.sol +26 -0
  272. package/contracts/shared/IRegisterable.sol +4 -6
  273. package/contracts/shared/IRegistryLinked.sol +12 -0
  274. package/contracts/shared/IService.sol +5 -4
  275. package/contracts/shared/IVersionable.sol +4 -47
  276. package/contracts/shared/NftOwnable.sol +66 -80
  277. package/contracts/shared/PolicyHolder.sol +81 -0
  278. package/contracts/shared/ProxyManager.sol +100 -25
  279. package/contracts/shared/Registerable.sol +16 -32
  280. package/contracts/shared/RegistryLinked.sol +48 -0
  281. package/contracts/shared/Service.sol +41 -24
  282. package/contracts/shared/TokenHandler.sol +11 -5
  283. package/contracts/shared/Versionable.sol +4 -92
  284. package/contracts/test/TestRegisterable.sol +1 -1
  285. package/contracts/test/TestService.sol +4 -3
  286. package/contracts/types/Amount.sol +60 -0
  287. package/contracts/types/Blocknumber.sol +1 -0
  288. package/contracts/types/ClaimId.sol +52 -0
  289. package/contracts/types/DistributorType.sol +2 -2
  290. package/contracts/types/Fee.sol +13 -5
  291. package/contracts/types/NftId.sol +8 -0
  292. package/contracts/types/ObjectType.sol +10 -5
  293. package/contracts/types/PayoutId.sol +54 -0
  294. package/contracts/types/Referral.sol +4 -0
  295. package/contracts/types/RoleId.sol +26 -19
  296. package/contracts/types/Seconds.sol +54 -0
  297. package/contracts/types/StateId.sol +1 -0
  298. package/contracts/types/Timestamp.sol +13 -13
  299. package/contracts/types/UFixed.sol +1 -0
  300. package/contracts/types/Version.sol +1 -0
  301. package/package.json +3 -3
  302. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  304. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -368
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  306. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  311. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  312. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  313. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  314. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  315. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  316. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  317. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  319. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  321. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  323. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  325. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  327. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  329. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  330. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  331. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  332. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  333. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  335. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  336. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  337. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  338. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  339. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  340. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  342. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  344. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  345. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  346. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  347. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  348. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  349. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  350. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  351. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  352. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  353. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  354. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  355. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  356. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  357. package/contracts/components/BaseComponent.sol +0 -132
  358. package/contracts/components/IBaseComponent.sol +0 -31
  359. package/contracts/experiment/cloning/Cloner.sol +0 -47
  360. package/contracts/experiment/errors/Require.sol +0 -38
  361. package/contracts/experiment/errors/Revert.sol +0 -44
  362. package/contracts/experiment/inheritance/A.sol +0 -53
  363. package/contracts/experiment/inheritance/B.sol +0 -28
  364. package/contracts/experiment/inheritance/C.sol +0 -34
  365. package/contracts/experiment/inheritance/IA.sol +0 -13
  366. package/contracts/experiment/inheritance/IB.sol +0 -10
  367. package/contracts/experiment/inheritance/IC.sol +0 -12
  368. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  369. package/contracts/experiment/statemachine/ISM.sol +0 -25
  370. package/contracts/experiment/statemachine/SM.sol +0 -57
  371. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  372. package/contracts/experiment/types/TypeA.sol +0 -47
  373. package/contracts/experiment/types/TypeB.sol +0 -29
  374. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  375. package/contracts/instance/IInstanceBase.sol +0 -26
  376. package/contracts/instance/InstanceBase.sol +0 -41
  377. package/contracts/instance/base/ComponentServiceBase.sol +0 -134
  378. package/contracts/instance/base/IInstanceBase.sol +0 -23
  379. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  380. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  381. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -0,0 +1,216 @@
1
+ // SPDX-License-Identifier: UNLICENSED
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
5
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
6
+
7
+ import {RoleId, RoleIdLib,
8
+ GIF_MANAGER_ROLE,
9
+ GIF_ADMIN_ROLE,
10
+ RELEASE_MANAGER_ROLE} from "../types/RoleId.sol";
11
+
12
+ import {TokenRegistry} from "./TokenRegistry.sol";
13
+ import {ReleaseManager} from "./ReleaseManager.sol";
14
+
15
+ /*
16
+ 4 types of roles:
17
+ 1) RELEASE_MANAGER_ROLE
18
+ - has only ReleaseManager as member
19
+ - responsible for setting and granting of REGISTRAR roles
20
+ 1) REGISTRAR roles
21
+ - set and granted by RELEASE_MANAGER_ROLE
22
+ - each has 1 unique member (regular service ver.X) (subject to change)
23
+ - each set to 1 target (registry service ver.X) and 1 selector (function of registry service ver.X) (subject to change)
24
+ 2) GIF_MANAGER_ROLE
25
+ - can have arbitrary number of members
26
+ - responsible for services registrations
27
+ - responsible for token registration and activation
28
+ 3) GIF_ADMIN_ROLE
29
+ - admin of GIF_MANAGER_ROLE
30
+ - MUST have 1 member at any time
31
+ - granted/revoked ONLY in transferAdminRole() -> consider lock out situations!!!
32
+ - responsible for creation and activation of releases
33
+
34
+ */
35
+
36
+ contract RegistryAccessManager is AccessManaged
37
+ {
38
+ error NotInitialized();
39
+ error AlreadyInitialized();
40
+
41
+ uint64 public constant UNIQUE_ROLE_ID_MIN = 1000000;
42
+
43
+ AccessManager private immutable _accessManager;
44
+ address private _releaseManager;
45
+ address private _tokenRegistry;
46
+
47
+ uint64 private _idNext; // role id
48
+ bool private _isInitialized;
49
+
50
+ modifier onlyOnce() {
51
+ if(_isInitialized) {
52
+ revert AlreadyInitialized();
53
+ }
54
+ _;
55
+ _isInitialized = true;
56
+ }
57
+
58
+ modifier onlyInitialized() {
59
+ if(!_isInitialized) {
60
+ revert NotInitialized();
61
+ }
62
+ _;
63
+ }
64
+
65
+ constructor(address manager)
66
+ AccessManaged(msg.sender)
67
+ {
68
+ _accessManager = new AccessManager(address(this));
69
+ setAuthority(address(_accessManager));
70
+
71
+ _idNext = UNIQUE_ROLE_ID_MIN;
72
+
73
+ _configureAdminRoleInitial();
74
+
75
+ address admin = msg.sender;
76
+ _grantRole(GIF_ADMIN_ROLE(), admin, 0);
77
+ _grantRole(GIF_MANAGER_ROLE(), manager, 0);
78
+ }
79
+
80
+ function initialize(address releaseManager, address tokenRegistry)
81
+ external
82
+ restricted // GIF_ADMIN_ROLE
83
+ onlyOnce
84
+ {
85
+ require(
86
+ ReleaseManager(releaseManager).authority() == address(_accessManager),
87
+ "RegistryAccessManager: release manager authority is invalid");
88
+ require(tokenRegistry > address(0), "RegistryAccessManager: token registry is 0");
89
+ //require(tokenRegistry.authority() == address(_accessManager));
90
+
91
+ _releaseManager = releaseManager;
92
+ _tokenRegistry = tokenRegistry;
93
+
94
+ _configureAdminRole();
95
+ _configureManagerRole();
96
+ _configureReleaseManagerRole();
97
+
98
+ _grantRole(RELEASE_MANAGER_ROLE(), releaseManager, 0);
99
+ }
100
+
101
+ // set unique role for target, role forever have 1 member and never revoked
102
+ function setAndGrantUniqueRole(
103
+ address account,
104
+ address target,
105
+ bytes4[] memory selector
106
+ )
107
+ external
108
+ restricted // RELEASE_MANAGER_ROLE
109
+ onlyInitialized
110
+ returns(RoleId)
111
+ {
112
+ // TODO questionable check...
113
+ // target is not part of `runtime`
114
+ //if(
115
+ // target == address(this) ||
116
+ // target == address(_accessManager) ||
117
+ // target == _releaseManager ||
118
+ // target == _tokenRegistry)
119
+ //{ return TargetInvalid(); }
120
+
121
+ RoleId roleId = _getNextRoleId();
122
+
123
+ _setTargetFunctionRole(target, selector, roleId);
124
+ _grantRole(roleId, account, 0);
125
+ }
126
+
127
+ /*function transferAdmin(address to)
128
+ external
129
+ restricted // only with GIF_ADMIN_ROLE or nft owner
130
+ {
131
+ _accessManager.revoke(GIF_ADMIN_ROLE, );
132
+ _accesssManager.grant(GIF_ADMIN_ROLE, to, 0);
133
+ }*/
134
+
135
+ //--- view functions ----------------------------------------------------//
136
+
137
+ function getAccessManager()
138
+ external
139
+ view
140
+ returns (AccessManager)
141
+ {
142
+ return _accessManager;
143
+ }
144
+
145
+ //--- private functions -------------------------------------------------//
146
+
147
+ function _configureAdminRoleInitial() private
148
+ {
149
+ bytes4[] memory functionSelector = new bytes4[](1);
150
+
151
+ functionSelector[0] = RegistryAccessManager.initialize.selector;
152
+ _setTargetFunctionRole(address(this), functionSelector, GIF_ADMIN_ROLE());
153
+ }
154
+
155
+ function _configureAdminRole() private
156
+ {
157
+ bytes4[] memory functionSelector = new bytes4[](1);
158
+
159
+ // for RegistryServiceProxyManager
160
+ // TODO upgrading with releaseManager.upgrade()->proxy.upgrade()???
161
+ //functionSelector[0] = RegistryServiceManager.upgrade.selector;
162
+ //_setTargetFunctionRole(address(this), functionSelector, GIF_ADMIN_ROLE());
163
+
164
+ // for TokenRegistry
165
+
166
+ // for ReleaseManager
167
+ functionSelector[0] = ReleaseManager.createNextRelease.selector;
168
+ _setTargetFunctionRole(_releaseManager, functionSelector, GIF_ADMIN_ROLE());
169
+
170
+ functionSelector[0] = ReleaseManager.activateNextRelease.selector;
171
+ _setTargetFunctionRole(_releaseManager, functionSelector, GIF_ADMIN_ROLE());
172
+ }
173
+
174
+ function _configureManagerRole() private
175
+ {
176
+ bytes4[] memory functionSelector = new bytes4[](1);
177
+
178
+ // for TokenRegistry
179
+ functionSelector[0] = TokenRegistry.setActive.selector;
180
+ _setTargetFunctionRole(address(_tokenRegistry), functionSelector, GIF_MANAGER_ROLE());
181
+
182
+ // for ReleaseManager
183
+ functionSelector[0] = ReleaseManager.registerService.selector;
184
+ _setTargetFunctionRole(_releaseManager, functionSelector, GIF_MANAGER_ROLE());
185
+
186
+ functionSelector[0] = ReleaseManager.registerRegistryService.selector;
187
+ _setTargetFunctionRole(_releaseManager, functionSelector, GIF_MANAGER_ROLE());
188
+
189
+ // set admin
190
+ _setRoleAdmin(GIF_MANAGER_ROLE(), GIF_ADMIN_ROLE());
191
+ }
192
+
193
+ function _configureReleaseManagerRole() private
194
+ {
195
+ bytes4[] memory functionSelector = new bytes4[](1);
196
+
197
+ functionSelector[0] = RegistryAccessManager.setAndGrantUniqueRole.selector;
198
+ _setTargetFunctionRole(address(this), functionSelector, RELEASE_MANAGER_ROLE());
199
+ }
200
+
201
+ function _setTargetFunctionRole(address target, bytes4[] memory selectors, RoleId roleId) private {
202
+ _accessManager.setTargetFunctionRole(target, selectors, roleId.toInt());
203
+ }
204
+
205
+ function _setRoleAdmin(RoleId roleId, RoleId adminRoleId) private {
206
+ _accessManager.setRoleAdmin(roleId.toInt(), adminRoleId.toInt());
207
+ }
208
+
209
+ function _grantRole(RoleId roleId, address account, uint32 executionDelay) private {
210
+ _accessManager.grantRole(roleId.toInt(), account, executionDelay);
211
+ }
212
+
213
+ function _getNextRoleId() private returns(RoleId roleId) {
214
+ roleId = RoleIdLib.toRoleId(_idNext++);
215
+ }
216
+ }
@@ -2,13 +2,13 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
5
- import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
+ // import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
6
6
 
7
7
  import {IRegistry} from "./IRegistry.sol";
8
8
  import {IInstance} from "../instance/IInstance.sol";
9
9
 
10
10
  import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
11
- import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
11
+ import {IComponent} from "../../contracts/components/IComponent.sol";
12
12
  import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
13
13
  import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
14
14
  import {IDistributionComponent} from "../../contracts/components/IDistributionComponent.sol";
@@ -16,9 +16,10 @@ import {IDistributionComponent} from "../../contracts/components/IDistributionCo
16
16
  import {IVersionable} from "../../contracts/shared/IVersionable.sol";
17
17
  import {Versionable} from "../../contracts/shared/Versionable.sol";
18
18
  import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
19
+ import {Registerable} from "../../contracts/shared/Registerable.sol";
19
20
 
20
21
  import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
21
- import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, POLICY, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
22
+ import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, DISTRIBUTOR, APPLICATION, POLICY, CLAIM, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
22
23
  import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
23
24
  import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
24
25
  import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
@@ -30,81 +31,62 @@ import {IRegistryService} from "./IRegistryService.sol";
30
31
  import {Registry} from "./Registry.sol";
31
32
 
32
33
  contract RegistryService is
33
- AccessManagedUpgradeable,
34
34
  Service,
35
35
  IRegistryService
36
36
  {
37
37
  using NftIdLib for NftId;
38
38
 
39
-
40
- // Initial value for constant variable has to be compile-time constant
41
- // TODO define types as constants?
42
- //ObjectType public constant SERVICE_TYPE = REGISTRY();
43
- string public constant NAME = "RegistryService";
44
-
45
39
  // TODO update to real hash when registry is stable
46
40
  bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
47
41
 
48
- address public constant NFT_LOCK_ADDRESS = address(0x1);
49
-
50
- /// @dev
51
- // msg.sender - ONLY registry owner
52
- // CAN NOT register itself
53
- // CAN register ONLY valid object-parent types combinations for SERVICE
54
- // CAN register ONLY IRegisterable address he owns
55
- // IMPORTANT: MUST NOT check owner before calling external contract
56
- function registerService(IService service)
57
- external
58
- restricted
59
- returns(
60
- IRegistry.ObjectInfo memory info,
61
- bytes memory data
62
- )
63
- {
42
+ // From IService
43
+ function getDomain() public pure override returns(ObjectType serviceDomain) {
44
+ return REGISTRY();
45
+ }
64
46
 
65
- // CAN revert if no ERC165 support -> will revert with empty message
66
- if(!service.supportsInterface(type(IService).interfaceId)) {
67
- revert NotService();
68
- }
47
+ // from Versionable
69
48
 
49
+ /// @dev top level initializer
50
+ function _initialize(
51
+ address owner,
52
+ bytes memory data
53
+ )
54
+ internal
55
+ virtual override
56
+ initializer()
57
+ {
70
58
  (
71
- info,
72
- data
73
- ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
59
+ address registryAddress,
60
+ address initialAuthority
61
+ ) = abi.decode(data, (address, address));
62
+
63
+ initializeService(registryAddress, initialAuthority, owner);
74
64
 
75
- info.nftId = _registry.register(info);
76
- service.linkToRegisteredNftId();
77
- return (info, data);
65
+ registerInterface(type(IRegistryService).interfaceId);
78
66
  }
79
67
 
80
- function registerInstance(IRegisterable instance)
68
+ function registerInstance(IRegisterable instance, address owner)
81
69
  external
70
+ restricted
82
71
  returns(
83
- IRegistry.ObjectInfo memory info,
84
- bytes memory data
72
+ IRegistry.ObjectInfo memory info
85
73
  )
86
74
  {
87
75
  if(!instance.supportsInterface(type(IInstance).interfaceId)) {
88
76
  revert NotInstance();
89
77
  }
90
78
 
91
- (
92
- info,
93
- data
94
- ) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
79
+ info = _getAndVerifyContractInfo(instance, INSTANCE(), owner);
80
+ info.nftId = getRegistry().register(info);
95
81
 
96
- info.nftId = _registry.register(info);
97
82
  instance.linkToRegisteredNftId(); // asume safe
98
-
99
- return (info, data);
100
83
  }
101
84
 
102
- function registerProduct(IBaseComponent product, address owner)
85
+ function registerProduct(IComponent product, address owner)
103
86
  external
104
87
  restricted
105
88
  returns(
106
- IRegistry.ObjectInfo memory info,
107
- bytes memory data
89
+ IRegistry.ObjectInfo memory info
108
90
  )
109
91
  {
110
92
  // CAN revert if no ERC165 support -> will revert with empty message
@@ -112,62 +94,47 @@ contract RegistryService is
112
94
  revert NotProduct();
113
95
  }
114
96
 
115
- (
116
- info,
117
- data
118
- ) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
119
-
120
- info.nftId = _registry.register(info);
121
- // TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
122
- product.linkToRegisteredNftId();
123
-
124
- return (info, data);
97
+ info = _getAndVerifyContractInfo(product, PRODUCT(), owner);
98
+ info.nftId = getRegistry().register(info);
125
99
  }
126
100
 
127
- function registerPool(IBaseComponent pool, address owner)
101
+ function registerPool(IComponent pool, address owner)
128
102
  external
129
103
  restricted
130
104
  returns(
131
- IRegistry.ObjectInfo memory info,
132
- bytes memory data
105
+ IRegistry.ObjectInfo memory info
133
106
  )
134
107
  {
135
108
  if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
136
109
  revert NotPool();
137
110
  }
138
111
 
139
- (
140
- info,
141
- data
142
- ) = _getAndVerifyContractInfo(pool, POOL(), owner);
143
-
144
- info.nftId = _registry.register(info);
145
- pool.linkToRegisteredNftId();
146
-
147
- return (info, data);
112
+ info = _getAndVerifyContractInfo(pool, POOL(), owner);
113
+ info.nftId = getRegistry().register(info);
148
114
  }
149
115
 
150
- function registerDistribution(IBaseComponent distribution, address owner)
116
+ function registerDistribution(IComponent distribution, address owner)
151
117
  external
152
118
  restricted
153
119
  returns(
154
- IRegistry.ObjectInfo memory info,
155
- bytes memory data
120
+ IRegistry.ObjectInfo memory info
156
121
  )
157
122
  {
158
123
  if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
159
124
  revert NotDistribution();
160
125
  }
161
126
 
162
- (
163
- info,
164
- data
165
- ) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
166
-
167
- info.nftId = _registry.register(info);
168
- distribution.linkToRegisteredNftId();
127
+ info = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
128
+ info.nftId = getRegistry().register(info);
129
+ }
169
130
 
170
- return (info, data);
131
+ function registerDistributor(IRegistry.ObjectInfo memory info)
132
+ external
133
+ restricted
134
+ returns(NftId nftId)
135
+ {
136
+ _verifyObjectInfo(info, DISTRIBUTOR());
137
+ nftId = getRegistry().register(info);
171
138
  }
172
139
 
173
140
  function registerPolicy(IRegistry.ObjectInfo memory info)
@@ -177,7 +144,7 @@ contract RegistryService is
177
144
  {
178
145
  _verifyObjectInfo(info, POLICY());
179
146
 
180
- nftId = _registry.register(info);
147
+ nftId = getRegistry().register(info);
181
148
  }
182
149
 
183
150
  function registerBundle(IRegistry.ObjectInfo memory info)
@@ -187,7 +154,7 @@ contract RegistryService is
187
154
  {
188
155
  _verifyObjectInfo(info, BUNDLE());
189
156
 
190
- nftId = _registry.register(info);
157
+ nftId = getRegistry().register(info);
191
158
  }
192
159
 
193
160
  function registerStake(IRegistry.ObjectInfo memory info)
@@ -197,78 +164,72 @@ contract RegistryService is
197
164
  {
198
165
  _verifyObjectInfo(info, STAKE());
199
166
 
200
- nftId = _registry.register(info);
167
+ nftId = getRegistry().register(info);
201
168
  }
202
169
 
203
- // From IService
204
- function getName() public pure override(IService, Service) returns(string memory) {
205
- return NAME;
206
- }
207
- //function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
208
- // return SERVICE_TYPE;
209
- //}
170
+ // from IRegisterable
210
171
 
172
+ function getFunctionConfigs()
173
+ external
174
+ pure
175
+ returns(
176
+ FunctionConfig[] memory config
177
+ )
178
+ {
179
+ config = new FunctionConfig[](8);
211
180
 
212
- // from Versionable
181
+ // order of service registrations MUST be reverse to this array
182
+ /*config[-1].serviceDomain = STAKE();
183
+ config[-1].selector = RegistryService.registerStake.selector;*/
213
184
 
214
- /// @dev top level initializer
215
- // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
216
- // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
217
- // 3) deploy registry -> pass registry service address as constructor argument
218
- // registry is getting instantiated and locked to registry service address forever
219
- function _initialize(
220
- address owner,
221
- bytes memory data
222
- )
223
- internal
224
- initializer
225
- virtual override
226
- {
227
- (
228
- address initialAuthority,
229
- bytes memory registryByteCodeWithInitCode
230
- ) = abi.decode(data, (address, bytes));
185
+ config[0].serviceDomain = POLICY();
186
+ config[0].selectors = new bytes4[](0);
231
187
 
232
- __AccessManaged_init(initialAuthority);
188
+ config[1].serviceDomain = APPLICATION();
189
+ config[1].selectors = new bytes4[](1);
190
+ config[1].selectors[0] = RegistryService.registerPolicy.selector;
233
191
 
234
- bytes memory encodedConstructorArguments = abi.encode(
235
- owner,
236
- getMajorVersion());
192
+ config[2].serviceDomain = CLAIM();
193
+ config[2].selectors = new bytes4[](0);
237
194
 
238
- bytes memory registryCreationCode = ContractDeployerLib.getCreationCode(
239
- registryByteCodeWithInitCode,
240
- encodedConstructorArguments);
195
+ config[3].serviceDomain = PRODUCT();
196
+ config[3].selectors = new bytes4[](1);
197
+ config[3].selectors[0] = RegistryService.registerProduct.selector;
241
198
 
242
- IRegistry registry = IRegistry(ContractDeployerLib.deploy(
243
- registryCreationCode,
244
- REGISTRY_CREATION_CODE_HASH));
199
+ config[4].serviceDomain = POOL();
200
+ config[4].selectors = new bytes4[](1);
201
+ config[4].selectors[0] = RegistryService.registerPool.selector;
245
202
 
246
- NftId registryNftId = registry.getNftId(address(registry));
203
+ // registration of bundle service must preceed registration of pool service
204
+ config[5].serviceDomain = BUNDLE();
205
+ config[5].selectors = new bytes4[](1);
206
+ config[5].selectors[0] = RegistryService.registerBundle.selector;
247
207
 
248
- _initializeService(address(registry), owner);
208
+ config[6].serviceDomain = DISTRIBUTION();
209
+ config[6].selectors = new bytes4[](2);
210
+ config[6].selectors[0] = RegistryService.registerDistribution.selector;
211
+ config[6].selectors[1] = RegistryService.registerDistributor.selector;
249
212
 
250
- // TODO why do registry service proxy need to keep its nftId??? -> no registryServiceNftId checks in implementation
251
- // if they are -> use registry address to obtain owner of registry service nft (works the same with any registerable and(or) implementation)
252
- linkToRegisteredNftId();
253
- _registerInterface(type(IRegistryService).interfaceId);
213
+ // registerInstance() have no restriction
214
+ config[7].serviceDomain = INSTANCE();
215
+ config[7].selectors = new bytes4[](1);
216
+ config[7].selectors[0] = RegistryService.registerInstance.selector;
254
217
  }
255
218
 
219
+ // Internal
220
+
256
221
  function _getAndVerifyContractInfo(
257
222
  IRegisterable registerable,
258
223
  ObjectType expectedType, // assume can be valid only
259
- address expectedOwner // assume can be 0
224
+ address expectedOwner // assume can be 0 when given by other service
260
225
  )
261
226
  internal
262
- view
227
+ // view
263
228
  returns(
264
- IRegistry.ObjectInfo memory info,
265
- bytes memory data
229
+ IRegistry.ObjectInfo memory info
266
230
  )
267
231
  {
268
- (
269
- info,
270
- data
271
- ) = registerable.getInitialInfo();
232
+ info = registerable.getInitialInfo();
272
233
  info.objectAddress = address(registerable);
273
234
 
274
235
  if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
@@ -277,13 +238,8 @@ contract RegistryService is
277
238
 
278
239
  address owner = info.initialOwner;
279
240
 
280
- // solhint-disable-next-line
281
- if(expectedType == INSTANCE()) {
282
- // any address may create a new instance via instance service
283
- } else {
284
- if(owner != expectedOwner) { // registerable owner protection
285
- revert NotRegisterableOwner(expectedOwner);
286
- }
241
+ if(owner != expectedOwner) { // registerable owner protection
242
+ revert NotRegisterableOwner(expectedOwner);
287
243
  }
288
244
 
289
245
  if(owner == address(registerable)) {
@@ -297,18 +253,6 @@ contract RegistryService is
297
253
  if(getRegistry().isRegistered(owner)) {
298
254
  revert RegisterableOwnerIsRegistered();
299
255
  }
300
-
301
- /*NftId parentNftId = info.parentNftId;
302
- IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
303
-
304
- if(parentInfo.objectType != parentType) { // parent registration + type
305
- revert InvalidParent(parentNftId);
306
- }*/
307
-
308
- return(
309
- info,
310
- data
311
- );
312
256
  }
313
257
 
314
258
  function _verifyObjectInfo(
@@ -334,25 +278,5 @@ contract RegistryService is
334
278
  if(getRegistry().isRegistered(owner)) {
335
279
  revert RegisterableOwnerIsRegistered();
336
280
  }
337
-
338
- // can catch all 3 if check that initialOwner is not registered
339
- /*if(info.initialOwner == msg.sender) {
340
- revert InitialOwnerIsParent();
341
- }
342
-
343
- if(info.initialOwner == address(this)) {
344
- revert InitialOwnerIsService();
345
- }
346
-
347
- if(info.initialOwner == address(getRegistry())) {
348
- revert InitialOwnerIsRegistry();
349
- }*/
350
-
351
- /*NftId parentNftId = info.parentNftId;
352
- IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
353
-
354
- if(parentInfo.objectType != parentType) { // parent registration + type
355
- revert InvalidParent(parentNftId);
356
- }*/
357
281
  }
358
282
  }