@etherisc/gif-next 0.0.2-8e5f0ee-617 → 0.0.2-8f3d499-425

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 (450) hide show
  1. package/README.md +31 -3
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +33 -52
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +0 -19
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +85 -248
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +43 -222
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +228 -217
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +93 -101
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +43 -37
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -31
  31. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  32. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  33. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  34. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1463 -0
  35. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  37. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1960 -0
  39. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
  41. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  43. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1411 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1517 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1978 -0
  51. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  52. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +6 -6
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -5
  57. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  58. package/artifacts/contracts/instance/Instance.sol/Instance.json +17 -106
  59. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +98 -101
  61. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  62. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +31 -31
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +238 -123
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +44 -151
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
  69. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +215 -219
  71. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  73. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  76. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  78. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/{ObjectManager.sol/ObjectManager.json → ObjectSet.sol/ObjectSet.json} +6 -6
  80. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  86. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  87. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  88. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  89. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +59 -235
  90. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  91. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  92. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  94. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +30 -37
  95. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  96. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +27 -219
  98. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
  100. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
  102. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  103. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +55 -284
  104. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  106. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +407 -174
  108. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +137 -89
  110. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +205 -1
  112. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +45 -95
  114. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +300 -180
  116. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  117. package/artifacts/contracts/pool/Pool.sol/Pool.json +45 -280
  118. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +366 -329
  120. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +74 -82
  122. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
  124. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
  126. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +22 -225
  128. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  129. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  130. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  131. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +206 -175
  132. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  133. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +92 -100
  134. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  135. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  136. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  137. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +114 -0
  138. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +266 -119
  140. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  141. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
  142. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  143. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -37
  144. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  145. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  146. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  147. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +372 -316
  148. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
  150. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  151. package/artifacts/contracts/product/PricingService.sol/PricingService.json +118 -265
  152. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  153. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
  154. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  155. package/artifacts/contracts/product/Product.sol/Product.json +22 -225
  156. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  157. package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
  158. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  159. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -0
  160. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  161. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  162. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  163. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +257 -9
  164. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  165. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
  166. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  167. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  168. package/artifacts/contracts/registry/Registry.sol/Registry.json +476 -67
  169. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  170. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +246 -134
  171. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  172. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -130
  173. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
  175. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  176. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  177. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  178. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1169 -0
  179. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  180. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  181. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  182. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  183. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  184. package/artifacts/contracts/shared/Component.sol/Component.json +0 -211
  185. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  186. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +247 -161
  187. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  188. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +105 -95
  189. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -112
  191. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  192. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  193. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  194. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  195. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  196. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
  197. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -37
  199. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  200. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  201. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  202. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  203. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +14 -46
  204. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  205. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  206. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  207. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  208. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  209. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  210. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  211. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -222
  212. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  213. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  214. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  215. package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
  216. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  217. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -57
  218. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  219. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +18 -140
  220. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  221. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
  222. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  223. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  224. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  225. package/artifacts/contracts/shared/Service.sol/Service.json +5 -112
  226. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  227. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  228. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  229. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  230. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  231. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +27 -27
  232. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  233. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  234. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
  235. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  236. package/artifacts/contracts/staking/Staking.sol/Staking.json +85 -262
  237. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  238. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  239. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  240. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
  241. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  242. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  243. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  244. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +31 -138
  245. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  246. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
  247. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  248. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +92 -87
  249. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  250. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
  251. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  252. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/Amount.sol/AmountLib.json +61 -8
  254. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  256. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  258. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  260. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  262. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  263. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  264. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  266. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  267. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  268. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  270. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  272. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  274. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  276. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  278. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  280. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  282. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  284. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  286. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  289. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  291. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  293. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  295. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  297. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  298. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  299. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  300. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +586 -0
  301. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  302. package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
  303. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  304. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  305. package/contracts/authorization/AccessAdmin.sol +25 -24
  306. package/contracts/authorization/Authorization.sol +0 -1
  307. package/contracts/authorization/IAccessAdmin.sol +0 -1
  308. package/contracts/distribution/BasicDistribution.sol +4 -15
  309. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  310. package/contracts/distribution/Distribution.sol +23 -11
  311. package/contracts/distribution/DistributionService.sol +75 -41
  312. package/contracts/distribution/DistributionServiceManager.sol +8 -11
  313. package/contracts/distribution/IDistributionComponent.sol +8 -4
  314. package/contracts/distribution/IDistributionService.sol +18 -2
  315. package/contracts/examples/fire/DamageLevel.sol +56 -0
  316. package/contracts/examples/fire/FirePool.sol +75 -0
  317. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  318. package/contracts/examples/fire/FireProduct.sol +404 -0
  319. package/contracts/examples/fire/FireProductAuthorization.sol +39 -0
  320. package/contracts/examples/fire/FireUSD.sol +26 -0
  321. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  322. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  323. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  324. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  325. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  326. package/contracts/instance/IInstance.sol +11 -34
  327. package/contracts/instance/IInstanceService.sol +5 -5
  328. package/contracts/instance/Instance.sol +13 -38
  329. package/contracts/instance/InstanceAdmin.sol +25 -6
  330. package/contracts/instance/InstanceAuthorizationV3.sol +16 -14
  331. package/contracts/instance/InstanceReader.sol +32 -7
  332. package/contracts/instance/InstanceService.sol +70 -47
  333. package/contracts/instance/InstanceServiceManager.sol +8 -13
  334. package/contracts/instance/InstanceStore.sol +12 -1
  335. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  336. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
  337. package/contracts/instance/module/IBundle.sol +1 -1
  338. package/contracts/instance/module/IComponents.sol +1 -7
  339. package/contracts/instance/module/IDistribution.sol +0 -1
  340. package/contracts/instance/module/IPolicy.sol +22 -22
  341. package/contracts/mock/Dip.sol +1 -1
  342. package/contracts/oracle/IOracleComponent.sol +2 -1
  343. package/contracts/oracle/Oracle.sol +17 -7
  344. package/contracts/oracle/OracleService.sol +9 -6
  345. package/contracts/oracle/OracleServiceManager.sol +8 -11
  346. package/contracts/pool/BasicPool.sol +7 -5
  347. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  348. package/contracts/pool/BundleService.sol +197 -55
  349. package/contracts/pool/BundleServiceManager.sol +8 -11
  350. package/contracts/pool/IBundleService.sol +33 -5
  351. package/contracts/pool/IPoolComponent.sol +6 -0
  352. package/contracts/pool/IPoolService.sol +38 -28
  353. package/contracts/pool/Pool.sol +40 -25
  354. package/contracts/pool/PoolService.sol +183 -112
  355. package/contracts/pool/PoolServiceManager.sol +6 -9
  356. package/contracts/product/ApplicationService.sol +55 -62
  357. package/contracts/product/ApplicationServiceManager.sol +6 -6
  358. package/contracts/product/BasicProduct.sol +3 -32
  359. package/contracts/product/BasicProductAuthorization.sol +3 -0
  360. package/contracts/product/ClaimService.sol +217 -110
  361. package/contracts/product/ClaimServiceManager.sol +6 -6
  362. package/contracts/product/IApplicationService.sol +1 -0
  363. package/contracts/product/IClaimService.sol +28 -5
  364. package/contracts/product/IPolicyService.sol +31 -32
  365. package/contracts/product/IPricingService.sol +7 -7
  366. package/contracts/product/IProductComponent.sol +1 -1
  367. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  368. package/contracts/product/PolicyService.sol +370 -194
  369. package/contracts/product/PolicyServiceManager.sol +6 -9
  370. package/contracts/product/PricingService.sol +46 -46
  371. package/contracts/product/PricingServiceManager.sol +5 -8
  372. package/contracts/product/Product.sol +68 -35
  373. package/contracts/product/{ProductService.sol → RiskService.sol} +13 -41
  374. package/contracts/product/RiskServiceManager.sol +39 -0
  375. package/contracts/registry/ChainNft.sol +65 -32
  376. package/contracts/registry/IRegistry.sol +63 -16
  377. package/contracts/registry/IRegistryService.sol +6 -6
  378. package/contracts/registry/Registry.sol +333 -209
  379. package/contracts/registry/RegistryAdmin.sol +171 -72
  380. package/contracts/registry/RegistryService.sol +6 -20
  381. package/contracts/registry/RegistryServiceManager.sol +4 -4
  382. package/contracts/registry/{ReleaseManager.sol → ReleaseRegistry.sol} +60 -56
  383. package/contracts/registry/ServiceAuthorizationV3.sol +8 -10
  384. package/contracts/registry/TokenRegistry.sol +2 -2
  385. package/contracts/shared/Component.sol +30 -43
  386. package/contracts/shared/ComponentService.sol +88 -28
  387. package/contracts/shared/ComponentServiceManager.sol +10 -7
  388. package/contracts/shared/ComponentVerifyingService.sol +1 -1
  389. package/contracts/shared/ContractLib.sol +38 -0
  390. package/contracts/shared/IComponent.sol +4 -4
  391. package/contracts/shared/IComponentService.sol +15 -9
  392. package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
  393. package/contracts/shared/IPolicyHolder.sol +12 -22
  394. package/contracts/shared/IService.sol +1 -1
  395. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
  396. package/contracts/shared/InstanceLinkedComponent.sol +25 -4
  397. package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
  398. package/contracts/shared/NftOwnable.sol +7 -7
  399. package/contracts/shared/PolicyHolder.sol +14 -58
  400. package/contracts/shared/Registerable.sol +4 -4
  401. package/contracts/shared/RegistryLinked.sol +3 -2
  402. package/contracts/shared/Service.sol +19 -15
  403. package/contracts/shared/TokenHandler.sol +100 -19
  404. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  405. package/contracts/staking/IStaking.sol +3 -3
  406. package/contracts/staking/IStakingService.sol +12 -5
  407. package/contracts/staking/StakeManagerLib.sol +18 -25
  408. package/contracts/staking/Staking.sol +27 -42
  409. package/contracts/staking/StakingManager.sol +10 -12
  410. package/contracts/staking/StakingReader.sol +12 -16
  411. package/contracts/staking/StakingService.sol +10 -14
  412. package/contracts/staking/StakingServiceManager.sol +4 -4
  413. package/contracts/staking/StakingStore.sol +12 -22
  414. package/contracts/staking/TargetManagerLib.sol +7 -3
  415. package/contracts/type/Amount.sol +27 -5
  416. package/contracts/type/Blocknumber.sol +7 -1
  417. package/contracts/type/ClaimId.sol +6 -1
  418. package/contracts/type/NftId.sol +1 -0
  419. package/contracts/type/ObjectType.sol +18 -18
  420. package/contracts/type/Referral.sol +1 -0
  421. package/contracts/type/RiskId.sol +15 -1
  422. package/contracts/type/Seconds.sol +21 -1
  423. package/contracts/type/StateId.sol +1 -0
  424. package/contracts/type/Timestamp.sol +11 -1
  425. package/contracts/type/UFixed.sol +29 -10
  426. package/contracts/type/Version.sol +3 -1
  427. package/contracts/{shared → upgradeability}/ProxyManager.sol +70 -38
  428. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  429. package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
  430. package/package.json +1 -1
  431. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  432. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
  433. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  434. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  435. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  436. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  437. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  438. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  439. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  440. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1159
  441. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  442. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  443. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  444. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
  445. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  446. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
  447. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  448. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  449. package/contracts/product/ProductServiceManager.sol +0 -42
  450. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
@@ -3,42 +3,74 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
-
7
- import {InitializableCustom} from "../shared/InitializableCustom.sol";
6
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
7
+ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
8
8
 
9
9
  import {NftId, NftIdLib} from "../type/NftId.sol";
10
- import {VersionPart} from "../type/Version.sol";
11
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, STAKING, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../type/ObjectType.sol";
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";
12
12
 
13
13
  import {ChainNft} from "./ChainNft.sol";
14
14
  import {IRegistry} from "./IRegistry.sol";
15
15
  import {IRegisterable} from "../shared/IRegisterable.sol";
16
- import {ReleaseManager} from "./ReleaseManager.sol";
16
+ import {ReleaseRegistry} from "./ReleaseRegistry.sol";
17
17
  import {TokenRegistry} from "./TokenRegistry.sol";
18
18
  import {RegistryAdmin} from "./RegistryAdmin.sol";
19
19
 
20
- // IMPORTANT
20
+ /// @dev IMPORTANT
21
21
  // Each NFT minted by registry is accosiated with:
22
22
  // 1) NFT owner
23
23
  // 2) registred contract OR object stored in registered (parent) contract
24
- // Four registration flows:
25
- // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
26
- // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
27
- // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
28
- // 4) state object by regular service (POLICY, BUNDLE, STAKE)
29
-
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.
30
34
  contract Registry is
31
- InitializableCustom,
35
+ Initializable,
36
+ AccessManaged,
32
37
  IRegistry
33
38
  {
34
- address public NFT_LOCK_ADDRESS = address(0x1);
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
+
60
+ address public constant NFT_LOCK_ADDRESS = address(0x1);
35
61
  uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
36
62
  uint256 public constant STAKING_TOKEN_SEQUENCE_ID = 3;
37
63
  string public constant EMPTY_URI = "";
38
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
39
70
  mapping(NftId nftId => ObjectInfo info) private _info;
40
71
  mapping(address object => NftId nftId) private _nftIdByAddress;
41
72
 
73
+ /// @dev keep track of service addresses by version and domain
42
74
  mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
43
75
 
44
76
  mapping(ObjectType objectType => bool) private _coreTypes;
@@ -49,143 +81,191 @@ contract Registry is
49
81
  mapping(ObjectType objectType => mapping(
50
82
  ObjectType parentType => bool)) private _coreObjectCombinations;
51
83
 
52
- RegistryAdmin public immutable _admin;
53
- ChainNft public immutable _chainNft;
54
-
55
- NftId public immutable _protocolNftId;
56
- NftId public immutable _registryNftId;
57
- NftId public _stakingNftId;
58
-
59
- address public _tokenRegistryAddress;
60
- address public _stakingAddress;
61
- ReleaseManager public _releaseManager;
62
-
63
- // TODO
64
- // 1). Registry and ReleaseManager must be treated as whole single entity.
65
- // But current limitations of EVM does not allow it -> require it to be splitted
66
- // 2). Keep onlyReleaseManager modifier
67
- // 3). Delete onlyRegistryService in favor of restricted
68
- // 4). (For GlobalRegistry ONLY) make registerChainRegistry() restricted to GIF_ADMIN_ROLE
69
- modifier onlyRegistryService() {
70
- if(!_releaseManager.isActiveRegistryService(msg.sender)) {
71
- revert ErrorRegistryCallerNotRegistryService();
72
- }
73
- _;
74
- }
84
+ NftId private _stakingNftId;
75
85
 
86
+ ReleaseRegistry private _releaseRegistry;
87
+ address private _tokenRegistryAddress;
88
+ address private _stakingAddress;
76
89
 
77
- modifier onlyReleaseManager() {
78
- if(msg.sender != address(_releaseManager)) {
79
- revert ErrorRegistryCallerNotReleaseManager();
90
+ modifier onlyDeployer() {
91
+ if (msg.sender != DEPLOYER) {
92
+ revert ErrorRegistryCallerNotDeployer();
80
93
  }
81
94
  _;
82
95
  }
83
96
 
84
-
85
- constructor(RegistryAdmin admin)
86
- InitializableCustom()
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())
87
104
  {
88
- _admin = admin;
105
+ DEPLOYER = msg.sender;
106
+ ADMIN = admin;
107
+ GLOBAL_REGISTRY_ADDRESS = _getGlobalRegistryAddress(globalRegistry);
108
+
89
109
  // deploy NFT
90
- _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());
91
113
 
92
114
  // initial registry setup
93
- _protocolNftId = _registerProtocol();
94
- _registryNftId = _registerRegistry();
115
+ PROTOCOL_NFT_ID = _registerProtocol();
116
+ REGISTRY_NFT_ID = _registerRegistry();
95
117
 
96
118
  // set object types and object parent relations
97
119
  _setupValidCoreTypesAndCombinations();
98
120
  }
99
121
 
100
122
 
101
- /// @dev wires release manager and token to registry (this contract).
102
- /// MUST be called by release manager.
123
+ /// @dev Wires release registry, token registry and staking contract to this registry.
124
+ /// MUST be called by release registry.
103
125
  function initialize(
104
- address releaseManager,
126
+ address releaseRegistry,
105
127
  address tokenRegistry,
106
128
  address staking
107
129
  )
108
130
  external
109
131
  initializer()
132
+ onlyDeployer()
110
133
  {
111
- _releaseManager = ReleaseManager(releaseManager);
134
+ // store links to supporting contracts
135
+ _releaseRegistry = ReleaseRegistry(releaseRegistry);
112
136
  _tokenRegistryAddress = tokenRegistry;
113
137
  _stakingAddress = staking;
114
138
 
139
+ // register staking contract
115
140
  _stakingNftId = _registerStaking();
116
141
  }
117
142
 
143
+ /// @inheritdoc IRegistry
144
+ function registerRegistry(
145
+ NftId nftId,
146
+ uint256 chainId,
147
+ address registryAddress
148
+ )
149
+ external
150
+ restricted()
151
+ {
152
+ // registration of chain registries only allowed on mainnet
153
+ if (block.chainid != 1) {
154
+ revert ErrorRegistryNotOnMainnet(block.chainid);
155
+ }
156
+
157
+ // registry chain id is not zero
158
+ if(chainId == 0) {
159
+ revert ErrorRegistryChainRegistryChainIdZero(nftId);
160
+ }
161
+
162
+ // registry address is not zero
163
+ if (registryAddress == address(0)) {
164
+ revert ErrorRegistryChainRegistryAddressZero(nftId, chainId);
165
+ }
166
+
167
+ // registry nft id matches registry chain id
168
+ uint256 expectedRegistryId = CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID, chainId);
169
+ if (nftId != NftIdLib.toNftId(expectedRegistryId)) {
170
+ revert ErrorRegistryChainRegistryNftIdInvalid(nftId, chainId);
171
+ }
172
+
173
+ emit LogChainRegistryRegistration(nftId, chainId, registryAddress);
174
+
175
+ _registerRegistryForNft(
176
+ chainId,
177
+ ObjectInfo({
178
+ nftId: nftId,
179
+ parentNftId: REGISTRY_NFT_ID,
180
+ objectType: REGISTRY(),
181
+ isInterceptor: false,
182
+ objectAddress: registryAddress,
183
+ initialOwner: NFT_LOCK_ADDRESS,
184
+ data: ""
185
+ }),
186
+ false); // do not update address lookup for objects on a different chain
187
+ }
188
+
189
+ // TODO limit service owner to registry admin?
190
+ /// @inheritdoc IRegistry
118
191
  function registerService(
119
192
  ObjectInfo memory info,
120
193
  VersionPart version,
121
194
  ObjectType domain
122
195
  )
123
196
  external
124
- onlyReleaseManager
197
+ restricted()
125
198
  returns(NftId nftId)
126
199
  {
200
+ // service address is defined
127
201
  address service = info.objectAddress;
128
- /* must be guaranteed by release manager
129
202
  if(service == address(0)) {
130
- revert();
203
+ revert ErrorRegistryServiceAddressZero();
131
204
  }
132
205
 
206
+ // version is defined
133
207
  if(version.eqz()) {
134
- revert();
208
+ revert ErrorRegistryServiceVersionZero(service);
209
+ }
210
+ // service domain is defined
211
+ if(domain.eqz()) {
212
+ revert ErrorRegistryServiceDomainZero(service, version);
135
213
  }
136
214
 
215
+ // service has proper type
137
216
  if(info.objectType != SERVICE()) {
138
- revert();
217
+ revert ErrorRegistryNotService(service, info.objectType);
139
218
  }
140
- if(info.parentType != REGISTRY()) {
141
- revert();
142
- }
143
- info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
144
- */
145
219
 
146
- if(domain.eqz()) {
147
- revert ErrorRegistryDomainZero(service);
220
+ // service parent has registry type
221
+ if(info.parentNftId != REGISTRY_NFT_ID) {
222
+ revert ErrorRegistryServiceParentNotRegistry(service, version, info.parentNftId);
148
223
  }
149
224
 
150
- if(_service[version][domain] > address(0)) {
151
- revert ErrorRegistryDomainAlreadyRegistered(service, version, domain);
225
+ // service has not already been registered
226
+ if(_service[version][domain] != address(0)) {
227
+ revert ErrorRegistryServiceDomainAlreadyRegistered(service, version, domain);
152
228
  }
153
-
154
- _service[version][domain] = service;
155
229
 
156
- nftId = _register(info);
230
+ _service[version][domain] = service;
157
231
 
158
232
  emit LogServiceRegistration(version, domain);
233
+
234
+ nftId = _register(info);
159
235
  }
160
236
 
237
+
238
+ /// @inheritdoc IRegistry
161
239
  function register(ObjectInfo memory info)
162
240
  external
163
- onlyRegistryService
241
+ restricted()
164
242
  returns(NftId nftId)
165
243
  {
244
+ address objectAddress = info.objectAddress;
166
245
  ObjectType objectType = info.objectType;
167
246
  ObjectType parentType = _info[info.parentNftId].objectType;
168
247
 
169
- // only valid core types combinations
170
- if(info.objectAddress == address(0))
171
- {
248
+ // check type combinations for core objects
249
+ if(objectAddress == address(0)) {
172
250
  if(_coreObjectCombinations[objectType][parentType] == false) {
173
- revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
251
+ revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
174
252
  }
175
253
  }
176
- else
177
- {
254
+ // check type combinations for contract objects
255
+ else {
178
256
  if(_coreContractCombinations[objectType][parentType] == false) {
179
- revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
257
+ revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
180
258
  }
181
259
  }
182
260
 
183
261
  nftId = _register(info);
184
262
  }
185
263
 
264
+
265
+ /// @inheritdoc IRegistry
186
266
  function registerWithCustomType(ObjectInfo memory info)
187
267
  external
188
- onlyRegistryService
268
+ restricted()
189
269
  returns(NftId nftId)
190
270
  {
191
271
  ObjectType objectType = info.objectType;
@@ -196,58 +276,71 @@ contract Registry is
196
276
  }
197
277
 
198
278
  if(
279
+ objectType == ObjectTypeLib.zero() ||
280
+ parentType == ObjectTypeLib.zero() ||
199
281
  parentType == PROTOCOL() ||
200
- parentType == REGISTRY() ||
201
282
  parentType == SERVICE()
202
283
  ) {
203
- revert ErrorRegistryTypesCombinationInvalid(objectType, parentType);
284
+ revert ErrorRegistryTypesCombinationInvalid(info.objectAddress, objectType, parentType);
204
285
  }
205
286
 
206
- _register(info);
287
+ nftId = _register(info);
207
288
  }
208
289
 
209
290
 
210
291
  /// @dev earliest GIF major version
211
292
  function getInitialVersion() external view returns (VersionPart) {
212
- return _releaseManager.getInitialVersion();
293
+ return VersionPartLib.toVersionPart(_releaseRegistry.INITIAL_GIF_VERSION());
213
294
  }
214
295
 
215
296
  /// @dev next GIF release version to be released
216
297
  function getNextVersion() external view returns (VersionPart) {
217
- return _releaseManager.getNextVersion();
298
+ return _releaseRegistry.getNextVersion();
218
299
  }
219
300
 
220
301
  /// @dev latest active GIF release version
221
302
  function getLatestVersion() external view returns (VersionPart) {
222
- return _releaseManager.getLatestVersion();
303
+ return _releaseRegistry.getLatestVersion();
223
304
  }
224
305
 
225
306
  function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
226
- return _releaseManager.getReleaseInfo(version);
307
+ return _releaseRegistry.getReleaseInfo(version);
308
+ }
309
+
310
+ function chainIds() public view returns (uint256) {
311
+ return _chainId.length;
312
+ }
313
+
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];
227
320
  }
228
321
 
229
322
  function getObjectCount() external view returns (uint256) {
230
- return _chainNft.totalSupply();
323
+ return CHAIN_NFT.totalSupply();
231
324
  }
232
325
 
233
326
  function getNftId() external view returns (NftId nftId) {
234
- return _registryNftId;
327
+ return REGISTRY_NFT_ID;
235
328
  }
236
329
 
237
330
  function getProtocolNftId() external view returns (NftId nftId) {
238
- return _protocolNftId;
331
+ return PROTOCOL_NFT_ID;
239
332
  }
240
333
 
241
- function getNftId(address object) external view returns (NftId id) {
334
+ function getNftIdForAddress(address object) external view returns (NftId id) {
242
335
  return _nftIdByAddress[object];
243
336
  }
244
337
 
245
338
  function ownerOf(NftId nftId) public view returns (address) {
246
- return _chainNft.ownerOf(nftId.toInt());
339
+ return CHAIN_NFT.ownerOf(nftId.toInt());
247
340
  }
248
341
 
249
342
  function ownerOf(address contractAddress) public view returns (address) {
250
- return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
343
+ return CHAIN_NFT.ownerOf(_nftIdByAddress[contractAddress].toInt());
251
344
  }
252
345
 
253
346
  function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
@@ -277,7 +370,7 @@ contract Registry is
277
370
 
278
371
  function isActiveRelease(VersionPart version) external view returns (bool)
279
372
  {
280
- return _releaseManager.isActiveRelease(version);
373
+ return _releaseRegistry.isActiveRelease(version);
281
374
  }
282
375
 
283
376
  function getStakingAddress() external view returns (address staking) {
@@ -298,20 +391,20 @@ contract Registry is
298
391
  service = _service[releaseVersion][serviceDomain];
299
392
  }
300
393
 
301
- function getReleaseManagerAddress() external view returns (address) {
302
- return address(_releaseManager);
394
+ function getReleaseRegistryAddress() external view returns (address) {
395
+ return address(_releaseRegistry);
303
396
  }
304
397
 
305
398
  function getChainNftAddress() external view override returns (address) {
306
- return address(_chainNft);
399
+ return address(CHAIN_NFT);
307
400
  }
308
401
 
309
402
  function getRegistryAdminAddress() external view returns (address) {
310
- return address(_admin);
403
+ return address(ADMIN);
311
404
  }
312
405
 
313
406
  function getAuthority() external view returns (address) {
314
- return _admin.authority();
407
+ return ADMIN.authority();
315
408
  }
316
409
 
317
410
  function getOwner() public view returns (address owner) {
@@ -331,30 +424,37 @@ contract Registry is
331
424
  // Internals
332
425
 
333
426
  /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
334
- // TODO registration of precompile addresses
335
427
  function _register(ObjectInfo memory info)
336
428
  internal
337
429
  returns(NftId nftId)
338
430
  {
339
- ObjectType objectType = info.objectType;
431
+ ObjectType objectType = info.objectType; // do not care here, never PROTOCOL(), REGISTRY()
340
432
  bool isInterceptor = info.isInterceptor;
341
- address objectAddress = info.objectAddress;
342
- address owner = info.initialOwner;
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
343
435
 
344
- NftId parentNftId = info.parentNftId;
436
+ NftId parentNftId = info.parentNftId; // do not care here, can not be 0
345
437
  ObjectInfo memory parentInfo = _info[parentNftId];
346
- ObjectType parentType = parentInfo.objectType; // see function header
347
- address parentAddress = parentInfo.objectAddress;
438
+ address parentAddress = parentInfo.objectAddress; // can be 0
348
439
 
349
440
  // parent is contract -> need to check? -> check before minting
350
441
  // special case: staking: to protocol possible as well
351
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
352
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
353
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
354
- if(objectType != STAKE()) {
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()) {
355
448
  if(parentAddress == address(0)) {
356
449
  revert ErrorRegistryParentAddressZero();
357
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
+ }
358
458
  }
359
459
 
360
460
  address interceptorAddress = _getInterceptor(
@@ -364,23 +464,17 @@ contract Registry is
364
464
  parentInfo.isInterceptor,
365
465
  parentAddress);
366
466
 
367
- uint256 tokenId = _chainNft.getNextTokenId();
467
+ uint256 tokenId = CHAIN_NFT.getNextTokenId();
368
468
  nftId = NftIdLib.toNftId(tokenId);
369
469
  info.nftId = nftId;
370
- _info[nftId] = info;
371
-
372
- if(objectAddress > address(0)) {
373
- if(_nftIdByAddress[objectAddress].gtz()) {
374
- revert ErrorRegistryContractAlreadyRegistered(objectAddress);
375
- }
376
470
 
377
- _nftIdByAddress[objectAddress] = nftId;
378
- }
471
+ _info[nftId] = info;
472
+ _setAddressForNftId(nftId, objectAddress);
379
473
 
380
474
  emit LogRegistration(nftId, parentNftId, objectType, isInterceptor, objectAddress, owner);
381
475
 
382
476
  // calls nft receiver(1) and interceptor(2)
383
- uint256 mintedTokenId = _chainNft.mint(
477
+ uint256 mintedTokenId = CHAIN_NFT.mint(
384
478
  owner,
385
479
  interceptorAddress,
386
480
  EMPTY_URI);
@@ -429,111 +523,153 @@ contract Registry is
429
523
  private
430
524
  returns (NftId protocolNftId)
431
525
  {
432
- uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
526
+ uint256 protocolId = CHAIN_NFT.PROTOCOL_NFT_ID();
433
527
  protocolNftId = NftIdLib.toNftId(protocolId);
434
528
 
435
- _info[protocolNftId] = ObjectInfo({
436
- nftId: protocolNftId,
437
- parentNftId: NftIdLib.zero(),
438
- objectType: PROTOCOL(),
439
- isInterceptor: false,
440
- objectAddress: address(0),
441
- initialOwner: NFT_LOCK_ADDRESS,
442
- data: ""
443
- });
444
-
445
- _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
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);
446
539
  }
447
540
 
448
- /// @dev registry registration
449
- /// might also register the global registry when not on mainnet
541
+ /// @dev register this registry
450
542
  function _registerRegistry()
451
- private
543
+ internal
544
+ virtual
452
545
  returns (NftId registryNftId)
453
546
  {
454
- uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
455
- registryNftId = NftIdLib.toNftId(registryId);
456
- NftId parentNftId;
457
-
458
- if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
459
- {// we're not the global registry
460
- _registerGlobalRegistry();
461
- parentNftId = NftIdLib.toNftId(_chainNft.GLOBAL_REGISTRY_ID());
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);
462
581
  }
463
- else
464
- {// we are global registry
465
- parentNftId = _protocolNftId;
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);
466
594
  }
467
595
 
468
- _info[registryNftId] = ObjectInfo({
469
- nftId: registryNftId,
470
- parentNftId: parentNftId,
471
- objectType: REGISTRY(),
472
- isInterceptor: false,
473
- objectAddress: address(this),
474
- initialOwner: NFT_LOCK_ADDRESS,
475
- data: ""
476
- });
596
+ // update registry lookup variables
597
+ _registryNftIdByChainId[chainId] = info.nftId;
598
+ _chainId.push(chainId);
477
599
 
478
- _nftIdByAddress[address(this)] = registryNftId;
479
- _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
600
+ // register the registry info
601
+ _registerForNft(
602
+ info,
603
+ updateAddressLookup);
480
604
  }
481
605
 
482
- /// @dev global registry registration for non mainnet registries
483
- function _registerGlobalRegistry()
484
- private
485
- {
486
- uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
487
- NftId globalRegistryNftId = NftIdLib.toNftId(globalRegistryId);
488
-
489
- _info[globalRegistryNftId] = ObjectInfo({
490
- nftId: globalRegistryNftId,
491
- parentNftId: NftIdLib.toNftId(_chainNft.PROTOCOL_NFT_ID()),
492
- objectType: REGISTRY(),
493
- isInterceptor: false,
494
- objectAddress: address(0),
495
- initialOwner: NFT_LOCK_ADDRESS,
496
- data: ""
497
- });
498
-
499
- _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
500
- }
501
- // depends on _registryNftId and _stakingAddress
606
+ /// @dev staking registration
502
607
  function _registerStaking()
503
608
  private
504
609
  returns (NftId stakingNftId)
505
610
  {
506
611
  address stakingOwner = IRegisterable(_stakingAddress).getOwner();
507
- uint256 stakingId = _chainNft.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
612
+ uint256 stakingId = CHAIN_NFT.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
508
613
  stakingNftId = NftIdLib.toNftId(stakingId);
509
614
 
510
- _info[stakingNftId] = ObjectInfo({
511
- nftId: stakingNftId,
512
- parentNftId: _registryNftId,
513
- objectType: STAKING(),
514
- isInterceptor: false,
515
- objectAddress: _stakingAddress,
516
- initialOwner: stakingOwner,
517
- data: ""
518
- });
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
+ }
519
626
 
520
- _nftIdByAddress[_stakingAddress] = stakingNftId;
521
- // reverts if nftId was already minted
522
- _chainNft.mint(stakingOwner, stakingId);
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;
635
+
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
+ }
523
662
  }
524
663
 
525
664
  /// @dev defines which object - parent types relations are allowed to register
526
- // IMPORTANT:
527
- // 1) EACH object type MUST have only one parent type across ALL mappings
528
- // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
529
- // 3) DO NOT use REGISTRY as object type
530
- // 2) DO NOT use PROTOCOL and "ObjectTypeLib.zero"
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
531
667
  function _setupValidCoreTypesAndCombinations()
532
- private
668
+ private
533
669
  {
670
+ _coreTypes[PROTOCOL()] = true;
534
671
  _coreTypes[REGISTRY()] = true;
535
672
  _coreTypes[SERVICE()] = true;
536
- _coreTypes[TOKEN()] = true;
537
673
  _coreTypes[INSTANCE()] = true;
538
674
  _coreTypes[PRODUCT()] = true;
539
675
  _coreTypes[POOL()] = true;
@@ -545,28 +681,16 @@ contract Registry is
545
681
  _coreTypes[STAKING()] = true;
546
682
  _coreTypes[STAKE()] = true;
547
683
 
548
- uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
549
- if(registryId == _chainNft.GLOBAL_REGISTRY_ID()) {
550
- // we are global registry
551
- // object is registry from different chain
552
- // parent is global registry, this contract
553
- _coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
554
- //_coreObjectCombinations[REGISTRY()][REGISTRY()] = true;
555
- } else {
556
- // we are not global registry
557
- // object is local registry, this contract
558
- // parent is global registry, object with 0 address or registry from mainnet???
559
- }
560
- _coreContractCombinations[STAKING()][REGISTRY()] = true; // only for chain staking contract
561
- _coreContractCombinations[TOKEN()][REGISTRY()] = true;
562
- //_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
684
+ // types combinations allowed to use with register() function ONLY
563
685
  _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
564
686
 
687
+ // components with instance parent
565
688
  _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
566
689
  _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
567
690
  _coreContractCombinations[ORACLE()][INSTANCE()] = true;
568
691
  _coreContractCombinations[POOL()][INSTANCE()] = true;
569
692
 
693
+ // objects with component parents
570
694
  _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
571
695
  _coreObjectCombinations[POLICY()][PRODUCT()] = true;
572
696
  _coreObjectCombinations[BUNDLE()][POOL()] = true;