@etherisc/gif-next 0.0.2-8459327 → 0.0.2-84ca396-317

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