@etherisc/gif-next 0.0.2-ab4c2da-820 → 0.0.2-ab82da8-607

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