@etherisc/gif-next 0.0.2-e5a2253-213 → 0.0.2-e5bdc7a-937

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