@etherisc/gif-next 0.0.2-b9b3e89 → 0.0.2-b9e43cf-870

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 (429) hide show
  1. package/README.md +364 -8
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +482 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +675 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/access/Access.sol/AccessModule.json → components/IBaseComponent.sol/IBaseComponent.json} +217 -220
  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/{instance/pool/PoolModule.sol/PoolModule.json → components/IProductComponent.sol/IProductComponent.json} +81 -86
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +687 -40
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +612 -50
  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 +4 -0
  25. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +105 -0
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +4 -0
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +105 -0
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +4 -0
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +128 -0
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +4 -0
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +42 -0
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +4 -0
  33. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +76 -0
  34. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +4 -0
  35. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +89 -0
  36. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +4 -0
  37. package/artifacts/contracts/{instance/product/IProductService.sol/IProductService.json → experiment/inheritance/IA.sol/IA.json} +64 -50
  38. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +4 -0
  39. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +37 -0
  40. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +4 -0
  41. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +50 -0
  42. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +4 -0
  43. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +63 -0
  44. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
  45. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
  46. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
  47. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
  48. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
  49. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
  50. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
  51. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
  52. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
  53. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
  54. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +4 -0
  55. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +10 -0
  56. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +4 -0
  57. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +10 -0
  58. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  59. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  60. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
  62. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  63. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  64. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  65. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1381 -459
  66. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  67. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
  68. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +570 -0
  70. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  71. package/artifacts/contracts/instance/Instance.sol/Instance.json +2511 -498
  72. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1047 -0
  74. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
  76. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  77. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
  78. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +963 -0
  80. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  81. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +460 -0
  82. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  83. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
  84. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  85. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +532 -0
  86. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  87. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  88. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  89. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  90. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  91. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  92. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  93. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  94. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  95. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  96. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  98. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  100. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  101. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  102. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  104. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  106. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  107. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  108. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  110. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1031 -0
  112. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +436 -0
  114. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +814 -0
  116. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +693 -0
  118. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +420 -0
  120. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +720 -0
  122. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  124. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  126. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +771 -0
  128. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +499 -0
  130. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  131. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +536 -0
  132. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  133. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1156 -0
  134. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  135. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +492 -0
  136. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  137. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
  138. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  139. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +420 -0
  140. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  141. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
  142. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  143. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -0
  144. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
  145. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +771 -0
  146. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  147. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +449 -76
  148. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  149. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +976 -0
  150. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  151. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  152. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  153. package/artifacts/contracts/registry/Registry.sol/Registry.json +544 -79
  154. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  155. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  156. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  157. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1195 -0
  158. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  159. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +451 -0
  160. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  161. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +530 -0
  162. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  163. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -0
  164. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  165. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  166. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  167. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  168. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  169. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  170. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  171. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
  172. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  173. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  174. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  175. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  176. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  177. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  178. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  179. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  180. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  181. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  182. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
  183. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +442 -0
  184. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  185. package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
  186. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  187. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  188. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  189. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  190. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  191. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  192. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  193. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  194. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  195. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  196. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  197. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  198. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  199. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  200. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  201. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  202. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  203. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  204. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  205. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  206. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  207. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  208. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  209. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  210. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  212. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
  214. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  216. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  218. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  219. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  220. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +153 -0
  222. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  223. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  224. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  225. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  226. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  227. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  228. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  229. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  230. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  231. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  232. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  233. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  234. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  235. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  236. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  237. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +249 -0
  238. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  239. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  240. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  241. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  242. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  243. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  244. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  245. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  246. package/contracts/components/BaseComponent.sol +159 -0
  247. package/contracts/components/Distribution.sol +164 -0
  248. package/contracts/components/IBaseComponent.sol +34 -0
  249. package/contracts/components/IDistributionComponent.sol +44 -0
  250. package/contracts/components/IPoolComponent.sol +66 -0
  251. package/contracts/components/IProductComponent.sol +35 -0
  252. package/contracts/components/Pool.sol +261 -18
  253. package/contracts/components/Product.sol +272 -36
  254. package/contracts/experiment/cloning/Cloner.sol +47 -0
  255. package/contracts/experiment/errors/Require.sol +38 -0
  256. package/contracts/experiment/errors/Revert.sol +44 -0
  257. package/contracts/experiment/inheritance/A.sol +53 -0
  258. package/contracts/experiment/inheritance/B.sol +28 -0
  259. package/contracts/experiment/inheritance/C.sol +34 -0
  260. package/contracts/experiment/inheritance/IA.sol +13 -0
  261. package/contracts/experiment/inheritance/IB.sol +10 -0
  262. package/contracts/experiment/inheritance/IC.sol +12 -0
  263. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  264. package/contracts/experiment/statemachine/ISM.sol +25 -0
  265. package/contracts/experiment/statemachine/SM.sol +57 -0
  266. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  267. package/contracts/experiment/types/TypeA.sol +47 -0
  268. package/contracts/experiment/types/TypeB.sol +29 -0
  269. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
  270. package/contracts/instance/BundleManager.sol +129 -0
  271. package/contracts/instance/Cloneable.sol +46 -0
  272. package/contracts/instance/IInstance.sol +57 -15
  273. package/contracts/instance/IInstanceBase.sol +26 -0
  274. package/contracts/instance/IInstanceService.sol +40 -0
  275. package/contracts/instance/Instance.sol +253 -44
  276. package/contracts/instance/InstanceAccessManager.sol +303 -0
  277. package/contracts/instance/InstanceBase.sol +41 -0
  278. package/contracts/instance/InstanceReader.sol +315 -0
  279. package/contracts/instance/InstanceService.sol +345 -0
  280. package/contracts/instance/InstanceServiceManager.sol +54 -0
  281. package/contracts/instance/ObjectManager.sol +101 -0
  282. package/contracts/instance/base/ComponentServiceBase.sol +76 -0
  283. package/contracts/instance/base/IInstanceBase.sol +23 -0
  284. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  285. package/contracts/instance/base/ILifecycle.sol +30 -0
  286. package/contracts/instance/base/KeyValueStore.sol +172 -0
  287. package/contracts/instance/base/Lifecycle.sol +100 -0
  288. package/contracts/instance/module/IAccess.sol +48 -0
  289. package/contracts/instance/module/IBundle.sol +20 -0
  290. package/contracts/instance/module/IDistribution.sol +39 -0
  291. package/contracts/instance/module/IPolicy.sol +45 -0
  292. package/contracts/instance/module/IRisk.sol +11 -0
  293. package/contracts/instance/module/ISetup.sol +46 -0
  294. package/contracts/instance/module/ITreasury.sol +23 -0
  295. package/contracts/instance/service/BundleService.sol +294 -0
  296. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  297. package/contracts/instance/service/ComponentOwnerService.sol +315 -0
  298. package/contracts/instance/service/DistributionService.sol +120 -0
  299. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  300. package/contracts/instance/service/IBundleService.sol +44 -0
  301. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  302. package/contracts/instance/service/IDistributionService.sol +12 -0
  303. package/contracts/instance/service/IPolicyService.sol +94 -0
  304. package/contracts/instance/service/IPoolService.sol +20 -0
  305. package/contracts/instance/service/IProductService.sol +40 -0
  306. package/contracts/instance/service/PolicyService.sol +539 -0
  307. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  308. package/contracts/instance/service/PoolService.sol +145 -0
  309. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  310. package/contracts/instance/service/ProductService.sol +213 -0
  311. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  312. package/contracts/registry/ChainNft.sol +202 -0
  313. package/contracts/registry/IRegistry.sol +78 -53
  314. package/contracts/registry/IRegistryService.sol +58 -0
  315. package/contracts/registry/ITransferInterceptor.sol +6 -0
  316. package/contracts/registry/Registry.sol +329 -130
  317. package/contracts/registry/RegistryAccessManager.sol +210 -0
  318. package/contracts/registry/RegistryService.sol +320 -0
  319. package/contracts/registry/RegistryServiceManager.sol +62 -0
  320. package/contracts/registry/ReleaseManager.sol +342 -0
  321. package/contracts/registry/TokenRegistry.sol +110 -0
  322. package/contracts/shared/ContractDeployerLib.sol +72 -0
  323. package/contracts/shared/ERC165.sol +25 -0
  324. package/contracts/shared/INftOwnable.sol +22 -0
  325. package/contracts/shared/IRegisterable.sol +17 -0
  326. package/contracts/shared/IService.sol +16 -0
  327. package/contracts/shared/IVersionable.sol +96 -0
  328. package/contracts/shared/NftOwnable.sol +134 -0
  329. package/contracts/shared/ProxyManager.sol +94 -0
  330. package/contracts/shared/Registerable.sol +90 -0
  331. package/contracts/shared/RegisterableUpgradable.sol +16 -0
  332. package/contracts/shared/Service.sol +58 -0
  333. package/contracts/shared/TokenHandler.sol +27 -0
  334. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  335. package/contracts/shared/Versionable.sol +147 -0
  336. package/contracts/test/TestFee.sol +25 -0
  337. package/contracts/test/TestRegisterable.sol +18 -0
  338. package/contracts/test/TestRoleId.sol +14 -0
  339. package/contracts/test/TestService.sol +25 -0
  340. package/contracts/test/TestToken.sol +26 -0
  341. package/contracts/test/TestVersion.sol +44 -0
  342. package/contracts/test/TestVersionable.sol +17 -0
  343. package/contracts/test/Usdc.sol +26 -0
  344. package/contracts/types/AddressSet.sol +58 -0
  345. package/contracts/types/Blocknumber.sol +118 -0
  346. package/contracts/types/ChainId.sol +38 -0
  347. package/contracts/types/DistributorType.sol +55 -0
  348. package/contracts/types/Fee.sol +56 -0
  349. package/contracts/types/Key32.sol +50 -0
  350. package/contracts/types/NftId.sol +72 -0
  351. package/contracts/types/NftIdSet.sol +62 -0
  352. package/contracts/types/NumberId.sol +52 -0
  353. package/contracts/types/ObjectType.sol +152 -0
  354. package/contracts/types/Referral.sol +85 -0
  355. package/contracts/types/RiskId.sol +43 -0
  356. package/contracts/types/RoleId.sol +90 -0
  357. package/contracts/types/StateId.sol +105 -0
  358. package/contracts/types/Timestamp.sol +127 -0
  359. package/contracts/types/UFixed.sol +325 -0
  360. package/contracts/types/Version.sol +107 -0
  361. package/package.json +21 -6
  362. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  363. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  364. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  365. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  366. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  367. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  368. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  369. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  370. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  372. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  373. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  374. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  375. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  376. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  377. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  378. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  379. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  380. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  381. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  382. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  383. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  384. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  385. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  386. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  387. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  388. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  389. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  390. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  391. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  392. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  393. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  394. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  395. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  396. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  397. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  398. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  399. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  400. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  401. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  402. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  403. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  404. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  405. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  406. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  407. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  408. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  409. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  410. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  411. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  412. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  413. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  414. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  415. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  416. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  417. package/contracts/components/Component.sol +0 -62
  418. package/contracts/components/IPool.sol +0 -9
  419. package/contracts/components/IProduct.sol +0 -11
  420. package/contracts/instance/access/Access.sol +0 -218
  421. package/contracts/instance/access/IAccess.sol +0 -83
  422. package/contracts/instance/component/ComponentModule.sol +0 -259
  423. package/contracts/instance/component/IComponent.sol +0 -94
  424. package/contracts/instance/policy/IPolicy.sol +0 -66
  425. package/contracts/instance/policy/PolicyModule.sol +0 -106
  426. package/contracts/instance/pool/IPoolModule.sol +0 -40
  427. package/contracts/instance/pool/PoolModule.sol +0 -83
  428. package/contracts/instance/product/IProductService.sol +0 -45
  429. package/contracts/instance/product/ProductService.sol +0 -105
@@ -0,0 +1,210 @@
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
+ REGISTRY_SERVICE_MANAGER_ROLE,
9
+ REGISTRY_SERVICE_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
+ 3 types of roles:
17
+ 1) REGISTRAR roles
18
+ - each one is unique
19
+ - always have 1 member
20
+ - one role is set for each function of each version of registry service
21
+ 2) REGISTRY_SERVICE_MANAGER_ROLE aka GIF_MANAGER_ROLE
22
+ - can have arbitrary number of members
23
+ - responsible for services registrations
24
+ - responsible for token registration and activation
25
+ 3) REGISTRY_SERVICE_ADMIN_ROLE aka GIF_ADMIN_ROLE
26
+ - admin of REGISTRY_SERVICE_MANAGER_ROLE
27
+ - MUST have 1 member at any time
28
+ - granted/revoked ONLY in transferAdminRole() -> consider lock out situations!!!
29
+ - responsible for release manager initialization
30
+ - responsible for creation and activation of each release
31
+
32
+ */
33
+
34
+ contract RegistryAccessManager is AccessManaged
35
+ {
36
+ error NotInitialized();
37
+ error AlreadyInitialized();
38
+
39
+ uint64 public constant UNIQUE_ROLE_ID_MIN = 1000000;
40
+
41
+ AccessManager private immutable _accessManager;
42
+ address private _releaseManager;
43
+ address private _tokenRegistry;
44
+
45
+ uint64 private _idNext; // role id
46
+ bool private _isInitialized;
47
+
48
+ modifier onlyOnce() {
49
+ if(_isInitialized) {
50
+ revert AlreadyInitialized();
51
+ }
52
+ _;
53
+ _isInitialized = true;
54
+ }
55
+
56
+ modifier onlyInitialized() {
57
+ if(!_isInitialized) {
58
+ revert NotInitialized();
59
+ }
60
+ _;
61
+ }
62
+
63
+ constructor(address manager)
64
+ AccessManaged(msg.sender)
65
+ {
66
+ _accessManager = new AccessManager(address(this));
67
+ setAuthority(address(_accessManager));
68
+
69
+ _idNext = UNIQUE_ROLE_ID_MIN;
70
+
71
+ _configureAdminRoleInitial();
72
+
73
+ address admin = msg.sender;
74
+ _grantRole(REGISTRY_SERVICE_ADMIN_ROLE(), admin, 0);
75
+ _grantRole(REGISTRY_SERVICE_MANAGER_ROLE(), manager, 0);
76
+ }
77
+
78
+ function initialize(address releaseManager, address tokenRegistry)
79
+ external
80
+ restricted // GIF_ADMIN_ROLE
81
+ onlyOnce
82
+ {
83
+ require(
84
+ ReleaseManager(releaseManager).authority() == address(_accessManager),
85
+ "RegistryAccessManager: release manager authority is invalid");
86
+ require(tokenRegistry > address(0), "RegistryAccessManager: token registry is 0");
87
+ //require(tokenRegistry.authority() == address(_accessManager));
88
+
89
+ _releaseManager = releaseManager;
90
+ _tokenRegistry = tokenRegistry;
91
+
92
+ _configureAdminRole();
93
+ _configureManagerRole();
94
+ _configureReleaseManagerRole();
95
+
96
+ _grantRole(RELEASE_MANAGER_ROLE(), releaseManager, 0);
97
+ }
98
+
99
+ // set unique role for target, role forever have 1 member and never revoked
100
+ function setAndGrantUniqueRole(
101
+ address account,
102
+ address target,
103
+ bytes4[] memory selector
104
+ )
105
+ external
106
+ restricted // RELEASE_MANAGER_ROLE
107
+ onlyInitialized
108
+ returns(RoleId)
109
+ {
110
+ // TODO questionable check...
111
+ // target is not part of `runtime`
112
+ //if(
113
+ // target == address(this) ||
114
+ // target == address(_accessManager) ||
115
+ // target == _releaseManager ||
116
+ // target == _tokenRegistry)
117
+ //{ return TargetInvalid(); }
118
+
119
+ RoleId roleId = _getNextRoleId();
120
+
121
+ _setTargetFunctionRole(target, selector, roleId);
122
+ _grantRole(roleId, account, 0);
123
+ }
124
+
125
+ /*function transferAdmin(address to)
126
+ external
127
+ restricted // only with REGISTRY_SERVICE_ADMIN_ROLE or nft owner
128
+ {
129
+ _accessManager.revoke(REGISTRY_SERVICE_ADMIN_ROLE, );
130
+ _accesssManager.grant(REGISTRY_SERVICE_ADMIN_ROLE, to, 0);
131
+ }*/
132
+
133
+ //--- view functions ----------------------------------------------------//
134
+
135
+ function getAccessManager()
136
+ external
137
+ view
138
+ returns (AccessManager)
139
+ {
140
+ return _accessManager;
141
+ }
142
+
143
+ //--- private functions -------------------------------------------------//
144
+
145
+ function _configureAdminRoleInitial() private
146
+ {
147
+ bytes4[] memory functionSelector = new bytes4[](1);
148
+
149
+ functionSelector[0] = RegistryAccessManager.initialize.selector;
150
+ _setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
151
+ }
152
+
153
+ function _configureAdminRole() private
154
+ {
155
+ bytes4[] memory functionSelector = new bytes4[](1);
156
+
157
+ // for RegistryServiceProxyManager
158
+ // TODO upgrading with releaseManager.upgrade()->proxy.upgrade()???
159
+ //functionSelector[0] = RegistryServiceManager.upgrade.selector;
160
+ //_setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
161
+
162
+ // for TokenRegistry
163
+
164
+ // for ReleaseManager
165
+ functionSelector[0] = ReleaseManager.createNextRelease.selector;
166
+ _setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
167
+ //functionSelector[0] = ReleaseManager.activateNextRelease.selector;
168
+ //_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
169
+ }
170
+
171
+ function _configureManagerRole() private
172
+ {
173
+ bytes4[] memory functionSelector = new bytes4[](1);
174
+
175
+ // for TokenRegistry
176
+ functionSelector[0] = TokenRegistry.setActive.selector;
177
+ _setTargetFunctionRole(address(_tokenRegistry), functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
178
+
179
+ // for ReleaseManager
180
+ functionSelector[0] = ReleaseManager.registerService.selector;
181
+ _setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
182
+
183
+ // set admin
184
+ _setRoleAdmin(REGISTRY_SERVICE_MANAGER_ROLE(), REGISTRY_SERVICE_ADMIN_ROLE());
185
+ }
186
+
187
+ function _configureReleaseManagerRole() private
188
+ {
189
+ bytes4[] memory functionSelector = new bytes4[](1);
190
+
191
+ functionSelector[0] = RegistryAccessManager.setAndGrantUniqueRole.selector;
192
+ _setTargetFunctionRole(address(this), functionSelector, RELEASE_MANAGER_ROLE());
193
+ }
194
+
195
+ function _setTargetFunctionRole(address target, bytes4[] memory selectors, RoleId roleId) private {
196
+ _accessManager.setTargetFunctionRole(target, selectors, roleId.toInt());
197
+ }
198
+
199
+ function _setRoleAdmin(RoleId roleId, RoleId adminRoleId) private {
200
+ _accessManager.setRoleAdmin(roleId.toInt(), adminRoleId.toInt());
201
+ }
202
+
203
+ function _grantRole(RoleId roleId, address account, uint32 executionDelay) private {
204
+ _accessManager.grantRole(roleId.toInt(), account, executionDelay);
205
+ }
206
+
207
+ function _getNextRoleId() private returns(RoleId roleId) {
208
+ roleId = RoleIdLib.toRoleId(_idNext++);
209
+ }
210
+ }
@@ -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 {IBaseComponent} from "../../contracts/components/IBaseComponent.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(IBaseComponent 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(IBaseComponent 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(IBaseComponent 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
+ 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
+ }