@etherisc/gif-next 0.0.2-d63a6a1-078 → 0.0.2-d6609af-567

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