@etherisc/gif-next 0.0.2-a6f9f86-582 → 0.0.2-a733491-751

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