@etherisc/gif-next 0.0.2-f74fcad-685 → 0.0.2-f79a517-071

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 (398) hide show
  1. package/README.md +264 -7
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → components/BaseComponent.sol/BaseComponent.json} +152 -150
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +557 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +115 -116
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +177 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +308 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +207 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +471 -83
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +345 -77
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  36. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  42. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  44. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  45. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1169 -708
  46. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
  47. package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
  48. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  49. package/artifacts/contracts/instance/Instance.sol/Instance.json +1565 -956
  50. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  51. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +481 -0
  52. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  53. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  54. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  55. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
  56. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  57. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  58. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/IService.sol/IService.json +421 -0
  60. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
  61. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +544 -0
  62. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
  64. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  66. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
  67. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
  68. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  69. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +468 -0
  70. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
  71. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +297 -0
  72. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
  74. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +297 -0
  76. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
  77. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPoolModule.json → module/component/ComponentModule.sol/ComponentModule.json} +49 -61
  78. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
  80. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
  81. package/artifacts/contracts/instance/{product/IProductService.sol/IProductService.json → module/component/IComponent.sol/IComponentModule.json} +51 -61
  82. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  83. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  84. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.json +10 -0
  86. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +10 -0
  88. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
  90. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
  91. package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +136 -119
  92. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +137 -120
  94. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
  96. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
  97. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +164 -0
  98. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
  99. package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +66 -57
  100. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/risk/IRisk.sol/IRisk.json} +2 -2
  102. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
  103. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +113 -0
  104. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
  105. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +131 -0
  106. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
  107. package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
  108. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
  109. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +638 -0
  110. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  111. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
  112. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
  113. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +638 -0
  114. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  116. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +630 -0
  118. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  120. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  122. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +561 -0
  124. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +751 -0
  126. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +753 -0
  128. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  129. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +1068 -0
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  131. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  132. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  133. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +287 -31
  134. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  135. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  136. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  137. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  138. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  139. package/artifacts/contracts/registry/Registry.sol/Registry.json +500 -43
  140. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  141. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1245 -0
  142. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  143. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +496 -0
  144. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  145. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  146. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  147. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  148. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  149. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  150. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  151. package/artifacts/contracts/{components/Component.sol/Component.json → shared/IRegisterable.sol/IRegisterable.json} +98 -102
  152. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  153. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  154. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  155. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  156. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  157. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  158. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  159. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  160. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  161. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  162. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  164. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +557 -0
  166. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  168. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestPool.sol/TestPool.json +716 -0
  170. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +744 -0
  172. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  174. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  176. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  177. package/artifacts/contracts/test/TestService.sol/TestService.json +584 -0
  178. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  179. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  180. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  181. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  182. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  183. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +270 -0
  184. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  185. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  186. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  187. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  188. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  192. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  193. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
  194. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  196. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  197. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  198. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  200. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  202. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  204. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  206. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  208. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
  210. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  212. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  214. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  216. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  218. package/contracts/components/BaseComponent.sol +79 -0
  219. package/contracts/components/Distribution.sol +155 -0
  220. package/contracts/components/IBaseComponent.sol +19 -0
  221. package/contracts/components/IDistributionComponent.sol +46 -0
  222. package/contracts/components/IPoolComponent.sol +64 -0
  223. package/contracts/components/IProductComponent.sol +37 -0
  224. package/contracts/components/Pool.sol +218 -24
  225. package/contracts/components/Product.sol +248 -38
  226. package/contracts/experiment/cloning/Cloner.sol +47 -0
  227. package/contracts/instance/IInstance.sol +39 -12
  228. package/contracts/instance/IInstanceLinked.sol +8 -0
  229. package/contracts/instance/Instance.sol +58 -47
  230. package/contracts/instance/base/ComponentServiceBase.sol +49 -0
  231. package/contracts/instance/base/IInstanceBase.sol +23 -0
  232. package/contracts/instance/base/IKeyValueStore.sol +50 -0
  233. package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
  234. package/contracts/instance/base/IService.sol +15 -0
  235. package/contracts/instance/base/InstanceBase.sol +89 -0
  236. package/contracts/instance/base/KeyValueStore.sol +161 -0
  237. package/contracts/instance/base/Lifecycle.sol +100 -0
  238. package/contracts/instance/base/ModuleBase.sol +57 -0
  239. package/contracts/instance/base/ServiceBase.sol +44 -0
  240. package/contracts/instance/module/bundle/BundleModule.sol +134 -0
  241. package/contracts/instance/module/bundle/IBundle.sol +53 -0
  242. package/contracts/instance/module/component/ComponentModule.sol +71 -0
  243. package/contracts/instance/module/component/IComponent.sol +28 -0
  244. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  245. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  246. package/contracts/instance/module/policy/IPolicy.sol +63 -0
  247. package/contracts/instance/module/policy/PolicyModule.sol +91 -0
  248. package/contracts/instance/module/pool/IPoolModule.sol +41 -0
  249. package/contracts/instance/module/pool/PoolModule.sol +95 -0
  250. package/contracts/instance/module/risk/IRisk.sol +26 -0
  251. package/contracts/instance/module/risk/RiskModule.sol +62 -0
  252. package/contracts/instance/module/treasury/ITreasury.sol +84 -0
  253. package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
  254. package/contracts/instance/module/treasury/TreasuryModule.sol +131 -0
  255. package/contracts/instance/service/ComponentOwnerService.sol +315 -0
  256. package/contracts/instance/service/DistributionService.sol +54 -0
  257. package/contracts/instance/service/IComponentOwnerService.sol +20 -0
  258. package/contracts/instance/service/IDistributionService.sol +12 -0
  259. package/contracts/instance/service/IPoolService.sol +37 -0
  260. package/contracts/instance/service/IProductService.sol +107 -0
  261. package/contracts/instance/service/PoolService.sol +149 -0
  262. package/contracts/instance/service/ProductService.sol +510 -0
  263. package/contracts/registry/ChainNft.sol +129 -62
  264. package/contracts/registry/IRegistry.sol +35 -45
  265. package/contracts/registry/IRegistryService.sol +35 -0
  266. package/contracts/registry/ITransferInterceptor.sol +6 -0
  267. package/contracts/registry/Registry.sol +367 -126
  268. package/contracts/registry/RegistryService.sol +441 -0
  269. package/contracts/registry/RegistryServiceManager.sol +64 -0
  270. package/contracts/shared/ContractDeployerLib.sol +72 -0
  271. package/contracts/shared/ERC165.sol +21 -0
  272. package/contracts/shared/INftOwnable.sol +22 -0
  273. package/contracts/shared/IRegisterable.sol +17 -0
  274. package/contracts/shared/IVersionable.sol +96 -0
  275. package/contracts/shared/NftOwnable.sol +136 -0
  276. package/contracts/shared/ProxyManager.sol +94 -0
  277. package/contracts/shared/Registerable.sol +89 -0
  278. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  279. package/contracts/shared/Versionable.sol +147 -0
  280. package/contracts/test/TestDistribution.sol +22 -0
  281. package/contracts/test/TestFee.sol +25 -0
  282. package/contracts/test/TestPool.sol +27 -0
  283. package/contracts/test/TestProduct.sol +74 -0
  284. package/contracts/test/TestRegisterable.sol +18 -0
  285. package/contracts/test/TestRoleId.sol +14 -0
  286. package/contracts/test/TestService.sol +26 -0
  287. package/contracts/{mock/Dip.sol → test/TestToken.sol} +5 -5
  288. package/contracts/test/TestVersion.sol +44 -0
  289. package/contracts/test/TestVersionable.sol +17 -0
  290. package/contracts/{mock → test}/Usdc.sol +1 -1
  291. package/contracts/types/AddressSet.sol +58 -0
  292. package/contracts/types/Fee.sol +44 -20
  293. package/contracts/types/Key32.sol +45 -0
  294. package/contracts/types/NftId.sol +22 -1
  295. package/contracts/types/NftIdSet.sol +60 -0
  296. package/contracts/types/ObjectType.sol +37 -13
  297. package/contracts/types/ReferralId.sol +48 -0
  298. package/contracts/types/RiskId.sol +43 -0
  299. package/contracts/types/RoleId.sol +45 -0
  300. package/contracts/types/StateId.sol +13 -3
  301. package/contracts/types/Timestamp.sol +22 -1
  302. package/contracts/types/UFixed.sol +138 -23
  303. package/contracts/types/Version.sol +104 -0
  304. package/package.json +11 -5
  305. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  306. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  307. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  308. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  309. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  310. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  311. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  312. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  313. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  314. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  315. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  316. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  317. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  318. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  319. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  320. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  322. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  323. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  324. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  325. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  326. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  327. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  328. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  329. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  330. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  331. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  332. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  333. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  334. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  335. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  336. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  337. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  338. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  340. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  341. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  344. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  345. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  346. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  347. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  348. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  349. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  350. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  351. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  352. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  353. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  354. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  355. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  356. package/artifacts/contracts/mock/Dip.sol/DIP.dbg.json +0 -4
  357. package/artifacts/contracts/mock/Dip.sol/DIP.json +0 -338
  358. package/artifacts/contracts/mock/TestPool.sol/TestPool.dbg.json +0 -4
  359. package/artifacts/contracts/mock/TestPool.sol/TestPool.json +0 -294
  360. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.dbg.json +0 -4
  361. package/artifacts/contracts/mock/TestProduct.sol/TestProduct.json +0 -384
  362. package/artifacts/contracts/mock/Usdc.sol/USDC.dbg.json +0 -4
  363. package/artifacts/contracts/mock/Usdc.sol/USDC.json +0 -338
  364. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  365. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  366. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  367. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  368. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  369. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  370. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  371. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  372. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  373. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  374. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  375. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  376. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  377. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
  378. package/contracts/components/Component.sol +0 -77
  379. package/contracts/components/IPool.sol +0 -15
  380. package/contracts/components/IProduct.sol +0 -16
  381. package/contracts/experiment/statemachine/README.md +0 -112
  382. package/contracts/instance/access/Access.sol +0 -165
  383. package/contracts/instance/access/IAccess.sol +0 -63
  384. package/contracts/instance/component/ComponentModule.sol +0 -274
  385. package/contracts/instance/component/IComponent.sol +0 -74
  386. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  387. package/contracts/instance/policy/IPolicy.sol +0 -50
  388. package/contracts/instance/policy/PolicyModule.sol +0 -114
  389. package/contracts/instance/pool/IPoolModule.sol +0 -23
  390. package/contracts/instance/pool/PoolModule.sol +0 -81
  391. package/contracts/instance/product/IProductService.sol +0 -36
  392. package/contracts/instance/product/ProductService.sol +0 -136
  393. package/contracts/instance/treasury/ITreasury.sol +0 -91
  394. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  395. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  396. package/contracts/mock/TestPool.sol +0 -16
  397. package/contracts/mock/TestProduct.sol +0 -39
  398. package/contracts/registry/IChainNft.sol +0 -21
@@ -0,0 +1,441 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
6
+ import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
7
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
8
+
9
+ import {IRegistry} from "./IRegistry.sol";
10
+ import {IInstance} from "../instance/IInstance.sol";
11
+
12
+ import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
13
+ import {IComponent, IComponentModule} from "../../contracts/instance/module/component/IComponent.sol";
14
+ import {IPool} from "../../contracts/instance/module/pool/IPoolModule.sol";
15
+ import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
16
+ import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
17
+ import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
18
+ import {IDistributionComponent} from "../../contracts/components/IDistributionComponent.sol";
19
+
20
+ import {IVersionable} from "../../contracts/shared/IVersionable.sol";
21
+ import {Versionable} from "../../contracts/shared/Versionable.sol";
22
+ import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
23
+
24
+ import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
25
+ import {ObjectType, REGISTRY, TOKEN, SERVICE, PRODUCT, ORACLE, POOL, TOKEN, INSTANCE, DISTRIBUTION, POLICY, BUNDLE} from "../../contracts/types/ObjectType.sol";
26
+ import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
27
+ import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
28
+ import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
29
+ import {Version, VersionPart, VersionLib} from "../../contracts/types/Version.sol";
30
+
31
+ import {ServiceBase} from "../../contracts/instance/base/ServiceBase.sol";
32
+ import {IService} from "../../contracts/instance/base/IService.sol";
33
+ import {IRegistryService} from "./IRegistryService.sol";
34
+ import {Registry} from "./Registry.sol";
35
+ import {ChainNft} from "./ChainNft.sol";
36
+
37
+ contract RegistryService is
38
+ AccessManagedUpgradeable,
39
+ ServiceBase,
40
+ IRegistryService
41
+ {
42
+ using NftIdLib for NftId;
43
+
44
+ error SelfRegistration();
45
+ error NotRegistryOwner();
46
+
47
+ error NotToken();
48
+ error NotService();
49
+ error NotInstance();
50
+ error NotProduct();
51
+ error NotPool();
52
+ error NotDistribution();
53
+
54
+ error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
55
+ error NotRegisterableOwner(address expectedOwner);
56
+ error RegisterableOwnerIsZero();
57
+ error RegisterableOwnerIsRegistered();
58
+ error InvalidInitialOwner(address initialOwner);
59
+ error InvalidAddress(address registerableAddress);
60
+
61
+
62
+ // Initial value for constant variable has to be compile-time constant
63
+ // TODO define types as constants?
64
+ //ObjectType public constant SERVICE_TYPE = REGISTRY();
65
+ string public constant NAME = "RegistryService";
66
+
67
+ // TODO update to real hash when registry is stable
68
+ bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
69
+
70
+ address public constant NFT_LOCK_ADDRESS = address(0x1);
71
+
72
+ /// @dev
73
+ // msg.sender - ONLY registry owner
74
+ // CAN NOT register itself
75
+ // CAN NOT register IRegisterable address
76
+ // CAN register ONLY valid object-parent types combinations for TOKEN
77
+ // IMPORTANT: MUST NOT call untrusted contract inbetween calls to registry/instance (trusted contracts)
78
+ // motivation: registry/instance state may change during external call
79
+ // TODO it may be usefull to have transferable token nft in order to delist token, make it invalid for new beginings
80
+ // TODO: MUST prohibit registration of precompiles addresses
81
+ function registerToken(address tokenAddress)
82
+ external
83
+ returns(NftId nftId)
84
+ {
85
+ if(msg.sender == tokenAddress) {
86
+ revert SelfRegistration();
87
+ }
88
+
89
+ // MUST not revert if no ERC165 support
90
+ if(tokenAddress.code.length == 0 ||
91
+ ERC165Checker.supportsInterface(tokenAddress, type(IRegisterable).interfaceId)) {
92
+ revert NotToken();
93
+ }
94
+
95
+ NftId registryNftId = _registry.getNftId(address(_registry));
96
+
97
+ if(msg.sender != _registry.ownerOf(registryNftId)) {
98
+ revert NotRegistryOwner();
99
+ }
100
+
101
+ IRegistry.ObjectInfo memory info = IRegistry.ObjectInfo(
102
+ zeroNftId(), // any value
103
+ registryNftId, // parent nft id
104
+ TOKEN(),
105
+ false, // isInterceptor
106
+ tokenAddress,
107
+ NFT_LOCK_ADDRESS,
108
+ "" // any value
109
+ );
110
+
111
+ nftId = _registry.register(info);
112
+ }
113
+
114
+ /// @dev
115
+ // msg.sender - ONLY registry owner
116
+ // CAN NOT register itself
117
+ // CAN register ONLY valid object-parent types combinations for SERVICE
118
+ // CAN register ONLY IRegisterable address he owns
119
+ // IMPORTANT: MUST NOT check owner before calling external contract
120
+ function registerService(IService service)
121
+ external
122
+ returns(
123
+ IRegistry.ObjectInfo memory info,
124
+ bytes memory data
125
+ )
126
+ {
127
+
128
+ // CAN revert if no ERC165 support -> will revert with empty message
129
+ if(!service.supportsInterface(type(IService).interfaceId)) {
130
+ revert NotService();
131
+ }
132
+
133
+ (
134
+ info,
135
+ data
136
+ ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
137
+
138
+ if(msg.sender != _registry.getOwner()) {
139
+ revert NotRegistryOwner();
140
+ }
141
+
142
+ info.nftId = _registry.register(info);
143
+ service.linkToRegisteredNftId();
144
+ return (
145
+ info,
146
+ data
147
+ );
148
+ }
149
+
150
+ // If msg.sender is approved service:
151
+ // 1) add owner arg (service MUST pass it's msg.sender as owner)
152
+ // 2) check service allowance
153
+ // 3) comment self registrstion check
154
+ //function registerInstance(IRegisterable instance, address owner)
155
+ function registerInstance(IRegisterable instance)
156
+ external
157
+ returns(
158
+ IRegistry.ObjectInfo memory info,
159
+ bytes memory data
160
+ )
161
+ {
162
+
163
+ if(!instance.supportsInterface(type(IInstance).interfaceId)) {
164
+ revert NotInstance();
165
+ }
166
+
167
+ (
168
+ info,
169
+ data
170
+ ) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
171
+
172
+ info.nftId = _registry.register(info);
173
+ instance.linkToRegisteredNftId(); // asume safe
174
+
175
+ return (
176
+ info,
177
+ data
178
+ );
179
+ }
180
+
181
+ function registerProduct(IBaseComponent product, address owner)
182
+ external
183
+ restricted
184
+ returns(
185
+ IRegistry.ObjectInfo memory info,
186
+ bytes memory data
187
+ )
188
+ {
189
+ // CAN revert if no ERC165 support -> will revert with empty message
190
+ if(!product.supportsInterface(type(IProductComponent).interfaceId)) {
191
+ revert NotProduct();
192
+ }
193
+
194
+ (
195
+ info,
196
+ data
197
+ ) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
198
+
199
+ NftId serviceNftId = _registry.getNftId(msg.sender);
200
+
201
+ info.nftId = _registry.register(info);
202
+ // TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
203
+ product.linkToRegisteredNftId();
204
+
205
+ return (
206
+ info,
207
+ data
208
+ );
209
+ }
210
+
211
+ function registerPool(IBaseComponent pool, address owner)
212
+ external
213
+ restricted
214
+ returns(
215
+ IRegistry.ObjectInfo memory info,
216
+ bytes memory data
217
+ )
218
+ {
219
+ if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
220
+ revert NotPool();
221
+ }
222
+
223
+ (
224
+ info,
225
+ data
226
+ ) = _getAndVerifyContractInfo(pool, POOL(), owner);
227
+
228
+ NftId serviceNftId = _registry.getNftId(msg.sender);
229
+
230
+ info.nftId = _registry.register(info);
231
+ pool.linkToRegisteredNftId();
232
+
233
+ return (
234
+ info,
235
+ data
236
+ );
237
+ }
238
+
239
+ function registerDistribution(IBaseComponent distribution, address owner)
240
+ external
241
+ restricted
242
+ returns(
243
+ IRegistry.ObjectInfo memory info,
244
+ bytes memory data
245
+ )
246
+ {
247
+ if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
248
+ revert NotDistribution();
249
+ }
250
+
251
+ (
252
+ info,
253
+ data
254
+ ) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
255
+
256
+ NftId serviceNftId = _registry.getNftId(msg.sender);
257
+
258
+ info.nftId = _registry.register(info);
259
+ distribution.linkToRegisteredNftId();
260
+
261
+ return (
262
+ info,
263
+ data
264
+ );
265
+ }
266
+
267
+ function registerPolicy(IRegistry.ObjectInfo memory info)
268
+ external
269
+ restricted
270
+ returns(NftId nftId)
271
+ {
272
+ NftId senderNftId = _registry.getNftId(msg.sender);
273
+
274
+ _verifyObjectInfo(info, POLICY());
275
+
276
+ nftId = _registry.register(info);
277
+ }
278
+
279
+ function registerBundle(IRegistry.ObjectInfo memory info)
280
+ external
281
+ restricted
282
+ returns(NftId nftId)
283
+ {
284
+
285
+ NftId senderNftId = _registry.getNftId(msg.sender);
286
+
287
+ _verifyObjectInfo(info, BUNDLE());
288
+
289
+ nftId = _registry.register(info);
290
+ }
291
+
292
+
293
+ // From IService
294
+ function getName() public pure override(IService, ServiceBase) returns(string memory) {
295
+ return NAME;
296
+ }
297
+ //function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
298
+ // return SERVICE_TYPE;
299
+ //}
300
+
301
+
302
+ // from Versionable
303
+
304
+ /// @dev top level initializer
305
+ // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
306
+ // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
307
+ // 3) deploy registry -> pass registry service address as constructor argument
308
+ // registry is getting instantiated and locked to registry service address forever
309
+ function _initialize(
310
+ address owner,
311
+ bytes memory data
312
+ )
313
+ internal
314
+ initializer
315
+ virtual override
316
+ {
317
+ (
318
+ address initialAuthority,
319
+ bytes memory registryByteCodeWithInitCode
320
+ ) = abi.decode(data, (address, bytes));
321
+
322
+ __AccessManaged_init(initialAuthority);
323
+
324
+ bytes memory encodedConstructorArguments = abi.encode(
325
+ owner,
326
+ getMajorVersion());
327
+
328
+ bytes memory registryCreationCode = ContractDeployerLib.getCreationCode(
329
+ registryByteCodeWithInitCode,
330
+ encodedConstructorArguments);
331
+
332
+ IRegistry registry = IRegistry(ContractDeployerLib.deploy(
333
+ registryCreationCode,
334
+ REGISTRY_CREATION_CODE_HASH));
335
+
336
+ NftId registryNftId = registry.getNftId(address(registry));
337
+
338
+ _initializeServiceBase(address(registry), registryNftId, owner);
339
+
340
+ // TODO why do registry service proxy need to keep its nftId??? -> no registryServiceNftId checks in implementation
341
+ // if they are -> use registry address to obtain owner of registry service nft (works the same with any registerable and(or) implementation)
342
+ linkToRegisteredNftId();
343
+ _registerInterface(type(IRegistryService).interfaceId);
344
+ }
345
+
346
+ // parent check done in registry because of approve()
347
+ function _getAndVerifyContractInfo(
348
+ IRegisterable registerable,
349
+ ObjectType expectedType, // assume can be valid only
350
+ address expectedOwner // assume can be 0
351
+ )
352
+ internal
353
+ view
354
+ returns(
355
+ IRegistry.ObjectInfo memory info,
356
+ bytes memory data
357
+ )
358
+ {
359
+ (
360
+ info,
361
+ data
362
+ ) = registerable.getInitialInfo();
363
+ info.objectAddress = address(registerable);
364
+
365
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
366
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
367
+ }
368
+
369
+ address owner = info.initialOwner;
370
+
371
+ if(owner != expectedOwner) { // registerable owner protection
372
+ revert NotRegisterableOwner(expectedOwner);
373
+ }
374
+
375
+ if(owner == address(registerable)) {
376
+ revert SelfRegistration();
377
+ }
378
+
379
+ if(owner == address(0)) {
380
+ revert RegisterableOwnerIsZero();
381
+ }
382
+
383
+ if(getRegistry().isRegistered(owner)) {
384
+ revert RegisterableOwnerIsRegistered();
385
+ }
386
+
387
+ /*NftId parentNftId = info.parentNftId;
388
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
389
+
390
+ if(parentInfo.objectType != parentType) { // parent registration + type
391
+ revert InvalidParent(parentNftId);
392
+ }*/
393
+
394
+ return(
395
+ info,
396
+ data
397
+ );
398
+ }
399
+
400
+ // parent checks done in registry because of approve()
401
+ function _verifyObjectInfo(
402
+ IRegistry.ObjectInfo memory info,
403
+ ObjectType objectType
404
+ )
405
+ internal
406
+ view
407
+ {
408
+ if(info.objectAddress > address(0)) {
409
+ revert InvalidAddress(info.objectAddress);
410
+ }
411
+
412
+ if(
413
+ getRegistry().isRegistered(info.initialOwner) ||
414
+ info.initialOwner == address(0)) {
415
+ // TODO non registered address can register object(e.g. POLICY()) and then transfer associated nft to registered contract
416
+ // what are motivations to do so?
417
+ // at least registered contract can not register objects by itself, SERVICE,
418
+ revert InvalidInitialOwner(info.initialOwner);
419
+ }
420
+
421
+ // can catch all 3 if check that initialOwner is not registered
422
+ /*if(info.initialOwner == msg.sender) {
423
+ revert InitialOwnerIsParent();
424
+ }
425
+
426
+ if(info.initialOwner == address(this)) {
427
+ revert InitialOwnerIsService();
428
+ }
429
+
430
+ if(info.initialOwner == address(getRegistry())) {
431
+ revert InitialOwnerIsRegistry();
432
+ }*/
433
+
434
+ /*NftId parentNftId = info.parentNftId;
435
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
436
+
437
+ if(parentInfo.objectType != parentType) { // parent registration + type
438
+ revert InvalidParent(parentNftId);
439
+ }*/
440
+ }
441
+ }
@@ -0,0 +1,64 @@
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
+
13
+
14
+ contract RegistryServiceManager is
15
+ ProxyManager
16
+ {
17
+ bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
18
+
19
+ RegistryService private _registryService;
20
+
21
+ AccessManager private _accessManager;
22
+
23
+ /// @dev initializes proxy manager with registry service implementation and deploys registry
24
+ constructor(
25
+ address accessManager
26
+ )
27
+ ProxyManager()
28
+ {
29
+ _accessManager = AccessManager(accessManager);
30
+
31
+ bytes memory initializationData = abi.encode(accessManager, type(Registry).creationCode);
32
+
33
+ IVersionable versionable = deploy(
34
+ address(new RegistryService()),
35
+ initializationData);
36
+
37
+ _registryService = RegistryService(address(versionable));
38
+
39
+ // link ownership of registry service manager ot nft owner of registry service
40
+ _linkToNftOwnable(
41
+ address(_registryService.getRegistry()),
42
+ address(_registryService));
43
+
44
+ // implies that after this constructor call only upgrade functionality is available
45
+ _isDeployed = true;
46
+ }
47
+
48
+ //--- view functions ----------------------------------------------------//
49
+ function getRegistryService()
50
+ external
51
+ view
52
+ returns (RegistryService registryService)
53
+ {
54
+ return _registryService;
55
+ }
56
+
57
+ function getAccessManager()
58
+ external
59
+ view
60
+ returns (AccessManager)
61
+ {
62
+ return _accessManager;
63
+ }
64
+ }
@@ -0,0 +1,72 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ library ContractDeployerLib {
5
+
6
+ event LogContractDeployed(address contractAddress);
7
+
8
+ error ErrorCreationCodeHashMismatch(bytes32 expectedHash, bytes32 actualHash);
9
+
10
+ /// @dev deploys a new contract using the provided creation code
11
+ function deploy(
12
+ bytes memory creationCode,
13
+ bytes32 expectedCreationCodeHash
14
+ )
15
+ public
16
+ returns (address contractAdress)
17
+ {
18
+ // check against expected hash, if provided
19
+ if (expectedCreationCodeHash != bytes32(0)) {
20
+ bytes32 creationCodeHash = getHash(creationCode);
21
+ if (creationCodeHash != expectedCreationCodeHash) {
22
+ revert ErrorCreationCodeHashMismatch(expectedCreationCodeHash, creationCodeHash);
23
+ }
24
+ }
25
+
26
+ // solhint-disable no-inline-assembly
27
+ assembly {
28
+ contractAdress := create(0, add(creationCode, 0x20), mload(creationCode))
29
+
30
+ if iszero(extcodesize(contractAdress)) {
31
+ revert(0, 0)
32
+ }
33
+ }
34
+ // solhint enable
35
+
36
+ emit LogContractDeployed(contractAdress);
37
+ }
38
+
39
+ /// @dev gets the creation code for the new contract
40
+ // for terminology see eg https://www.rareskills.io/post/ethereum-contract-creation-code
41
+ function getCreationCode(
42
+ bytes memory byteCodeWithInitCode, // what you get with type(<Contract>).creationCode
43
+ bytes memory encodedConstructorArguments // what you get with
44
+ )
45
+ public
46
+ pure
47
+ returns (bytes memory creationCode)
48
+ {
49
+ return abi.encodePacked(byteCodeWithInitCode, encodedConstructorArguments);
50
+ }
51
+
52
+
53
+ function matchesWithHash(
54
+ bytes memory creationCode,
55
+ bytes32 expectedHash
56
+ )
57
+ public
58
+ pure
59
+ returns (bool isMatching)
60
+ {
61
+ return getHash(creationCode) == expectedHash;
62
+ }
63
+
64
+
65
+ function getHash(bytes memory creationCode)
66
+ public
67
+ pure
68
+ returns (bytes32 hash)
69
+ {
70
+ return keccak256(creationCode);
71
+ }
72
+ }
@@ -0,0 +1,21 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ contract ERC165 is IERC165 {
7
+ mapping(bytes4 => bool) private _isSupported;
8
+
9
+ constructor() {
10
+ // register support for ERC165
11
+ _registerInterface(type(IERC165).interfaceId);
12
+ }
13
+
14
+ function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
15
+ return _isSupported[interfaceId];
16
+ }
17
+
18
+ function _registerInterface(bytes4 interfaceId) internal {
19
+ _isSupported[interfaceId] = true;
20
+ }
21
+ }
@@ -0,0 +1,22 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IRegistry} from "../registry/IRegistry.sol";
5
+ import {NftId} from "../types/NftId.sol";
6
+
7
+ interface INftOwnable {
8
+ error ErrorNotOwner(address account);
9
+
10
+ error ErrorAlreadyLinked(address registry, NftId nftId);
11
+ error ErrorRegistryAlreadyInitialized(address registry);
12
+ error ErrorRegistryNotInitialized();
13
+ error ErrorRegistryAddressZero();
14
+ error ErrorNotRegistry(address registryAddress);
15
+ error ErrorContractNotRegistered(address contractAddress);
16
+
17
+ function linkToRegisteredNftId() external;
18
+
19
+ function getRegistry() external view returns (IRegistry);
20
+ function getNftId() external view returns (NftId);
21
+ function getOwner() external view returns (address);
22
+ }
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {INftOwnable} from "./INftOwnable.sol";
7
+ import {IRegistry} from "../registry/IRegistry.sol";
8
+ import {NftId} from "../types/NftId.sol";
9
+ import {ObjectType} from "../types/ObjectType.sol";
10
+
11
+ interface IRegisterable is IERC165, INftOwnable {
12
+
13
+ function getInitialInfo()
14
+ external
15
+ view
16
+ returns (IRegistry.ObjectInfo memory, bytes memory data);
17
+ }