@etherisc/gif-next 0.0.2-e1f23dc-329 → 0.0.2-e26c262-698

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 (379) hide show
  1. package/README.md +136 -2
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +832 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +931 -230
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → components/IComponent.sol/IComponent.json} +211 -172
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +743 -26
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +755 -50
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +582 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +817 -243
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +628 -190
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +91 -2
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1058 -366
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +252 -165
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +929 -1212
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +571 -177
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +126 -254
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +412 -310
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +302 -109
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +189 -177
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +69 -43
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +968 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1093 -0
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1229 -213
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +440 -79
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +556 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +630 -0
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IClaimService.sol/IClaimService.json} +146 -179
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +727 -160
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +540 -0
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +84 -304
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +39 -394
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1021 -0
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +689 -0
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +278 -380
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +298 -89
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +211 -528
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +292 -115
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +244 -133
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +158 -215
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +257 -235
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +202 -318
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +31 -183
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +127 -170
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +148 -227
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  172. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  173. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  175. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  177. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  179. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  181. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  183. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  186. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  194. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  195. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  196. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  198. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  200. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  202. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  204. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  208. package/contracts/components/Component.sol +251 -0
  209. package/contracts/components/Distribution.sol +200 -79
  210. package/contracts/components/IComponent.sol +74 -0
  211. package/contracts/components/IDistributionComponent.sol +44 -17
  212. package/contracts/components/IPoolComponent.sol +88 -37
  213. package/contracts/components/IProductComponent.sol +10 -5
  214. package/contracts/components/Pool.sol +215 -158
  215. package/contracts/components/Product.sol +125 -116
  216. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  217. package/contracts/instance/BundleManager.sol +127 -0
  218. package/contracts/instance/Cloneable.sol +51 -0
  219. package/contracts/instance/IInstance.sol +58 -14
  220. package/contracts/instance/IInstanceService.sol +47 -5
  221. package/contracts/instance/Instance.sol +144 -260
  222. package/contracts/instance/InstanceAccessManager.sol +410 -176
  223. package/contracts/instance/InstanceReader.sol +9 -34
  224. package/contracts/instance/InstanceService.sol +418 -121
  225. package/contracts/instance/InstanceServiceManager.sol +6 -9
  226. package/contracts/instance/ObjectManager.sol +82 -0
  227. package/contracts/instance/base/ComponentService.sol +134 -0
  228. package/contracts/instance/base/KeyValueStore.sol +5 -2
  229. package/contracts/instance/base/Lifecycle.sol +11 -2
  230. package/contracts/instance/module/IAccess.sol +36 -20
  231. package/contracts/instance/module/IBundle.sol +2 -1
  232. package/contracts/instance/module/IComponents.sol +35 -0
  233. package/contracts/instance/module/IDistribution.sol +2 -0
  234. package/contracts/instance/module/IPolicy.sol +30 -3
  235. package/contracts/instance/module/ISetup.sol +9 -20
  236. package/contracts/instance/service/ApplicationService.sol +350 -0
  237. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  238. package/contracts/instance/service/BundleService.sol +336 -0
  239. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  240. package/contracts/instance/service/ClaimService.sol +151 -0
  241. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  242. package/contracts/instance/service/DistributionService.sol +408 -29
  243. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  244. package/contracts/instance/service/IApplicationService.sol +82 -0
  245. package/contracts/instance/service/IBundleService.sol +62 -0
  246. package/contracts/instance/service/IClaimService.sol +61 -0
  247. package/contracts/instance/service/IDistributionService.sol +86 -0
  248. package/contracts/instance/service/IPolicyService.sol +72 -0
  249. package/contracts/instance/service/IPoolService.sol +20 -26
  250. package/contracts/instance/service/IProductService.sol +3 -70
  251. package/contracts/instance/service/PolicyService.sol +403 -0
  252. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  253. package/contracts/instance/service/PoolService.sol +150 -131
  254. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  255. package/contracts/instance/service/ProductService.sol +131 -454
  256. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  257. package/contracts/registry/ChainNft.sol +9 -1
  258. package/contracts/registry/IRegistry.sol +39 -19
  259. package/contracts/registry/IRegistryService.sol +30 -13
  260. package/contracts/registry/ITransferInterceptor.sol +1 -0
  261. package/contracts/registry/Registry.sol +243 -224
  262. package/contracts/registry/RegistryAccessManager.sol +216 -0
  263. package/contracts/registry/RegistryService.sol +96 -171
  264. package/contracts/registry/RegistryServiceManager.sol +21 -39
  265. package/contracts/registry/ReleaseManager.sol +322 -0
  266. package/contracts/registry/TokenRegistry.sol +22 -17
  267. package/contracts/shared/ERC165.sol +14 -12
  268. package/contracts/shared/INftOwnable.sol +11 -10
  269. package/contracts/shared/IPolicyHolder.sol +26 -0
  270. package/contracts/shared/IRegisterable.sol +4 -6
  271. package/contracts/shared/IRegistryLinked.sol +12 -0
  272. package/contracts/shared/IService.sol +4 -1
  273. package/contracts/shared/IVersionable.sol +4 -47
  274. package/contracts/shared/NftOwnable.sol +66 -80
  275. package/contracts/shared/PolicyHolder.sol +81 -0
  276. package/contracts/shared/ProxyManager.sol +100 -25
  277. package/contracts/shared/Registerable.sol +16 -32
  278. package/contracts/shared/RegistryLinked.sol +48 -0
  279. package/contracts/shared/Service.sol +25 -22
  280. package/contracts/shared/TokenHandler.sol +11 -5
  281. package/contracts/shared/Versionable.sol +4 -92
  282. package/contracts/test/TestRegisterable.sol +1 -1
  283. package/contracts/test/TestService.sol +4 -3
  284. package/contracts/types/Blocknumber.sol +1 -0
  285. package/contracts/types/ClaimId.sol +52 -0
  286. package/contracts/types/DistributorType.sol +2 -2
  287. package/contracts/types/Fee.sol +1 -0
  288. package/contracts/types/NftId.sol +8 -0
  289. package/contracts/types/NftIdSet.sol +26 -24
  290. package/contracts/types/ObjectType.sol +10 -5
  291. package/contracts/types/PayoutId.sol +54 -0
  292. package/contracts/types/Referral.sol +4 -0
  293. package/contracts/types/RoleId.sol +26 -19
  294. package/contracts/types/Seconds.sol +54 -0
  295. package/contracts/types/StateId.sol +1 -0
  296. package/contracts/types/Timestamp.sol +13 -13
  297. package/contracts/types/UFixed.sol +1 -0
  298. package/contracts/types/Version.sol +1 -0
  299. package/package.json +3 -3
  300. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  301. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
  302. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  306. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  310. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  312. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  314. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  316. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  318. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  320. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  322. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  324. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  326. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  329. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  331. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  333. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  335. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  337. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  339. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  341. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  343. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  344. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  345. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  346. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  347. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  348. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  349. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  350. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  351. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  352. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  353. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  354. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  355. package/contracts/components/BaseComponent.sol +0 -91
  356. package/contracts/components/IBaseComponent.sol +0 -25
  357. package/contracts/experiment/cloning/Cloner.sol +0 -47
  358. package/contracts/experiment/errors/Require.sol +0 -38
  359. package/contracts/experiment/errors/Revert.sol +0 -44
  360. package/contracts/experiment/inheritance/A.sol +0 -53
  361. package/contracts/experiment/inheritance/B.sol +0 -28
  362. package/contracts/experiment/inheritance/C.sol +0 -34
  363. package/contracts/experiment/inheritance/IA.sol +0 -13
  364. package/contracts/experiment/inheritance/IB.sol +0 -10
  365. package/contracts/experiment/inheritance/IC.sol +0 -12
  366. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  367. package/contracts/experiment/statemachine/ISM.sol +0 -25
  368. package/contracts/experiment/statemachine/SM.sol +0 -57
  369. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  370. package/contracts/experiment/types/TypeA.sol +0 -47
  371. package/contracts/experiment/types/TypeB.sol +0 -29
  372. package/contracts/instance/AccessManagedSimple.sol +0 -115
  373. package/contracts/instance/AccessManagerSimple.sol +0 -692
  374. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  375. package/contracts/instance/base/ComponentServiceBase.sol +0 -134
  376. package/contracts/instance/base/IInstanceBase.sol +0 -23
  377. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  378. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  379. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -1,183 +1,168 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../shared/IService.sol";
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+
6
+ import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
7
+ import {VersionPart} from "../types/Version.sol";
8
+ import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
6
9
 
7
10
  import {ChainNft} from "./ChainNft.sol";
8
11
  import {IRegistry} from "./IRegistry.sol";
9
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
10
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
11
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
12
- import {ITransferInterceptor} from "./ITransferInterceptor.sol";
13
-
14
- import {ERC165} from "../shared/ERC165.sol";
15
-
12
+ import {ReleaseManager} from "./ReleaseManager.sol";
16
13
 
17
14
  // IMPORTANT
18
15
  // Each NFT minted by registry is accosiated with:
19
16
  // 1) NFT owner
20
17
  // 2) registred contract OR object stored in registered (parent) contract
21
18
  // Four registration flows:
22
- // 1) non IRegisterable address by registryOwner (TOKEN)
23
- // 2) IRegisterable address by registryOwner (SERVICE)
24
- // 3) IRegisterable address by approved service (INSTANCE, COMPONENT)
25
- // 4) state object by approved service (POLICY, BUNDLE, STAKE)
19
+ // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
20
+ // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
21
+ // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
22
+ // 4) state object by regular service (POLICY, BUNDLE, STAKE)
26
23
 
27
24
  contract Registry is
28
- ERC165,
29
25
  IRegistry
30
26
  {
31
- uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
32
27
  address public constant NFT_LOCK_ADDRESS = address(0x1);
33
28
  uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
34
- uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
35
29
  string public constant EMPTY_URI = "";
36
30
 
37
- VersionPart internal _majorVersion;
31
+ mapping(NftId nftId => ObjectInfo info) private _info;
32
+ mapping(address object => NftId nftId) private _nftIdByAddress;
38
33
 
39
- mapping(NftId nftId => ObjectInfo info) internal _info;
40
- mapping(address object => NftId nftId) internal _nftIdByAddress;
34
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
41
35
 
42
- mapping(ObjectType objectType => mapping(
43
- ObjectType parentType => bool)) internal _isValidContractCombination;
36
+ mapping(ObjectType objectType => bool) private _coreTypes;
44
37
 
45
38
  mapping(ObjectType objectType => mapping(
46
- ObjectType parentType => bool)) internal _isValidObjectCombination;
39
+ ObjectType parentType => bool)) private _coreContractCombinations;
47
40
 
48
- mapping(NftId nftId => string name) internal _string;
49
- mapping(bytes32 serviceNameHash => mapping(
50
- VersionPart majorVersion => address service)) internal _service;
41
+ mapping(ObjectType objectType => mapping(
42
+ ObjectType parentType => bool)) private _coreObjectCombinations;
51
43
 
52
- NftId internal _registryNftId;
53
- NftId internal _serviceNftId; // set in stone upon registry creation
54
- ChainNft internal _chainNft;
44
+ NftId private _registryNftId;
45
+ ChainNft private _chainNft;
55
46
 
47
+ ReleaseManager private _releaseManager;
56
48
 
57
- modifier onlyOwner() {
58
- if(msg.sender != getOwner()) {
59
- revert NotOwner(msg.sender);
49
+ modifier onlyRegistryService() {
50
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
51
+ revert CallerNotRegistryService();
60
52
  }
61
53
  _;
62
54
  }
63
55
 
64
- modifier onlyRegistryService() {
65
- if(msg.sender != _info[_serviceNftId].objectAddress) {
66
- revert NotRegistryService();
56
+ modifier onlyReleaseManager() {
57
+ if(msg.sender != address(_releaseManager)) {
58
+ revert CallerNotReleaseManager();
67
59
  }
68
60
  _;
69
61
  }
70
62
 
71
- constructor(address registryOwner, VersionPart majorVersion)
63
+ constructor()
72
64
  {
73
- require(registryOwner > address(0), "Registry: registry owner is 0");
74
-
75
- // major version at constructor time
76
- _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
77
- emit LogInitialMajorVersionSet(_majorVersion);
65
+ _releaseManager = ReleaseManager(msg.sender);
78
66
 
79
67
  // deploy NFT
80
- _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
68
+ _chainNft = new ChainNft(address(this));
81
69
 
82
70
  // initial registry setup
83
71
  _registerProtocol();
84
- _registerRegistry(registryOwner);
85
- _registerRegistryService(registryOwner);
86
-
87
- // set object parent relations
88
- _setupValidObjectParentCombinations();
72
+ _registerRegistry();
89
73
 
90
- _registerInterface(type(IRegistry).interfaceId);
74
+ // set object types and object parent relations
75
+ _setupValidCoreTypesAndCombinations();
91
76
  }
92
77
 
93
- // from IRegistry
94
-
95
- /// @dev latest GIF release version
96
- function setMajorVersion(VersionPart newMajorVersion)
78
+ function registerService(
79
+ ObjectInfo memory info,
80
+ VersionPart version,
81
+ ObjectType domain
82
+ )
97
83
  external
98
- onlyOwner
84
+ onlyReleaseManager
85
+ returns(NftId nftId)
99
86
  {
100
- // ensure major version increments is one
101
- uint256 oldMax = _majorVersion.toInt();
102
- uint256 newMax = newMajorVersion.toInt();
103
- if (newMax <= oldMax || newMax - oldMax != 1) {
104
- revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
87
+ /* must be guaranteed by release manager
88
+ if(info.objectType != SERVICE()) {
89
+ revert();
90
+ }
91
+ if(info.parentType != REGISTRY()) {
92
+ revert();
93
+ }
94
+ info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
95
+ */
96
+
97
+ if(_service[version][domain] > address(0)) {
98
+ revert ServiceAlreadyRegistered(info.objectAddress);
105
99
  }
106
100
 
107
- _majorVersion = newMajorVersion;
108
- emit LogMajorVersionSet(_majorVersion);
101
+ _service[version][domain] = info.objectAddress; // nftId;
102
+
103
+ nftId = _register(info);
104
+
105
+ emit LogServiceRegistration(version, domain);
109
106
  }
110
107
 
111
- /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
112
- // TODO service registration means its approval for some type?
113
- // TODO registration of precompile addresses
114
108
  function register(ObjectInfo memory info)
115
109
  external
116
110
  onlyRegistryService
117
111
  returns(NftId nftId)
118
112
  {
119
113
  ObjectType objectType = info.objectType;
120
- NftId parentNftId = info.parentNftId;
121
- ObjectInfo memory parentInfo = _info[parentNftId];
122
- ObjectType parentType = parentInfo.objectType; // see function header
123
- address parentAddress = parentInfo.objectAddress;
114
+ ObjectType parentType = _info[info.parentNftId].objectType;
124
115
 
125
- // parent is contract -> need to check? -> check before minting
126
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
127
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
128
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
129
- if(parentAddress == address(0)) {
130
- revert ZeroParentAddress();
116
+ // TODO do not need it here -> SERVICE is no longer part of _coreContractCombinations
117
+ // no service registrations
118
+ if(objectType == SERVICE()) {
119
+ revert ServiceRegistration();
131
120
  }
132
121
 
133
- address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
134
-
135
- // TODO does external call
136
- uint256 mintedTokenId = _chainNft.mint(
137
- info.initialOwner,
138
- interceptor,
139
- EMPTY_URI);
140
- nftId = toNftId(mintedTokenId);
141
-
142
- // TODO move nftId out of info struct
143
- // getters by nftId -> return struct without nftId
144
- // getters by address -> return nftId AND struct
145
- info.nftId = nftId;
146
- _info[nftId] = info;
147
-
148
- if(info.objectAddress > address(0))
122
+ // only valid core types combinations
123
+ if(info.objectAddress == address(0))
149
124
  {
150
- // TODO if need to add types latter -> at least call this check from registry service
151
- // parent is registered + object-parent types are valid
152
- if(_isValidContractCombination[objectType][parentType] == false) {
125
+ if(_coreObjectCombinations[objectType][parentType] == false) {
153
126
  revert InvalidTypesCombination(objectType, parentType);
154
127
  }
155
-
156
- address contractAddress = info.objectAddress;
157
-
158
- if(_nftIdByAddress[contractAddress].gtz()) {
159
- revert ContractAlreadyRegistered(contractAddress);
160
- }
161
-
162
- _nftIdByAddress[contractAddress] = nftId;
163
-
164
- // special case
165
- if(objectType == SERVICE()) {
166
- _registerService(info);
167
- }
168
128
  }
169
129
  else
170
130
  {
171
- if(_isValidObjectCombination[objectType][parentType] == false) {
131
+ if(_coreContractCombinations[objectType][parentType] == false) {
172
132
  revert InvalidTypesCombination(objectType, parentType);
173
133
  }
174
134
  }
175
135
 
176
- emit LogRegistration(info);
136
+ nftId = _register(info);
177
137
  }
138
+
139
+ function registerWithCustomType(ObjectInfo memory info)
140
+ external
141
+ onlyRegistryService
142
+ returns(NftId nftId)
143
+ {
144
+ ObjectType objectType = info.objectType;
145
+ ObjectType parentType = _info[info.parentNftId].objectType;
146
+
147
+ if(_coreTypes[objectType]) {
148
+ revert CoreTypeRegistration();
149
+ }
150
+
151
+ if(
152
+ parentType == PROTOCOL() ||
153
+ parentType == REGISTRY() ||
154
+ parentType == SERVICE()
155
+ ) {
156
+ revert InvalidTypesCombination(objectType, parentType);
157
+ }
158
+
159
+ _register(info);
160
+ }
161
+
162
+
178
163
  /// @dev earliest GIF major version
179
- function getMajorVersionMin() external view returns (VersionPart) {
180
- return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
164
+ function getInitialVersion() external view returns (VersionPart) {
165
+ return _releaseManager.getInitialVersion();
181
166
  }
182
167
 
183
168
  // TODO make distinction between active an not yet active version
@@ -187,28 +172,36 @@ contract Registry is
187
172
  // in this case we might want to have a period where the latest version is
188
173
  // in the process of being set up while the latest active version is 1 major release smaller
189
174
  /// @dev latest GIF major version (might not yet be active)
190
- function getMajorVersionMax() external view returns (VersionPart) {
191
- return _majorVersion;
175
+ function getNextVersion() external view returns (VersionPart) {
176
+ return _releaseManager.getNextVersion();
192
177
  }
193
178
 
194
179
  /// @dev latest active GIF release version
195
- function getMajorVersion() external view returns (VersionPart) {
196
- return _majorVersion;
180
+ function getLatestVersion() external view returns (VersionPart) {
181
+ return _releaseManager.getLatestVersion();
197
182
  }
198
183
 
199
- function getObjectCount() external view override returns (uint256) {
184
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
185
+ return _releaseManager.getReleaseInfo(version);
186
+ }
187
+
188
+ function getObjectCount() external view returns (uint256) {
200
189
  return _chainNft.totalSupply();
201
190
  }
202
191
 
192
+ function getReleaseManagerAddress() external view returns (address) {
193
+ return address(_releaseManager);
194
+ }
195
+
203
196
  function getNftId() external view returns (NftId nftId) {
204
197
  return _registryNftId;
205
198
  }
206
199
 
207
- function getNftId(address object) external view override returns (NftId id) {
200
+ function getNftId(address object) external view returns (NftId id) {
208
201
  return _nftIdByAddress[object];
209
202
  }
210
203
 
211
- function ownerOf(NftId nftId) public view override returns (address) {
204
+ function ownerOf(NftId nftId) public view returns (address) {
212
205
  return _chainNft.ownerOf(nftId.toInt());
213
206
  }
214
207
 
@@ -216,72 +209,114 @@ contract Registry is
216
209
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
217
210
  }
218
211
 
219
- function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
212
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
220
213
  return _info[nftId];
221
214
  }
222
215
 
223
- function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
216
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
224
217
  return _info[_nftIdByAddress[object]];
225
218
  }
226
219
 
227
- function isRegistered(NftId nftId) public view override returns (bool) {
220
+ function isRegistered(NftId nftId) public view returns (bool) {
228
221
  return _info[nftId].objectType.gtz();
229
222
  }
230
223
 
231
- function isRegistered(address object) external view override returns (bool) {
224
+ function isRegistered(address object) external view returns (bool) {
232
225
  return _nftIdByAddress[object].gtz();
233
226
  }
234
227
 
235
- function isRegisteredService(address object) external view override returns (bool) {
236
- return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
228
+ function isRegisteredService(address object) external view returns (bool) {
229
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
237
230
  }
238
231
 
239
- function getServiceName(NftId nftId) external view returns (string memory) {
240
- return _string[nftId];
232
+ function isRegisteredComponent(address object) external view returns (bool) {
233
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
234
+ return _info[objectParentNftId].objectType == INSTANCE();
235
+ }
236
+
237
+ function isValidRelease(VersionPart version) external view returns (bool)
238
+ {
239
+ return _releaseManager.isValidRelease(version);
241
240
  }
242
241
 
243
- // special case to retrive a gif service
244
242
  function getServiceAddress(
245
- string memory serviceName,
246
- VersionPart majorVersion
247
- ) external view returns (address)
243
+ ObjectType serviceDomain,
244
+ VersionPart releaseVersion
245
+ ) external view returns (address service)
248
246
  {
249
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
250
- return _service[serviceNameHash][majorVersion];
247
+ // TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
248
+ //if(_releaseManager.isValidRelease(releaseVersion)) {
249
+ service = _service[releaseVersion][serviceDomain];
250
+ //}
251
251
  }
252
252
 
253
- function getChainNft() external view override returns (ChainNft) {
254
- return _chainNft;
253
+ function getChainNftAddress() external view override returns (address) {
254
+ return address(_chainNft);
255
255
  }
256
256
 
257
257
  function getOwner() public view returns (address owner) {
258
258
  return ownerOf(address(this));
259
259
  }
260
260
 
261
+ // IERC165
262
+
263
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
264
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
265
+ return true;
266
+ }
267
+
268
+ return false;
269
+ }
270
+
261
271
  // Internals
262
272
 
263
- function _registerService(ObjectInfo memory info)
273
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
274
+ // TODO registration of precompile addresses
275
+ function _register(ObjectInfo memory info)
264
276
  internal
277
+ returns(NftId nftId)
265
278
  {
266
- (
267
- string memory serviceName,
268
- VersionPart majorVersion
269
- ) = abi.decode(info.data, (string, VersionPart));
270
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
271
-
272
- // ensures consistency of service.getVersion() and majorVersion here
273
- if(majorVersion != _majorVersion) {
274
- revert InvalidServiceVersion(majorVersion);
279
+ ObjectType objectType = info.objectType;
280
+ NftId parentNftId = info.parentNftId;
281
+ ObjectInfo memory parentInfo = _info[parentNftId];
282
+ ObjectType parentType = parentInfo.objectType; // see function header
283
+ address parentAddress = parentInfo.objectAddress;
284
+
285
+ // parent is contract -> need to check? -> check before minting
286
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
287
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
288
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
289
+ if(parentAddress == address(0)) {
290
+ revert ZeroParentAddress();
275
291
  }
276
-
277
- if(_service[serviceNameHash][majorVersion] != address(0)) {
278
- revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
292
+
293
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
294
+ uint256 tokenId = _chainNft.getNextTokenId();
295
+ nftId = toNftId(tokenId);
296
+
297
+ info.nftId = nftId;
298
+ _info[nftId] = info;
299
+
300
+ if(info.objectAddress > address(0))
301
+ {
302
+ address contractAddress = info.objectAddress;
303
+
304
+ if(_nftIdByAddress[contractAddress].gtz()) {
305
+ revert ContractAlreadyRegistered(contractAddress);
306
+ }
307
+
308
+ _nftIdByAddress[contractAddress] = nftId;
279
309
  }
280
310
 
281
- _string[info.nftId] = serviceName;
282
- _service[serviceNameHash][majorVersion] = info.objectAddress;
311
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
283
312
 
284
- emit LogServiceNameRegistration(serviceName, majorVersion);
313
+ // calls nft receiver(1) and interceptor(2)
314
+ uint256 mintedTokenId = _chainNft.mint(
315
+ info.initialOwner,
316
+ interceptor,
317
+ EMPTY_URI);
318
+ assert(mintedTokenId == tokenId);
319
+
285
320
  }
286
321
 
287
322
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
@@ -314,32 +349,31 @@ contract Registry is
314
349
 
315
350
  /// @dev protocol registration used to anchor the dip ecosystem relations
316
351
  function _registerProtocol()
317
- internal
352
+ private
318
353
  {
319
354
  uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
320
355
  NftId protocolNftId = toNftId(protocolId);
321
356
 
322
- _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
357
+ _info[protocolNftId] = ObjectInfo({
358
+ nftId: protocolNftId,
359
+ parentNftId: zeroNftId(),
360
+ objectType: PROTOCOL(),
361
+ isInterceptor: false,
362
+ objectAddress: address(0),
363
+ initialOwner: NFT_LOCK_ADDRESS,
364
+ data: ""
365
+ });
323
366
 
324
- _info[protocolNftId] = ObjectInfo(
325
- protocolNftId,
326
- zeroNftId(), // parent
327
- PROTOCOL(),
328
- false, // isInterceptor
329
- address(0), // objectAddress
330
- NFT_LOCK_ADDRESS,// initialOwner
331
- ""
332
- );
367
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
333
368
  }
334
369
 
335
370
  /// @dev registry registration
336
371
  /// might also register the global registry when not on mainnet
337
- function _registerRegistry(address registryOwner)
338
- internal
372
+ function _registerRegistry()
373
+ private
339
374
  {
340
375
  uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
341
376
  NftId registryNftId = toNftId(registryId);
342
-
343
377
  NftId parentNftId;
344
378
 
345
379
  if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
@@ -352,68 +386,39 @@ contract Registry is
352
386
  parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
353
387
  }
354
388
 
355
- _chainNft.mint(registryOwner, registryId);
356
-
357
- _info[registryNftId] = ObjectInfo(
358
- registryNftId,
359
- parentNftId,
360
- REGISTRY(),
361
- false, // isInterceptor
362
- address(this),
363
- registryOwner,
364
- ""
365
- );
389
+ _info[registryNftId] = ObjectInfo({
390
+ nftId: registryNftId,
391
+ parentNftId: parentNftId,
392
+ objectType: REGISTRY(),
393
+ isInterceptor: false,
394
+ objectAddress: address(this),
395
+ initialOwner: NFT_LOCK_ADDRESS,
396
+ data: ""
397
+ });
366
398
  _nftIdByAddress[address(this)] = registryNftId;
367
399
  _registryNftId = registryNftId;
368
- }
369
400
 
401
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
402
+ }
370
403
 
371
404
  /// @dev global registry registration for non mainnet registries
372
405
  function _registerGlobalRegistry()
373
- internal
406
+ private
374
407
  {
375
408
  uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
376
-
377
- _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
378
-
379
409
  NftId globalRegistryNftId = toNftId(globalRegistryId);
380
410
 
381
- _info[globalRegistryNftId] = ObjectInfo(
382
- globalRegistryNftId,
383
- toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
384
- REGISTRY(),
385
- false, // isInterceptor
386
- address(0), // objectAddress
387
- NFT_LOCK_ADDRESS, // initialOwner
388
- "" // data
389
- );
390
- }
391
-
392
- function _registerRegistryService(address registryOwner)
393
- internal
394
- {
395
- uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
396
- NftId serviceNftId = toNftId(serviceId);
397
-
398
- _chainNft.mint(registryOwner, serviceId);
399
-
400
- _info[serviceNftId] = ObjectInfo(
401
- serviceNftId,
402
- _registryNftId,
403
- SERVICE(),
404
- false, // isInterceptor
405
- msg.sender, // service deploys registry
406
- registryOwner, // initialOwner,
407
- ""
408
- );
409
-
410
- _nftIdByAddress[msg.sender] = serviceNftId;
411
+ _info[globalRegistryNftId] = ObjectInfo({
412
+ nftId: globalRegistryNftId,
413
+ parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
414
+ objectType: REGISTRY(),
415
+ isInterceptor: false,
416
+ objectAddress: address(0),
417
+ initialOwner: NFT_LOCK_ADDRESS,
418
+ data: ""
419
+ });
411
420
 
412
- string memory serviceName = "RegistryService";
413
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
414
- _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
415
- _string[serviceNftId] = serviceName;
416
- _serviceNftId = serviceNftId;
421
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
417
422
  }
418
423
 
419
424
  /// @dev defines which object - parent types relations are allowed to register
@@ -422,27 +427,41 @@ contract Registry is
422
427
  // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
423
428
  // 3) DO NOT use REGISTRY as object type
424
429
  // 2) DO NOT use PROTOCOL and "zeroObjectType"
425
- function _setupValidObjectParentCombinations()
426
- internal
430
+ function _setupValidCoreTypesAndCombinations()
431
+ private
427
432
  {
433
+ _coreTypes[REGISTRY()] = true;
434
+ _coreTypes[SERVICE()] = true;
435
+ _coreTypes[TOKEN()] = true;
436
+ _coreTypes[INSTANCE()] = true;
437
+ _coreTypes[PRODUCT()] = true;
438
+ _coreTypes[POOL()] = true;
439
+ _coreTypes[DISTRIBUTION()] = true;
440
+ _coreTypes[POLICY()] = true;
441
+ _coreTypes[BUNDLE()] = true;
442
+ _coreTypes[STAKE()] = true;
443
+
428
444
  // registry as parent, ONLY registry owner
429
- _isValidContractCombination[TOKEN()][REGISTRY()] = true;
430
- _isValidContractCombination[SERVICE()][REGISTRY()] = true;
445
+ //_coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
446
+ _coreContractCombinations[TOKEN()][REGISTRY()] = true;
447
+ //_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
431
448
 
432
449
  // registry as parent, ONLY approved
433
- _isValidContractCombination[INSTANCE()][REGISTRY()] = true;
450
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
434
451
 
435
452
  // instance as parent, ONLY approved
436
- _isValidContractCombination[PRODUCT()][INSTANCE()] = true;
437
- _isValidContractCombination[DISTRIBUTION()][INSTANCE()] = true;
438
- _isValidContractCombination[ORACLE()][INSTANCE()] = true;
439
- _isValidContractCombination[POOL()][INSTANCE()] = true;
453
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
454
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
455
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
456
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
457
+
458
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
440
459
 
441
460
  // product as parent, ONLY approved
442
- _isValidObjectCombination[POLICY()][PRODUCT()] = true;
461
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
443
462
 
444
463
  // pool as parent, ONLY approved
445
- _isValidObjectCombination[BUNDLE()][POOL()] = true;
446
- _isValidObjectCombination[STAKE()][POOL()] = true;
464
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
465
+ _coreObjectCombinations[STAKE()][POOL()] = true;
447
466
  }
448
467
  }