@etherisc/gif-next 0.0.2-8d47fa1-080 → 0.0.2-8daf0fe-431

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