@etherisc/gif-next 0.0.2-bad4d33-850 → 0.0.2-bafc958-412

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