@etherisc/gif-next 0.0.2-b9b3e89 → 0.0.2-b9e9dc3-713

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 (373) hide show
  1. package/README.md +297 -7
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +314 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +610 -0
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +267 -0
  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 +249 -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 +620 -41
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +594 -53
  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/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
  59. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
  60. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
  61. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1119 -0
  62. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
  63. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
  64. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  65. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +226 -767
  66. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +421 -0
  68. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  69. package/artifacts/contracts/instance/Instance.sol/Instance.json +2979 -529
  70. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
  72. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  73. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1257 -0
  74. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +703 -0
  76. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +424 -0
  78. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +481 -0
  80. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
  82. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  84. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  85. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  86. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/base/IService.sol/IService.json +421 -0
  88. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  89. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  90. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  91. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  92. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
  93. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +468 -0
  94. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
  96. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  97. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  98. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  99. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  100. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  101. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  102. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  103. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  104. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  105. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/ISetup.sol/ISetup.json} +2 -2
  106. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  107. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  108. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +827 -0
  110. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +466 -0
  112. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  114. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +561 -0
  116. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +751 -0
  118. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
  119. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +771 -0
  120. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +269 -96
  122. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  123. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -0
  124. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  126. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  127. package/artifacts/contracts/registry/Registry.sol/Registry.json +509 -85
  128. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  129. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1261 -0
  130. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  131. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +504 -0
  132. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  133. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  134. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  135. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
  136. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  137. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
  138. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  139. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
  140. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  142. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
  144. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  145. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  147. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +274 -0
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  149. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  151. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  153. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  155. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  157. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +305 -0
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  159. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  160. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  161. package/artifacts/contracts/test/TestService.sol/TestService.json +600 -0
  162. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  164. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  166. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  168. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  169. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  170. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  171. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  172. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  173. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  174. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
  175. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
  176. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  177. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  178. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  180. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  181. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  182. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +153 -0
  184. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  185. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
  186. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  188. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  190. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  192. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  194. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  196. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  198. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +249 -0
  200. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  202. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  204. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  206. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
  208. package/contracts/components/BaseComponent.sol +86 -0
  209. package/contracts/components/Distribution.sol +166 -0
  210. package/contracts/components/IBaseComponent.sol +24 -0
  211. package/contracts/components/IDistributionComponent.sol +43 -0
  212. package/contracts/components/IPoolComponent.sol +62 -0
  213. package/contracts/components/IProductComponent.sol +35 -0
  214. package/contracts/components/Pool.sol +248 -18
  215. package/contracts/components/Product.sol +267 -35
  216. package/contracts/experiment/cloning/Cloner.sol +47 -0
  217. package/contracts/experiment/errors/Require.sol +38 -0
  218. package/contracts/experiment/errors/Revert.sol +44 -0
  219. package/contracts/experiment/inheritance/A.sol +53 -0
  220. package/contracts/experiment/inheritance/B.sol +28 -0
  221. package/contracts/experiment/inheritance/C.sol +34 -0
  222. package/contracts/experiment/inheritance/IA.sol +13 -0
  223. package/contracts/experiment/inheritance/IB.sol +10 -0
  224. package/contracts/experiment/inheritance/IC.sol +12 -0
  225. package/contracts/experiment/statemachine/Dummy.sol +27 -0
  226. package/contracts/experiment/statemachine/ISM.sol +25 -0
  227. package/contracts/experiment/statemachine/SM.sol +57 -0
  228. package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
  229. package/contracts/experiment/types/TypeA.sol +47 -0
  230. package/contracts/experiment/types/TypeB.sol +29 -0
  231. package/contracts/instance/AccessManagedSimple.sol +114 -0
  232. package/contracts/instance/AccessManagerSimple.sol +682 -0
  233. package/contracts/instance/IAccessManagerSimple.sol +391 -0
  234. package/contracts/instance/IInstance.sol +23 -15
  235. package/contracts/instance/IInstanceService.sol +17 -0
  236. package/contracts/instance/Instance.sol +416 -43
  237. package/contracts/instance/InstanceAccessManager.sol +288 -0
  238. package/contracts/instance/InstanceReader.sol +280 -0
  239. package/contracts/instance/InstanceService.sol +102 -0
  240. package/contracts/instance/InstanceServiceManager.sol +56 -0
  241. package/contracts/instance/base/ComponentServiceBase.sol +49 -0
  242. package/contracts/instance/base/IInstanceBase.sol +23 -0
  243. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  244. package/contracts/instance/base/ILifecycle.sol +30 -0
  245. package/contracts/instance/base/IService.sol +15 -0
  246. package/contracts/instance/base/KeyValueStore.sol +172 -0
  247. package/contracts/instance/base/Lifecycle.sol +100 -0
  248. package/contracts/instance/base/ServiceBase.sol +44 -0
  249. package/contracts/instance/module/IAccess.sol +38 -0
  250. package/contracts/instance/module/IBundle.sol +19 -0
  251. package/contracts/instance/module/IDistribution.sol +39 -0
  252. package/contracts/instance/module/IPolicy.sol +45 -0
  253. package/contracts/instance/module/IRisk.sol +11 -0
  254. package/contracts/instance/module/ISetup.sol +43 -0
  255. package/contracts/instance/module/ITreasury.sol +23 -0
  256. package/contracts/instance/service/ComponentOwnerService.sol +317 -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/registry/ChainNft.sol +202 -0
  262. package/contracts/registry/IRegistry.sol +45 -54
  263. package/contracts/registry/IRegistryService.sol +35 -0
  264. package/contracts/registry/ITransferInterceptor.sol +6 -0
  265. package/contracts/registry/Registry.sol +358 -132
  266. package/contracts/registry/RegistryService.sol +440 -0
  267. package/contracts/registry/RegistryServiceManager.sol +64 -0
  268. package/contracts/shared/ContractDeployerLib.sol +72 -0
  269. package/contracts/shared/ERC165.sol +21 -0
  270. package/contracts/shared/INftOwnable.sol +22 -0
  271. package/contracts/shared/IRegisterable.sol +17 -0
  272. package/contracts/shared/IVersionable.sol +96 -0
  273. package/contracts/shared/NftOwnable.sol +136 -0
  274. package/contracts/shared/ProxyManager.sol +94 -0
  275. package/contracts/shared/Registerable.sol +89 -0
  276. package/contracts/shared/TokenHandler.sol +27 -0
  277. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  278. package/contracts/shared/Versionable.sol +147 -0
  279. package/contracts/test/TestFee.sol +25 -0
  280. package/contracts/test/TestRegisterable.sol +18 -0
  281. package/contracts/test/TestRoleId.sol +14 -0
  282. package/contracts/test/TestService.sol +26 -0
  283. package/contracts/test/TestToken.sol +26 -0
  284. package/contracts/test/TestVersion.sol +44 -0
  285. package/contracts/test/TestVersionable.sol +17 -0
  286. package/contracts/test/Usdc.sol +26 -0
  287. package/contracts/types/AddressSet.sol +58 -0
  288. package/contracts/types/Blocknumber.sol +118 -0
  289. package/contracts/types/ChainId.sol +38 -0
  290. package/contracts/types/DistributorType.sol +55 -0
  291. package/contracts/types/Fee.sol +56 -0
  292. package/contracts/types/Key32.sol +50 -0
  293. package/contracts/types/NftId.sol +72 -0
  294. package/contracts/types/NftIdSet.sol +60 -0
  295. package/contracts/types/NumberId.sol +52 -0
  296. package/contracts/types/ObjectType.sol +152 -0
  297. package/contracts/types/Referral.sol +85 -0
  298. package/contracts/types/RiskId.sol +43 -0
  299. package/contracts/types/RoleId.sol +82 -0
  300. package/contracts/types/StateId.sol +101 -0
  301. package/contracts/types/Timestamp.sol +127 -0
  302. package/contracts/types/UFixed.sol +325 -0
  303. package/contracts/types/Version.sol +104 -0
  304. package/package.json +21 -6
  305. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  306. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  307. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  308. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  309. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  310. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  311. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  312. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  313. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  314. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  315. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  316. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  317. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  318. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  319. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  320. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  321. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  322. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  323. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  324. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  325. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  326. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  327. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  328. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  329. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  330. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  331. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  332. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  333. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  334. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  335. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  336. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  337. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  338. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  339. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  340. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  341. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  342. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  343. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  344. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  346. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  347. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  348. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  349. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  350. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  351. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  352. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  353. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  354. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  355. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  356. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  357. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  358. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  359. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  360. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  361. package/contracts/components/Component.sol +0 -62
  362. package/contracts/components/IPool.sol +0 -9
  363. package/contracts/components/IProduct.sol +0 -11
  364. package/contracts/instance/access/Access.sol +0 -218
  365. package/contracts/instance/access/IAccess.sol +0 -83
  366. package/contracts/instance/component/ComponentModule.sol +0 -259
  367. package/contracts/instance/component/IComponent.sol +0 -94
  368. package/contracts/instance/policy/IPolicy.sol +0 -66
  369. package/contracts/instance/policy/PolicyModule.sol +0 -106
  370. package/contracts/instance/pool/IPoolModule.sol +0 -40
  371. package/contracts/instance/pool/PoolModule.sol +0 -83
  372. package/contracts/instance/product/IProductService.sol +0 -45
  373. package/contracts/instance/product/ProductService.sol +0 -105
@@ -0,0 +1,440 @@
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
+ // TODO restrict access - registryService.registerService must use accessmanager for checking permissions as
123
+ // services are not always owned by registry owner - actually only registry service is owned by registry owner
124
+
125
+ returns(
126
+ IRegistry.ObjectInfo memory info,
127
+ bytes memory data
128
+ )
129
+ {
130
+
131
+ // CAN revert if no ERC165 support -> will revert with empty message
132
+ if(!service.supportsInterface(type(IService).interfaceId)) {
133
+ revert NotService();
134
+ }
135
+
136
+ (
137
+ info,
138
+ data
139
+ ) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
140
+
141
+ info.nftId = _registry.register(info);
142
+ service.linkToRegisteredNftId();
143
+ return (
144
+ info,
145
+ data
146
+ );
147
+ }
148
+
149
+ // If msg.sender is approved service:
150
+ // 1) add owner arg (service MUST pass it's msg.sender as owner)
151
+ // 2) check service allowance
152
+ // 3) comment self registrstion check
153
+ //function registerInstance(IRegisterable instance, address owner)
154
+ function registerInstance(IRegisterable instance)
155
+ external
156
+ returns(
157
+ IRegistry.ObjectInfo memory info,
158
+ bytes memory data
159
+ )
160
+ {
161
+
162
+ if(!instance.supportsInterface(type(IInstance).interfaceId)) {
163
+ revert NotInstance();
164
+ }
165
+
166
+ (
167
+ info,
168
+ data
169
+ ) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
170
+
171
+ info.nftId = _registry.register(info);
172
+ instance.linkToRegisteredNftId(); // asume safe
173
+
174
+ return (
175
+ info,
176
+ data
177
+ );
178
+ }
179
+
180
+ function registerProduct(IBaseComponent product, address owner)
181
+ external
182
+ restricted
183
+ returns(
184
+ IRegistry.ObjectInfo memory info,
185
+ bytes memory data
186
+ )
187
+ {
188
+ // CAN revert if no ERC165 support -> will revert with empty message
189
+ if(!product.supportsInterface(type(IProductComponent).interfaceId)) {
190
+ revert NotProduct();
191
+ }
192
+
193
+ (
194
+ info,
195
+ data
196
+ ) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
197
+
198
+ NftId serviceNftId = _registry.getNftId(msg.sender);
199
+
200
+ info.nftId = _registry.register(info);
201
+ // TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
202
+ product.linkToRegisteredNftId();
203
+
204
+ return (
205
+ info,
206
+ data
207
+ );
208
+ }
209
+
210
+ function registerPool(IBaseComponent pool, address owner)
211
+ external
212
+ restricted
213
+ returns(
214
+ IRegistry.ObjectInfo memory info,
215
+ bytes memory data
216
+ )
217
+ {
218
+ if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
219
+ revert NotPool();
220
+ }
221
+
222
+ (
223
+ info,
224
+ data
225
+ ) = _getAndVerifyContractInfo(pool, POOL(), owner);
226
+
227
+ NftId serviceNftId = _registry.getNftId(msg.sender);
228
+
229
+ info.nftId = _registry.register(info);
230
+ pool.linkToRegisteredNftId();
231
+
232
+ return (
233
+ info,
234
+ data
235
+ );
236
+ }
237
+
238
+ function registerDistribution(IBaseComponent distribution, address owner)
239
+ external
240
+ restricted
241
+ returns(
242
+ IRegistry.ObjectInfo memory info,
243
+ bytes memory data
244
+ )
245
+ {
246
+ if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
247
+ revert NotDistribution();
248
+ }
249
+
250
+ (
251
+ info,
252
+ data
253
+ ) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
254
+
255
+ NftId serviceNftId = _registry.getNftId(msg.sender);
256
+
257
+ info.nftId = _registry.register(info);
258
+ distribution.linkToRegisteredNftId();
259
+
260
+ return (
261
+ info,
262
+ data
263
+ );
264
+ }
265
+
266
+ function registerPolicy(IRegistry.ObjectInfo memory info)
267
+ external
268
+ restricted
269
+ returns(NftId nftId)
270
+ {
271
+ NftId senderNftId = _registry.getNftId(msg.sender);
272
+
273
+ _verifyObjectInfo(info, POLICY());
274
+
275
+ nftId = _registry.register(info);
276
+ }
277
+
278
+ function registerBundle(IRegistry.ObjectInfo memory info)
279
+ external
280
+ restricted
281
+ returns(NftId nftId)
282
+ {
283
+
284
+ NftId senderNftId = _registry.getNftId(msg.sender);
285
+
286
+ _verifyObjectInfo(info, BUNDLE());
287
+
288
+ nftId = _registry.register(info);
289
+ }
290
+
291
+
292
+ // From IService
293
+ function getName() public pure override(IService, ServiceBase) returns(string memory) {
294
+ return NAME;
295
+ }
296
+ //function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
297
+ // return SERVICE_TYPE;
298
+ //}
299
+
300
+
301
+ // from Versionable
302
+
303
+ /// @dev top level initializer
304
+ // 1) registry is non upgradeable -> don't need a proxy and uses constructor !
305
+ // 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
306
+ // 3) deploy registry -> pass registry service address as constructor argument
307
+ // registry is getting instantiated and locked to registry service address forever
308
+ function _initialize(
309
+ address owner,
310
+ bytes memory data
311
+ )
312
+ internal
313
+ initializer
314
+ virtual override
315
+ {
316
+ (
317
+ address initialAuthority,
318
+ bytes memory registryByteCodeWithInitCode
319
+ ) = abi.decode(data, (address, bytes));
320
+
321
+ __AccessManaged_init(initialAuthority);
322
+
323
+ bytes memory encodedConstructorArguments = abi.encode(
324
+ owner,
325
+ getMajorVersion());
326
+
327
+ bytes memory registryCreationCode = ContractDeployerLib.getCreationCode(
328
+ registryByteCodeWithInitCode,
329
+ encodedConstructorArguments);
330
+
331
+ IRegistry registry = IRegistry(ContractDeployerLib.deploy(
332
+ registryCreationCode,
333
+ REGISTRY_CREATION_CODE_HASH));
334
+
335
+ NftId registryNftId = registry.getNftId(address(registry));
336
+
337
+ _initializeServiceBase(address(registry), registryNftId, owner);
338
+
339
+ // TODO why do registry service proxy need to keep its nftId??? -> no registryServiceNftId checks in implementation
340
+ // if they are -> use registry address to obtain owner of registry service nft (works the same with any registerable and(or) implementation)
341
+ linkToRegisteredNftId();
342
+ _registerInterface(type(IRegistryService).interfaceId);
343
+ }
344
+
345
+ // parent check done in registry because of approve()
346
+ function _getAndVerifyContractInfo(
347
+ IRegisterable registerable,
348
+ ObjectType expectedType, // assume can be valid only
349
+ address expectedOwner // assume can be 0
350
+ )
351
+ internal
352
+ view
353
+ returns(
354
+ IRegistry.ObjectInfo memory info,
355
+ bytes memory data
356
+ )
357
+ {
358
+ (
359
+ info,
360
+ data
361
+ ) = registerable.getInitialInfo();
362
+ info.objectAddress = address(registerable);
363
+
364
+ if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
365
+ revert UnexpectedRegisterableType(expectedType, info.objectType);
366
+ }
367
+
368
+ address owner = info.initialOwner;
369
+
370
+ if(owner != expectedOwner) { // registerable owner protection
371
+ revert NotRegisterableOwner(expectedOwner);
372
+ }
373
+
374
+ if(owner == address(registerable)) {
375
+ revert SelfRegistration();
376
+ }
377
+
378
+ if(owner == address(0)) {
379
+ revert RegisterableOwnerIsZero();
380
+ }
381
+
382
+ if(getRegistry().isRegistered(owner)) {
383
+ revert RegisterableOwnerIsRegistered();
384
+ }
385
+
386
+ /*NftId parentNftId = info.parentNftId;
387
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
388
+
389
+ if(parentInfo.objectType != parentType) { // parent registration + type
390
+ revert InvalidParent(parentNftId);
391
+ }*/
392
+
393
+ return(
394
+ info,
395
+ data
396
+ );
397
+ }
398
+
399
+ // parent checks done in registry because of approve()
400
+ function _verifyObjectInfo(
401
+ IRegistry.ObjectInfo memory info,
402
+ ObjectType objectType
403
+ )
404
+ internal
405
+ view
406
+ {
407
+ if(info.objectAddress > address(0)) {
408
+ revert InvalidAddress(info.objectAddress);
409
+ }
410
+
411
+ if(
412
+ getRegistry().isRegistered(info.initialOwner) ||
413
+ info.initialOwner == address(0)) {
414
+ // TODO non registered address can register object(e.g. POLICY()) and then transfer associated nft to registered contract
415
+ // what are motivations to do so?
416
+ // at least registered contract can not register objects by itself, SERVICE,
417
+ revert InvalidInitialOwner(info.initialOwner);
418
+ }
419
+
420
+ // can catch all 3 if check that initialOwner is not registered
421
+ /*if(info.initialOwner == msg.sender) {
422
+ revert InitialOwnerIsParent();
423
+ }
424
+
425
+ if(info.initialOwner == address(this)) {
426
+ revert InitialOwnerIsService();
427
+ }
428
+
429
+ if(info.initialOwner == address(getRegistry())) {
430
+ revert InitialOwnerIsRegistry();
431
+ }*/
432
+
433
+ /*NftId parentNftId = info.parentNftId;
434
+ IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
435
+
436
+ if(parentInfo.objectType != parentType) { // parent registration + type
437
+ revert InvalidParent(parentNftId);
438
+ }*/
439
+ }
440
+ }
@@ -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
+ }