@etherisc/gif-next 0.0.2-ce8407f-016 → 0.0.2-ce87da3-250

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/README.md +243 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +853 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1346 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → components/IComponent.sol/IComponent.json} +195 -150
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +900 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +887 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +806 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1322 -0
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
  17. package/artifacts/contracts/components/Product.sol/Product.json +1246 -0
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  21. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2475 -1
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +509 -0
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +1051 -1183
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +211 -144
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +562 -54
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +958 -29
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +693 -0
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  39. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +552 -0
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +0 -77
  42. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +10 -244
  45. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  47. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  49. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  55. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  56. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +869 -0
  57. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  58. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +657 -0
  59. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  60. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1096 -0
  61. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  62. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  63. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  64. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  65. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  66. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  67. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  68. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1254 -0
  69. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  70. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +753 -0
  71. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  72. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +473 -0
  73. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  74. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +633 -0
  75. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  76. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
  77. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  78. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +639 -0
  79. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  80. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +583 -0
  81. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  82. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +347 -0
  83. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  84. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +384 -0
  85. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  86. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1120 -0
  87. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  88. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +717 -0
  89. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
  91. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +649 -0
  93. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  94. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  95. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
  97. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  98. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
  99. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  100. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +236 -63
  101. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  102. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +323 -178
  103. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  104. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  105. package/artifacts/contracts/registry/Registry.sol/Registry.json +210 -212
  106. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  107. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  108. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  109. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +432 -268
  110. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +323 -129
  112. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  113. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  114. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  115. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  116. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  117. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  118. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  119. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  120. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  121. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  122. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  123. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  125. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  126. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  127. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  128. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → shared/IService.sol/IService.json} +67 -39
  129. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  131. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  133. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  134. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  136. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  139. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  140. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  141. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  142. package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/Service.sol/Service.json} +155 -151
  143. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  144. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  145. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  146. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  147. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  149. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +111 -5
  155. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestService.sol/TestService.json +147 -226
  157. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  159. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  161. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  163. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  164. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  165. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  166. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  170. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  172. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  174. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  175. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  176. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  178. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  179. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  180. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  183. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  185. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  187. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  189. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  191. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  193. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  195. package/artifacts/contracts/{experiment/types/TypeB.sol/TypeBLib.json → types/UFixed.sol/MathLib.json} +4 -4
  196. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  198. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  200. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  202. package/contracts/components/Component.sol +241 -0
  203. package/contracts/components/Distribution.sol +287 -0
  204. package/contracts/components/IComponent.sol +54 -0
  205. package/contracts/components/IDistributionComponent.sol +92 -0
  206. package/contracts/components/IPoolComponent.sol +87 -0
  207. package/contracts/components/IProductComponent.sol +39 -0
  208. package/contracts/components/Pool.sol +254 -0
  209. package/contracts/components/Product.sol +285 -0
  210. package/contracts/instance/BundleManager.sol +125 -0
  211. package/contracts/instance/Cloneable.sol +46 -0
  212. package/contracts/instance/IInstance.sol +87 -1
  213. package/contracts/instance/IInstanceService.sol +59 -0
  214. package/contracts/instance/Instance.sol +137 -238
  215. package/contracts/instance/InstanceAccessManager.sol +90 -81
  216. package/contracts/instance/InstanceReader.sol +86 -28
  217. package/contracts/instance/InstanceService.sol +453 -22
  218. package/contracts/instance/InstanceServiceManager.sol +54 -0
  219. package/contracts/instance/ObjectManager.sol +84 -0
  220. package/contracts/instance/base/ComponentService.sol +134 -0
  221. package/contracts/instance/base/IKeyValueStore.sol +5 -4
  222. package/contracts/instance/base/KeyValueStore.sol +4 -20
  223. package/contracts/instance/module/IAccess.sol +28 -19
  224. package/contracts/instance/module/IBundle.sol +1 -0
  225. package/contracts/instance/module/IDistribution.sol +1 -0
  226. package/contracts/instance/module/IPolicy.sol +4 -2
  227. package/contracts/instance/module/ISetup.sol +10 -3
  228. package/contracts/instance/module/ITreasury.sol +1 -1
  229. package/contracts/instance/service/ApplicationService.sol +268 -0
  230. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  231. package/contracts/instance/service/BundleService.sol +298 -0
  232. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  233. package/contracts/instance/service/ClaimService.sol +151 -0
  234. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  235. package/contracts/instance/service/DistributionService.sol +366 -0
  236. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  237. package/contracts/instance/service/IApplicationService.sol +82 -0
  238. package/contracts/instance/service/IBundleService.sol +54 -0
  239. package/contracts/instance/service/IClaimService.sol +61 -0
  240. package/contracts/instance/service/IDistributionService.sol +81 -0
  241. package/contracts/instance/service/IPolicyService.sol +89 -0
  242. package/contracts/instance/service/IPoolService.sol +20 -0
  243. package/contracts/instance/service/IProductService.sol +40 -0
  244. package/contracts/instance/service/PolicyService.sol +476 -0
  245. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  246. package/contracts/instance/service/PoolService.sol +109 -0
  247. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  248. package/contracts/instance/service/ProductService.sol +233 -0
  249. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  250. package/contracts/registry/ChainNft.sol +41 -26
  251. package/contracts/registry/IRegistry.sol +51 -25
  252. package/contracts/registry/IRegistryService.sol +54 -16
  253. package/contracts/registry/Registry.sol +279 -306
  254. package/contracts/registry/RegistryAccessManager.sol +216 -0
  255. package/contracts/registry/RegistryService.sol +170 -256
  256. package/contracts/registry/RegistryServiceManager.sol +30 -11
  257. package/contracts/registry/ReleaseManager.sol +322 -0
  258. package/contracts/registry/TokenRegistry.sol +116 -0
  259. package/contracts/shared/ERC165.sol +15 -9
  260. package/contracts/shared/INftOwnable.sol +11 -10
  261. package/contracts/shared/IPolicyHolder.sol +26 -0
  262. package/contracts/shared/IRegisterable.sol +4 -6
  263. package/contracts/shared/IRegistryLinked.sol +12 -0
  264. package/contracts/shared/IService.sol +18 -0
  265. package/contracts/shared/IVersionable.sol +4 -47
  266. package/contracts/shared/NftOwnable.sol +67 -83
  267. package/contracts/shared/PolicyHolder.sol +81 -0
  268. package/contracts/shared/ProxyManager.sol +101 -26
  269. package/contracts/shared/Registerable.sol +15 -30
  270. package/contracts/shared/RegistryLinked.sol +48 -0
  271. package/contracts/shared/Service.sol +58 -0
  272. package/contracts/shared/TokenHandler.sol +2 -2
  273. package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
  274. package/contracts/shared/Versionable.sol +5 -93
  275. package/contracts/test/TestFee.sol +2 -2
  276. package/contracts/test/TestRegisterable.sol +1 -1
  277. package/contracts/test/TestRoleId.sol +6 -6
  278. package/contracts/test/TestService.sol +6 -7
  279. package/contracts/types/ClaimId.sol +52 -0
  280. package/contracts/types/DistributorType.sol +2 -2
  281. package/contracts/types/Fee.sol +3 -3
  282. package/contracts/types/NftIdSet.sol +26 -24
  283. package/contracts/types/ObjectType.sol +9 -5
  284. package/contracts/types/PayoutId.sol +54 -0
  285. package/contracts/types/RoleId.sol +19 -4
  286. package/contracts/types/StateId.sol +4 -0
  287. package/contracts/types/UFixed.sol +128 -12
  288. package/contracts/types/Version.sol +4 -1
  289. package/package.json +6 -5
  290. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  291. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  292. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  293. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  294. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  295. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  296. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  297. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  298. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  299. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  300. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  301. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  302. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  303. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  304. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  305. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  306. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  307. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  310. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  312. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  314. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  316. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  318. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  320. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  322. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  323. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  324. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  325. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1119
  326. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  327. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  328. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  329. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  330. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  331. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
  332. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  333. package/contracts/components/IBaseComponent.sol +0 -19
  334. package/contracts/experiment/errors/Require.sol +0 -38
  335. package/contracts/experiment/errors/Revert.sol +0 -44
  336. package/contracts/experiment/inheritance/A.sol +0 -53
  337. package/contracts/experiment/inheritance/B.sol +0 -28
  338. package/contracts/experiment/inheritance/C.sol +0 -34
  339. package/contracts/experiment/inheritance/IA.sol +0 -13
  340. package/contracts/experiment/inheritance/IB.sol +0 -10
  341. package/contracts/experiment/inheritance/IC.sol +0 -12
  342. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  343. package/contracts/experiment/statemachine/ISM.sol +0 -25
  344. package/contracts/experiment/statemachine/SM.sol +0 -57
  345. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  346. package/contracts/experiment/types/TypeA.sol +0 -47
  347. package/contracts/experiment/types/TypeB.sol +0 -29
  348. package/contracts/instance/AccessManagedSimple.sol +0 -114
  349. package/contracts/instance/AccessManagerSimple.sol +0 -682
  350. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  351. package/contracts/instance/base/IService.sol +0 -15
  352. package/contracts/instance/base/ServiceBase.sol +0 -44
  353. package/contracts/registry/IChainNft.sol +0 -22
@@ -1,369 +1,283 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
4
+ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
5
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
6
 
6
- import {IRegistry} from "../registry/IRegistry.sol";
7
- // import {IInstance} from "../instance/IInstance.sol";
7
+ import {IRegistry} from "./IRegistry.sol";
8
+ import {IInstance} from "../instance/IInstance.sol";
8
9
 
9
10
  import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
10
- // import {IComponent, IComponentModule} from "../../contracts/instance/module/component/IComponent.sol";
11
- // import {IPool} from "../../contracts/instance/module/pool/IPoolModule.sol";
12
- import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
13
- // import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
14
- // import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
15
- // import {IDistributionComponent} from "../../contracts/components/IDistributionComponent.sol";
11
+ import {IComponent} from "../../contracts/components/IComponent.sol";
12
+ import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
13
+ import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
14
+ import {IDistributionComponent} from "../../contracts/components/IDistributionComponent.sol";
16
15
 
17
16
  import {IVersionable} from "../../contracts/shared/IVersionable.sol";
18
17
  import {Versionable} from "../../contracts/shared/Versionable.sol";
19
18
  import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
19
+ import {Registerable} from "../../contracts/shared/Registerable.sol";
20
20
 
21
- import {RoleId} from "../../contracts/types/RoleId.sol";
22
- import {ObjectType, REGISTRY, TOKEN, SERVICE, PRODUCT, ORACLE, POOL, TOKEN, INSTANCE, DISTRIBUTION, POLICY, BUNDLE} from "../../contracts/types/ObjectType.sol";
21
+ import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
22
+ import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, DISTRIBUTOR, APPLICATION, POLICY, CLAIM, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
23
23
  import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
24
24
  import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
25
25
  import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
26
26
  import {Version, VersionPart, VersionLib} from "../../contracts/types/Version.sol";
27
27
 
28
- import {ServiceBase} from "../../contracts/instance/base/ServiceBase.sol";
29
- import {IService} from "../../contracts/instance/base/IService.sol";
28
+ import {Service} from "../shared/Service.sol";
29
+ import {IService} from "../shared/IService.sol";
30
30
  import {IRegistryService} from "./IRegistryService.sol";
31
- import {Registry} from "../registry/Registry.sol";
31
+ import {Registry} from "./Registry.sol";
32
32
 
33
33
  contract RegistryService is
34
- ServiceBase,
34
+ AccessManagedUpgradeable,
35
+ Service,
35
36
  IRegistryService
36
37
  {
37
38
  using NftIdLib for NftId;
38
39
 
39
- error NotRegistryOwner();
40
- error MissingAllowance();
41
-
42
- error NotToken();
43
- error NotService();
44
- error NotComponent();
45
- error NotInstance();
46
-
47
- error InvalidAddress(address registerableAddress);
48
- error InvalidInitialOwner(address initialOwner);
49
- error SelfRegistration();
50
- error InvalidType(ObjectType objectType);
51
-
52
- string public constant NAME = "RegistryService";
53
-
54
40
  // TODO update to real hash when registry is stable
55
41
  bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
56
42
 
57
- address constant public NFT_LOCK_ADDRESS = address(0x1);
58
-
59
- /// @dev
60
- // msg.sender - ONLY registry owner
61
- // CAN register ANY non IRegisterable address
62
- // CAN register ONLY valid object-parent types combinations for TOKEN
63
- // CAN NOT register itself
64
- // IMPORTANT: MUST NOT call untrusted contract inbetween calls to registry/instance (trusted contracts)
65
- // motivation: registry/instance state may change during external call
66
- // TODO it may be usefull to have transferable token nft in order to delist token, make it invalid for new beginings
67
- // TODO: MUST prohibit registration of precompiles addresses
68
- function registerToken(address tokenAddress)
69
- external
70
- returns(NftId nftId)
71
- {
72
- IRegisterable registerable = IRegisterable(tokenAddress);
73
- bool isRegisterable;
74
-
75
- // registryOwner can not register IRegisterable as TOKEN
76
- try registerable.supportsInterface(type(IRegisterable).interfaceId) returns(bool result) {
77
- isRegisterable = result;
78
- } catch {
79
- isRegisterable = false;
80
- }
43
+ // From IService
44
+ function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
45
+ return REGISTRY();
46
+ }
81
47
 
82
- if(isRegisterable) {
83
- revert NotToken();
84
- }
48
+ // from Versionable
85
49
 
86
- NftId registryNftId = _registry.getNftId(address(_registry));
87
- if(msg.sender != _registry.ownerOf(registryNftId)) {
88
- revert NotRegistryOwner();
89
- }
50
+ /// @dev top level initializer
51
+ function _initialize(
52
+ address owner,
53
+ bytes memory data
54
+ )
55
+ internal
56
+ virtual override
57
+ initializer()
58
+ {
59
+ (
60
+ address registryAddress,
61
+ address initialAuthority
62
+ ) = abi.decode(data, (address, address));
90
63
 
91
- IRegistry.ObjectInfo memory info = IRegistry.ObjectInfo(
92
- zeroNftId(), // any value
93
- registryNftId, // parent nft id
94
- TOKEN(),
95
- false, // isInterceptor
96
- tokenAddress,
97
- NFT_LOCK_ADDRESS,
98
- "" // any value
99
- );
100
-
101
- nftId = _registry.register(info);
64
+ __AccessManaged_init(initialAuthority);
65
+
66
+ initializeService(registryAddress, owner);
67
+ registerInterface(type(IRegistryService).interfaceId);
102
68
  }
103
69
 
104
- /// @dev
105
- // msg.sender - ONLY registry owner
106
- // CAN register ONLY valid object-parent types combinations for SERVICE
107
- // CAN register ONLY IRegisterable address he owns
108
- // CAN NOT register itself
109
- // IMPORTANT: MUST NOT check owner before calling external contract
110
- function registerService(IService service)
70
+ function registerInstance(IRegisterable instance, address owner)
111
71
  external
72
+ restricted
112
73
  returns(
113
- IRegistry.ObjectInfo memory info,
114
- bytes memory data
74
+ IRegistry.ObjectInfo memory info
115
75
  )
116
76
  {
117
- if(service.supportsInterface(type(IService).interfaceId) == false) {
118
- revert NotService();
119
- }
120
-
121
- (
122
- info,
123
- data
124
- ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
125
-
126
- NftId registryNftId = _registry.getNftId(address(_registry));
127
- if(msg.sender != _registry.ownerOf(registryNftId)) {
128
- revert NotRegistryOwner();
77
+ if(!instance.supportsInterface(type(IInstance).interfaceId)) {
78
+ revert NotInstance();
129
79
  }
130
80
 
131
- info.initialOwner = NFT_LOCK_ADDRESS;//registry.getLockAddress();
132
- info.nftId = _registry.register(info);
133
- service.linkToRegisteredNftId();
81
+ info = _getAndVerifyContractInfo(instance, INSTANCE(), owner);
82
+ info.nftId = getRegistry().register(info);
134
83
 
135
- return (
136
- info,
137
- data
138
- );
84
+ instance.linkToRegisteredNftId(); // asume safe
139
85
  }
140
86
 
141
- // anybody can register component if instance gives a corresponding role
142
- //function registerComponent(IBaseComponent component, ObjectType componentType)
143
- function registerComponent(IBaseComponent component, ObjectType componentType, address owner)
87
+ function registerProduct(IComponent product, address owner)
144
88
  external
89
+ restricted
145
90
  returns(
146
- IRegistry.ObjectInfo memory info,
147
- bytes memory data
91
+ IRegistry.ObjectInfo memory info
148
92
  )
149
93
  {
150
- if(!component.supportsInterface(type(IBaseComponent).interfaceId)) {
151
- revert NotComponent();
94
+ // CAN revert if no ERC165 support -> will revert with empty message
95
+ if(!product.supportsInterface(type(IProductComponent).interfaceId)) {
96
+ revert NotProduct();
152
97
  }
153
98
 
154
- (
155
- info,
156
- data
157
- ) = _getAndVerifyContractInfo(component, componentType, owner);
158
-
159
- NftId serviceNftId = _registry.getNftId(msg.sender);
160
-
161
- if(!_registry.allowance(serviceNftId, componentType)) {
162
- revert MissingAllowance();
163
- }
99
+ info = _getAndVerifyContractInfo(product, PRODUCT(), owner);
100
+ info.nftId = getRegistry().register(info);
101
+ }
164
102
 
165
- info.nftId = _registry.register(info);
166
- component.linkToRegisteredNftId();
103
+ function registerPool(IComponent pool, address owner)
104
+ external
105
+ restricted
106
+ returns(
107
+ IRegistry.ObjectInfo memory info
108
+ )
109
+ {
110
+ if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
111
+ revert NotPool();
112
+ }
167
113
 
168
- return (
169
- info,
170
- data
171
- );
114
+ info = _getAndVerifyContractInfo(pool, POOL(), owner);
115
+ info.nftId = getRegistry().register(info);
172
116
  }
173
117
 
174
- // TODO: when called by approved service: add owner arg (service must pass it's msg.sender as owner) & check service allowance
175
- //function registerInstance(IRegisterable instance, address owner)
176
- function registerInstance(IRegisterable instance)
177
- external
118
+ function registerDistribution(IComponent distribution, address owner)
119
+ external
120
+ restricted
178
121
  returns(
179
- IRegistry.ObjectInfo memory info,
180
- bytes memory data
122
+ IRegistry.ObjectInfo memory info
181
123
  )
182
124
  {
183
- // TODO reactivate later
184
- // if(instance.supportsInterface(type(IInstance).interfaceId) == false) {
185
- // revert NotInstance();
186
- // }
187
-
188
- // (
189
- // info,
190
- // data
191
- // ) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);// owner);
192
-
193
- // info.nftId = _registry.register(info);
194
- // instance.linkToRegisteredNftId();
195
-
196
- // return (
197
- // info,
198
- // data
199
- // );
125
+ if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
126
+ revert NotDistribution();
127
+ }
128
+
129
+ info = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
130
+ info.nftId = getRegistry().register(info);
200
131
  }
201
132
 
202
- function registerPolicy(IRegistry.ObjectInfo memory info)
203
- external
133
+ function registerDistributor(IRegistry.ObjectInfo memory info)
134
+ external
135
+ restricted
204
136
  returns(NftId nftId)
205
137
  {
206
- NftId senderNftId = _registry.getNftId(msg.sender);
207
-
208
- if(_registry.allowance(senderNftId, POLICY()) == false) {
209
- revert MissingAllowance();
210
- }
138
+ _verifyObjectInfo(info, DISTRIBUTOR());
139
+ nftId = getRegistry().register(info);
140
+ }
211
141
 
142
+ function registerPolicy(IRegistry.ObjectInfo memory info)
143
+ external
144
+ restricted
145
+ returns(NftId nftId)
146
+ {
212
147
  _verifyObjectInfo(info, POLICY());
213
148
 
214
- nftId = _registry.register(info);
149
+ nftId = getRegistry().register(info);
215
150
  }
216
151
 
217
152
  function registerBundle(IRegistry.ObjectInfo memory info)
218
- external
153
+ external
154
+ restricted
219
155
  returns(NftId nftId)
220
156
  {
221
- NftId senderNftId = _registry.getNftId(msg.sender);
222
-
223
- if(_registry.allowance(senderNftId, BUNDLE()) == false) {
224
- revert MissingAllowance();
225
- }
226
-
227
157
  _verifyObjectInfo(info, BUNDLE());
228
158
 
229
- nftId = _registry.register(info);
159
+ nftId = getRegistry().register(info);
230
160
  }
231
161
 
162
+ function registerStake(IRegistry.ObjectInfo memory info)
163
+ external
164
+ restricted
165
+ returns(NftId nftId)
166
+ {
167
+ _verifyObjectInfo(info, STAKE());
232
168
 
233
- // From IService
234
- function getName() public pure override(IService, ServiceBase) returns(string memory) {
235
- return NAME;
169
+ nftId = getRegistry().register(info);
236
170
  }
237
171
 
172
+ // from IRegisterable
238
173
 
239
- // from Versionable
240
-
241
- /// @dev top level initializer
242
- // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
243
- // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
244
- // 3) deploy registry -> pass registry service address as constructor argument
245
- // registry is getting instantiated and locked to registry service address forever
246
- function _initialize(
247
- address owner,
248
- bytes memory registryByteCodeWithInitCode
249
- )
250
- internal
251
- initializer
252
- virtual override
174
+ function getFunctionConfigs()
175
+ external
176
+ pure
177
+ returns(
178
+ FunctionConfig[] memory config
179
+ )
253
180
  {
254
- bytes memory encodedConstructorArguments = abi.encode(
255
- owner,
256
- getMajorVersion());
181
+ config = new FunctionConfig[](8);
182
+
183
+ // order of service registrations MUST be reverse to this array
184
+ /*config[-1].serviceDomain = STAKE();
185
+ config[-1].selector = RegistryService.registerStake.selector;*/
186
+
187
+ config[0].serviceDomain = APPLICATION();
188
+ config[0].selectors = new bytes4[](1);
189
+ config[0].selectors[0] = RegistryService.registerPolicy.selector;
190
+
191
+ config[1].serviceDomain = POLICY();
192
+ config[1].selectors = new bytes4[](0);
257
193
 
258
- bytes memory registryCreationCode = ContractDeployerLib.getCreationCode(
259
- registryByteCodeWithInitCode,
260
- encodedConstructorArguments);
194
+ config[2].serviceDomain = CLAIM();
195
+ config[2].selectors = new bytes4[](0);
261
196
 
262
- address registryAddress = ContractDeployerLib.deploy(
263
- registryCreationCode,
264
- REGISTRY_CREATION_CODE_HASH);
197
+ config[3].serviceDomain = BUNDLE();
198
+ config[3].selectors = new bytes4[](1);
199
+ config[3].selectors[0] = RegistryService.registerBundle.selector;
265
200
 
266
- IRegistry registry = IRegistry(registryAddress);
267
- NftId registryNftId = registry.getNftId(registryAddress);
201
+ config[4].serviceDomain = PRODUCT();
202
+ config[4].selectors = new bytes4[](1);
203
+ config[4].selectors[0] = RegistryService.registerProduct.selector;
268
204
 
269
- _initializeServiceBase(registryAddress, registryNftId, owner);
270
- linkToRegisteredNftId();
205
+ config[5].serviceDomain = POOL();
206
+ config[5].selectors = new bytes4[](1);
207
+ config[5].selectors[0] = RegistryService.registerPool.selector;
271
208
 
272
- _registerInterface(type(IRegistryService).interfaceId);
209
+ config[6].serviceDomain = DISTRIBUTION();
210
+ config[6].selectors = new bytes4[](2);
211
+ config[6].selectors[0] = RegistryService.registerDistribution.selector;
212
+ config[6].selectors[1] = RegistryService.registerDistributor.selector;
213
+
214
+ // registerInstance() have no restriction
215
+ config[7].serviceDomain = INSTANCE();
216
+ config[7].selectors = new bytes4[](1);
217
+ config[7].selectors[0] = RegistryService.registerInstance.selector;
273
218
  }
274
219
 
275
- // parent check done in registry because of approve()
220
+ // Internal
221
+
276
222
  function _getAndVerifyContractInfo(
277
223
  IRegisterable registerable,
278
- ObjectType objectType,
279
- address owner
224
+ ObjectType expectedType, // assume can be valid only
225
+ address expectedOwner // assume can be 0 when given by other service
280
226
  )
281
227
  internal
228
+ // view
282
229
  returns(
283
- IRegistry.ObjectInfo memory info,
284
- bytes memory data
230
+ IRegistry.ObjectInfo memory info
285
231
  )
286
232
  {
287
- (
288
- info,
289
- data
290
- ) = registerable.getInitialInfo();
233
+ info = registerable.getInitialInfo();
234
+ info.objectAddress = address(registerable);
291
235
 
292
- if(info.objectAddress != address(registerable)) {
293
- revert InvalidAddress(info.objectAddress);
236
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
237
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
294
238
  }
295
239
 
296
- if(
297
- getRegistry().isRegistered(owner) ||
298
- info.initialOwner != owner) { // contract owner protection
299
- revert InvalidInitialOwner(info.initialOwner);
240
+ address owner = info.initialOwner;
241
+
242
+ if(owner != expectedOwner) { // registerable owner protection
243
+ revert NotRegisterableOwner(expectedOwner);
300
244
  }
301
245
 
302
- if(msg.sender == address(registerable)) {
246
+ if(owner == address(registerable)) {
303
247
  revert SelfRegistration();
304
248
  }
249
+
250
+ if(owner == address(0)) {
251
+ revert RegisterableOwnerIsZero();
252
+ }
305
253
 
306
- if(info.objectType != objectType) {
307
- revert InvalidType(info.objectType);
254
+ if(getRegistry().isRegistered(owner)) {
255
+ revert RegisterableOwnerIsRegistered();
308
256
  }
309
-
310
- /*NftId parentNftId = info.parentNftId;
311
- IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
312
-
313
- if(parentInfo.objectType != parentType) { // parent registration + type
314
- revert InvalidParent(parentNftId);
315
- }*/
316
-
317
- return(
318
- info,
319
- data
320
- );
321
257
  }
322
258
 
323
- // parent checks done in registry because of approve()
324
259
  function _verifyObjectInfo(
325
260
  IRegistry.ObjectInfo memory info,
326
- ObjectType objectType
261
+ ObjectType expectedType
327
262
  )
328
263
  internal
329
264
  view
330
265
  {
331
- if(info.objectAddress > address(0)) {
332
- revert InvalidAddress(info.objectAddress);
333
- }
266
+ // enforce instead of check
267
+ info.objectAddress = address(0);
334
268
 
335
- if(
336
- getRegistry().isRegistered(info.initialOwner) ||
337
- info.initialOwner == address(0)) {
338
- // TODO non registered address can register object(e.g. POLICY()) and then transfer associated nft to registered contract
339
- // what are motivations to do so?
340
- // at least registered contract can not register objects by itself, SERVICE,
341
- revert InvalidInitialOwner(info.initialOwner);
269
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
270
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
342
271
  }
343
272
 
344
- // can catch all 3 if check that initialOwner is not registered
345
- /*if(info.initialOwner == msg.sender) {
346
- revert InitialOwnerIsParent();
347
- }
273
+ address owner = info.initialOwner;
348
274
 
349
- if(info.initialOwner == address(this)) {
350
- revert InitialOwnerIsService();
275
+ if(owner == address(0)) {
276
+ revert RegisterableOwnerIsZero();
351
277
  }
352
278
 
353
- if(info.initialOwner == address(getRegistry())) {
354
- revert InitialOwnerIsRegistry();
355
- }*/
356
-
357
-
358
- if(info.objectType != objectType) {
359
- revert InvalidType(info.objectType);
279
+ if(getRegistry().isRegistered(owner)) {
280
+ revert RegisterableOwnerIsRegistered();
360
281
  }
361
-
362
- /*NftId parentNftId = info.parentNftId;
363
- IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
364
-
365
- if(parentInfo.objectType != parentType) { // parent registration + type
366
- revert InvalidParent(parentNftId);
367
- }*/
368
282
  }
369
- }
283
+ }
@@ -1,38 +1,57 @@
1
1
  // SPDX-License-Identifier: UNLICENSED
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
5
+
6
+ import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
7
+
4
8
  import {Registry} from "./Registry.sol";
5
9
  import {IVersionable} from "../shared/IVersionable.sol";
6
10
  import {ProxyManager} from "../shared/ProxyManager.sol";
7
11
  import {RegistryService} from "./RegistryService.sol";
12
+ import {TokenRegistry} from "./TokenRegistry.sol";
8
13
 
9
14
 
10
15
  contract RegistryServiceManager is
11
16
  ProxyManager
12
17
  {
13
- RegistryService private _registryService;
18
+ bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
19
+
20
+ RegistryService private immutable _registryService;
14
21
 
15
22
  /// @dev initializes proxy manager with registry service implementation and deploys registry
16
23
  constructor(
17
- )
18
- ProxyManager()
24
+ address initialAuthority, // used by implementation
25
+ address registryAddress) // used by implementation
26
+ ProxyManager(registryAddress)
19
27
  {
28
+ require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
29
+ require(registryAddress > address(0), "RegistryServiceManager: registry is 0");
30
+
31
+ // implementation's initializer func `data` argument
32
+ RegistryService srv = new RegistryService();
33
+ bytes memory data = abi.encode(registryAddress, initialAuthority);
20
34
  IVersionable versionable = deploy(
21
- address(new RegistryService()),
22
- type(Registry).creationCode);
35
+ address(srv),
36
+ data);
23
37
 
24
38
  _registryService = RegistryService(address(versionable));
25
39
 
26
- // link ownership of registry service manager ot nft owner of registry service
27
- _linkToNftOwnable(
28
- address(_registryService.getRegistry()),
29
- address(_registryService));
40
+ // _linkToNftOwnable(address(_registryService));
41
+ }
30
42
 
31
- // implies that after this constructor call only upgrade functionality is available
32
- _isDeployed = true;
43
+ // // from IRegisterable
44
+
45
+ // // IMPORTANT: registry here and in constructor MUST be the same
46
+ function linkOwnershipToServiceNft()
47
+ public
48
+ onlyOwner
49
+ {
50
+ _linkToNftOwnable(address(_registryService));
33
51
  }
34
52
 
35
53
  //--- view functions ----------------------------------------------------//
54
+
36
55
  function getRegistryService()
37
56
  external
38
57
  view