@etherisc/gif-next 0.0.2-ec436bf-674 → 0.0.2-ed3b1b0-046

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