@etherisc/gif-next 0.0.2-a84aad4-747 → 0.0.2-a8814be-836

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 (671) hide show
  1. package/README.md +57 -88
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1271 -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/ISetup.sol/ISetup.json → authorization/IAccess.sol/IAccess.json} +2 -2
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1050 -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 +167 -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 +253 -0
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1358 -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/{components → distribution}/Distribution.sol/Distribution.json +242 -533
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  29. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1421 -0
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +834 -0
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  33. package/artifacts/contracts/{components → distribution}/IDistributionComponent.sol/IDistributionComponent.json +280 -227
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  35. package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +270 -335
  36. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  38. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1507 -0
  40. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  42. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1978 -0
  44. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
  46. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  47. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1427 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1187 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1561 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1996 -0
  56. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  57. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  58. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +286 -1965
  60. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +285 -79
  62. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  63. package/artifacts/contracts/instance/Instance.sol/Instance.json +358 -2796
  64. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1660 -0
  66. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
  68. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1068 -304
  70. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +340 -304
  72. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +148 -119
  74. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +3648 -0
  76. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  77. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  78. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  79. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +1 -54
  80. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  82. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
  84. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  85. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  86. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +10 -118
  88. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  89. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  90. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  91. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  92. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  93. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  94. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  95. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  96. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +995 -0
  97. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  98. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
  99. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  100. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  101. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  102. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +781 -0
  103. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  104. package/artifacts/contracts/{instance/service/IPolicyService.sol/IPolicyService.json → oracle/IOracleService.sol/IOracleService.json} +318 -167
  105. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  106. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +887 -0
  107. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  108. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +943 -0
  109. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  110. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +726 -0
  111. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  112. package/artifacts/contracts/{components/Pool.sol/Pool.json → pool/BasicPool.sol/BasicPool.json} +315 -379
  113. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  114. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
  115. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  116. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1447 -0
  117. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  118. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +838 -0
  119. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  120. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +451 -134
  121. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  122. package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +315 -316
  123. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  124. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1283 -0
  125. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  126. package/artifacts/contracts/pool/Pool.sol/Pool.json +1078 -0
  127. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  128. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1628 -0
  129. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  130. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +774 -0
  131. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  132. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +753 -0
  133. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  134. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +714 -0
  135. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  136. package/artifacts/contracts/{components/Product.sol/Product.json → product/BasicProduct.sol/BasicProduct.json} +355 -398
  137. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  138. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
  139. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  140. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1413 -0
  141. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  142. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +842 -0
  143. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  144. package/artifacts/contracts/{instance/service → product}/IApplicationService.sol/IApplicationService.json +145 -168
  145. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  146. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +929 -0
  147. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  148. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +912 -0
  149. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  150. package/artifacts/contracts/{instance/base/ComponentService.sol/ComponentService.json → product/IPricingService.sol/IPricingService.json} +230 -217
  151. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  152. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +966 -0
  153. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  154. package/artifacts/contracts/{instance/service/IProductService.sol/IProductService.json → product/IRiskService.sol/IRiskService.json} +97 -65
  155. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  156. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1284 -0
  157. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  158. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +786 -0
  159. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  160. package/artifacts/contracts/product/PricingService.sol/PricingService.json +889 -0
  161. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  162. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +766 -0
  163. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  164. package/artifacts/contracts/product/Product.sol/Product.json +1072 -0
  165. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  166. package/artifacts/contracts/product/RiskService.sol/RiskService.json +604 -0
  167. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  168. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +698 -0
  169. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  170. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  171. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  172. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +435 -29
  173. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  174. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +215 -149
  175. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  176. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  177. package/artifacts/contracts/registry/Registry.sol/Registry.json +865 -68
  178. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  179. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1864 -0
  180. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  181. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +280 -279
  182. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  183. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +142 -95
  184. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  185. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  186. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  187. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1048 -0
  188. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  189. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +272 -0
  190. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  191. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +316 -153
  192. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  193. package/artifacts/contracts/shared/Component.sol/Component.json +701 -0
  194. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  195. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1589 -0
  196. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  197. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +810 -0
  198. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  199. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → shared/ComponentVerifyingService.sol/ComponentVerifyingService.json} +162 -142
  200. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  201. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  202. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  203. package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +193 -77
  204. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  205. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1049 -0
  206. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  207. package/artifacts/contracts/{components/IProductComponent.sol/IProductComponent.json → shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json} +213 -227
  208. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  209. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +95 -14
  210. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  211. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +35 -4
  212. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  213. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +19 -10
  214. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  215. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +59 -13
  216. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  217. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +19 -10
  218. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  219. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  220. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  221. package/artifacts/contracts/shared/IService.sol/IService.json +112 -19
  222. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  223. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  224. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  225. package/artifacts/contracts/{components/Component.sol/Component.json → shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json} +195 -218
  226. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  227. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +538 -0
  228. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  229. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +174 -0
  230. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  231. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  232. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  233. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +28 -70
  234. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  235. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +35 -85
  236. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  237. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +34 -106
  238. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  239. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -28
  240. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  241. package/artifacts/contracts/shared/Service.sol/Service.json +104 -113
  242. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  243. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +382 -9
  244. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  245. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  246. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  247. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1454 -0
  248. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  249. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +1030 -0
  250. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  251. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +440 -0
  252. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  253. package/artifacts/contracts/staking/Staking.sol/Staking.json +1844 -0
  254. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  255. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +205 -0
  256. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  257. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +766 -0
  258. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  259. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +587 -0
  260. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  261. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +1231 -0
  262. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  263. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +714 -0
  264. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  265. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2283 -0
  266. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  267. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +607 -0
  268. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  269. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  270. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  271. package/artifacts/contracts/type/Amount.sol/AmountLib.json +398 -0
  272. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  273. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +225 -0
  274. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  275. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +203 -0
  276. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  277. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  278. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  279. package/artifacts/contracts/type/Fee.sol/FeeLib.json +317 -0
  280. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  281. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  282. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  283. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +209 -0
  284. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  285. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  286. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  287. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +239 -0
  288. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  289. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  290. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  291. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  292. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  293. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  294. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  295. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +142 -0
  296. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  297. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +369 -0
  298. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  299. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +246 -0
  300. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  301. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  302. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  303. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  304. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  305. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +105 -0
  306. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  307. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  308. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  309. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +312 -0
  310. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  311. package/artifacts/contracts/type/UFixed.sol/MathLib.json +16 -0
  312. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  313. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +548 -0
  314. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  315. package/artifacts/contracts/type/Version.sol/VersionLib.json +177 -0
  316. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  317. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +68 -0
  318. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  319. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  320. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  321. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +602 -0
  322. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  323. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  324. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  325. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  326. package/contracts/authorization/AccessAdmin.sol +598 -0
  327. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  328. package/contracts/authorization/Authorization.sol +221 -0
  329. package/contracts/authorization/IAccess.sol +48 -0
  330. package/contracts/authorization/IAccessAdmin.sol +137 -0
  331. package/contracts/authorization/IAuthorization.sol +54 -0
  332. package/contracts/authorization/IModuleAuthorization.sol +21 -0
  333. package/contracts/authorization/IServiceAuthorization.sol +40 -0
  334. package/contracts/authorization/ModuleAuthorization.sol +78 -0
  335. package/contracts/authorization/ServiceAuthorization.sol +106 -0
  336. package/contracts/distribution/BasicDistribution.sol +140 -0
  337. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  338. package/contracts/{components → distribution}/Distribution.sol +179 -163
  339. package/contracts/distribution/DistributionService.sol +348 -0
  340. package/contracts/distribution/DistributionServiceManager.sol +39 -0
  341. package/contracts/distribution/IDistributionComponent.sol +52 -0
  342. package/contracts/{instance/service → distribution}/IDistributionService.sol +41 -38
  343. package/contracts/examples/fire/DamageLevel.sol +59 -0
  344. package/contracts/examples/fire/FirePool.sol +75 -0
  345. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  346. package/contracts/examples/fire/FireProduct.sol +411 -0
  347. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  348. package/contracts/examples/fire/FireUSD.sol +26 -0
  349. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  350. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  351. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  352. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  353. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +30 -31
  354. package/contracts/instance/IInstance.sol +38 -73
  355. package/contracts/instance/IInstanceService.sol +50 -30
  356. package/contracts/instance/Instance.sol +147 -245
  357. package/contracts/instance/InstanceAdmin.sol +288 -0
  358. package/contracts/instance/InstanceAuthorizationV3.sol +204 -0
  359. package/contracts/instance/InstanceReader.sol +264 -59
  360. package/contracts/instance/InstanceService.sol +305 -335
  361. package/contracts/instance/InstanceServiceManager.sol +14 -29
  362. package/contracts/instance/InstanceStore.sol +287 -0
  363. package/contracts/instance/base/BalanceStore.sol +123 -0
  364. package/contracts/instance/base/Cloneable.sol +28 -0
  365. package/contracts/instance/base/ObjectCounter.sol +21 -0
  366. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  367. package/contracts/instance/{ObjectManager.sol → base/ObjectSet.sol} +18 -21
  368. package/contracts/instance/module/IAccess.sol +5 -13
  369. package/contracts/instance/module/IBundle.sol +8 -9
  370. package/contracts/instance/module/IComponents.sol +23 -10
  371. package/contracts/instance/module/IDistribution.sol +6 -6
  372. package/contracts/instance/module/IPolicy.sol +47 -35
  373. package/contracts/instance/module/IRisk.sol +1 -1
  374. package/contracts/{test/Usdc.sol → mock/Dip.sol} +6 -6
  375. package/contracts/oracle/BasicOracle.sol +48 -0
  376. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  377. package/contracts/oracle/IOracle.sol +36 -0
  378. package/contracts/oracle/IOracleComponent.sol +33 -0
  379. package/contracts/oracle/IOracleService.sol +65 -0
  380. package/contracts/oracle/Oracle.sol +167 -0
  381. package/contracts/oracle/OracleService.sol +286 -0
  382. package/contracts/oracle/OracleServiceManager.sol +39 -0
  383. package/contracts/pool/BasicPool.sol +165 -0
  384. package/contracts/pool/BasicPoolAuthorization.sol +58 -0
  385. package/contracts/pool/BundleService.sol +461 -0
  386. package/contracts/pool/BundleServiceManager.sol +39 -0
  387. package/contracts/pool/IBundleService.sol +143 -0
  388. package/contracts/pool/IPoolComponent.sol +68 -0
  389. package/contracts/pool/IPoolService.sol +171 -0
  390. package/contracts/pool/Pool.sol +357 -0
  391. package/contracts/pool/PoolService.sol +563 -0
  392. package/contracts/pool/PoolServiceManager.sol +39 -0
  393. package/contracts/product/ApplicationService.sol +251 -0
  394. package/contracts/{instance/service → product}/ApplicationServiceManager.sol +12 -9
  395. package/contracts/product/BasicProduct.sol +53 -0
  396. package/contracts/product/BasicProductAuthorization.sol +43 -0
  397. package/contracts/product/ClaimService.sol +581 -0
  398. package/contracts/{instance/service → product}/ClaimServiceManager.sol +12 -9
  399. package/contracts/{instance/service → product}/IApplicationService.sol +16 -35
  400. package/contracts/product/IClaimService.sol +123 -0
  401. package/contracts/product/IPolicyService.sol +80 -0
  402. package/contracts/product/IPricingService.sol +39 -0
  403. package/contracts/product/IProductComponent.sol +53 -0
  404. package/contracts/product/IRiskService.sol +33 -0
  405. package/contracts/product/PolicyService.sol +686 -0
  406. package/contracts/product/PolicyServiceManager.sol +39 -0
  407. package/contracts/product/PricingService.sol +300 -0
  408. package/contracts/product/PricingServiceManager.sol +39 -0
  409. package/contracts/product/Product.sol +434 -0
  410. package/contracts/product/RiskService.sol +96 -0
  411. package/contracts/product/RiskServiceManager.sol +39 -0
  412. package/contracts/registry/ChainNft.sol +72 -32
  413. package/contracts/registry/IRegistry.sol +96 -26
  414. package/contracts/registry/IRegistryService.sol +37 -44
  415. package/contracts/registry/Registry.sol +440 -192
  416. package/contracts/registry/RegistryAdmin.sol +448 -0
  417. package/contracts/registry/RegistryService.sol +108 -132
  418. package/contracts/registry/RegistryServiceManager.sol +23 -32
  419. package/contracts/registry/ReleaseLifecycle.sol +30 -0
  420. package/contracts/registry/ReleaseRegistry.sol +493 -0
  421. package/contracts/registry/ServiceAuthorizationV3.sol +198 -0
  422. package/contracts/registry/TokenRegistry.sol +261 -62
  423. package/contracts/shared/Component.sol +261 -0
  424. package/contracts/shared/ComponentService.sol +641 -0
  425. package/contracts/shared/ComponentServiceManager.sol +38 -0
  426. package/contracts/shared/ComponentVerifyingService.sol +116 -0
  427. package/contracts/shared/ContractLib.sol +38 -0
  428. package/contracts/shared/IComponent.sol +70 -0
  429. package/contracts/shared/IComponentService.sol +108 -0
  430. package/contracts/shared/IInstanceLinkedComponent.sol +49 -0
  431. package/contracts/{instance/base → shared}/IKeyValueStore.sol +16 -11
  432. package/contracts/{instance/base → shared}/ILifecycle.sol +5 -4
  433. package/contracts/shared/INftOwnable.sol +4 -2
  434. package/contracts/shared/IPolicyHolder.sol +23 -14
  435. package/contracts/shared/IRegistryLinked.sol +0 -1
  436. package/contracts/shared/IService.sol +15 -8
  437. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +4 -4
  438. package/contracts/shared/InstanceLinkedComponent.sol +171 -0
  439. package/contracts/shared/KeyValueStore.sol +131 -0
  440. package/contracts/shared/Lifecycle.sol +88 -0
  441. package/contracts/shared/NftIdSet.sol +65 -0
  442. package/contracts/shared/NftOwnable.sol +26 -23
  443. package/contracts/shared/PolicyHolder.sol +22 -41
  444. package/contracts/shared/Registerable.sol +17 -16
  445. package/contracts/shared/RegistryLinked.sol +3 -7
  446. package/contracts/shared/Service.sol +56 -27
  447. package/contracts/shared/TokenHandler.sol +115 -9
  448. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  449. package/contracts/staking/IStaking.sol +168 -0
  450. package/contracts/staking/IStakingService.sol +157 -0
  451. package/contracts/staking/StakeManagerLib.sol +224 -0
  452. package/contracts/staking/Staking.sol +498 -0
  453. package/contracts/staking/StakingLifecycle.sol +23 -0
  454. package/contracts/staking/StakingManager.sol +52 -0
  455. package/contracts/staking/StakingReader.sol +190 -0
  456. package/contracts/staking/StakingService.sol +393 -0
  457. package/contracts/staking/StakingServiceManager.sol +44 -0
  458. package/contracts/staking/StakingStore.sol +605 -0
  459. package/contracts/staking/TargetManagerLib.sol +211 -0
  460. package/contracts/{types → type}/AddressSet.sol +1 -1
  461. package/contracts/type/Amount.sol +150 -0
  462. package/contracts/{types → type}/Blocknumber.sol +26 -3
  463. package/contracts/{types → type}/ClaimId.sol +31 -3
  464. package/contracts/{types → type}/Fee.sol +33 -24
  465. package/contracts/{types → type}/NftId.sol +15 -16
  466. package/contracts/{types → type}/NftIdSet.sol +2 -2
  467. package/contracts/type/ObjectType.sol +276 -0
  468. package/contracts/type/PayoutId.sol +82 -0
  469. package/contracts/{types → type}/Referral.sol +2 -1
  470. package/contracts/type/RequestId.sol +75 -0
  471. package/contracts/{types → type}/RiskId.sol +16 -2
  472. package/contracts/type/RoleId.sol +174 -0
  473. package/contracts/type/Seconds.sol +101 -0
  474. package/contracts/type/Selector.sol +102 -0
  475. package/contracts/{types → type}/StateId.sol +47 -4
  476. package/contracts/type/String.sol +53 -0
  477. package/contracts/{types → type}/Timestamp.sol +21 -2
  478. package/contracts/{types → type}/UFixed.sol +38 -9
  479. package/contracts/{types → type}/Version.sol +4 -2
  480. package/contracts/{shared → upgradeability}/IVersionable.sol +1 -1
  481. package/contracts/{shared → upgradeability}/ProxyManager.sol +92 -30
  482. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  483. package/contracts/{shared → upgradeability}/Versionable.sol +3 -3
  484. package/package.json +9 -5
  485. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  486. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  487. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  488. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  489. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  490. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  491. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  492. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  493. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  494. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  495. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  496. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -778
  497. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  498. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  499. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1311
  500. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  501. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +0 -256
  502. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  503. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  504. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  505. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  506. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -532
  507. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  508. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -194
  509. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  510. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  511. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  512. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
  513. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -968
  514. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
  515. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -665
  516. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  517. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1093
  518. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  519. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -661
  520. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
  521. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -754
  522. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
  523. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -637
  524. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  525. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1732
  526. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  527. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -805
  528. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
  529. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  530. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
  531. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +0 -409
  532. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  533. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  534. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  535. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  536. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  537. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1021
  538. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  539. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -689
  540. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  541. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -824
  542. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  543. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -657
  544. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  545. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -777
  546. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  547. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -649
  548. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  549. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -285
  550. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  551. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -547
  552. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  553. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  554. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  555. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  556. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  557. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  558. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -582
  559. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  560. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  561. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  562. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  563. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  564. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  565. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
  566. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  567. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  568. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  569. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -521
  570. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  571. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  572. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  573. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  574. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  575. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
  576. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  577. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  578. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  579. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +0 -10
  580. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  581. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +0 -174
  582. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  583. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  584. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
  585. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
  586. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  587. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +0 -104
  588. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  589. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  590. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  591. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +0 -125
  592. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  593. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -166
  594. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  595. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +0 -33
  596. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  597. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  598. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  599. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +0 -92
  600. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
  601. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
  602. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  603. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +0 -142
  604. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  605. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +0 -86
  606. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  607. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +0 -156
  608. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
  609. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +0 -124
  610. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  611. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +0 -92
  612. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  613. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +0 -267
  614. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  615. package/artifacts/contracts/types/UFixed.sol/MathLib.json +0 -10
  616. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  617. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +0 -479
  618. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  619. package/artifacts/contracts/types/Version.sol/VersionLib.json +0 -177
  620. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  621. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +0 -49
  622. package/contracts/components/Component.sol +0 -251
  623. package/contracts/components/IComponent.sol +0 -74
  624. package/contracts/components/IDistributionComponent.sol +0 -71
  625. package/contracts/components/IPoolComponent.sol +0 -113
  626. package/contracts/components/IProductComponent.sol +0 -40
  627. package/contracts/components/Pool.sol +0 -299
  628. package/contracts/components/Product.sol +0 -293
  629. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -13
  630. package/contracts/instance/Cloneable.sol +0 -51
  631. package/contracts/instance/InstanceAccessManager.sol +0 -522
  632. package/contracts/instance/base/ComponentService.sol +0 -134
  633. package/contracts/instance/base/KeyValueStore.sol +0 -175
  634. package/contracts/instance/base/Lifecycle.sol +0 -109
  635. package/contracts/instance/module/ISetup.sol +0 -33
  636. package/contracts/instance/module/ITreasury.sol +0 -23
  637. package/contracts/instance/service/ApplicationService.sol +0 -350
  638. package/contracts/instance/service/BundleService.sol +0 -336
  639. package/contracts/instance/service/BundleServiceManager.sol +0 -51
  640. package/contracts/instance/service/ClaimService.sol +0 -151
  641. package/contracts/instance/service/DistributionService.sol +0 -467
  642. package/contracts/instance/service/DistributionServiceManager.sol +0 -51
  643. package/contracts/instance/service/IBundleService.sol +0 -62
  644. package/contracts/instance/service/IClaimService.sol +0 -61
  645. package/contracts/instance/service/IPolicyService.sol +0 -72
  646. package/contracts/instance/service/IPoolService.sol +0 -35
  647. package/contracts/instance/service/IProductService.sol +0 -40
  648. package/contracts/instance/service/PolicyService.sol +0 -403
  649. package/contracts/instance/service/PolicyServiceManager.sol +0 -54
  650. package/contracts/instance/service/PoolService.sol +0 -220
  651. package/contracts/instance/service/PoolServiceManager.sol +0 -51
  652. package/contracts/instance/service/ProductService.sol +0 -241
  653. package/contracts/instance/service/ProductServiceManager.sol +0 -54
  654. package/contracts/registry/RegistryAccessManager.sol +0 -216
  655. package/contracts/registry/ReleaseManager.sol +0 -322
  656. package/contracts/shared/ContractDeployerLib.sol +0 -72
  657. package/contracts/test/TestFee.sol +0 -25
  658. package/contracts/test/TestRegisterable.sol +0 -18
  659. package/contracts/test/TestRoleId.sol +0 -14
  660. package/contracts/test/TestService.sol +0 -25
  661. package/contracts/test/TestToken.sol +0 -26
  662. package/contracts/test/TestVersion.sol +0 -44
  663. package/contracts/test/TestVersionable.sol +0 -17
  664. package/contracts/types/ChainId.sol +0 -38
  665. package/contracts/types/NumberId.sol +0 -52
  666. package/contracts/types/ObjectType.sol +0 -157
  667. package/contracts/types/PayoutId.sol +0 -54
  668. package/contracts/types/RoleId.sol +0 -97
  669. package/contracts/types/Seconds.sol +0 -54
  670. /package/contracts/{types → type}/DistributorType.sol +0 -0
  671. /package/contracts/{types → type}/Key32.sol +0 -0
@@ -2,35 +2,75 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
7
+ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
5
8
 
6
- import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
7
- import {VersionPart} from "../types/Version.sol";
8
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
9
+ import {NftId, NftIdLib} from "../type/NftId.sol";
10
+ import {VersionPart, VersionPartLib} from "../type/Version.sol";
11
+ import {ObjectType, ObjectTypeLib, PROTOCOL, REGISTRY, SERVICE, INSTANCE, STAKE, STAKING, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../type/ObjectType.sol";
9
12
 
10
13
  import {ChainNft} from "./ChainNft.sol";
11
14
  import {IRegistry} from "./IRegistry.sol";
12
- import {ReleaseManager} from "./ReleaseManager.sol";
15
+ import {IRegisterable} from "../shared/IRegisterable.sol";
16
+ import {ReleaseRegistry} from "./ReleaseRegistry.sol";
17
+ import {TokenRegistry} from "./TokenRegistry.sol";
18
+ import {RegistryAdmin} from "./RegistryAdmin.sol";
13
19
 
14
- // IMPORTANT
20
+ /// @dev IMPORTANT
15
21
  // Each NFT minted by registry is accosiated with:
16
22
  // 1) NFT owner
17
23
  // 2) registred contract OR object stored in registered (parent) contract
18
- // Four registration flows:
19
- // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
20
- // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
21
- // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
22
- // 4) state object by regular service (POLICY, BUNDLE, STAKE)
23
-
24
+ // Five registration flows:
25
+ // 1) registerService() -> registers IService address by ReleaseRegistry (ReleaseRegistry is set at deployment time)
26
+ // 2) register() -> registers IRegisterable address by IService (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
27
+ // 3) -> registers object by IService (POLICY, BUNDLE, STAKE)
28
+ // 4) registerWithCustomType() -> registers IRegisterable address with custom type by IService
29
+ // 5) registerRegistry() -> registers IRegistry address (from different chain) by GifAdmin. Works ONLY on mainnet.
30
+ // Note: getters by address MUST not be used with this address (will return 0 or data related to different object or even revert)
31
+
32
+ /// @dev Chain Registry contract implementing IRegistry.
33
+ /// IRegistry for method details.
24
34
  contract Registry is
35
+ Initializable,
36
+ AccessManaged,
25
37
  IRegistry
26
38
  {
39
+ /// @dev Protocol NFT ID
40
+ NftId public immutable PROTOCOL_NFT_ID;
41
+
42
+ /// @dev Gobal registry NFT ID
43
+ NftId public immutable GLOBAL_REGISTRY_NFT_ID;
44
+
45
+ /// @dev Gobal registry address on mainnet.
46
+ address public immutable GLOBAL_REGISTRY_ADDRESS;
47
+
48
+ /// @dev Registry NFT ID
49
+ NftId public immutable REGISTRY_NFT_ID;
50
+
51
+ /// @dev Deployer address that authorizes the initializer of this contract.
52
+ address public immutable DEPLOYER;
53
+
54
+ /// @dev Registry admin contract for this registry.
55
+ RegistryAdmin public immutable ADMIN;
56
+
57
+ /// @dev Chain NFT contract that keeps track of the ownership of all registered objects.
58
+ ChainNft public immutable CHAIN_NFT;
59
+
27
60
  address public constant NFT_LOCK_ADDRESS = address(0x1);
28
61
  uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
62
+ uint256 public constant STAKING_TOKEN_SEQUENCE_ID = 3;
29
63
  string public constant EMPTY_URI = "";
30
64
 
65
+ /// @dev keep track of different registries on different chains
66
+ mapping(uint256 chainId => NftId registryNftId) private _registryNftIdByChainId;
67
+ uint256[] private _chainId;
68
+
69
+ /// @dev keep track of object info and address reverse lookup
31
70
  mapping(NftId nftId => ObjectInfo info) private _info;
32
71
  mapping(address object => NftId nftId) private _nftIdByAddress;
33
72
 
73
+ /// @dev keep track of service addresses by version and domain
34
74
  mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
35
75
 
36
76
  mapping(ObjectType objectType => bool) private _coreTypes;
@@ -41,178 +81,287 @@ contract Registry is
41
81
  mapping(ObjectType objectType => mapping(
42
82
  ObjectType parentType => bool)) private _coreObjectCombinations;
43
83
 
44
- NftId private _registryNftId;
45
- ChainNft private _chainNft;
84
+ NftId private _stakingNftId;
46
85
 
47
- ReleaseManager private _releaseManager;
86
+ ReleaseRegistry private _releaseRegistry;
87
+ address private _tokenRegistryAddress;
88
+ address private _stakingAddress;
48
89
 
49
- modifier onlyRegistryService() {
50
- if(!_releaseManager.isActiveRegistryService(msg.sender)) {
51
- revert CallerNotRegistryService();
90
+ modifier onlyDeployer() {
91
+ if (msg.sender != DEPLOYER) {
92
+ revert ErrorRegistryCallerNotDeployer();
52
93
  }
53
94
  _;
54
95
  }
55
96
 
56
- modifier onlyReleaseManager() {
57
- if(msg.sender != address(_releaseManager)) {
58
- revert CallerNotReleaseManager();
59
- }
60
- _;
61
- }
62
-
63
- constructor()
97
+ // TODO when create2 strategy is added to ignition:
98
+ // 1. move globalRegistry arg out from constructor into initialize()
99
+ // 2. add testRegistry_deployChainRegistryAtGlobalRegistryAddress
100
+ /// @dev Creates the registry contract and populates it with the protocol and registry objects.
101
+ /// Internally deploys the ChainNft contract.
102
+ constructor(RegistryAdmin admin, address globalRegistry)
103
+ AccessManaged(admin.authority())
64
104
  {
65
- _releaseManager = ReleaseManager(msg.sender);
105
+ DEPLOYER = msg.sender;
106
+ ADMIN = admin;
107
+ GLOBAL_REGISTRY_ADDRESS = _getGlobalRegistryAddress(globalRegistry);
66
108
 
67
109
  // deploy NFT
68
- _chainNft = new ChainNft(address(this));
110
+ CHAIN_NFT = new ChainNft(address(this));
111
+ GLOBAL_REGISTRY_NFT_ID = NftIdLib.toNftId(
112
+ CHAIN_NFT.GLOBAL_REGISTRY_ID());
69
113
 
70
114
  // initial registry setup
71
- _registerProtocol();
72
- _registerRegistry();
115
+ PROTOCOL_NFT_ID = _registerProtocol();
116
+ REGISTRY_NFT_ID = _registerRegistry();
73
117
 
74
118
  // set object types and object parent relations
75
119
  _setupValidCoreTypesAndCombinations();
76
120
  }
77
121
 
122
+
123
+ /// @dev Wires release registry, token registry and staking contract to this registry.
124
+ /// MUST be called by release registry.
125
+ function initialize(
126
+ address releaseRegistry,
127
+ address tokenRegistry,
128
+ address staking
129
+ )
130
+ external
131
+ initializer()
132
+ onlyDeployer()
133
+ {
134
+ // store links to supporting contracts
135
+ _releaseRegistry = ReleaseRegistry(releaseRegistry);
136
+ _tokenRegistryAddress = tokenRegistry;
137
+ _stakingAddress = staking;
138
+
139
+ // register staking contract
140
+ _stakingNftId = _registerStaking();
141
+ }
142
+
143
+ /// @inheritdoc IRegistry
144
+ function registerRegistry(
145
+ NftId nftId,
146
+ uint256 chainId,
147
+ address registryAddress
148
+ )
149
+ external
150
+ restricted()
151
+ {
152
+ // registration of chain registries only allowed on mainnet
153
+ if (block.chainid != 1) {
154
+ revert ErrorRegistryNotOnMainnet(block.chainid);
155
+ }
156
+
157
+ // registry chain id is not zero
158
+ if(chainId == 0) {
159
+ revert ErrorRegistryChainRegistryChainIdZero(nftId);
160
+ }
161
+
162
+ // registry address is not zero
163
+ if (registryAddress == address(0)) {
164
+ revert ErrorRegistryChainRegistryAddressZero(nftId, chainId);
165
+ }
166
+
167
+ // registry nft id matches registry chain id
168
+ uint256 expectedRegistryId = CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID, chainId);
169
+ if (nftId != NftIdLib.toNftId(expectedRegistryId)) {
170
+ revert ErrorRegistryChainRegistryNftIdInvalid(nftId, chainId);
171
+ }
172
+
173
+ emit LogChainRegistryRegistration(nftId, chainId, registryAddress);
174
+
175
+ _registerRegistryForNft(
176
+ chainId,
177
+ ObjectInfo({
178
+ nftId: nftId,
179
+ parentNftId: REGISTRY_NFT_ID,
180
+ objectType: REGISTRY(),
181
+ isInterceptor: false,
182
+ objectAddress: registryAddress,
183
+ initialOwner: NFT_LOCK_ADDRESS,
184
+ data: ""
185
+ }),
186
+ false); // do not update address lookup for objects on a different chain
187
+ }
188
+
189
+ // TODO limit service owner to registry admin?
190
+ /// @inheritdoc IRegistry
78
191
  function registerService(
79
192
  ObjectInfo memory info,
80
193
  VersionPart version,
81
194
  ObjectType domain
82
195
  )
83
196
  external
84
- onlyReleaseManager
197
+ restricted()
85
198
  returns(NftId nftId)
86
199
  {
87
- /* must be guaranteed by release manager
200
+ // service address is defined
201
+ address service = info.objectAddress;
202
+ if(service == address(0)) {
203
+ revert ErrorRegistryServiceAddressZero();
204
+ }
205
+
206
+ // version is defined
207
+ if(version.eqz()) {
208
+ revert ErrorRegistryServiceVersionZero(service);
209
+ }
210
+ // service domain is defined
211
+ if(domain.eqz()) {
212
+ revert ErrorRegistryServiceDomainZero(service, version);
213
+ }
214
+
215
+ // service has proper type
88
216
  if(info.objectType != SERVICE()) {
89
- revert();
217
+ revert ErrorRegistryNotService(service, info.objectType);
90
218
  }
91
- if(info.parentType != REGISTRY()) {
92
- revert();
93
- }
94
- info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
95
- */
96
-
97
- if(_service[version][domain] > address(0)) {
98
- revert ServiceAlreadyRegistered(info.objectAddress);
219
+
220
+ // service parent has registry type
221
+ if(info.parentNftId != REGISTRY_NFT_ID) {
222
+ revert ErrorRegistryServiceParentNotRegistry(service, version, info.parentNftId);
99
223
  }
100
224
 
101
- _service[version][domain] = info.objectAddress; // nftId;
225
+ // service has not already been registered
226
+ if(_service[version][domain] != address(0)) {
227
+ revert ErrorRegistryServiceDomainAlreadyRegistered(service, version, domain);
228
+ }
102
229
 
103
- nftId = _register(info);
230
+ _service[version][domain] = service;
104
231
 
105
232
  emit LogServiceRegistration(version, domain);
233
+
234
+ nftId = _register(info);
106
235
  }
107
236
 
237
+
238
+ /// @inheritdoc IRegistry
108
239
  function register(ObjectInfo memory info)
109
240
  external
110
- onlyRegistryService
241
+ restricted()
111
242
  returns(NftId nftId)
112
243
  {
244
+ address objectAddress = info.objectAddress;
113
245
  ObjectType objectType = info.objectType;
114
- ObjectType parentType = _info[info.parentNftId].objectType;
115
246
 
116
- // TODO do not need it here -> SERVICE is no longer part of _coreContractCombinations
117
- // no service registrations
118
- if(objectType == SERVICE()) {
119
- revert ServiceRegistration();
120
- }
247
+ // this indidirectly enforces that the parent is registered
248
+ // parentType would be zero for a non-registered parent which is never a valid type combination
249
+ ObjectType parentType = _info[info.parentNftId].objectType;
121
250
 
122
- // only valid core types combinations
123
- if(info.objectAddress == address(0))
124
- {
251
+ // check type combinations for core objects
252
+ if(objectAddress == address(0)) {
125
253
  if(_coreObjectCombinations[objectType][parentType] == false) {
126
- revert InvalidTypesCombination(objectType, parentType);
254
+ revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
127
255
  }
128
256
  }
129
- else
130
- {
257
+ // check type combinations for contract objects
258
+ else {
131
259
  if(_coreContractCombinations[objectType][parentType] == false) {
132
- revert InvalidTypesCombination(objectType, parentType);
260
+ revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
133
261
  }
134
262
  }
135
263
 
136
264
  nftId = _register(info);
137
265
  }
138
266
 
267
+
268
+ /// @inheritdoc IRegistry
139
269
  function registerWithCustomType(ObjectInfo memory info)
140
270
  external
141
- onlyRegistryService
271
+ restricted()
142
272
  returns(NftId nftId)
143
273
  {
144
274
  ObjectType objectType = info.objectType;
145
275
  ObjectType parentType = _info[info.parentNftId].objectType;
146
276
 
147
277
  if(_coreTypes[objectType]) {
148
- revert CoreTypeRegistration();
278
+ revert ErrorRegistryCoreTypeRegistration();
149
279
  }
150
280
 
151
281
  if(
282
+ objectType == ObjectTypeLib.zero() ||
283
+ parentType == ObjectTypeLib.zero() ||
152
284
  parentType == PROTOCOL() ||
153
- parentType == REGISTRY() ||
154
285
  parentType == SERVICE()
155
286
  ) {
156
- revert InvalidTypesCombination(objectType, parentType);
287
+ revert ErrorRegistryTypesCombinationInvalid(info.objectAddress, objectType, parentType);
157
288
  }
158
289
 
159
- _register(info);
290
+ nftId = _register(info);
160
291
  }
161
292
 
162
293
 
163
294
  /// @dev earliest GIF major version
164
295
  function getInitialVersion() external view returns (VersionPart) {
165
- return _releaseManager.getInitialVersion();
296
+ return VersionPartLib.toVersionPart(_releaseRegistry.INITIAL_GIF_VERSION());
166
297
  }
167
298
 
168
- // TODO make distinction between active an not yet active version
169
- // need to be thought trough, not yet clear if necessary
170
- // need to answer question: what is the latest version during the upgrade process?
171
- // likely setting up a new gif version does not fit into a single tx
172
- // in this case we might want to have a period where the latest version is
173
- // in the process of being set up while the latest active version is 1 major release smaller
174
- /// @dev latest GIF major version (might not yet be active)
299
+ /// @dev next GIF release version to be released
175
300
  function getNextVersion() external view returns (VersionPart) {
176
- return _releaseManager.getNextVersion();
301
+ return _releaseRegistry.getNextVersion();
177
302
  }
178
303
 
179
304
  /// @dev latest active GIF release version
180
305
  function getLatestVersion() external view returns (VersionPart) {
181
- return _releaseManager.getLatestVersion();
306
+ return _releaseRegistry.getLatestVersion();
182
307
  }
183
308
 
184
309
  function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
185
- return _releaseManager.getReleaseInfo(version);
310
+ return _releaseRegistry.getReleaseInfo(version);
186
311
  }
187
312
 
188
- function getObjectCount() external view returns (uint256) {
189
- return _chainNft.totalSupply();
313
+ function chainIds() public view returns (uint256) {
314
+ return _chainId.length;
190
315
  }
191
316
 
192
- function getReleaseManagerAddress() external view returns (address) {
193
- return address(_releaseManager);
317
+ function getChainId(uint256 idx) public view returns (uint256) {
318
+ return _chainId[idx];
319
+ }
320
+
321
+ function getRegistryNftId(uint256 chainId) public view returns (NftId nftId) {
322
+ return _registryNftIdByChainId[chainId];
323
+ }
324
+
325
+ function getObjectCount() external view returns (uint256) {
326
+ return CHAIN_NFT.totalSupply();
194
327
  }
195
328
 
196
329
  function getNftId() external view returns (NftId nftId) {
197
- return _registryNftId;
330
+ return REGISTRY_NFT_ID;
331
+ }
332
+
333
+ function getProtocolNftId() external view returns (NftId nftId) {
334
+ return PROTOCOL_NFT_ID;
198
335
  }
199
336
 
200
- function getNftId(address object) external view returns (NftId id) {
337
+ function getNftIdForAddress(address object) external view returns (NftId id) {
201
338
  return _nftIdByAddress[object];
202
339
  }
203
340
 
204
341
  function ownerOf(NftId nftId) public view returns (address) {
205
- return _chainNft.ownerOf(nftId.toInt());
342
+ return CHAIN_NFT.ownerOf(nftId.toInt());
343
+ }
344
+
345
+ function isOwnerOf(NftId nftId, address expectedOwner) public view returns (bool) {
346
+ return CHAIN_NFT.ownerOf(nftId.toInt()) == expectedOwner;
206
347
  }
207
348
 
208
349
  function ownerOf(address contractAddress) public view returns (address) {
209
- return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
350
+ return CHAIN_NFT.ownerOf(_nftIdByAddress[contractAddress].toInt());
210
351
  }
211
352
 
212
353
  function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
213
354
  return _info[nftId];
214
355
  }
215
356
 
357
+ function isObjectType(NftId nftId, ObjectType expectedObjectType) external view returns (bool) {
358
+ return _info[nftId].objectType == expectedObjectType;
359
+ }
360
+
361
+ function getObjectAddress(NftId nftId) external view returns (address) {
362
+ return _info[nftId].objectAddress;
363
+ }
364
+
216
365
  function getObjectInfo(address object) external view returns (ObjectInfo memory) {
217
366
  return _info[_nftIdByAddress[object]];
218
367
  }
@@ -234,9 +383,17 @@ contract Registry is
234
383
  return _info[objectParentNftId].objectType == INSTANCE();
235
384
  }
236
385
 
237
- function isValidRelease(VersionPart version) external view returns (bool)
386
+ function isActiveRelease(VersionPart version) external view returns (bool)
238
387
  {
239
- return _releaseManager.isValidRelease(version);
388
+ return _releaseRegistry.isActiveRelease(version);
389
+ }
390
+
391
+ function getStakingAddress() external view returns (address staking) {
392
+ return _stakingAddress;
393
+ }
394
+
395
+ function getTokenRegistryAddress() external view returns (address tokenRegistry) {
396
+ return _tokenRegistryAddress;
240
397
  }
241
398
 
242
399
  function getServiceAddress(
@@ -244,14 +401,23 @@ contract Registry is
244
401
  VersionPart releaseVersion
245
402
  ) external view returns (address service)
246
403
  {
247
- // TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
248
- //if(_releaseManager.isValidRelease(releaseVersion)) {
249
- service = _service[releaseVersion][serviceDomain];
250
- //}
404
+ service = _service[releaseVersion][serviceDomain];
405
+ }
406
+
407
+ function getReleaseRegistryAddress() external view returns (address) {
408
+ return address(_releaseRegistry);
251
409
  }
252
410
 
253
411
  function getChainNftAddress() external view override returns (address) {
254
- return address(_chainNft);
412
+ return address(CHAIN_NFT);
413
+ }
414
+
415
+ function getRegistryAdminAddress() external view returns (address) {
416
+ return address(ADMIN);
417
+ }
418
+
419
+ function getAuthority() external view returns (address) {
420
+ return ADMIN.authority();
255
421
  }
256
422
 
257
423
  function getOwner() public view returns (address owner) {
@@ -271,65 +437,83 @@ contract Registry is
271
437
  // Internals
272
438
 
273
439
  /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
274
- // TODO registration of precompile addresses
275
440
  function _register(ObjectInfo memory info)
276
441
  internal
277
442
  returns(NftId nftId)
278
443
  {
279
- ObjectType objectType = info.objectType;
280
- NftId parentNftId = info.parentNftId;
444
+ ObjectType objectType = info.objectType; // do not care here, never PROTOCOL(), REGISTRY()
445
+ bool isInterceptor = info.isInterceptor;
446
+ address objectAddress = info.objectAddress; // do not care here, can be 0
447
+ address owner = info.initialOwner; // do not care here, can be 0, can be equal info.objectAddress
448
+
449
+ NftId parentNftId = info.parentNftId; // do not care here, can not be 0
281
450
  ObjectInfo memory parentInfo = _info[parentNftId];
282
- ObjectType parentType = parentInfo.objectType; // see function header
283
- address parentAddress = parentInfo.objectAddress;
451
+ address parentAddress = parentInfo.objectAddress; // can be 0
284
452
 
285
453
  // parent is contract -> need to check? -> check before minting
286
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
287
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
288
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
289
- if(parentAddress == address(0)) {
290
- revert ZeroParentAddress();
454
+ // special case: staking: to protocol possible as well
455
+ // NO LONGER TRUE: special case: global registry nft as parent when not on mainnet -> global registry address is 0
456
+ // special case: when parentNftId == CHAIN_NFT.mint(), check for zero parent address before mint
457
+ // special case: when parentNftId == CHAIN_NFT.mint() && objectAddress == initialOwner
458
+ // Parent can have 0 address in case of STAKE for PROTOCOL / CUSTOM_TYPE for POLICY
459
+ // But it MUST be registered -> parentType != 0 && parentNftId != 0
460
+ /*if(objectType != STAKE()) {
461
+ if(parentAddress == address(0)) {
462
+ revert ErrorRegistryParentAddressZero();
463
+ }
464
+ }*/
465
+
466
+ // global registry is never parent when not on mainnet
467
+ if(block.chainid != 1) {
468
+ if(parentNftId == GLOBAL_REGISTRY_NFT_ID) {
469
+ revert ErrorRegistryGlobalRegistryAsParent(objectAddress, objectType);
470
+ }
291
471
  }
292
472
 
293
- address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
294
- uint256 tokenId = _chainNft.getNextTokenId();
295
- nftId = toNftId(tokenId);
473
+ address interceptorAddress = _getInterceptor(
474
+ isInterceptor,
475
+ objectType,
476
+ objectAddress,
477
+ parentInfo.isInterceptor,
478
+ parentAddress);
296
479
 
480
+ uint256 tokenId = CHAIN_NFT.getNextTokenId();
481
+ nftId = NftIdLib.toNftId(tokenId);
297
482
  info.nftId = nftId;
298
- _info[nftId] = info;
299
-
300
- if(info.objectAddress > address(0))
301
- {
302
- address contractAddress = info.objectAddress;
303
483
 
304
- if(_nftIdByAddress[contractAddress].gtz()) {
305
- revert ContractAlreadyRegistered(contractAddress);
306
- }
307
-
308
- _nftIdByAddress[contractAddress] = nftId;
309
- }
484
+ _info[nftId] = info;
485
+ _setAddressForNftId(nftId, objectAddress);
310
486
 
311
- emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
487
+ emit LogRegistration(nftId, parentNftId, objectType, isInterceptor, objectAddress, owner);
312
488
 
313
489
  // calls nft receiver(1) and interceptor(2)
314
- uint256 mintedTokenId = _chainNft.mint(
315
- info.initialOwner,
316
- interceptor,
490
+ uint256 mintedTokenId = CHAIN_NFT.mint(
491
+ owner,
492
+ interceptorAddress,
317
493
  EMPTY_URI);
318
- assert(mintedTokenId == tokenId);
319
-
494
+
495
+ assert(mintedTokenId == tokenId);
320
496
  }
321
497
 
322
498
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
499
+ /// special case: STAKES (parent may be any type) -> no intercept call
500
+ /// default case:
323
501
  function _getInterceptor(
324
502
  bool isInterceptor,
503
+ ObjectType objectType,
325
504
  address objectAddress,
326
505
  bool parentIsInterceptor,
327
506
  address parentObjectAddress
328
507
  )
329
508
  internal
330
- view
509
+ pure
331
510
  returns (address interceptor)
332
511
  {
512
+ // no intercepting calls for stakes
513
+ if (objectType == STAKE()) {
514
+ return address(0);
515
+ }
516
+
333
517
  if (objectAddress == address(0)) {
334
518
  if (parentIsInterceptor) {
335
519
  return parentObjectAddress;
@@ -350,118 +534,182 @@ contract Registry is
350
534
  /// @dev protocol registration used to anchor the dip ecosystem relations
351
535
  function _registerProtocol()
352
536
  private
537
+ returns (NftId protocolNftId)
353
538
  {
354
- uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
355
- NftId protocolNftId = toNftId(protocolId);
356
-
357
- _info[protocolNftId] = ObjectInfo({
358
- nftId: protocolNftId,
359
- parentNftId: zeroNftId(),
360
- objectType: PROTOCOL(),
361
- isInterceptor: false,
362
- objectAddress: address(0),
363
- initialOwner: NFT_LOCK_ADDRESS,
364
- data: ""
365
- });
366
-
367
- _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
539
+ uint256 protocolId = CHAIN_NFT.PROTOCOL_NFT_ID();
540
+ protocolNftId = NftIdLib.toNftId(protocolId);
541
+
542
+ _registerForNft(
543
+ ObjectInfo({
544
+ nftId: protocolNftId,
545
+ parentNftId: NftIdLib.zero(),
546
+ objectType: PROTOCOL(),
547
+ isInterceptor: false,
548
+ objectAddress: address(0),
549
+ initialOwner: NFT_LOCK_ADDRESS,
550
+ data: ""}),
551
+ true);
552
+ }
553
+
554
+ /// @dev register this registry
555
+ function _registerRegistry()
556
+ internal
557
+ virtual
558
+ returns (NftId registryNftId)
559
+ {
560
+ // initial assignment
561
+ registryNftId = GLOBAL_REGISTRY_NFT_ID;
562
+
563
+ // register global registry
564
+ _registerRegistryForNft(
565
+ 1, // mainnet chain id
566
+ ObjectInfo({
567
+ nftId: GLOBAL_REGISTRY_NFT_ID,
568
+ parentNftId: PROTOCOL_NFT_ID,
569
+ objectType: REGISTRY(),
570
+ isInterceptor: false,
571
+ objectAddress: GLOBAL_REGISTRY_ADDRESS,
572
+ initialOwner: NFT_LOCK_ADDRESS,
573
+ data: ""}),
574
+ block.chainid == 1);// update address lookup for global registry only on mainnet
575
+
576
+ // if not on mainnet: register this registry with global registry as parent
577
+ if (block.chainid != 1) {
578
+
579
+ // modify registry nft id to local registry when not on mainnet
580
+ registryNftId = NftIdLib.toNftId(
581
+ CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID));
582
+
583
+ _registerRegistryForNft(
584
+ block.chainid,
585
+ ObjectInfo({
586
+ nftId: registryNftId,
587
+ parentNftId: GLOBAL_REGISTRY_NFT_ID,
588
+ objectType: REGISTRY(),
589
+ isInterceptor: false,
590
+ objectAddress: address(this),
591
+ initialOwner: NFT_LOCK_ADDRESS,
592
+ data: ""}),
593
+ true);
594
+ }
368
595
  }
369
596
 
370
- /// @dev registry registration
371
- /// might also register the global registry when not on mainnet
372
- function _registerRegistry()
597
+ /// @dev staking registration
598
+ function _registerRegistryForNft(
599
+ uint256 chainId,
600
+ ObjectInfo memory info,
601
+ bool updateAddressLookup
602
+ )
373
603
  private
374
604
  {
375
- uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
376
- NftId registryNftId = toNftId(registryId);
377
- NftId parentNftId;
378
-
379
- if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
380
- {// we're not the global registry
381
- _registerGlobalRegistry();
382
- parentNftId = toNftId(_chainNft.GLOBAL_REGISTRY_ID());
383
- }
384
- else
385
- {// we are global registry
386
- parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
605
+ if (!_registryNftIdByChainId[chainId].eqz()) {
606
+ revert ErrorRegistryChainRegistryAlreadyRegistered(info.nftId, chainId);
387
607
  }
388
608
 
389
- _info[registryNftId] = ObjectInfo({
390
- nftId: registryNftId,
391
- parentNftId: parentNftId,
392
- objectType: REGISTRY(),
393
- isInterceptor: false,
394
- objectAddress: address(this),
395
- initialOwner: NFT_LOCK_ADDRESS,
396
- data: ""
397
- });
398
- _nftIdByAddress[address(this)] = registryNftId;
399
- _registryNftId = registryNftId;
609
+ // update registry lookup variables
610
+ _registryNftIdByChainId[chainId] = info.nftId;
611
+ _chainId.push(chainId);
400
612
 
401
- _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
613
+ // register the registry info
614
+ _registerForNft(
615
+ info,
616
+ updateAddressLookup);
402
617
  }
403
618
 
404
- /// @dev global registry registration for non mainnet registries
405
- function _registerGlobalRegistry()
619
+ /// @dev staking registration
620
+ function _registerStaking()
406
621
  private
622
+ returns (NftId stakingNftId)
623
+ {
624
+ address stakingOwner = IRegisterable(_stakingAddress).getOwner();
625
+ uint256 stakingId = CHAIN_NFT.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
626
+ stakingNftId = NftIdLib.toNftId(stakingId);
627
+
628
+ _registerForNft(
629
+ ObjectInfo({
630
+ nftId: stakingNftId,
631
+ parentNftId: REGISTRY_NFT_ID,
632
+ objectType: STAKING(),
633
+ isInterceptor: false,
634
+ objectAddress: _stakingAddress,
635
+ initialOwner: stakingOwner,
636
+ data: ""}),
637
+ true);
638
+ }
639
+
640
+ /// @dev Register the provided object info for the specified NFT ID.
641
+ function _registerForNft(
642
+ ObjectInfo memory info,
643
+ bool updateAddressLookup
644
+ )
645
+ internal
646
+ {
647
+ _info[info.nftId] = info;
648
+
649
+ if (updateAddressLookup) {
650
+ _setAddressForNftId(info.nftId, info.objectAddress);
651
+ }
652
+
653
+ // calls nft receiver
654
+ CHAIN_NFT.mint(info.initialOwner, info.nftId.toInt());
655
+ }
656
+
657
+ function _setAddressForNftId(NftId nftId, address objectAddress)
658
+ internal
407
659
  {
408
- uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
409
- NftId globalRegistryNftId = toNftId(globalRegistryId);
660
+ if (objectAddress != address(0)) {
661
+ if (_nftIdByAddress[objectAddress].gtz()) {
662
+ revert ErrorRegistryContractAlreadyRegistered(objectAddress);
663
+ }
410
664
 
411
- _info[globalRegistryNftId] = ObjectInfo({
412
- nftId: globalRegistryNftId,
413
- parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
414
- objectType: REGISTRY(),
415
- isInterceptor: false,
416
- objectAddress: address(0),
417
- initialOwner: NFT_LOCK_ADDRESS,
418
- data: ""
419
- });
665
+ _nftIdByAddress[objectAddress] = nftId;
666
+ }
667
+ }
420
668
 
421
- _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
669
+ function _getGlobalRegistryAddress(address globalRegistry) internal view returns (address) {
670
+ if (block.chainid == 1) {
671
+ return address(this);
672
+ } else {
673
+ return globalRegistry;
674
+ }
422
675
  }
423
676
 
424
677
  /// @dev defines which object - parent types relations are allowed to register
425
- // IMPORTANT:
426
- // 1) EACH object type MUST have only one parent type across ALL mappings
427
- // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
428
- // 3) DO NOT use REGISTRY as object type
429
- // 2) DO NOT use PROTOCOL and "zeroObjectType"
678
+ /// EACH object type MUST have only one parent type across ALL mappings
679
+ // the only EXCEPTION is STAKE, can have any number of parent types
430
680
  function _setupValidCoreTypesAndCombinations()
431
- private
681
+ private
432
682
  {
683
+ _coreTypes[PROTOCOL()] = true;
433
684
  _coreTypes[REGISTRY()] = true;
434
685
  _coreTypes[SERVICE()] = true;
435
- _coreTypes[TOKEN()] = true;
436
686
  _coreTypes[INSTANCE()] = true;
437
687
  _coreTypes[PRODUCT()] = true;
438
688
  _coreTypes[POOL()] = true;
439
689
  _coreTypes[DISTRIBUTION()] = true;
690
+ _coreTypes[DISTRIBUTOR()] = true;
691
+ _coreTypes[ORACLE()] = true;
440
692
  _coreTypes[POLICY()] = true;
441
693
  _coreTypes[BUNDLE()] = true;
694
+ _coreTypes[STAKING()] = true;
442
695
  _coreTypes[STAKE()] = true;
443
-
444
- // registry as parent, ONLY registry owner
445
- //_coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
446
- _coreContractCombinations[TOKEN()][REGISTRY()] = true;
447
- //_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
448
696
 
449
- // registry as parent, ONLY approved
697
+ // types combinations allowed to use with register() function ONLY
450
698
  _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
451
699
 
452
- // instance as parent, ONLY approved
700
+ // components with instance parent
453
701
  _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
454
702
  _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
455
703
  _coreContractCombinations[ORACLE()][INSTANCE()] = true;
456
704
  _coreContractCombinations[POOL()][INSTANCE()] = true;
457
705
 
706
+ // objects with component parents
458
707
  _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
459
-
460
- // product as parent, ONLY approved
461
708
  _coreObjectCombinations[POLICY()][PRODUCT()] = true;
462
-
463
- // pool as parent, ONLY approved
464
709
  _coreObjectCombinations[BUNDLE()][POOL()] = true;
465
- _coreObjectCombinations[STAKE()][POOL()] = true;
710
+
711
+ // staking
712
+ _coreObjectCombinations[STAKE()][PROTOCOL()] = true;
713
+ _coreObjectCombinations[STAKE()][INSTANCE()] = true;
466
714
  }
467
715
  }