@etherisc/gif-next 0.0.2-a196164-289 → 0.0.2-a25e4b8-781

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 (420) hide show
  1. package/README.md +211 -27
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +588 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +465 -89
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → components/IComponent.sol/IComponent.json} +213 -187
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -188
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +15 -227
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +5 -218
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +516 -146
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +554 -117
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  45. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  46. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  47. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  48. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +983 -1059
  50. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +570 -0
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +1728 -1243
  54. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  55. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1034 -0
  56. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  57. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1381 -0
  58. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +956 -0
  60. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +460 -0
  62. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  63. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  64. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/{ServiceBase.sol/ServiceBase.json → ComponentService.sol/ComponentService.json} +266 -58
  66. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -13
  68. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
  70. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
  73. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  76. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  77. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  78. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  79. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  80. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  81. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  82. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  83. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  84. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  85. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  86. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
  87. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  88. package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
  89. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  90. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1094 -0
  91. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  92. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +436 -0
  93. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +327 -70
  95. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  96. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +424 -0
  97. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +720 -0
  99. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +131 -51
  101. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  102. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +771 -0
  103. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  104. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +132 -114
  105. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  106. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +127 -262
  107. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  108. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1219 -0
  109. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  110. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +492 -0
  111. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  112. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +312 -144
  113. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  114. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +424 -0
  115. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  116. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +275 -372
  117. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  118. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +424 -0
  119. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  120. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
  121. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +455 -36
  123. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  124. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +981 -0
  125. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  126. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  127. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  128. package/artifacts/contracts/registry/Registry.sol/Registry.json +465 -111
  129. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  130. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  131. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  132. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1187 -0
  133. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  134. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
  135. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  136. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  137. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  138. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +381 -0
  139. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  140. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  141. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  142. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  143. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  144. package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
  145. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
  147. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  148. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/IService.sol/IService.json} +133 -117
  149. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  150. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  152. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  153. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  154. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  155. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
  156. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  157. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/Service.sol/Service.json} +148 -143
  158. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  159. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  161. package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  163. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -25
  164. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
  166. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
  168. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
  170. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestService.sol/TestService.json +213 -79
  172. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
  174. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  177. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +27 -34
  178. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  179. package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
  180. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  181. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  185. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  194. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  197. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  199. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  201. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
  203. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  205. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
  207. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  208. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  209. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  210. package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
  211. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  213. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
  215. package/contracts/components/Component.sol +179 -0
  216. package/contracts/components/Distribution.sol +56 -34
  217. package/contracts/components/IComponent.sol +37 -0
  218. package/contracts/components/IDistributionComponent.sol +3 -6
  219. package/contracts/components/IPoolComponent.sol +7 -12
  220. package/contracts/components/IProductComponent.sol +6 -9
  221. package/contracts/components/Pool.sol +122 -99
  222. package/contracts/components/Product.sol +130 -60
  223. package/contracts/experiment/cloning/Cloner.sol +47 -0
  224. package/contracts/instance/BundleManager.sol +125 -0
  225. package/contracts/instance/Cloneable.sol +46 -0
  226. package/contracts/instance/IInstance.sol +57 -44
  227. package/contracts/instance/IInstanceService.sol +40 -0
  228. package/contracts/instance/Instance.sol +237 -58
  229. package/contracts/instance/InstanceAccessManager.sol +298 -0
  230. package/contracts/instance/InstanceReader.sol +293 -0
  231. package/contracts/instance/InstanceService.sol +362 -0
  232. package/contracts/instance/InstanceServiceManager.sol +54 -0
  233. package/contracts/instance/ObjectManager.sol +84 -0
  234. package/contracts/instance/base/ComponentService.sol +133 -0
  235. package/contracts/instance/base/IInstanceBase.sol +2 -3
  236. package/contracts/instance/base/IKeyValueStore.sol +13 -14
  237. package/contracts/instance/base/ILifecycle.sol +3 -3
  238. package/contracts/instance/base/KeyValueStore.sol +49 -38
  239. package/contracts/instance/base/Lifecycle.sol +1 -1
  240. package/contracts/instance/module/IAccess.sol +48 -0
  241. package/contracts/instance/module/IBundle.sol +20 -0
  242. package/contracts/instance/module/IDistribution.sol +39 -0
  243. package/contracts/instance/module/IPolicy.sol +45 -0
  244. package/contracts/instance/module/IRisk.sol +11 -0
  245. package/contracts/instance/module/ISetup.sol +46 -0
  246. package/contracts/instance/module/ITreasury.sol +23 -0
  247. package/contracts/instance/service/BundleService.sol +293 -0
  248. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  249. package/contracts/instance/service/DistributionService.sol +79 -23
  250. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  251. package/contracts/instance/service/IBundleService.sol +44 -0
  252. package/contracts/instance/service/IDistributionService.sol +1 -1
  253. package/contracts/instance/service/IPolicyService.sol +94 -0
  254. package/contracts/instance/service/IPoolService.sol +7 -24
  255. package/contracts/instance/service/IProductService.sol +9 -76
  256. package/contracts/instance/service/PolicyService.sol +538 -0
  257. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  258. package/contracts/instance/service/PoolService.sol +105 -112
  259. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  260. package/contracts/instance/service/ProductService.sol +163 -431
  261. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  262. package/contracts/registry/ChainNft.sol +79 -36
  263. package/contracts/registry/IRegistry.sol +65 -24
  264. package/contracts/registry/IRegistryService.sol +57 -0
  265. package/contracts/registry/ITransferInterceptor.sol +6 -0
  266. package/contracts/registry/Registry.sol +358 -287
  267. package/contracts/registry/RegistryAccessManager.sol +216 -0
  268. package/contracts/registry/RegistryService.sol +312 -0
  269. package/contracts/registry/RegistryServiceManager.sol +62 -0
  270. package/contracts/registry/ReleaseManager.sol +352 -0
  271. package/contracts/registry/TokenRegistry.sol +112 -0
  272. package/contracts/shared/ContractDeployerLib.sol +72 -0
  273. package/contracts/shared/ERC165.sol +6 -2
  274. package/contracts/shared/INftOwnable.sol +22 -0
  275. package/contracts/shared/IRegisterable.sol +8 -17
  276. package/contracts/shared/IService.sol +16 -0
  277. package/contracts/shared/IVersionable.sol +44 -13
  278. package/contracts/shared/NftOwnable.sol +136 -0
  279. package/contracts/shared/ProxyManager.sol +94 -0
  280. package/contracts/shared/Registerable.sol +63 -59
  281. package/contracts/shared/Service.sol +60 -0
  282. package/contracts/shared/TokenHandler.sol +27 -0
  283. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  284. package/contracts/shared/Versionable.sol +110 -62
  285. package/contracts/test/TestFee.sol +2 -2
  286. package/contracts/test/TestRegisterable.sol +5 -6
  287. package/contracts/test/TestRoleId.sol +1 -1
  288. package/contracts/test/TestService.sol +7 -14
  289. package/contracts/types/DistributorType.sol +55 -0
  290. package/contracts/types/Fee.sol +3 -3
  291. package/contracts/types/Key32.sol +8 -3
  292. package/contracts/types/NftIdSet.sol +26 -24
  293. package/contracts/types/NumberId.sol +52 -0
  294. package/contracts/types/ObjectType.sol +35 -14
  295. package/contracts/types/Referral.sol +85 -0
  296. package/contracts/types/RoleId.sol +61 -9
  297. package/contracts/types/StateId.sol +5 -1
  298. package/contracts/types/Timestamp.sol +7 -3
  299. package/contracts/types/UFixed.sol +128 -12
  300. package/contracts/types/Version.sol +5 -1
  301. package/package.json +4 -3
  302. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -174
  304. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  305. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -174
  306. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  307. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  308. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  309. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  310. package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -341
  311. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  312. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  313. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  314. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  315. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  316. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  317. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
  318. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  319. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  320. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  322. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  323. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  324. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  325. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  326. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  327. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  328. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  329. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  330. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  331. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  332. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  333. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  335. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  336. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  338. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  340. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  341. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  342. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
  344. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
  346. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  347. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  348. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  349. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  350. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  351. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  352. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  353. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -511
  354. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  355. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  356. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  357. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -511
  358. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  359. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -618
  360. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  361. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  362. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  363. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  364. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  365. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.dbg.json +0 -4
  366. package/artifacts/contracts/registry/RegistryUpgradeable.sol/RegistryUpgradeable.json +0 -711
  367. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  368. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  369. package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +0 -4
  370. package/artifacts/contracts/shared/Proxy.sol/Proxy.json +0 -235
  371. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
  372. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.dbg.json +0 -4
  373. package/artifacts/contracts/shared/VersionableUpgradeable.sol/VersionableUpgradeable.json +0 -228
  374. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  375. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
  376. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  377. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
  378. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  379. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
  380. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  381. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  382. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  383. package/contracts/components/BaseComponent.sol +0 -94
  384. package/contracts/components/IBaseComponent.sol +0 -19
  385. package/contracts/experiment/statemachine/README.md +0 -112
  386. package/contracts/instance/IInstanceLinked.sol +0 -8
  387. package/contracts/instance/base/ComponentServiceBase.sol +0 -42
  388. package/contracts/instance/base/IService.sol +0 -15
  389. package/contracts/instance/base/InstanceBase.sol +0 -91
  390. package/contracts/instance/base/ModuleBase.sol +0 -57
  391. package/contracts/instance/base/ServiceBase.sol +0 -37
  392. package/contracts/instance/module/access/Access.sol +0 -149
  393. package/contracts/instance/module/access/IAccess.sol +0 -53
  394. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  395. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  396. package/contracts/instance/module/component/ComponentModule.sol +0 -70
  397. package/contracts/instance/module/component/IComponent.sol +0 -28
  398. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  399. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  400. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  401. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  402. package/contracts/instance/module/pool/IPoolModule.sol +0 -40
  403. package/contracts/instance/module/pool/PoolModule.sol +0 -90
  404. package/contracts/instance/module/risk/IRisk.sol +0 -26
  405. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  406. package/contracts/instance/module/treasury/ITreasury.sol +0 -82
  407. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  408. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
  409. package/contracts/instance/service/ComponentOwnerService.sol +0 -157
  410. package/contracts/instance/service/IComponentOwnerService.sol +0 -22
  411. package/contracts/registry/IChainNft.sol +0 -21
  412. package/contracts/registry/IRegistryLinked.sol +0 -8
  413. package/contracts/registry/RegistryUpgradeable.sol +0 -548
  414. package/contracts/shared/IOwnable.sol +0 -6
  415. package/contracts/shared/Proxy.sol +0 -89
  416. package/contracts/shared/VersionableUpgradeable.sol +0 -120
  417. package/contracts/test/TestDistribution.sol +0 -21
  418. package/contracts/test/TestPool.sol +0 -25
  419. package/contracts/test/TestProduct.sol +0 -72
  420. package/contracts/types/ReferralId.sol +0 -48
@@ -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
+ }
@@ -0,0 +1,312 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
5
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
6
+
7
+ import {IRegistry} from "./IRegistry.sol";
8
+ import {IInstance} from "../instance/IInstance.sol";
9
+
10
+ import {ContractDeployerLib} from "../shared/ContractDeployerLib.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";
15
+
16
+ import {IVersionable} from "../../contracts/shared/IVersionable.sol";
17
+ import {Versionable} from "../../contracts/shared/Versionable.sol";
18
+ import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
19
+ import {Registerable} from "../../contracts/shared/Registerable.sol";
20
+
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, POLICY, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
23
+ import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
24
+ import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
25
+ import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
26
+ import {Version, VersionPart, VersionLib} from "../../contracts/types/Version.sol";
27
+
28
+ import {Service} from "../shared/Service.sol";
29
+ import {IService} from "../shared/IService.sol";
30
+ import {IRegistryService} from "./IRegistryService.sol";
31
+ import {Registry} from "./Registry.sol";
32
+
33
+ contract RegistryService is
34
+ AccessManagedUpgradeable,
35
+ Service,
36
+ IRegistryService
37
+ {
38
+ using NftIdLib for NftId;
39
+
40
+ // TODO update to real hash when registry is stable
41
+ bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
42
+
43
+ function registerInstance(IRegisterable instance, address owner)
44
+ external
45
+ restricted
46
+ returns(
47
+ IRegistry.ObjectInfo memory info,
48
+ bytes memory data
49
+ )
50
+ {
51
+ if(!instance.supportsInterface(type(IInstance).interfaceId)) {
52
+ revert NotInstance();
53
+ }
54
+
55
+ (info, data) = _getAndVerifyContractInfo(instance, INSTANCE(), owner);
56
+
57
+ info.nftId = _registry.register(info);
58
+
59
+ return (info, data);
60
+ }
61
+
62
+ function registerProduct(IComponent product, address owner)
63
+ external
64
+ restricted
65
+ returns(
66
+ IRegistry.ObjectInfo memory info,
67
+ bytes memory data
68
+ )
69
+ {
70
+ // CAN revert if no ERC165 support -> will revert with empty message
71
+ if(!product.supportsInterface(type(IProductComponent).interfaceId)) {
72
+ revert NotProduct();
73
+ }
74
+
75
+ (info, data) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
76
+
77
+ info.nftId = _registry.register(info);
78
+
79
+ return (info, data);
80
+ }
81
+
82
+ function registerPool(IComponent pool, address owner)
83
+ external
84
+ restricted
85
+ returns(
86
+ IRegistry.ObjectInfo memory info,
87
+ bytes memory data
88
+ )
89
+ {
90
+ if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
91
+ revert NotPool();
92
+ }
93
+
94
+ (info, data) = _getAndVerifyContractInfo(pool, POOL(), owner);
95
+
96
+ info.nftId = _registry.register(info);
97
+
98
+ return (info, data);
99
+ }
100
+
101
+ function registerDistribution(IComponent distribution, address owner)
102
+ external
103
+ restricted
104
+ returns(
105
+ IRegistry.ObjectInfo memory info,
106
+ bytes memory data
107
+ )
108
+ {
109
+ if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
110
+ revert NotDistribution();
111
+ }
112
+
113
+ (info, data) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
114
+
115
+ info.nftId = _registry.register(info);
116
+
117
+ return (info, data);
118
+ }
119
+
120
+ function registerPolicy(IRegistry.ObjectInfo memory info)
121
+ external
122
+ restricted
123
+ returns(NftId nftId)
124
+ {
125
+ _verifyObjectInfo(info, POLICY());
126
+
127
+ nftId = _registry.register(info);
128
+ }
129
+
130
+ function registerBundle(IRegistry.ObjectInfo memory info)
131
+ external
132
+ restricted
133
+ returns(NftId nftId)
134
+ {
135
+ _verifyObjectInfo(info, BUNDLE());
136
+
137
+ nftId = _registry.register(info);
138
+ }
139
+
140
+ function registerStake(IRegistry.ObjectInfo memory info)
141
+ external
142
+ restricted
143
+ returns(NftId nftId)
144
+ {
145
+ _verifyObjectInfo(info, STAKE());
146
+
147
+ nftId = _registry.register(info);
148
+ }
149
+
150
+ // From IService
151
+ function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
152
+ return REGISTRY();
153
+ }
154
+
155
+ // from Versionable
156
+
157
+ /// @dev top level initializer
158
+ function _initialize(
159
+ address owner,
160
+ bytes memory data
161
+ )
162
+ internal
163
+ initializer
164
+ virtual override
165
+ {
166
+ (
167
+ address initialAuthority,
168
+ address registry
169
+ ) = abi.decode(data, (address, address));
170
+
171
+ __AccessManaged_init(initialAuthority);
172
+
173
+ _initializeService(address(registry), owner);
174
+
175
+ _registerInterface(type(IRegistryService).interfaceId);
176
+ }
177
+
178
+ // from IRegisterable
179
+
180
+ function getInitialInfo()
181
+ public
182
+ view
183
+ virtual override(IRegisterable, Registerable)
184
+ returns (IRegistry.ObjectInfo memory info, bytes memory data)
185
+ {
186
+ (info , data) = super.getInitialInfo();
187
+
188
+ FunctionConfig[] memory config = new FunctionConfig[](6);
189
+
190
+ // order of service registrations MUST be reverse to this array
191
+ /*config[-1].serviceDomain = STAKE();
192
+ config[-1].selector = RegistryService.registerStake.selector;*/
193
+
194
+ config[0].serviceDomain = POLICY();
195
+ config[0].selector = RegistryService.registerPolicy.selector;
196
+
197
+ config[1].serviceDomain = BUNDLE();
198
+ config[1].selector = RegistryService.registerBundle.selector;
199
+
200
+ config[2].serviceDomain = PRODUCT();
201
+ config[2].selector = RegistryService.registerProduct.selector;
202
+
203
+ config[3].serviceDomain = POOL();
204
+ config[3].selector = RegistryService.registerPool.selector;
205
+
206
+ config[4].serviceDomain = DISTRIBUTION();
207
+ config[4].selector = RegistryService.registerDistribution.selector;
208
+
209
+ // registerInstance() have no restriction
210
+ config[5].serviceDomain = INSTANCE();
211
+ config[5].selector = RegistryService.registerInstance.selector;
212
+
213
+ data = abi.encode(config);
214
+ }
215
+
216
+ // Internal
217
+
218
+ function _getAndVerifyContractInfo(
219
+ IRegisterable registerable,
220
+ ObjectType expectedType, // assume can be valid only
221
+ address expectedOwner // assume can be 0 when given by other service
222
+ )
223
+ internal
224
+ view
225
+ returns(
226
+ IRegistry.ObjectInfo memory info,
227
+ bytes memory data
228
+ )
229
+ {
230
+ (
231
+ info,
232
+ data
233
+ ) = registerable.getInitialInfo();
234
+ info.objectAddress = address(registerable);
235
+
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);
238
+ }
239
+
240
+ address owner = info.initialOwner;
241
+
242
+ if(owner != expectedOwner) { // registerable owner protection
243
+ revert NotRegisterableOwner(expectedOwner);
244
+ }
245
+
246
+ if(owner == address(registerable)) {
247
+ revert SelfRegistration();
248
+ }
249
+
250
+ if(owner == address(0)) {
251
+ revert RegisterableOwnerIsZero();
252
+ }
253
+
254
+ if(getRegistry().isRegistered(owner)) {
255
+ revert RegisterableOwnerIsRegistered();
256
+ }
257
+
258
+ /*NftId parentNftId = info.parentNftId;
259
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
260
+
261
+ if(parentInfo.objectType != parentType) { // parent registration + type
262
+ revert InvalidParent(parentNftId);
263
+ }*/
264
+
265
+ return(info, data);
266
+ }
267
+
268
+ function _verifyObjectInfo(
269
+ IRegistry.ObjectInfo memory info,
270
+ ObjectType expectedType
271
+ )
272
+ internal
273
+ view
274
+ {
275
+ // enforce instead of check
276
+ info.objectAddress = address(0);
277
+
278
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
279
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
280
+ }
281
+
282
+ address owner = info.initialOwner;
283
+
284
+ if(owner == address(0)) {
285
+ revert RegisterableOwnerIsZero();
286
+ }
287
+
288
+ if(getRegistry().isRegistered(owner)) {
289
+ revert RegisterableOwnerIsRegistered();
290
+ }
291
+
292
+ // can catch all 3 if check that initialOwner is not registered
293
+ /*if(info.initialOwner == msg.sender) {
294
+ revert InitialOwnerIsParent();
295
+ }
296
+
297
+ if(info.initialOwner == address(this)) {
298
+ revert InitialOwnerIsService();
299
+ }
300
+
301
+ if(info.initialOwner == address(getRegistry())) {
302
+ revert InitialOwnerIsRegistry();
303
+ }*/
304
+
305
+ /*NftId parentNftId = info.parentNftId;
306
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
307
+
308
+ if(parentInfo.objectType != parentType) { // parent registration + type
309
+ revert InvalidParent(parentNftId);
310
+ }*/
311
+ }
312
+ }
@@ -0,0 +1,62 @@
1
+ // SPDX-License-Identifier: UNLICENSED
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
5
+
6
+ import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
7
+
8
+ import {Registry} from "./Registry.sol";
9
+ import {IVersionable} from "../shared/IVersionable.sol";
10
+ import {ProxyManager} from "../shared/ProxyManager.sol";
11
+ import {RegistryService} from "./RegistryService.sol";
12
+ import {TokenRegistry} from "./TokenRegistry.sol";
13
+
14
+
15
+ contract RegistryServiceManager is
16
+ ProxyManager
17
+ {
18
+ bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
19
+
20
+ RegistryService private immutable _registryService;
21
+
22
+ /// @dev initializes proxy manager with registry service implementation and deploys registry
23
+ constructor(
24
+ address initialAuthority, // used by implementation
25
+ address registry) // used by implementation
26
+ ProxyManager()
27
+ {
28
+ require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
29
+ require(registry > address(0), "RegistryServiceManager: registry is 0");
30
+
31
+ // implementation's initializer func `data` argument
32
+ bytes memory initializationData = abi.encode(
33
+ initialAuthority,
34
+ registry);
35
+
36
+ IVersionable versionable = deploy(
37
+ address(new RegistryService()),
38
+ initializationData);
39
+
40
+ _registryService = RegistryService(address(versionable));
41
+ }
42
+
43
+ // from IRegisterable
44
+
45
+ // IMPORTANT: registry here and in constructor MUST be the same
46
+ function linkToNftOwnable(address registry)
47
+ public
48
+ onlyOwner
49
+ {
50
+ _linkToNftOwnable(registry, address(_registryService));
51
+ }
52
+
53
+ //--- view functions ----------------------------------------------------//
54
+
55
+ function getRegistryService()
56
+ external
57
+ view
58
+ returns (RegistryService registryService)
59
+ {
60
+ return _registryService;
61
+ }
62
+ }