@etherisc/gif-next 0.0.2-e2d8c7d-942 → 0.0.2-e30eae1-836

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