@etherisc/gif-next 0.0.2-716a895-659 → 0.0.2-7177fd8-761

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 (730) hide show
  1. package/README.md +224 -17
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1253 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +358 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/{instance/module/access → authorization}/IAccess.sol/IAccess.json +1 -1
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1032 -0
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +258 -0
  14. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +290 -0
  16. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +148 -0
  18. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +390 -0
  20. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +190 -0
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1518 -0
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +410 -0
  26. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  27. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1196 -0
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  29. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1557 -0
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +854 -0
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  33. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +943 -0
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  35. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +914 -0
  36. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  37. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +261 -1858
  40. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +757 -0
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +467 -2246
  44. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  45. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1626 -0
  46. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  47. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1693 -0
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1160 -0
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +734 -0
  54. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  55. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +3469 -0
  56. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  58. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +137 -0
  60. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  61. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  62. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
  64. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +129 -0
  68. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  69. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  70. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  71. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/IComponents.sol/IComponents.json} +2 -2
  72. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  73. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  74. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  75. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  76. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  77. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  78. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  79. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  80. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  81. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1155 -0
  82. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  83. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
  84. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  85. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  86. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  87. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +802 -0
  88. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  89. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +675 -0
  90. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  91. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +1055 -0
  92. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  93. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1034 -0
  94. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +730 -0
  96. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  97. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1432 -0
  98. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  99. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
  100. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  101. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1521 -0
  102. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +830 -0
  104. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  105. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +907 -0
  106. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  107. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +946 -0
  108. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  109. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1182 -0
  110. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  111. package/artifacts/contracts/pool/Pool.sol/Pool.json +1218 -0
  112. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  113. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1644 -0
  114. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  115. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +770 -0
  116. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  117. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +852 -0
  118. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  119. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +722 -0
  120. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  121. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1280 -0
  122. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  123. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
  124. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  125. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  126. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  127. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +834 -0
  128. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  129. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → product/IApplicationService.sol/IApplicationService.json} +242 -191
  130. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  131. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +788 -0
  132. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  133. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +800 -0
  134. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  135. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IPricingService.sol/IPricingService.json} +266 -278
  136. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  137. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +985 -0
  138. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  139. package/artifacts/contracts/{instance/base/IService.sol/IService.json → product/IProductService.sol/IProductService.json} +145 -166
  140. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  141. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1355 -0
  142. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  143. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +806 -0
  144. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  145. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1017 -0
  146. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  147. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +786 -0
  148. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  149. package/artifacts/contracts/product/Product.sol/Product.json +1238 -0
  150. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  151. package/artifacts/contracts/product/ProductService.sol/ProductService.json +708 -0
  152. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  153. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +702 -0
  154. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  155. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +60 -2
  156. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  157. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +525 -59
  158. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  159. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +346 -278
  160. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  161. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  162. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  163. package/artifacts/contracts/registry/Registry.sol/Registry.json +830 -285
  164. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  165. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1746 -0
  166. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  167. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +532 -325
  168. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  169. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +355 -124
  170. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  171. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
  172. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  173. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
  174. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  175. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +214 -0
  176. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  177. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +661 -0
  178. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  179. package/artifacts/contracts/shared/Component.sol/Component.json +858 -0
  180. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  181. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1751 -0
  182. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  183. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +824 -0
  184. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  185. package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/ComponentVerifyingService.sol/ComponentVerifyingService.json} +210 -215
  186. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  187. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/IComponent.sol/IComponent.json} +322 -159
  188. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  189. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1033 -0
  190. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  191. package/artifacts/contracts/{instance/service/IProductService.sol/IProductService.json → shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json} +362 -376
  192. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  193. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +474 -0
  194. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  195. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +1 -6
  196. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  197. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +34 -30
  198. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  199. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +207 -0
  200. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  201. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +15 -35
  202. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  203. package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
  204. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  205. package/artifacts/contracts/{components/BaseComponent.sol/BaseComponent.json → shared/IService.sol/IService.json} +112 -67
  206. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +4 -0
  207. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +39 -0
  208. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  209. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +73 -0
  210. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  211. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +977 -0
  212. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  213. package/artifacts/contracts/{instance/base/IKeyValueStore.sol/IKeyValueStore.json → shared/KeyValueStore.sol/KeyValueStore.json} +102 -165
  214. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  215. package/artifacts/contracts/{experiment/statemachine/ISM.sol/ISM.json → shared/Lifecycle.sol/Lifecycle.json} +54 -45
  216. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  217. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  218. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  219. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +115 -29
  220. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  221. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +320 -0
  222. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  223. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +132 -53
  224. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  225. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
  226. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  227. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → shared/Service.sol/Service.json} +198 -172
  228. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  229. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +197 -0
  230. package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.dbg.json +4 -0
  231. package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.json +42 -0
  232. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  233. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1438 -0
  234. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  235. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +1035 -0
  236. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  237. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +470 -0
  238. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  239. package/artifacts/contracts/staking/Staking.sol/Staking.json +1991 -0
  240. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  241. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
  242. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  243. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +773 -0
  244. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  245. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +592 -0
  246. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  247. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +1343 -0
  248. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  249. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +718 -0
  250. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  251. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2242 -0
  252. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  253. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +576 -0
  254. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  255. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  256. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  257. package/artifacts/contracts/type/Amount.sol/AmountLib.json +374 -0
  258. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  259. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +225 -0
  260. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  261. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  262. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  263. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  264. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  265. package/artifacts/contracts/type/Fee.sol/FeeLib.json +317 -0
  266. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  267. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  268. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  269. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +209 -0
  270. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  271. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  272. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  273. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +239 -0
  274. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  275. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  276. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  277. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  278. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  279. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  280. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  281. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +86 -0
  282. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  283. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +369 -0
  284. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  285. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +222 -0
  286. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  287. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  288. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  289. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  290. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  291. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  292. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  293. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  294. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  295. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +312 -0
  296. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  297. package/artifacts/contracts/type/UFixed.sol/MathLib.json +16 -0
  298. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  299. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +535 -0
  300. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  301. package/artifacts/contracts/type/Version.sol/VersionLib.json +177 -0
  302. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  303. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +68 -0
  304. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  305. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +55 -0
  306. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  307. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +617 -0
  308. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  309. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  310. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  311. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +78 -0
  312. package/contracts/authorization/AccessAdmin.sol +591 -0
  313. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  314. package/contracts/authorization/Authorization.sol +218 -0
  315. package/contracts/authorization/IAccess.sol +48 -0
  316. package/contracts/authorization/IAccessAdmin.sol +136 -0
  317. package/contracts/authorization/IAuthorization.sol +54 -0
  318. package/contracts/authorization/IModuleAuthorization.sol +21 -0
  319. package/contracts/authorization/IServiceAuthorization.sol +38 -0
  320. package/contracts/authorization/ModuleAuthorization.sol +78 -0
  321. package/contracts/authorization/ServiceAuthorization.sol +90 -0
  322. package/contracts/distribution/BasicDistribution.sol +138 -0
  323. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  324. package/contracts/distribution/Distribution.sol +295 -0
  325. package/contracts/distribution/DistributionService.sol +323 -0
  326. package/contracts/distribution/DistributionServiceManager.sol +39 -0
  327. package/contracts/distribution/IDistributionComponent.sol +52 -0
  328. package/contracts/distribution/IDistributionService.sol +95 -0
  329. package/contracts/instance/BundleSet.sol +126 -0
  330. package/contracts/instance/IInstance.sol +78 -46
  331. package/contracts/instance/IInstanceService.sol +92 -0
  332. package/contracts/instance/Instance.sol +239 -72
  333. package/contracts/instance/InstanceAdmin.sol +266 -0
  334. package/contracts/instance/InstanceAuthorizationV3.sol +204 -0
  335. package/contracts/instance/InstanceReader.sol +408 -0
  336. package/contracts/instance/InstanceService.sol +467 -0
  337. package/contracts/instance/InstanceServiceManager.sol +40 -0
  338. package/contracts/instance/InstanceStore.sol +277 -0
  339. package/contracts/instance/base/BalanceStore.sol +123 -0
  340. package/contracts/instance/base/Cloneable.sol +28 -0
  341. package/contracts/instance/base/ObjectCounter.sol +21 -0
  342. package/contracts/instance/base/ObjectLifecycle.sol +105 -0
  343. package/contracts/instance/base/ObjectSet.sol +79 -0
  344. package/contracts/instance/module/IAccess.sol +46 -0
  345. package/contracts/instance/module/IBundle.sol +20 -0
  346. package/contracts/instance/module/IComponents.sol +46 -0
  347. package/contracts/instance/module/IDistribution.sol +41 -0
  348. package/contracts/instance/module/IPolicy.sol +84 -0
  349. package/contracts/instance/module/IRisk.sol +11 -0
  350. package/contracts/{test/Usdc.sol → mock/Dip.sol} +6 -6
  351. package/contracts/oracle/BasicOracle.sol +48 -0
  352. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  353. package/contracts/oracle/IOracle.sol +36 -0
  354. package/contracts/oracle/IOracleComponent.sol +33 -0
  355. package/contracts/oracle/IOracleService.sol +65 -0
  356. package/contracts/oracle/Oracle.sol +166 -0
  357. package/contracts/oracle/OracleService.sol +278 -0
  358. package/contracts/oracle/OracleServiceManager.sol +39 -0
  359. package/contracts/pool/BasicPool.sol +166 -0
  360. package/contracts/pool/BasicPoolAuthorization.sol +58 -0
  361. package/contracts/pool/BundleService.sol +437 -0
  362. package/contracts/pool/BundleServiceManager.sol +39 -0
  363. package/contracts/pool/IBundleService.sol +133 -0
  364. package/contracts/pool/IPoolComponent.sol +58 -0
  365. package/contracts/pool/IPoolService.sol +147 -0
  366. package/contracts/pool/Pool.sol +328 -0
  367. package/contracts/pool/PoolService.sol +524 -0
  368. package/contracts/pool/PoolServiceManager.sol +39 -0
  369. package/contracts/product/ApplicationService.sol +250 -0
  370. package/contracts/product/ApplicationServiceManager.sol +38 -0
  371. package/contracts/product/BasicProduct.sol +52 -0
  372. package/contracts/product/BasicProductAuthorization.sol +43 -0
  373. package/contracts/product/ClaimService.sol +417 -0
  374. package/contracts/product/ClaimServiceManager.sol +38 -0
  375. package/contracts/product/IApplicationService.sol +63 -0
  376. package/contracts/product/IClaimService.sol +100 -0
  377. package/contracts/product/IPolicyService.sol +84 -0
  378. package/contracts/product/IPricingService.sol +39 -0
  379. package/contracts/product/IProductComponent.sol +40 -0
  380. package/contracts/product/IProductService.sol +34 -0
  381. package/contracts/product/PolicyService.sol +600 -0
  382. package/contracts/product/PolicyServiceManager.sol +39 -0
  383. package/contracts/product/PricingService.sol +304 -0
  384. package/contracts/product/PricingServiceManager.sol +39 -0
  385. package/contracts/product/Product.sol +413 -0
  386. package/contracts/product/ProductService.sol +99 -0
  387. package/contracts/product/ProductServiceManager.sol +39 -0
  388. package/contracts/registry/ChainNft.sol +53 -23
  389. package/contracts/registry/IRegistry.sol +91 -14
  390. package/contracts/registry/IRegistryService.sol +54 -20
  391. package/contracts/registry/ITransferInterceptor.sol +1 -0
  392. package/contracts/registry/Registry.sol +403 -253
  393. package/contracts/registry/RegistryAdmin.sol +365 -0
  394. package/contracts/registry/RegistryService.sol +120 -309
  395. package/contracts/registry/RegistryServiceManager.sol +27 -37
  396. package/contracts/registry/ReleaseLifecycle.sol +27 -0
  397. package/contracts/registry/ReleaseRegistry.sol +485 -0
  398. package/contracts/registry/ServiceAuthorizationV3.sol +200 -0
  399. package/contracts/registry/TokenRegistry.sol +315 -0
  400. package/contracts/shared/Component.sol +281 -0
  401. package/contracts/shared/ComponentService.sol +640 -0
  402. package/contracts/shared/ComponentServiceManager.sol +35 -0
  403. package/contracts/shared/ComponentVerifyingService.sol +117 -0
  404. package/contracts/shared/IComponent.sol +71 -0
  405. package/contracts/shared/IComponentService.sol +108 -0
  406. package/contracts/shared/IInstanceLinkedComponent.sol +56 -0
  407. package/contracts/shared/IKeyValueStore.sol +54 -0
  408. package/contracts/{instance/base → shared}/ILifecycle.sol +4 -5
  409. package/contracts/shared/INftOwnable.sol +13 -12
  410. package/contracts/shared/IPolicyHolder.sol +45 -0
  411. package/contracts/shared/IRegisterable.sol +4 -6
  412. package/contracts/shared/IRegistryLinked.sol +11 -0
  413. package/contracts/shared/IService.sol +25 -0
  414. package/contracts/shared/InitializableCustom.sol +177 -0
  415. package/contracts/shared/InitializableERC165.sol +27 -0
  416. package/contracts/shared/InstanceLinkedComponent.sol +172 -0
  417. package/contracts/shared/KeyValueStore.sol +131 -0
  418. package/contracts/shared/Lifecycle.sol +77 -0
  419. package/contracts/shared/NftIdSet.sol +65 -0
  420. package/contracts/shared/NftOwnable.sol +60 -89
  421. package/contracts/shared/PolicyHolder.sol +99 -0
  422. package/contracts/shared/Registerable.sol +26 -40
  423. package/contracts/shared/RegistryLinked.sol +43 -0
  424. package/contracts/shared/Service.sol +82 -0
  425. package/contracts/shared/TokenHandler.sol +62 -0
  426. package/contracts/shared/TokenTransferLib.sol +60 -0
  427. package/contracts/staking/IStaking.sol +167 -0
  428. package/contracts/staking/IStakingService.sol +160 -0
  429. package/contracts/staking/StakeManagerLib.sol +231 -0
  430. package/contracts/staking/Staking.sol +516 -0
  431. package/contracts/staking/StakingLifecycle.sol +23 -0
  432. package/contracts/staking/StakingManager.sol +50 -0
  433. package/contracts/staking/StakingReader.sol +183 -0
  434. package/contracts/staking/StakingService.sol +407 -0
  435. package/contracts/staking/StakingServiceManager.sol +44 -0
  436. package/contracts/staking/StakingStore.sol +605 -0
  437. package/contracts/staking/TargetManagerLib.sol +207 -0
  438. package/contracts/{types → type}/AddressSet.sol +1 -1
  439. package/contracts/type/Amount.sol +135 -0
  440. package/contracts/{types → type}/Blocknumber.sol +27 -3
  441. package/contracts/type/ClaimId.sol +75 -0
  442. package/contracts/type/DistributorType.sol +55 -0
  443. package/contracts/type/Fee.sol +66 -0
  444. package/contracts/{types → type}/Key32.sol +8 -3
  445. package/contracts/{types → type}/NftId.sol +21 -15
  446. package/contracts/type/NftIdSet.sol +62 -0
  447. package/contracts/type/ObjectType.sol +271 -0
  448. package/contracts/type/PayoutId.sol +82 -0
  449. package/contracts/type/Referral.sol +90 -0
  450. package/contracts/type/RequestId.sol +75 -0
  451. package/contracts/{types → type}/RiskId.sol +1 -1
  452. package/contracts/type/RoleId.sol +174 -0
  453. package/contracts/type/Seconds.sol +93 -0
  454. package/contracts/type/Selector.sol +102 -0
  455. package/contracts/{types → type}/StateId.sol +39 -5
  456. package/contracts/type/String.sol +53 -0
  457. package/contracts/{types → type}/Timestamp.sol +38 -15
  458. package/contracts/type/UFixed.sol +351 -0
  459. package/contracts/{types → type}/Version.sol +8 -2
  460. package/contracts/{shared → upgradeability}/IVersionable.sol +5 -48
  461. package/contracts/upgradeability/ProxyManager.sol +198 -0
  462. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  463. package/contracts/upgradeability/Versionable.sol +59 -0
  464. package/package.json +11 -7
  465. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  466. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  467. package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -557
  468. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  469. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -254
  470. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  471. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -177
  472. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  473. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -308
  474. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  475. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -207
  476. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  477. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -716
  478. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  479. package/artifacts/contracts/components/Product.sol/Product.json +0 -614
  480. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  481. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  482. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  483. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  484. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  485. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  486. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  487. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  488. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  489. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  490. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  491. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  492. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  493. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  494. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  495. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  496. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  497. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  498. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  499. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  500. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  501. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  502. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  503. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  504. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  505. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  506. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  507. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  508. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  509. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  510. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  511. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  512. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  513. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  514. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  515. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  516. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  517. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  518. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  519. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  520. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  521. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  522. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -710
  523. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  524. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -169
  525. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  526. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  527. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  528. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  529. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  530. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  531. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  532. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  533. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  534. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  535. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  536. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  537. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  538. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
  539. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  540. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  541. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  542. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
  543. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  544. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  545. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  546. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  547. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  548. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  549. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  550. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -271
  551. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  552. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
  553. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  554. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  555. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  556. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  557. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  558. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  559. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  560. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  561. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  562. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  563. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  564. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  565. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +0 -10
  566. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  567. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  568. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  569. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  570. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  571. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  572. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  573. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  574. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  575. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -630
  576. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  577. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  578. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +0 -446
  579. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  580. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  581. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  582. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -753
  583. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  584. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -1073
  585. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  586. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
  587. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  588. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  589. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  590. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -35
  591. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  592. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -205
  593. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  594. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -349
  595. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  596. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  597. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  598. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -228
  599. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  600. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -557
  601. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  602. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  603. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  604. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -716
  605. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  606. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -744
  607. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  608. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -305
  609. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  610. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  611. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  612. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -584
  613. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  614. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  615. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  616. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  617. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  618. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -270
  619. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  620. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  621. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  622. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +0 -10
  623. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  624. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +0 -174
  625. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  626. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  627. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  628. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -262
  629. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  630. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +0 -111
  631. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  632. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  633. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  634. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +0 -10
  635. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  636. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +0 -92
  637. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  638. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  639. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  640. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +0 -86
  641. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  642. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +0 -30
  643. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  644. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  645. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +0 -236
  646. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  647. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -484
  648. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  649. package/artifacts/contracts/types/Version.sol/VersionLib.json +0 -177
  650. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  651. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +0 -30
  652. package/contracts/components/BaseComponent.sol +0 -79
  653. package/contracts/components/Distribution.sol +0 -155
  654. package/contracts/components/IBaseComponent.sol +0 -19
  655. package/contracts/components/IDistributionComponent.sol +0 -46
  656. package/contracts/components/IPoolComponent.sol +0 -64
  657. package/contracts/components/IProductComponent.sol +0 -37
  658. package/contracts/components/Pool.sol +0 -246
  659. package/contracts/components/Product.sol +0 -299
  660. package/contracts/experiment/errors/Require.sol +0 -38
  661. package/contracts/experiment/errors/Revert.sol +0 -44
  662. package/contracts/experiment/inheritance/A.sol +0 -53
  663. package/contracts/experiment/inheritance/B.sol +0 -28
  664. package/contracts/experiment/inheritance/C.sol +0 -34
  665. package/contracts/experiment/inheritance/IA.sol +0 -13
  666. package/contracts/experiment/inheritance/IB.sol +0 -10
  667. package/contracts/experiment/inheritance/IC.sol +0 -12
  668. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  669. package/contracts/experiment/statemachine/ISM.sol +0 -25
  670. package/contracts/experiment/statemachine/SM.sol +0 -57
  671. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  672. package/contracts/experiment/types/TypeA.sol +0 -47
  673. package/contracts/experiment/types/TypeB.sol +0 -29
  674. package/contracts/instance/IInstanceLinked.sol +0 -8
  675. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  676. package/contracts/instance/base/IInstanceBase.sol +0 -23
  677. package/contracts/instance/base/IKeyValueStore.sol +0 -50
  678. package/contracts/instance/base/IService.sol +0 -15
  679. package/contracts/instance/base/InstanceBase.sol +0 -89
  680. package/contracts/instance/base/KeyValueStore.sol +0 -161
  681. package/contracts/instance/base/Lifecycle.sol +0 -100
  682. package/contracts/instance/base/ModuleBase.sol +0 -57
  683. package/contracts/instance/base/ServiceBase.sol +0 -44
  684. package/contracts/instance/module/access/Access.sol +0 -149
  685. package/contracts/instance/module/access/IAccess.sol +0 -53
  686. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  687. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  688. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  689. package/contracts/instance/module/component/IComponent.sol +0 -28
  690. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  691. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  692. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  693. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  694. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  695. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  696. package/contracts/instance/module/risk/IRisk.sol +0 -26
  697. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  698. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  699. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  700. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  701. package/contracts/instance/service/ComponentOwnerService.sol +0 -312
  702. package/contracts/instance/service/DistributionService.sol +0 -54
  703. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  704. package/contracts/instance/service/IDistributionService.sol +0 -12
  705. package/contracts/instance/service/IPoolService.sol +0 -37
  706. package/contracts/instance/service/IProductService.sol +0 -107
  707. package/contracts/instance/service/PoolService.sol +0 -149
  708. package/contracts/instance/service/ProductService.sol +0 -510
  709. package/contracts/registry/IChainNft.sol +0 -22
  710. package/contracts/shared/ContractDeployerLib.sol +0 -72
  711. package/contracts/shared/ERC165.sol +0 -21
  712. package/contracts/shared/ProxyManager.sol +0 -94
  713. package/contracts/shared/Versionable.sol +0 -147
  714. package/contracts/test/TestDistribution.sol +0 -22
  715. package/contracts/test/TestFee.sol +0 -25
  716. package/contracts/test/TestPool.sol +0 -27
  717. package/contracts/test/TestProduct.sol +0 -74
  718. package/contracts/test/TestRegisterable.sol +0 -18
  719. package/contracts/test/TestRoleId.sol +0 -14
  720. package/contracts/test/TestService.sol +0 -26
  721. package/contracts/test/TestToken.sol +0 -26
  722. package/contracts/test/TestVersion.sol +0 -44
  723. package/contracts/test/TestVersionable.sol +0 -17
  724. package/contracts/types/ChainId.sol +0 -38
  725. package/contracts/types/Fee.sol +0 -56
  726. package/contracts/types/NftIdSet.sol +0 -60
  727. package/contracts/types/ObjectType.sol +0 -131
  728. package/contracts/types/ReferralId.sol +0 -48
  729. package/contracts/types/RoleId.sol +0 -45
  730. package/contracts/types/UFixed.sol +0 -209
@@ -1,278 +1,420 @@
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
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
6
 
7
- import {IChainNft} from "./IChainNft.sol";
8
- import {ChainNft} from "./ChainNft.sol";
9
- 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";
7
+ import {InitializableCustom} from "../shared/InitializableCustom.sol";
14
8
 
15
- import {ERC165} from "../shared/ERC165.sol";
9
+ import {NftId, NftIdLib} from "../type/NftId.sol";
10
+ import {VersionPart} from "../type/Version.sol";
11
+ import {ObjectType, PROTOCOL, REGISTRY, SERVICE, INSTANCE, STAKE, STAKING, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../type/ObjectType.sol";
16
12
 
13
+ import {ChainNft} from "./ChainNft.sol";
14
+ import {IRegistry} from "./IRegistry.sol";
15
+ import {IRegisterable} from "../shared/IRegisterable.sol";
16
+ import {ReleaseRegistry} from "./ReleaseRegistry.sol";
17
+ import {TokenRegistry} from "./TokenRegistry.sol";
18
+ import {RegistryAdmin} from "./RegistryAdmin.sol";
17
19
 
18
20
  // IMPORTANT
19
21
  // Each NFT minted by registry is accosiated with:
20
22
  // 1) NFT owner
21
23
  // 2) registred contract OR object stored in registered (parent) contract
22
24
  // 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)
25
+ // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
26
+ // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
27
+ // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
28
+ // 4) state object by regular service (POLICY, BUNDLE, STAKE)
27
29
 
30
+ /// @title Chain Registry contract implementing IRegistry.
31
+ /// @notice See IRegistry for method details.
28
32
  contract Registry is
29
- ERC165,
33
+ InitializableCustom,
30
34
  IRegistry
31
35
  {
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
- address public constant NFT_LOCK_ADDRESS = address(0x1);
47
- uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
36
+ address public NFT_LOCK_ADDRESS = address(0x1);
37
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
38
+ uint256 public constant STAKING_TOKEN_SEQUENCE_ID = 3;
48
39
  string public constant EMPTY_URI = "";
49
40
 
50
- mapping(NftId nftId => ObjectInfo info) _info;
51
- mapping(address object => NftId nftId) _nftIdByAddress;
41
+ mapping(NftId nftId => ObjectInfo info) private _info;
42
+ mapping(address object => NftId nftId) private _nftIdByAddress;
43
+
44
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
52
45
 
53
- mapping(NftId registrator => mapping(
54
- ObjectType objectType => bool)) _isApproved;
46
+ mapping(ObjectType objectType => bool) private _coreTypes;
55
47
 
56
48
  mapping(ObjectType objectType => mapping(
57
- ObjectType parentType => bool)) _isValidContractCombination;
49
+ ObjectType parentType => bool)) private _coreContractCombinations;
58
50
 
59
51
  mapping(ObjectType objectType => mapping(
60
- ObjectType parentType => bool)) _isValidObjectCombination;
52
+ ObjectType parentType => bool)) private _coreObjectCombinations;
61
53
 
62
- mapping(NftId nftId => string name) _string;
63
- mapping(bytes32 serviceNameHash => mapping(
64
- VersionPart majorVersion => address service)) _service;
54
+ RegistryAdmin public immutable _admin;
55
+ ChainNft public immutable _chainNft;
65
56
 
66
- NftId _registryNftId;
67
- NftId _serviceNftId; // set in stone upon registry creation
68
- IChainNft _chainNft;
69
- ChainNft _chainNftInternal;
57
+ NftId public immutable _protocolNftId;
58
+ NftId public immutable _registryNftId;
59
+ NftId public _stakingNftId;
70
60
 
61
+ address public _tokenRegistryAddress;
62
+ address public _stakingAddress;
63
+ ReleaseRegistry public _releaseRegistry;
71
64
 
72
- modifier onlyOwner() {
73
- if(msg.sender != getOwner()) {
74
- revert NotOwner();
65
+ // TODO
66
+ // 1). Registry and ReleaseRegistry must be treated as whole single entity.
67
+ // But current limitations of EVM does not allow it -> require it to be splitted
68
+ // 2). Keep onlyReleaseRegistry modifier
69
+ // 3). Delete onlyRegistryService in favor of restricted
70
+ // 4). (For GlobalRegistry ONLY) make registerChainRegistry() restricted to GIF_ADMIN_ROLE
71
+ modifier onlyRegistryService() {
72
+ if(!_releaseRegistry.isActiveRegistryService(msg.sender)) {
73
+ revert ErrorRegistryCallerNotRegistryService();
75
74
  }
76
75
  _;
77
76
  }
78
77
 
79
- modifier onlyRegistryService() {
80
-
81
- if(msg.sender != _info[_serviceNftId].objectAddress) {
82
- revert NotRegistryService();
78
+
79
+ modifier onlyReleaseRegistry() {
80
+ if(msg.sender != address(_releaseRegistry)) {
81
+ revert ErrorRegistryCallerNotReleaseRegistry();
83
82
  }
84
83
  _;
85
84
  }
86
85
 
87
- constructor(address registryOwner, VersionPart majorVersion)
86
+ /// @dev Creates the registry contract and populates it with the protocol and registry objects.
87
+ /// Internally deploys the ChainNft contract.
88
+ constructor(RegistryAdmin admin)
89
+ InitializableCustom()
88
90
  {
89
- require(registryOwner > address(0), "Registry: registry owner is 0");
90
- require(majorVersion.toInt() == MAJOR_VERSION_MIN, "Registry: initial major version of registry service is not MAJOR_VERSION_MIN");
91
-
91
+ _admin = admin;
92
92
  // deploy NFT
93
- _chainNftInternal = new ChainNft(address(this));// adds 10kb to deployment size
94
- _chainNft = IChainNft(_chainNftInternal);
93
+ _chainNft = new ChainNft(address(this));
95
94
 
96
95
  // initial registry setup
97
- _registerProtocol();
98
- _registerRegistry(registryOwner);
99
- _registerRegistryService(registryOwner);
96
+ _protocolNftId = _registerProtocol();
97
+ _registryNftId = _registerRegistry();
100
98
 
101
- // set object parent relations
102
- _setupValidObjectParentCombinations();
99
+ // set object types and object parent relations
100
+ _setupValidCoreTypesAndCombinations();
101
+ }
103
102
 
104
- _registerInterface(type(IRegistry).interfaceId);
103
+
104
+ /// @dev Wires release registry and token to registry (this contract).
105
+ /// MUST be called by release registry.
106
+ function initialize(
107
+ address releaseRegistry,
108
+ address tokenRegistry,
109
+ address staking
110
+ )
111
+ external
112
+ initializer()
113
+ {
114
+ _releaseRegistry = ReleaseRegistry(releaseRegistry);
115
+ _tokenRegistryAddress = tokenRegistry;
116
+ _stakingAddress = staking;
117
+
118
+ _stakingNftId = _registerStaking();
105
119
  }
106
120
 
107
- /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
108
- // TODO service registration means its approval for some type?
109
- // TODO registration of precompile addresses
121
+ /// @inheritdoc IRegistry
110
122
  function register(ObjectInfo memory info)
111
123
  external
112
124
  onlyRegistryService
113
125
  returns(NftId nftId)
114
126
  {
115
127
  ObjectType objectType = info.objectType;
116
- NftId parentNftId = info.parentNftId;
117
- ObjectInfo memory parentInfo = _info[parentNftId];
118
- ObjectType parentType = parentInfo.objectType; // see function header
119
- address parentAddress = parentInfo.objectAddress;
128
+ ObjectType parentType = _info[info.parentNftId].objectType;
120
129
 
121
- // parent is contract -> need to check? -> check before minting
122
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
123
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
124
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
125
- if(parentAddress == address(0)) {
126
- revert ZeroParentAddress();
130
+ // check type combinations for core objects
131
+ if(info.objectAddress == address(0)) {
132
+ if(_coreObjectCombinations[objectType][parentType] == false) {
133
+ revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
134
+ }
135
+ }
136
+ // check type combinations for contract objects
137
+ else {
138
+ if(_coreContractCombinations[objectType][parentType] == false) {
139
+ revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
140
+ }
127
141
  }
128
142
 
129
- address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
143
+ nftId = _register(info);
144
+ }
130
145
 
131
- // TODO does external call
132
- uint256 mintedTokenId = _chainNft.mint(
133
- info.initialOwner,
134
- interceptor,
135
- EMPTY_URI);
136
- nftId = toNftId(mintedTokenId);
137
146
 
138
- // TODO move nftId out of info struct
139
- // getters by nftId -> return struct without nftId
140
- // getters by address -> return nftId AND struct
141
- info.nftId = nftId;
142
- _info[nftId] = info;
147
+ /// @inheritdoc IRegistry
148
+ function registerService(
149
+ ObjectInfo memory info,
150
+ VersionPart version,
151
+ ObjectType domain
152
+ )
153
+ external
154
+ onlyReleaseRegistry
155
+ returns(NftId nftId)
156
+ {
157
+ // check service address is defined
158
+ address service = info.objectAddress;
159
+ if(service == address(0)) {
160
+ revert ErrorRegistryServiceAddressZero();
161
+ }
143
162
 
144
- if(info.objectAddress > address(0))
145
- {
146
- // TODO if need to add types latter -> at least call this check from registry service
147
- // parent is registered + object-parent types are valid
148
- if(_isValidContractCombination[objectType][parentType] == false) {
149
- revert InvalidTypesCombination(objectType, parentType);
150
- }
163
+ // check version is defined
164
+ if(version.eqz()) {
165
+ revert ErrorRegistryServiceVersionZero();
166
+ }
151
167
 
152
- address contractAddress = info.objectAddress;
168
+ // check domain is defined
169
+ if(domain.eqz()) {
170
+ revert ErrorRegistryDomainZero(service);
171
+ }
153
172
 
154
- if(_nftIdByAddress[contractAddress].gtz()) {
155
- revert ContractAlreadyRegistered(contractAddress);
156
- }
173
+ // check contract has not already been registered
174
+ if(_service[version][domain] != address(0)) {
175
+ revert ErrorRegistryDomainAlreadyRegistered(service, version, domain);
176
+ }
177
+
178
+ // check service has proper type
179
+ if(info.objectType != SERVICE()) {
180
+ revert ErrorRegistryNotService(service, info.objectType);
181
+ }
157
182
 
158
- _nftIdByAddress[contractAddress] = nftId;
183
+ // check that parent has registry type
184
+ if(info.parentNftId != _registryNftId) {
185
+ revert ErrorRegistryServiceParentNotRegistry(info.parentNftId);
186
+ }
159
187
 
160
- // special case
161
- if(objectType == SERVICE()) {
162
- _registerService(info);
163
- }
188
+ _service[version][domain] = service;
189
+ nftId = _register(info);
190
+
191
+ emit LogServiceRegistration(version, domain);
192
+ }
193
+
194
+
195
+ /// @inheritdoc IRegistry
196
+ function registerWithCustomType(ObjectInfo memory info)
197
+ external
198
+ onlyRegistryService
199
+ returns(NftId nftId)
200
+ {
201
+ ObjectType objectType = info.objectType;
202
+ ObjectType parentType = _info[info.parentNftId].objectType;
203
+
204
+ if(_coreTypes[objectType]) {
205
+ revert ErrorRegistryCoreTypeRegistration();
164
206
  }
165
- else
166
- {
167
- if(_isValidObjectCombination[objectType][parentType] == false) {
168
- revert InvalidTypesCombination(objectType, parentType);
169
- }
207
+
208
+ if(
209
+ parentType == PROTOCOL() ||
210
+ parentType == SERVICE()
211
+ ) {
212
+ revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
170
213
  }
171
214
 
172
- emit LogRegistration(info);
215
+ _register(info);
173
216
  }
174
217
 
175
- // from IRegistry
176
- function getObjectCount() external view override returns (uint256) {
177
-
218
+
219
+ /// @dev earliest GIF major version
220
+ function getInitialVersion() external view returns (VersionPart) {
221
+ return _releaseRegistry.getInitialVersion();
222
+ }
223
+
224
+ /// @dev next GIF release version to be released
225
+ function getNextVersion() external view returns (VersionPart) {
226
+ return _releaseRegistry.getNextVersion();
227
+ }
228
+
229
+ /// @dev latest active GIF release version
230
+ function getLatestVersion() external view returns (VersionPart) {
231
+ return _releaseRegistry.getLatestVersion();
232
+ }
233
+
234
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
235
+ return _releaseRegistry.getReleaseInfo(version);
236
+ }
237
+
238
+ function getObjectCount() external view returns (uint256) {
178
239
  return _chainNft.totalSupply();
179
240
  }
180
241
 
181
- function getNftId(address object) external view override returns (NftId id) {
242
+ function getNftId() external view returns (NftId nftId) {
243
+ return _registryNftId;
244
+ }
245
+
246
+ function getProtocolNftId() external view returns (NftId nftId) {
247
+ return _protocolNftId;
248
+ }
249
+
250
+ function getNftId(address object) external view returns (NftId id) {
182
251
  return _nftIdByAddress[object];
183
252
  }
184
253
 
185
- function ownerOf(NftId nftId) public view override returns (address) {
254
+ function ownerOf(NftId nftId) public view returns (address) {
186
255
  return _chainNft.ownerOf(nftId.toInt());
187
256
  }
188
257
 
189
258
  function ownerOf(address contractAddress) public view returns (address) {
190
-
191
259
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
192
260
  }
193
261
 
194
- function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
262
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
195
263
  return _info[nftId];
196
264
  }
197
265
 
198
- function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
199
-
266
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
200
267
  return _info[_nftIdByAddress[object]];
201
268
  }
202
269
 
203
- function isRegistered(NftId nftId) public view override returns (bool) {
270
+ function isRegistered(NftId nftId) public view returns (bool) {
204
271
  return _info[nftId].objectType.gtz();
205
272
  }
206
273
 
207
- function isRegistered(address object) external view override returns (bool) {
274
+ function isRegistered(address object) external view returns (bool) {
208
275
  return _nftIdByAddress[object].gtz();
209
276
  }
210
277
 
211
- function getServiceName(NftId nftId) external view returns (string memory) {
212
- return _string[nftId];
278
+ function isRegisteredService(address object) external view returns (bool) {
279
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
280
+ }
281
+
282
+ function isRegisteredComponent(address object) external view returns (bool) {
283
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
284
+ return _info[objectParentNftId].objectType == INSTANCE();
285
+ }
286
+
287
+ function isActiveRelease(VersionPart version) external view returns (bool)
288
+ {
289
+ return _releaseRegistry.isActiveRelease(version);
290
+ }
291
+
292
+ function getStakingAddress() external view returns (address staking) {
293
+ //return getObjectInfo(_stakingNftId).objectAddress;
294
+ //return _info[_stakingNftId].objectAddress;
295
+ return _stakingAddress;
296
+ }
297
+
298
+ function getTokenRegistryAddress() external view returns (address tokenRegistry) {
299
+ return _tokenRegistryAddress;
213
300
  }
214
301
 
215
- // special case to retrive a gif service
216
302
  function getServiceAddress(
217
- string memory serviceName,
218
- VersionPart majorVersion
219
- ) external view returns (address)
303
+ ObjectType serviceDomain,
304
+ VersionPart releaseVersion
305
+ ) external view returns (address service)
220
306
  {
221
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
222
- return _service[serviceNameHash][majorVersion];
307
+ service = _service[releaseVersion][serviceDomain];
308
+ }
309
+
310
+ function getReleaseRegistryAddress() external view returns (address) {
311
+ return address(_releaseRegistry);
312
+ }
313
+
314
+ function getChainNftAddress() external view override returns (address) {
315
+ return address(_chainNft);
316
+ }
317
+
318
+ function getRegistryAdminAddress() external view returns (address) {
319
+ return address(_admin);
223
320
  }
224
321
 
225
- function getChainNft() external view override returns (IChainNft) {
226
- return _chainNft;
322
+ function getAuthority() external view returns (address) {
323
+ return _admin.authority();
227
324
  }
228
325
 
229
326
  function getOwner() public view returns (address owner) {
230
327
  return ownerOf(address(this));
231
328
  }
232
329
 
330
+ // IERC165
331
+
332
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
333
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
334
+ return true;
335
+ }
336
+
337
+ return false;
338
+ }
339
+
233
340
  // Internals
234
341
 
235
- function _registerService(ObjectInfo memory info)
342
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
343
+ function _register(ObjectInfo memory info)
236
344
  internal
345
+ returns(NftId nftId)
237
346
  {
238
- (
239
- string memory serviceName,
240
- VersionPart majorVersion
241
- ) = abi.decode(info.data, (string, VersionPart));
242
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
243
-
244
- // TODO MUST guarantee consistency of service.getVersion() and majorVersion here
245
- // TODO update _serviceNftId when registryService with new major version is registered? -> it is fixed in current setup -> can lock up
246
- // TODO do not use names -> each object type is registered by corresponding service -> conflicting with approve()
247
- if(
248
- majorVersion.toInt() < MAJOR_VERSION_MIN ||
249
- (majorVersion.toInt() > MAJOR_VERSION_MIN &&
250
- _service[serviceNameHash][VersionLib.toVersionPart(majorVersion.toInt() - 1)] == address(0) )
251
- ) {
252
- revert InvalidServiceVersion(majorVersion);
347
+ ObjectType objectType = info.objectType;
348
+ bool isInterceptor = info.isInterceptor;
349
+ address objectAddress = info.objectAddress;
350
+ address owner = info.initialOwner;
351
+
352
+ NftId parentNftId = info.parentNftId;
353
+ ObjectInfo memory parentInfo = _info[parentNftId];
354
+ ObjectType parentType = parentInfo.objectType; // see function header
355
+ address parentAddress = parentInfo.objectAddress;
356
+
357
+ // parent is contract -> need to check? -> check before minting
358
+ // special case: staking: to protocol possible as well
359
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
360
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
361
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
362
+ if(objectType != STAKE()) {
363
+ if(parentAddress == address(0)) {
364
+ revert ErrorRegistryParentAddressZero();
365
+ }
253
366
  }
254
-
255
- if(_service[serviceNameHash][majorVersion] != address(0)) {
256
- revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
367
+
368
+ address interceptorAddress = _getInterceptor(
369
+ isInterceptor,
370
+ objectType,
371
+ objectAddress,
372
+ parentInfo.isInterceptor,
373
+ parentAddress);
374
+
375
+ uint256 tokenId = _chainNft.getNextTokenId();
376
+ nftId = NftIdLib.toNftId(tokenId);
377
+ info.nftId = nftId;
378
+ _info[nftId] = info;
379
+
380
+ if(objectAddress > address(0)) {
381
+ if(_nftIdByAddress[objectAddress].gtz()) {
382
+ revert ErrorRegistryContractAlreadyRegistered(objectAddress);
383
+ }
384
+
385
+ _nftIdByAddress[objectAddress] = nftId;
257
386
  }
258
387
 
259
- _string[info.nftId] = serviceName;
260
- _service[serviceNameHash][majorVersion] = info.objectAddress;
388
+ emit LogRegistration(nftId, parentNftId, objectType, isInterceptor, objectAddress, owner);
389
+
390
+ // calls nft receiver(1) and interceptor(2)
391
+ uint256 mintedTokenId = _chainNft.mint(
392
+ owner,
393
+ interceptorAddress,
394
+ EMPTY_URI);
261
395
 
262
- emit LogServiceNameRegistration(serviceName, majorVersion);
396
+ assert(mintedTokenId == tokenId);
263
397
  }
264
398
 
265
399
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
400
+ /// special case: STAKES (parent may be any type) -> no intercept call
401
+ /// default case:
266
402
  function _getInterceptor(
267
403
  bool isInterceptor,
404
+ ObjectType objectType,
268
405
  address objectAddress,
269
406
  bool parentIsInterceptor,
270
407
  address parentObjectAddress
271
408
  )
272
409
  internal
273
- view
410
+ pure
274
411
  returns (address interceptor)
275
412
  {
413
+ // no intercepting calls for stakes
414
+ if (objectType == STAKE()) {
415
+ return address(0);
416
+ }
417
+
276
418
  if (objectAddress == address(0)) {
277
419
  if (parentIsInterceptor) {
278
420
  return parentObjectAddress;
@@ -292,135 +434,143 @@ contract Registry is
292
434
 
293
435
  /// @dev protocol registration used to anchor the dip ecosystem relations
294
436
  function _registerProtocol()
295
- internal
437
+ private
438
+ returns (NftId protocolNftId)
296
439
  {
297
- uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
298
- NftId protocolNftId = toNftId(protocolId);
299
-
300
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, protocolId);
301
-
302
- _info[protocolNftId] = ObjectInfo(
303
- protocolNftId,
304
- zeroNftId(), // parent
305
- PROTOCOL(),
306
- false, // isInterceptor
307
- address(0), // objectAddress
308
- NFT_LOCK_ADDRESS,// initialOwner
309
- ""
310
- );
440
+ uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
441
+ protocolNftId = NftIdLib.toNftId(protocolId);
442
+
443
+ _info[protocolNftId] = ObjectInfo({
444
+ nftId: protocolNftId,
445
+ parentNftId: NftIdLib.zero(),
446
+ objectType: PROTOCOL(),
447
+ isInterceptor: false,
448
+ objectAddress: address(0),
449
+ initialOwner: NFT_LOCK_ADDRESS,
450
+ data: ""
451
+ });
452
+
453
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
311
454
  }
312
455
 
313
456
  /// @dev registry registration
314
457
  /// might also register the global registry when not on mainnet
315
- function _registerRegistry(address registryOwner)
316
- internal
458
+ function _registerRegistry()
459
+ private
460
+ returns (NftId registryNftId)
317
461
  {
318
- uint256 registryId = _chainNftInternal.calculateTokenId(2);
319
- NftId registryNftId = toNftId(registryId);
320
-
462
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
463
+ registryNftId = NftIdLib.toNftId(registryId);
321
464
  NftId parentNftId;
322
465
 
323
- if(registryId != _chainNftInternal.GLOBAL_REGISTRY_ID())
466
+ if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
324
467
  {// we're not the global registry
325
468
  _registerGlobalRegistry();
326
- parentNftId = toNftId(_chainNftInternal.GLOBAL_REGISTRY_ID());
469
+ parentNftId = NftIdLib.toNftId(_chainNft.GLOBAL_REGISTRY_ID());
327
470
  }
328
471
  else
329
472
  {// we are global registry
330
- parentNftId = toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
473
+ parentNftId = _protocolNftId;
331
474
  }
332
475
 
333
- _chainNftInternal.mint(registryOwner, registryId);
334
-
335
- _info[registryNftId] = ObjectInfo(
336
- registryNftId,
337
- parentNftId,
338
- REGISTRY(),
339
- false, // isInterceptor
340
- address(this),
341
- registryOwner,
342
- ""
343
- );
476
+ _info[registryNftId] = ObjectInfo({
477
+ nftId: registryNftId,
478
+ parentNftId: parentNftId,
479
+ objectType: REGISTRY(),
480
+ isInterceptor: false,
481
+ objectAddress: address(this),
482
+ initialOwner: NFT_LOCK_ADDRESS,
483
+ data: ""
484
+ });
485
+
344
486
  _nftIdByAddress[address(this)] = registryNftId;
345
- _registryNftId = registryNftId;
487
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
346
488
  }
347
489
 
348
-
349
490
  /// @dev global registry registration for non mainnet registries
350
491
  function _registerGlobalRegistry()
351
- internal
492
+ private
352
493
  {
353
- uint256 globalRegistryId = _chainNftInternal.GLOBAL_REGISTRY_ID();
354
-
355
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, globalRegistryId);
356
-
357
- NftId globalRegistryNftId = toNftId(globalRegistryId);
358
-
359
- _info[globalRegistryNftId] = ObjectInfo(
360
- globalRegistryNftId,
361
- toNftId(_chainNftInternal.PROTOCOL_NFT_ID()), // parent
362
- REGISTRY(),
363
- false, // isInterceptor
364
- address(0), // objectAddress
365
- NFT_LOCK_ADDRESS, // initialOwner
366
- "" // data
367
- );
494
+ uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
495
+ NftId globalRegistryNftId = NftIdLib.toNftId(globalRegistryId);
496
+
497
+ _info[globalRegistryNftId] = ObjectInfo({
498
+ nftId: globalRegistryNftId,
499
+ parentNftId: NftIdLib.toNftId(_chainNft.PROTOCOL_NFT_ID()),
500
+ objectType: REGISTRY(),
501
+ isInterceptor: false,
502
+ objectAddress: address(0),
503
+ initialOwner: NFT_LOCK_ADDRESS,
504
+ data: ""
505
+ });
506
+
507
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
368
508
  }
369
-
370
- function _registerRegistryService(address registryOwner)
371
- internal
509
+ // depends on _registryNftId and _stakingAddress
510
+ function _registerStaking()
511
+ private
512
+ returns (NftId stakingNftId)
372
513
  {
373
- uint256 serviceId = _chainNftInternal.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
374
- NftId serviceNftId = toNftId(serviceId);
375
-
376
- _chainNftInternal.mint(registryOwner, serviceId);
377
-
378
- _info[serviceNftId] = ObjectInfo(
379
- serviceNftId,
380
- _registryNftId,
381
- SERVICE(),
382
- false, // isInterceptor
383
- msg.sender, // service deploys registry
384
- registryOwner, // initialOwner,
385
- ""
386
- );
387
-
388
- _nftIdByAddress[msg.sender] = serviceNftId;
389
-
390
- string memory serviceName = "RegistryService";
391
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
392
- _service[serviceNameHash][VersionLib.toVersionPart(MAJOR_VERSION_MIN)] = msg.sender;
393
- _string[serviceNftId] = serviceName;
394
- _serviceNftId = serviceNftId;
514
+ address stakingOwner = IRegisterable(_stakingAddress).getOwner();
515
+ uint256 stakingId = _chainNft.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
516
+ stakingNftId = NftIdLib.toNftId(stakingId);
517
+
518
+ _info[stakingNftId] = ObjectInfo({
519
+ nftId: stakingNftId,
520
+ parentNftId: _registryNftId,
521
+ objectType: STAKING(),
522
+ isInterceptor: false,
523
+ objectAddress: _stakingAddress,
524
+ initialOwner: stakingOwner,
525
+ data: ""
526
+ });
527
+
528
+ _nftIdByAddress[_stakingAddress] = stakingNftId;
529
+
530
+ // reverts if nftId was already minted
531
+ _chainNft.mint(stakingOwner, stakingId);
395
532
  }
396
533
 
397
534
  /// @dev defines which object - parent types relations are allowed to register
398
- // IMPORTANT:
399
- // 1) EACH object type MUST have only one parent type across ALL mappings
400
- // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
401
- // 3) DO NOT use REGISTRY as object type
402
- // 2) DO NOT use PROTOCOL and "zeroObjectType"
403
- function _setupValidObjectParentCombinations()
404
- internal
535
+ /// EACH object type MUST have only one parent type across ALL mappings
536
+ function _setupValidCoreTypesAndCombinations()
537
+ private
405
538
  {
406
- // registry as parent, ONLY registry owner
407
- _isValidContractCombination[TOKEN()][REGISTRY()] = true;
408
- _isValidContractCombination[SERVICE()][REGISTRY()] = true;
539
+ _coreTypes[REGISTRY()] = true;
540
+ _coreTypes[SERVICE()] = true;
541
+ _coreTypes[INSTANCE()] = true;
542
+ _coreTypes[PRODUCT()] = true;
543
+ _coreTypes[POOL()] = true;
544
+ _coreTypes[DISTRIBUTION()] = true;
545
+ _coreTypes[DISTRIBUTOR()] = true;
546
+ _coreTypes[ORACLE()] = true;
547
+ _coreTypes[POLICY()] = true;
548
+ _coreTypes[BUNDLE()] = true;
549
+ _coreTypes[STAKING()] = true;
550
+ _coreTypes[STAKE()] = true;
551
+
552
+ // only global registry allowed to register registry (after initialization)
553
+ if(block.chainid == 1) {
554
+ _coreContractCombinations[REGISTRY()][REGISTRY()] = true;
555
+ }
409
556
 
410
- // registry as parent, ONLY approved
411
- _isValidContractCombination[INSTANCE()][REGISTRY()] = true;
557
+ // contracts with registry parent
558
+ _coreContractCombinations[STAKING()][REGISTRY()] = true; // only for chain staking contract
559
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
412
560
 
413
- // instance as parent, ONLY approved
414
- _isValidContractCombination[PRODUCT()][INSTANCE()] = true;
415
- _isValidContractCombination[DISTRIBUTION()][INSTANCE()] = true;
416
- _isValidContractCombination[ORACLE()][INSTANCE()] = true;
417
- _isValidContractCombination[POOL()][INSTANCE()] = true;
561
+ // components with instance parent
562
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
563
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
564
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
565
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
418
566
 
419
- // product as parent, ONLY approved
420
- _isValidObjectCombination[POLICY()][PRODUCT()] = true;
567
+ // objects with coponent parents
568
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
569
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
570
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
421
571
 
422
- // pool as parent, ONLY approved
423
- _isValidObjectCombination[BUNDLE()][POOL()] = true;
424
- _isValidObjectCombination[STAKE()][POOL()] = true;
572
+ // staking
573
+ _coreObjectCombinations[STAKE()][PROTOCOL()] = true;
574
+ _coreObjectCombinations[STAKE()][INSTANCE()] = true;
425
575
  }
426
576
  }