@etherisc/gif-next 0.0.2-ffba655 → 3.0.0-05a0348-829

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 (709) hide show
  1. package/README.md +285 -68
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1061 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +806 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +837 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1735 -0
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +2053 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1416 -0
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +817 -0
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  17. package/artifacts/contracts/{instance/access → authorization}/IAccess.sol/IAccess.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1412 -0
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +465 -0
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  23. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +407 -0
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +652 -0
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  27. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1140 -0
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  29. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +844 -0
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  31. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +845 -0
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  33. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1882 -0
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  35. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +950 -0
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  37. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +744 -0
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  39. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +1357 -0
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1399 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +844 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  47. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1963 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  49. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +844 -0
  50. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  51. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  52. package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.dbg.json +4 -0
  53. package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.json +799 -0
  54. package/artifacts/contracts/examples/flight/FlightMessageVerifier.sol/FlightMessageVerifier.dbg.json +4 -0
  55. package/artifacts/contracts/examples/flight/FlightMessageVerifier.sol/FlightMessageVerifier.json +229 -0
  56. package/artifacts/contracts/examples/flight/FlightNft.sol/FlightNft.dbg.json +4 -0
  57. package/artifacts/contracts/examples/flight/FlightNft.sol/FlightNft.json +801 -0
  58. package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.dbg.json +4 -0
  59. package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.json +1278 -0
  60. package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.dbg.json +4 -0
  61. package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.json +896 -0
  62. package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.dbg.json +4 -0
  63. package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.json +1391 -0
  64. package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.dbg.json +4 -0
  65. package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.json +844 -0
  66. package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.dbg.json +4 -0
  67. package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.json +2214 -0
  68. package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.dbg.json +4 -0
  69. package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.json +891 -0
  70. package/artifacts/contracts/examples/flight/FlightProductManager.sol/FlightProductManager.dbg.json +4 -0
  71. package/artifacts/contracts/examples/flight/FlightProductManager.sol/FlightProductManager.json +711 -0
  72. package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.dbg.json +4 -0
  73. package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.json +586 -0
  74. package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.dbg.json +4 -0
  75. package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.json +901 -0
  76. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  77. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1335 -0
  78. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  79. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +844 -0
  80. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  81. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1086 -0
  82. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  83. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1562 -0
  84. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  85. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +844 -0
  86. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  87. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2500 -0
  88. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  89. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +844 -0
  90. package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
  91. package/artifacts/contracts/instance/BaseStore.sol/BaseStore.json +382 -0
  92. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  93. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +851 -0
  94. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +4 -0
  95. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.json +354 -0
  96. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  97. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +734 -451
  98. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +1175 -0
  100. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  101. package/artifacts/contracts/instance/Instance.sol/Instance.json +810 -530
  102. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  103. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +2400 -0
  104. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  105. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +872 -0
  106. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  107. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2687 -0
  108. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1437 -0
  110. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  111. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +792 -0
  112. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  113. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +3089 -0
  114. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +4 -0
  115. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +3477 -0
  116. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  117. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +866 -0
  118. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  119. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  120. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  121. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +137 -0
  122. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  123. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  124. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  125. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
  126. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  127. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +192 -0
  128. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  129. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  130. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  131. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IBundle.sol/IBundle.json} +2 -2
  132. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  133. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IComponents.sol/IComponents.json} +2 -2
  134. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  135. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  136. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  137. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  138. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  139. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.json +10 -0
  140. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  141. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  142. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  143. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +872 -0
  144. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  145. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +849 -0
  146. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  147. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  148. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  149. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +687 -0
  150. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  151. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +768 -0
  152. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  153. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +788 -0
  154. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  155. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1048 -0
  156. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  157. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +830 -0
  158. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  159. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1157 -0
  160. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  161. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +844 -0
  162. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  163. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1450 -0
  164. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  165. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +886 -0
  166. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  167. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +1045 -0
  168. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  169. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +820 -0
  170. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  171. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1461 -0
  172. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  173. package/artifacts/contracts/pool/Pool.sol/Pool.json +940 -0
  174. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  175. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +517 -0
  176. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  177. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1845 -0
  178. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  179. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +886 -0
  180. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  181. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +1036 -0
  182. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  183. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +810 -0
  184. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  185. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1074 -0
  186. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  187. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +844 -0
  188. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  189. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1542 -0
  190. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  191. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +906 -0
  192. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  193. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +804 -0
  194. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  195. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +1110 -0
  196. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  197. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +1048 -0
  198. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  199. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +652 -0
  200. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  201. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +931 -0
  202. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  203. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +665 -0
  204. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  205. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1416 -0
  206. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  207. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +791 -0
  208. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  209. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +874 -0
  210. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  211. package/artifacts/contracts/product/PricingService.sol/PricingService.json +932 -0
  212. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  213. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +834 -0
  214. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  215. package/artifacts/contracts/product/Product.sol/Product.json +1032 -0
  216. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  217. package/artifacts/contracts/product/RiskService.sol/RiskService.json +873 -0
  218. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  219. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +794 -0
  220. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  221. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +295 -2
  222. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  223. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +1061 -113
  224. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  225. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +1072 -0
  226. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  227. package/artifacts/contracts/{instance/component/IComponent.sol/IInstanceLinked.json → registry/IRelease.sol/IRelease.json} +6 -6
  228. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  229. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +39 -0
  230. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  231. package/artifacts/contracts/registry/Registry.sol/Registry.json +1553 -176
  232. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  233. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2255 -0
  234. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  235. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1112 -0
  236. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  237. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1298 -0
  238. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  239. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +793 -0
  240. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  241. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2271 -0
  242. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  243. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  244. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  245. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1411 -0
  246. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  247. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +705 -0
  248. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  249. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +721 -0
  250. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  251. package/artifacts/contracts/shared/Component.sol/Component.json +620 -0
  252. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  253. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1767 -0
  254. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  255. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +882 -0
  256. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  257. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +632 -0
  258. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  259. package/artifacts/contracts/{registry/IRegistry.sol/IOwnable.json → shared/ContractLib.sol/IInstanceAdminHelper.json} +5 -5
  260. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  261. package/artifacts/contracts/{instance/access/IAccess.sol/IAccessCheckRole.json → shared/ContractLib.sol/ITargetHelper.json} +4 -9
  262. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  263. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  264. package/artifacts/contracts/shared/IAuthorizedComponent.sol/IAuthorizedComponent.dbg.json +4 -0
  265. package/artifacts/contracts/shared/IAuthorizedComponent.sol/IAuthorizedComponent.json +558 -0
  266. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  267. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +545 -0
  268. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  269. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1391 -0
  270. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  271. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +622 -0
  272. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  273. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +146 -0
  274. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  275. package/artifacts/contracts/{registry/IRegistry.sol/IRegisterable.json → shared/INftOwnable.sol/INftOwnable.json} +72 -72
  276. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  277. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +175 -0
  278. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  279. package/artifacts/contracts/{instance/component/ComponentModule.sol/ComponentModule.json → shared/IRegisterable.sol/IRegisterable.json} +179 -158
  280. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  281. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegistryLinked.sol}/IRegistryLinked.json +5 -19
  282. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  283. package/artifacts/contracts/shared/IService.sol/IService.json +428 -0
  284. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  285. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  286. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  287. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +710 -0
  288. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  289. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +174 -0
  290. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  291. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  292. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  293. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +228 -0
  294. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  295. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +198 -0
  296. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  297. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +397 -0
  298. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  299. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +58 -0
  300. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  301. package/artifacts/contracts/shared/Service.sol/Service.json +482 -0
  302. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  303. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +696 -0
  304. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  305. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +457 -0
  306. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  307. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  308. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  309. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +2697 -0
  310. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  311. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +947 -0
  312. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
  313. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
  314. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  315. package/artifacts/contracts/staking/Staking.sol/Staking.json +3125 -0
  316. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  317. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +465 -0
  318. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  319. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +867 -0
  320. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  321. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +704 -0
  322. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  323. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +1144 -0
  324. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  325. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +786 -0
  326. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  327. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +3097 -0
  328. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
  329. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +304 -0
  330. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  331. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +674 -0
  332. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  333. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  334. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  335. package/artifacts/contracts/type/Amount.sol/AmountLib.json +393 -0
  336. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  337. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +270 -0
  338. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  339. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
  340. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  341. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +203 -0
  342. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  343. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  344. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  345. package/artifacts/contracts/type/Fee.sol/FeeLib.json +368 -0
  346. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  347. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  348. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  349. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  350. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  351. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +228 -0
  352. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  353. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  354. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  355. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +238 -0
  356. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  357. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  358. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  359. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +161 -0
  360. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  361. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  362. package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.dbg.json +4 -0
  363. package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.json +33 -0
  364. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  365. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +204 -0
  366. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  367. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +254 -0
  368. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  369. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +308 -0
  370. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  371. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +148 -0
  372. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  373. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  374. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  375. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +105 -0
  376. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  377. package/artifacts/contracts/type/String.sol/StrLib.json +199 -0
  378. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  379. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +344 -0
  380. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  381. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +567 -0
  382. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  383. package/artifacts/contracts/type/Version.sol/VersionLib.json +158 -0
  384. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  385. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +167 -0
  386. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  387. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +65 -0
  388. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  389. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +672 -0
  390. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  391. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +142 -0
  392. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  393. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +88 -0
  394. package/contracts/accounting/AccountingService.sol +262 -0
  395. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  396. package/contracts/accounting/IAccountingService.sol +46 -0
  397. package/contracts/authorization/AccessAdmin.sol +662 -0
  398. package/contracts/authorization/AccessAdminLib.sol +695 -0
  399. package/contracts/authorization/AccessManagerCloneable.sol +144 -0
  400. package/contracts/authorization/Authorization.sol +190 -0
  401. package/contracts/authorization/IAccess.sol +66 -0
  402. package/contracts/authorization/IAccessAdmin.sol +143 -0
  403. package/contracts/authorization/IAuthorization.sol +26 -0
  404. package/contracts/authorization/IServiceAuthorization.sol +78 -0
  405. package/contracts/authorization/ServiceAuthorization.sol +300 -0
  406. package/contracts/distribution/BasicDistribution.sol +140 -0
  407. package/contracts/distribution/BasicDistributionAuthorization.sol +67 -0
  408. package/contracts/distribution/Distribution.sol +245 -0
  409. package/contracts/distribution/DistributionService.sol +453 -0
  410. package/contracts/distribution/DistributionServiceManager.sol +39 -0
  411. package/contracts/distribution/IDistributionComponent.sol +43 -0
  412. package/contracts/distribution/IDistributionService.sol +116 -0
  413. package/contracts/examples/fire/DamageLevel.sol +59 -0
  414. package/contracts/examples/fire/FirePool.sol +86 -0
  415. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  416. package/contracts/examples/fire/FireProduct.sol +433 -0
  417. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  418. package/contracts/examples/fire/FireUSD.sol +26 -0
  419. package/contracts/examples/flight/FlightLib.sol +337 -0
  420. package/contracts/examples/flight/FlightMessageVerifier.sol +128 -0
  421. package/contracts/examples/flight/FlightNft.sol +234 -0
  422. package/contracts/examples/flight/FlightOracle.sol +226 -0
  423. package/contracts/examples/flight/FlightOracleAuthorization.sol +57 -0
  424. package/contracts/examples/flight/FlightPool.sol +89 -0
  425. package/contracts/examples/flight/FlightPoolAuthorization.sol +37 -0
  426. package/contracts/examples/flight/FlightProduct.sol +687 -0
  427. package/contracts/examples/flight/FlightProductAuthorization.sol +70 -0
  428. package/contracts/examples/flight/FlightProductManager.sol +49 -0
  429. package/contracts/examples/flight/FlightUSD.sol +28 -0
  430. package/contracts/examples/flight/originalV1.sol +396 -0
  431. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  432. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  433. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  434. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  435. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  436. package/contracts/examples/unpermissioned/SimpleProduct.sol +437 -0
  437. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  438. package/contracts/instance/BaseStore.sol +97 -0
  439. package/contracts/instance/BundleSet.sol +130 -0
  440. package/contracts/instance/IBaseStore.sol +45 -0
  441. package/contracts/instance/IInstance.sol +151 -15
  442. package/contracts/instance/IInstanceService.sol +121 -0
  443. package/contracts/instance/Instance.sol +332 -45
  444. package/contracts/instance/InstanceAdmin.sol +306 -0
  445. package/contracts/instance/InstanceAuthorizationV3.sol +275 -0
  446. package/contracts/instance/InstanceReader.sol +642 -0
  447. package/contracts/instance/InstanceService.sol +522 -0
  448. package/contracts/instance/InstanceServiceManager.sol +39 -0
  449. package/contracts/instance/InstanceStore.sol +323 -0
  450. package/contracts/instance/ProductStore.sol +290 -0
  451. package/contracts/instance/RiskSet.sol +126 -0
  452. package/contracts/instance/TargetNames.sol +10 -0
  453. package/contracts/instance/base/BalanceStore.sol +121 -0
  454. package/contracts/instance/base/Cloneable.sol +28 -0
  455. package/contracts/instance/base/ObjectCounter.sol +20 -0
  456. package/contracts/instance/base/ObjectLifecycle.sol +109 -0
  457. package/contracts/instance/base/ObjectSet.sol +77 -0
  458. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  459. package/contracts/instance/module/IBundle.sol +21 -0
  460. package/contracts/instance/module/IComponents.sol +60 -0
  461. package/contracts/instance/module/IDistribution.sol +54 -0
  462. package/contracts/instance/module/IPolicy.sol +105 -0
  463. package/contracts/instance/module/IRisk.sol +16 -0
  464. package/contracts/mock/Dip.sol +26 -0
  465. package/contracts/oracle/BasicOracle.sol +45 -0
  466. package/contracts/oracle/BasicOracleAuthorization.sol +53 -0
  467. package/contracts/oracle/IOracle.sol +41 -0
  468. package/contracts/oracle/IOracleComponent.sol +33 -0
  469. package/contracts/oracle/IOracleService.sol +66 -0
  470. package/contracts/oracle/Oracle.sol +152 -0
  471. package/contracts/oracle/OracleService.sol +310 -0
  472. package/contracts/oracle/OracleServiceManager.sol +39 -0
  473. package/contracts/pool/BasicPool.sol +161 -0
  474. package/contracts/pool/BasicPoolAuthorization.sol +81 -0
  475. package/contracts/pool/BundleService.sol +386 -0
  476. package/contracts/pool/BundleServiceManager.sol +39 -0
  477. package/contracts/pool/IBundleService.sol +116 -0
  478. package/contracts/pool/IPoolComponent.sol +62 -0
  479. package/contracts/pool/IPoolService.sol +170 -0
  480. package/contracts/pool/Pool.sol +331 -0
  481. package/contracts/pool/PoolLib.sol +341 -0
  482. package/contracts/pool/PoolService.sol +614 -0
  483. package/contracts/pool/PoolServiceManager.sol +39 -0
  484. package/contracts/product/ApplicationService.sol +327 -0
  485. package/contracts/product/ApplicationServiceManager.sol +38 -0
  486. package/contracts/product/BasicProduct.sol +48 -0
  487. package/contracts/product/BasicProductAuthorization.sol +64 -0
  488. package/contracts/product/ClaimService.sol +626 -0
  489. package/contracts/product/ClaimServiceManager.sol +38 -0
  490. package/contracts/product/IApplicationService.sol +88 -0
  491. package/contracts/product/IClaimService.sol +136 -0
  492. package/contracts/product/IPolicyService.sol +102 -0
  493. package/contracts/product/IPricingService.sol +40 -0
  494. package/contracts/product/IProductComponent.sol +62 -0
  495. package/contracts/product/IRiskService.sol +48 -0
  496. package/contracts/product/PolicyService.sol +645 -0
  497. package/contracts/product/PolicyServiceLib.sol +141 -0
  498. package/contracts/product/PolicyServiceManager.sol +39 -0
  499. package/contracts/product/PricingService.sol +306 -0
  500. package/contracts/product/PricingServiceManager.sol +39 -0
  501. package/contracts/product/Product.sol +491 -0
  502. package/contracts/product/RiskService.sol +189 -0
  503. package/contracts/product/RiskServiceManager.sol +39 -0
  504. package/contracts/registry/ChainNft.sol +176 -100
  505. package/contracts/registry/IRegistry.sol +149 -47
  506. package/contracts/registry/IRegistryService.sol +62 -0
  507. package/contracts/registry/IRelease.sol +29 -0
  508. package/contracts/registry/ITransferInterceptor.sol +6 -0
  509. package/contracts/registry/Registry.sol +673 -117
  510. package/contracts/registry/RegistryAdmin.sol +179 -0
  511. package/contracts/registry/RegistryAuthorization.sol +335 -0
  512. package/contracts/registry/RegistryService.sol +241 -0
  513. package/contracts/registry/RegistryServiceManager.sol +53 -0
  514. package/contracts/registry/ReleaseAdmin.sol +206 -0
  515. package/contracts/registry/ReleaseLifecycle.sol +32 -0
  516. package/contracts/registry/ReleaseRegistry.sol +525 -0
  517. package/contracts/registry/ServiceAuthorizationV3.sol +342 -0
  518. package/contracts/registry/TokenRegistry.sol +317 -0
  519. package/contracts/shared/Component.sol +210 -0
  520. package/contracts/shared/ComponentService.sol +725 -0
  521. package/contracts/shared/ComponentServiceManager.sol +38 -0
  522. package/contracts/shared/ContractLib.sol +312 -0
  523. package/contracts/shared/EcdsaChecker.sol +5 -0
  524. package/contracts/shared/IAuthorizedComponent.sol +15 -0
  525. package/contracts/shared/IComponent.sol +54 -0
  526. package/contracts/shared/IComponentService.sol +133 -0
  527. package/contracts/shared/IInstanceLinkedComponent.sol +27 -0
  528. package/contracts/shared/ILifecycle.sol +31 -0
  529. package/contracts/shared/INftOwnable.sol +27 -0
  530. package/contracts/shared/IPolicyHolder.sol +35 -0
  531. package/contracts/shared/IRegisterable.sol +36 -0
  532. package/contracts/shared/IRegistryLinked.sol +11 -0
  533. package/contracts/shared/IService.sol +23 -0
  534. package/contracts/shared/InitializableERC165.sol +35 -0
  535. package/contracts/shared/InstanceLinkedComponent.sol +233 -0
  536. package/contracts/shared/Lifecycle.sol +88 -0
  537. package/contracts/shared/NftIdSet.sol +65 -0
  538. package/contracts/shared/NftOwnable.sol +129 -0
  539. package/contracts/shared/PolicyHolder.sol +63 -0
  540. package/contracts/shared/Registerable.sol +106 -0
  541. package/contracts/shared/RegistryLinked.sol +38 -0
  542. package/contracts/shared/Service.sol +67 -0
  543. package/contracts/shared/TokenHandler.sol +342 -0
  544. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  545. package/contracts/staking/IStaking.sol +368 -0
  546. package/contracts/staking/IStakingService.sol +118 -0
  547. package/contracts/staking/ITargetLimitHandler.sol +17 -0
  548. package/contracts/staking/Staking.sol +798 -0
  549. package/contracts/staking/StakingLib.sol +195 -0
  550. package/contracts/staking/StakingManager.sol +53 -0
  551. package/contracts/staking/StakingReader.sol +171 -0
  552. package/contracts/staking/StakingService.sol +321 -0
  553. package/contracts/staking/StakingServiceManager.sol +46 -0
  554. package/contracts/staking/StakingStore.sol +1368 -0
  555. package/contracts/staking/TargetHandler.sol +132 -0
  556. package/contracts/staking/TargetManagerLib.sol +234 -0
  557. package/contracts/type/AddressSet.sol +58 -0
  558. package/contracts/type/Amount.sol +154 -0
  559. package/contracts/type/Blocknumber.sol +137 -0
  560. package/contracts/type/ChainId.sol +101 -0
  561. package/contracts/type/ClaimId.sol +80 -0
  562. package/contracts/type/DistributorType.sol +55 -0
  563. package/contracts/type/Fee.sol +66 -0
  564. package/contracts/type/Key32.sol +50 -0
  565. package/contracts/type/Key32Set.sol +62 -0
  566. package/contracts/type/NftId.sol +85 -0
  567. package/contracts/type/NftIdSet.sol +62 -0
  568. package/contracts/type/ObjectType.sol +278 -0
  569. package/contracts/type/PayoutId.sol +82 -0
  570. package/contracts/type/Referral.sol +96 -0
  571. package/contracts/type/RequestId.sol +75 -0
  572. package/contracts/type/RequestIdSet.sol +62 -0
  573. package/contracts/type/RiskId.sol +75 -0
  574. package/contracts/type/RoleId.sol +180 -0
  575. package/contracts/type/Seconds.sol +124 -0
  576. package/contracts/type/Selector.sol +107 -0
  577. package/contracts/type/StateId.sol +149 -0
  578. package/contracts/type/String.sol +95 -0
  579. package/contracts/type/Timestamp.sol +152 -0
  580. package/contracts/type/UFixed.sol +263 -0
  581. package/contracts/type/Version.sol +159 -0
  582. package/contracts/upgradeability/IVersionable.sol +56 -0
  583. package/contracts/upgradeability/ProxyManager.sol +246 -0
  584. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +24 -0
  585. package/contracts/upgradeability/Versionable.sol +62 -0
  586. package/package.json +27 -7
  587. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  588. package/artifacts/contracts/components/Component.sol/Component.json +0 -179
  589. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  590. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  591. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  592. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  593. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  594. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  595. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  596. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -213
  597. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  598. package/artifacts/contracts/components/Product.sol/Product.json +0 -231
  599. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  600. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  601. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  602. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  603. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  604. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  605. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  606. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  607. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  608. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  609. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  610. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  611. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  612. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  613. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  614. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  615. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  616. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  617. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  618. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  619. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  620. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  621. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  622. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  623. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  624. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  625. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  626. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  627. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  628. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  629. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  630. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  631. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  632. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  633. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -147
  634. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  635. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  636. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  637. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  638. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  639. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  640. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  641. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  642. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  643. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  644. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  645. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  646. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  647. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  648. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  649. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  650. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  651. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  652. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  653. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  654. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  655. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  656. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  657. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  658. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  659. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
  660. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  661. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  662. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  663. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  664. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  665. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  666. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  667. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  668. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  669. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  670. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +0 -174
  671. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  672. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  673. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  674. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -92
  675. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  676. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +0 -174
  677. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  678. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  679. package/contracts/components/Component.sol +0 -62
  680. package/contracts/components/IPool.sol +0 -9
  681. package/contracts/components/IProduct.sol +0 -12
  682. package/contracts/components/Pool.sol +0 -29
  683. package/contracts/components/Product.sol +0 -66
  684. package/contracts/experiment/errors/Require.sol +0 -33
  685. package/contracts/experiment/errors/Revert.sol +0 -39
  686. package/contracts/experiment/inheritance/A.sol +0 -56
  687. package/contracts/experiment/inheritance/B.sol +0 -23
  688. package/contracts/experiment/inheritance/C.sol +0 -28
  689. package/contracts/experiment/inheritance/IA.sol +0 -18
  690. package/contracts/experiment/inheritance/IB.sol +0 -9
  691. package/contracts/experiment/inheritance/IC.sol +0 -11
  692. package/contracts/experiment/types/TypeA.sol +0 -42
  693. package/contracts/experiment/types/TypeB.sol +0 -24
  694. package/contracts/instance/access/Access.sol +0 -218
  695. package/contracts/instance/access/IAccess.sol +0 -83
  696. package/contracts/instance/component/ComponentModule.sol +0 -248
  697. package/contracts/instance/component/IComponent.sol +0 -95
  698. package/contracts/instance/policy/IPolicy.sol +0 -66
  699. package/contracts/instance/policy/PolicyModule.sol +0 -107
  700. package/contracts/instance/pool/IPoolModule.sol +0 -41
  701. package/contracts/instance/pool/PoolModule.sol +0 -86
  702. package/contracts/instance/product/IProductService.sol +0 -46
  703. package/contracts/instance/product/ProductService.sol +0 -108
  704. package/contracts/registry/IChainNft.sol +0 -18
  705. package/contracts/types/Blocknumber.sol +0 -60
  706. package/contracts/types/ChainId.sol +0 -30
  707. package/contracts/types/NftId.sol +0 -35
  708. package/contracts/types/Timestamp.sol +0 -55
  709. package/contracts/types/UFixed.sol +0 -211
@@ -1,182 +1,738 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
6
+ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
7
+
8
+ import {NftId, NftIdLib} from "../type/NftId.sol";
9
+ import {VersionPart, VersionPartLib} from "../type/Version.sol";
10
+ import {ObjectType, ObjectTypeLib, PROTOCOL, REGISTRY, SERVICE, INSTANCE, STAKE, STAKING, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../type/ObjectType.sol";
11
+
12
+ import {ChainNft} from "./ChainNft.sol";
13
+ import {IRegistry} from "./IRegistry.sol";
14
+ import {IRelease} from "./IRelease.sol";
15
+ import {IRegisterable} from "../shared/IRegisterable.sol";
16
+ import {IStaking} from "../staking/IStaking.sol";
17
+ import {ReleaseRegistry} from "./ReleaseRegistry.sol";
18
+ import {RegistryAdmin} from "./RegistryAdmin.sol";
19
+
20
+ /// @dev IMPORTANT
21
+ // Each NFT minted by registry is accosiated with:
22
+ // 1) NFT owner
23
+ // 2) registred contract OR object stored in registered (parent) contract
24
+ // Five registration flows:
25
+ // 1) registerService() -> registers IService address by ReleaseRegistry (ReleaseRegistry is set at deployment time)
26
+ // 2) register() -> registers IRegisterable address by IService (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
27
+ // 3) -> registers object by IService (POLICY, BUNDLE, STAKE)
28
+ // 4) registerWithCustomType() -> registers IRegisterable address with custom type by IService
29
+ // 5) registerRegistry() -> registers IRegistry address (from different chain) by GifAdmin. Works ONLY on mainnet.
30
+ // Note: getters by address MUST not be used with this address (will return 0 or data related to different object or even revert)
31
+
32
+ /// @dev Chain Registry contract implementing IRegistry.
33
+ /// IRegistry for method details.
34
+ contract Registry is
35
+ Initializable,
36
+ AccessManaged,
37
+ IRegistry
38
+ {
39
+ /// @dev Protocol NFT ID
40
+ NftId public immutable PROTOCOL_NFT_ID;
3
41
 
4
- import {IChainNft} from "./IChainNft.sol";
5
- import {IRegistry, IRegistryLinked, IRegisterable} from "./IRegistry.sol";
6
- import {NftId, toNftId} from "../types/NftId.sol";
7
- import {NftIdLib} from "../types/NftId.sol";
42
+ /// @dev Gobal registry NFT ID
43
+ NftId public immutable GLOBAL_REGISTRY_NFT_ID;
8
44
 
9
- contract RegistryLinked is IRegistryLinked {
45
+ /// @dev Gobal registry address on mainnet.
46
+ address public immutable GLOBAL_REGISTRY_ADDRESS;
10
47
 
11
- IRegistry internal _registry;
12
-
13
- constructor(address registry) {
14
- _registry = IRegistry(registry);
48
+ /// @dev Registry NFT ID
49
+ NftId public immutable REGISTRY_NFT_ID;
50
+
51
+ /// @dev Deployer address that authorizes the initializer of this contract.
52
+ address public immutable DEPLOYER;
53
+
54
+ /// @dev Registry admin contract for this registry.
55
+ RegistryAdmin public immutable ADMIN;
56
+
57
+ /// @dev Chain NFT contract that keeps track of the ownership of all registered objects.
58
+ ChainNft public immutable CHAIN_NFT;
59
+
60
+ address public constant NFT_LOCK_ADDRESS = address(0x1);
61
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
62
+ uint256 public constant STAKING_TOKEN_SEQUENCE_ID = 3;
63
+ string public constant EMPTY_URI = "";
64
+
65
+ /// @dev keep track of different registries on different chains
66
+ mapping(uint256 chainId => NftId registryNftId) private _registryNftIdByChainId;
67
+ uint256[] private _chainId;
68
+
69
+ /// @dev keep track of object info and address reverse lookup
70
+ mapping(NftId nftId => ObjectInfo info) private _info;
71
+ mapping(address object => NftId nftId) private _nftIdByAddress;
72
+
73
+ /// @dev keep track of service addresses by version and domain
74
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
75
+
76
+ mapping(ObjectType objectType => bool) private _coreTypes;
77
+
78
+ mapping(ObjectType objectType => mapping(
79
+ ObjectType parentType => bool)) private _coreContractCombinations;
80
+
81
+ mapping(ObjectType objectType => mapping(
82
+ ObjectType parentType => bool)) private _coreObjectCombinations;
83
+
84
+ NftId private _stakingNftId;
85
+
86
+ ReleaseRegistry private _releaseRegistry;
87
+ address private _tokenRegistryAddress;
88
+ address private _stakingAddress;
89
+
90
+ modifier onlyDeployer() {
91
+ if (msg.sender != DEPLOYER) {
92
+ revert ErrorRegistryCallerNotDeployer();
93
+ }
94
+ _;
15
95
  }
16
96
 
17
- function getRegistry() external view override returns(IRegistry registry) {
18
- return _registry;
97
+ // TODO when create2 strategy is added to ignition:
98
+ // 1. move globalRegistry arg out from constructor into initialize()
99
+ // 2. add testRegistry_deployChainRegistryAtGlobalRegistryAddress
100
+ /// @dev Creates the registry contract and populates it with the protocol and registry objects.
101
+ /// Internally deploys the ChainNft contract.
102
+ constructor(RegistryAdmin admin, address globalRegistry)
103
+ AccessManaged(admin.authority())
104
+ {
105
+ DEPLOYER = msg.sender;
106
+ ADMIN = admin;
107
+ GLOBAL_REGISTRY_ADDRESS = _getGlobalRegistryAddress(globalRegistry);
108
+
109
+ // deploy NFT
110
+ CHAIN_NFT = new ChainNft(address(this));
111
+ GLOBAL_REGISTRY_NFT_ID = NftIdLib.toNftId(
112
+ CHAIN_NFT.GLOBAL_REGISTRY_ID());
113
+
114
+ // initial registry setup
115
+ PROTOCOL_NFT_ID = _registerProtocol();
116
+ REGISTRY_NFT_ID = _registerRegistry();
117
+
118
+ // set object types and object parent relations
119
+ _setupValidCoreTypesAndCombinations();
19
120
  }
20
121
 
21
- }
22
122
 
123
+ /// @dev Wires release registry, token registry and staking contract to this registry.
124
+ /// MUST be called by release registry.
125
+ function initialize(
126
+ address releaseRegistry,
127
+ address tokenRegistry,
128
+ address staking
129
+ )
130
+ external
131
+ initializer()
132
+ onlyDeployer()
133
+ {
134
+ // store links to supporting contracts
135
+ _releaseRegistry = ReleaseRegistry(releaseRegistry);
136
+ _tokenRegistryAddress = tokenRegistry;
137
+ _stakingAddress = staking;
23
138
 
24
- abstract contract Registerable is
25
- RegistryLinked,
26
- IRegisterable
27
- {
28
- using NftIdLib for NftId;
139
+ // register staking contract
140
+ _stakingNftId = _registerStaking();
141
+ }
29
142
 
30
- address private _initialOwner;
31
-
32
- constructor(address registry)
33
- RegistryLinked(registry)
143
+ /// @inheritdoc IRegistry
144
+ function registerRegistry(
145
+ NftId nftId,
146
+ uint256 chainId,
147
+ address registryAddress
148
+ )
149
+ external
150
+ restricted()
34
151
  {
35
- _initialOwner = msg.sender;
152
+ // registration of chain registries only allowed on mainnet
153
+ if (block.chainid != 1) {
154
+ revert ErrorRegistryNotOnMainnet(block.chainid);
155
+ }
156
+
157
+ // registry chain id is not zero
158
+ if(chainId == 0) {
159
+ revert ErrorRegistryChainRegistryChainIdZero(nftId);
160
+ }
161
+
162
+ // registry address is not zero
163
+ if (registryAddress == address(0)) {
164
+ revert ErrorRegistryChainRegistryAddressZero(nftId, chainId);
165
+ }
166
+
167
+ // registry nft id matches registry chain id
168
+ uint256 expectedRegistryId = CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID, chainId);
169
+ if (nftId != NftIdLib.toNftId(expectedRegistryId)) {
170
+ revert ErrorRegistryChainRegistryNftIdInvalid(nftId, chainId);
171
+ }
172
+
173
+ emit LogRegistryChainRegistryRegistered(nftId, chainId, registryAddress);
174
+
175
+ _registerRegistryForNft(
176
+ chainId,
177
+ ObjectInfo({
178
+ nftId: nftId,
179
+ parentNftId: REGISTRY_NFT_ID,
180
+ objectType: REGISTRY(),
181
+ isInterceptor: false,
182
+ objectAddress: registryAddress,
183
+ initialOwner: NFT_LOCK_ADDRESS,
184
+ data: ""
185
+ }),
186
+ false); // do not update address lookup for objects on a different chain
36
187
  }
37
188
 
38
- // getType, getData and register need to be implemented by concrete contract
189
+ // TODO limit service owner to registry admin?
190
+ /// @inheritdoc IRegistry
191
+ function registerService(
192
+ ObjectInfo memory info,
193
+ VersionPart version,
194
+ ObjectType domain
195
+ )
196
+ external
197
+ restricted()
198
+ returns(NftId nftId)
199
+ {
200
+ // service address is defined
201
+ address service = info.objectAddress;
202
+ if(service == address(0)) {
203
+ revert ErrorRegistryServiceAddressZero();
204
+ }
39
205
 
40
- function isRegisterable() external pure override returns(bool) {
41
- return true;
206
+ // version is defined
207
+ if(version.eqz()) {
208
+ revert ErrorRegistryServiceVersionZero(service);
209
+ }
210
+ // service domain is defined
211
+ if(domain.eqz()) {
212
+ revert ErrorRegistryServiceDomainZero(service, version);
213
+ }
214
+
215
+ // service has proper type
216
+ if(info.objectType != SERVICE()) {
217
+ revert ErrorRegistryNotService(service, info.objectType);
218
+ }
219
+
220
+ // service parent has registry type
221
+ if(info.parentNftId != REGISTRY_NFT_ID) {
222
+ revert ErrorRegistryServiceParentNotRegistry(service, version, info.parentNftId);
223
+ }
224
+
225
+ // service has not already been registered
226
+ if(_service[version][domain] != address(0)) {
227
+ revert ErrorRegistryServiceDomainAlreadyRegistered(service, version, domain);
228
+ }
229
+
230
+ _service[version][domain] = service;
231
+
232
+ emit LogRegistryServiceRegistered(info.nftId,version, domain);
233
+
234
+ nftId = _register(info);
42
235
  }
43
236
 
44
- function getInitialOwner() public view override returns(address deployer) {
45
- return _initialOwner;
237
+
238
+ /// @inheritdoc IRegistry
239
+ function register(ObjectInfo memory info)
240
+ external
241
+ restricted()
242
+ returns(NftId nftId)
243
+ {
244
+ address objectAddress = info.objectAddress;
245
+ ObjectType objectType = info.objectType;
246
+
247
+ // specialized functions have to be used to register registries and services
248
+ if(objectType == REGISTRY() || objectType == STAKING() || objectType == SERVICE()) {
249
+ revert ErrorRegistryObjectTypeNotSupported(objectType);
250
+ }
251
+
252
+ // this indidirectly enforces that the parent is registered
253
+ // parentType would be zero for a non-registered parent which is never a valid type combination
254
+ ObjectType parentType = _info[info.parentNftId].objectType;
255
+
256
+ // check type combinations for core objects
257
+ if(objectAddress == address(0)) {
258
+ if(_coreObjectCombinations[objectType][parentType] == false) {
259
+ revert ErrorRegistryTypeCombinationInvalid(objectAddress, objectType, parentType);
260
+ }
261
+ }
262
+ // check type combinations for contract objects
263
+ else {
264
+ if(_coreContractCombinations[objectType][parentType] == false) {
265
+ revert ErrorRegistryTypeCombinationInvalid(objectAddress, objectType, parentType);
266
+ }
267
+ }
268
+
269
+ nftId = _register(info);
46
270
  }
47
271
 
48
- function isRegistered() public view override returns(bool) {
49
- NftId nftId = _registry.getNftId(address(this));
50
- return nftId.gtz();
272
+
273
+ /// @inheritdoc IRegistry
274
+ function registerWithCustomType(ObjectInfo memory info)
275
+ external
276
+ restricted()
277
+ returns(NftId nftId)
278
+ {
279
+ ObjectType objectType = info.objectType;
280
+ ObjectType parentType = _info[info.parentNftId].objectType;
281
+
282
+ if(_coreTypes[objectType]) {
283
+ revert ErrorRegistryCoreTypeRegistration();
284
+ }
285
+
286
+ if(
287
+ objectType == ObjectTypeLib.zero() ||
288
+ parentType == ObjectTypeLib.zero() ||
289
+ parentType == PROTOCOL() ||
290
+ parentType == STAKING() ||
291
+ parentType == SERVICE()
292
+ ) {
293
+ revert ErrorRegistryTypeCombinationInvalid(info.objectAddress, objectType, parentType);
294
+ }
295
+
296
+ nftId = _register(info);
51
297
  }
52
298
 
53
- function getNftId() public view override returns(NftId nftId) {
54
- return _registry.getNftId(address(this));
299
+
300
+ /// @dev earliest GIF major version
301
+ function getInitialRelease() external view returns (VersionPart) {
302
+ return VersionPartLib.toVersionPart(_releaseRegistry.INITIAL_GIF_VERSION());
55
303
  }
56
304
 
57
- function getOwner() public view override returns(address owner) {
58
- NftId id = _registry.getNftId(address(this));
59
- owner = _registry.getOwner(id);
60
- return owner != address(0) ? owner : _initialOwner;
305
+ /// @dev next GIF release version to be released
306
+ function getNextRelease() external view returns (VersionPart) {
307
+ return _releaseRegistry.getNextVersion();
61
308
  }
62
309
 
63
- }
310
+ /// @dev latest active GIF release version
311
+ function getLatestRelease() external view returns (VersionPart) {
312
+ return _releaseRegistry.getLatestVersion();
313
+ }
64
314
 
65
- contract Registry is IRegistry {
66
- using NftIdLib for NftId;
67
- string public constant EMPTY_URI = "";
315
+ function getReleaseInfo(VersionPart release) external view returns (IRelease.ReleaseInfo memory) {
316
+ return _releaseRegistry.getReleaseInfo(release);
317
+ }
68
318
 
69
- mapping(NftId nftId => RegistryInfo info) private _info;
70
- mapping(NftId nftId => address owner) private _owner;
71
- mapping(address object => NftId nftId) private _nftIdByAddress;
319
+ function chainIds() public view returns (uint256) {
320
+ return _chainId.length;
321
+ }
72
322
 
73
- IChainNft private _chainNft;
323
+ function getChainId(uint256 idx) public view returns (uint256) {
324
+ return _chainId[idx];
325
+ }
74
326
 
75
- function initialize(address chainNft) external {
76
- require(address(_chainNft) == address(0), "ERROR:REG-001:ALREADY_INITIALIZED");
77
- _chainNft = IChainNft(chainNft);
327
+ function getRegistryNftId(uint256 chainId) public view returns (NftId nftId) {
328
+ return _registryNftIdByChainId[chainId];
78
329
  }
79
330
 
80
- function TOKEN() public pure override returns(uint256) { return 30; }
81
- function INSTANCE() public pure override returns(uint256) { return 40; }
82
- function PRODUCT() public pure override returns(uint256) { return 50; }
83
- function ORACLE() public pure override returns(uint256) { return 60; }
84
- function POOL() public pure override returns(uint256) { return 70; }
85
- function POLICY() public pure override returns(uint256) { return 80; }
86
- function BUNDLE() public pure override returns(uint256) { return 90; }
331
+ function getObjectCount() external view returns (uint256) {
332
+ return CHAIN_NFT.totalSupply();
333
+ }
87
334
 
88
- function register(address objectAddress) external override returns(NftId nftId) {
89
- require(_nftIdByAddress[objectAddress].eqz(), "ERROR:REG-002:ALREADY_REGISTERED");
335
+ function getNftId() external view returns (NftId nftId) {
336
+ return REGISTRY_NFT_ID;
337
+ }
90
338
 
91
- IRegisterable registerable = IRegisterable(objectAddress);
92
- require(registerable.isRegisterable(), "ERROR:REG-003:NOT_REGISTERABLE");
339
+ function getProtocolNftId() external view returns (NftId nftId) {
340
+ return PROTOCOL_NFT_ID;
341
+ }
93
342
 
94
- // check parent exists (for objects not instances)
95
- if(registerable.getType() != INSTANCE()) {
96
- RegistryInfo memory parentInfo = _info[registerable.getParentNftId()];
97
- require(parentInfo.nftId.gtz(), "ERROR:REG-004:PARENT_NOT_FOUND");
98
- // check validity of parent relation, valid relations are
99
- // policy -> product, bundle -> pool, product -> instance, pool -> instance
100
- }
343
+ function getNftIdForAddress(address object) external view returns (NftId id) {
344
+ return _nftIdByAddress[object];
345
+ }
101
346
 
102
- uint256 mintedTokenId = _chainNft.mint(
103
- registerable.getInitialOwner(),
104
- EMPTY_URI);
105
- nftId = toNftId(mintedTokenId);
106
-
107
- RegistryInfo memory info = RegistryInfo(
108
- nftId,
109
- registerable.getParentNftId(),
110
- registerable.getType(),
111
- objectAddress,
112
- registerable.getInitialOwner()
113
- );
347
+ function ownerOf(NftId nftId) public view returns (address) {
348
+ return CHAIN_NFT.ownerOf(nftId.toInt());
349
+ }
114
350
 
115
- _info[nftId] = info;
116
- _nftIdByAddress[objectAddress] = nftId;
351
+ function isOwnerOf(NftId nftId, address expectedOwner) public view returns (bool) {
352
+ return CHAIN_NFT.ownerOf(nftId.toInt()) == expectedOwner;
353
+ }
117
354
 
118
- // add logging
355
+ function ownerOf(address contractAddress) public view returns (address) {
356
+ return CHAIN_NFT.ownerOf(_nftIdByAddress[contractAddress].toInt());
119
357
  }
120
358
 
359
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
360
+ return _info[nftId];
361
+ }
121
362
 
122
- function registerObjectForInstance(
123
- NftId parentNftId,
124
- uint256 objectType,
125
- address initialOwner
126
- )
127
- external
128
- override
129
- // TODO add onlyRegisteredInstance
363
+ function getParentNftId(NftId nftId) external view returns (NftId parentNftId) {
364
+ return _info[nftId].parentNftId;
365
+ }
366
+
367
+ function isObjectType(address contractAddress, ObjectType expectedObjectType) external view returns (bool) {
368
+ NftId nftId = _nftIdByAddress[contractAddress];
369
+ return isObjectType(nftId, expectedObjectType);
370
+ }
371
+
372
+ function isObjectType(NftId nftId, ObjectType expectedObjectType) public view returns (bool) {
373
+ return _info[nftId].objectType == expectedObjectType;
374
+ }
375
+
376
+ function getObjectAddress(NftId nftId) external view returns (address) {
377
+ return _info[nftId].objectAddress;
378
+ }
379
+
380
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
381
+ return _info[_nftIdByAddress[object]];
382
+ }
383
+
384
+ function isRegistered(NftId nftId) public view returns (bool) {
385
+ return _info[nftId].objectType.gtz();
386
+ }
387
+
388
+ function isRegistered(address object) external view returns (bool) {
389
+ return _nftIdByAddress[object].gtz();
390
+ }
391
+
392
+ function isRegisteredService(address object) external view returns (bool) {
393
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
394
+ }
395
+
396
+ function isRegisteredComponent(address object) external view returns (bool) {
397
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
398
+ return _info[objectParentNftId].objectType == INSTANCE();
399
+ }
400
+
401
+ function isActiveRelease(VersionPart version) external view returns (bool)
402
+ {
403
+ return _releaseRegistry.isActiveRelease(version);
404
+ }
405
+
406
+ function getStakingAddress() external view returns (address staking) {
407
+ return _stakingAddress;
408
+ }
409
+
410
+ function getTokenRegistryAddress() external view returns (address tokenRegistry) {
411
+ return _tokenRegistryAddress;
412
+ }
413
+
414
+ function getServiceAddress(
415
+ ObjectType serviceDomain,
416
+ VersionPart releaseVersion
417
+ ) external view returns (address service)
418
+ {
419
+ service = _service[releaseVersion][serviceDomain];
420
+ }
421
+
422
+ function getReleaseRegistryAddress() external view returns (address) {
423
+ return address(_releaseRegistry);
424
+ }
425
+
426
+ function getChainNftAddress() external view override returns (address) {
427
+ return address(CHAIN_NFT);
428
+ }
429
+
430
+ function getRegistryAdminAddress() external view returns (address) {
431
+ return address(ADMIN);
432
+ }
433
+
434
+ function getAuthority() external view returns (address) {
435
+ return ADMIN.authority();
436
+ }
437
+
438
+ function getOwner() public view returns (address owner) {
439
+ return ownerOf(address(this));
440
+ }
441
+
442
+ // IERC165
443
+
444
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
445
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
446
+ return true;
447
+ }
448
+
449
+ return false;
450
+ }
451
+
452
+ // Internals
453
+
454
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
455
+ function _register(ObjectInfo memory info)
456
+ internal
130
457
  returns(NftId nftId)
131
458
  {
132
- // TODO add more validation
133
- require(
134
- objectType == POLICY() || objectType == BUNDLE(),
135
- "ERROR:REG-005:TYPE_INVALID");
459
+ ObjectType objectType = info.objectType; // do not care here, never PROTOCOL(), REGISTRY()
460
+ bool isInterceptor = info.isInterceptor;
461
+ address objectAddress = info.objectAddress; // do not care here, can be 0
462
+ address owner = info.initialOwner; // do not care here, can be 0, can be equal info.objectAddress
463
+
464
+ NftId parentNftId = info.parentNftId; // do not care here, can not be 0
465
+ ObjectInfo memory parentInfo = _info[parentNftId];
466
+ address parentAddress = parentInfo.objectAddress; // can be 0
467
+
468
+ // parent is contract -> need to check? -> check before minting
469
+ // special case: staking: to protocol possible as well
470
+ // NO LONGER TRUE: special case: global registry nft as parent when not on mainnet -> global registry address is 0
471
+ // special case: when parentNftId == CHAIN_NFT.mint(), check for zero parent address before mint
472
+ // special case: when parentNftId == CHAIN_NFT.mint() && objectAddress == initialOwner
473
+ // Parent can have 0 address in case of STAKE for PROTOCOL / CUSTOM_TYPE for POLICY
474
+ // But it MUST be registered -> parentType != 0 && parentNftId != 0
475
+ /*if(objectType != STAKE()) {
476
+ if(parentAddress == address(0)) {
477
+ revert ErrorRegistryParentAddressZero();
478
+ }
479
+ }*/
480
+
481
+ // global registry is never parent when not on mainnet
482
+ if(block.chainid != 1) {
483
+ if(parentNftId == GLOBAL_REGISTRY_NFT_ID) {
484
+ revert ErrorRegistryGlobalRegistryAsParent(objectAddress, objectType);
485
+ }
486
+ }
136
487
 
137
- uint256 mintedTokenId = _chainNft.mint(
138
- initialOwner,
139
- EMPTY_URI);
140
- nftId = toNftId(mintedTokenId);
488
+ address interceptorAddress = _getInterceptor(
489
+ isInterceptor,
490
+ objectType,
491
+ objectAddress,
492
+ parentInfo.isInterceptor,
493
+ parentAddress);
141
494
 
142
- RegistryInfo memory info = RegistryInfo(
143
- nftId,
144
- parentNftId,
145
- objectType,
146
- address(0),
147
- initialOwner
148
- );
495
+ uint256 tokenId = CHAIN_NFT.getNextTokenId();
496
+ nftId = NftIdLib.toNftId(tokenId);
497
+ info.nftId = nftId;
149
498
 
150
499
  _info[nftId] = info;
500
+ _setAddressForNftId(nftId, objectAddress);
501
+
502
+ emit LogRegistryObjectRegistered(nftId, parentNftId, objectType, isInterceptor, objectAddress, owner);
151
503
 
152
- // add logging
504
+ // calls nft receiver(1) and interceptor(2)
505
+ uint256 mintedTokenId = CHAIN_NFT.mint(
506
+ owner,
507
+ interceptorAddress,
508
+ EMPTY_URI);
509
+
510
+ assert(mintedTokenId == tokenId);
153
511
  }
154
512
 
513
+ /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
514
+ /// special case: STAKES (parent may be any type) -> no intercept call
515
+ /// default case:
516
+ function _getInterceptor(
517
+ bool isInterceptor,
518
+ ObjectType objectType,
519
+ address objectAddress,
520
+ bool parentIsInterceptor,
521
+ address parentObjectAddress
522
+ )
523
+ internal
524
+ pure
525
+ returns (address interceptor)
526
+ {
527
+ // no intercepting calls for stakes
528
+ if (objectType == STAKE()) {
529
+ return address(0);
530
+ }
531
+
532
+ if (objectAddress == address(0)) {
533
+ if (parentIsInterceptor) {
534
+ return parentObjectAddress;
535
+ } else {
536
+ return address(0);
537
+ }
538
+ }
539
+
540
+ if (isInterceptor) {
541
+ return objectAddress;
542
+ }
155
543
 
156
- function getObjectCount() external view override returns(uint256) {
157
- return _chainNft.totalSupply();
544
+ return address(0);
158
545
  }
159
546
 
547
+ // Internals called only in constructor
160
548
 
161
- function getNftId(address object) external view override returns(NftId id) {
162
- return _nftIdByAddress[object];
549
+ /// @dev protocol registration used to anchor the dip ecosystem relations
550
+ function _registerProtocol()
551
+ private
552
+ returns (NftId protocolNftId)
553
+ {
554
+ uint256 protocolId = CHAIN_NFT.PROTOCOL_NFT_ID();
555
+ protocolNftId = NftIdLib.toNftId(protocolId);
556
+
557
+ _registerForNft(
558
+ ObjectInfo({
559
+ nftId: protocolNftId,
560
+ parentNftId: NftIdLib.zero(),
561
+ objectType: PROTOCOL(),
562
+ isInterceptor: false,
563
+ objectAddress: address(0),
564
+ initialOwner: NFT_LOCK_ADDRESS,
565
+ data: ""}),
566
+ true);
567
+
568
+ emit LogRegistryObjectRegistered(protocolNftId, NftIdLib.zero(), PROTOCOL(), false, address(0), NFT_LOCK_ADDRESS);
569
+ }
570
+
571
+ /// @dev register this registry
572
+ function _registerRegistry()
573
+ internal
574
+ virtual
575
+ returns (NftId registryNftId)
576
+ {
577
+ // initial assignment
578
+ registryNftId = GLOBAL_REGISTRY_NFT_ID;
579
+
580
+ // register global registry
581
+ _registerRegistryForNft(
582
+ 1, // mainnet chain id
583
+ ObjectInfo({
584
+ nftId: GLOBAL_REGISTRY_NFT_ID,
585
+ parentNftId: PROTOCOL_NFT_ID,
586
+ objectType: REGISTRY(),
587
+ isInterceptor: false,
588
+ objectAddress: GLOBAL_REGISTRY_ADDRESS,
589
+ initialOwner: NFT_LOCK_ADDRESS,
590
+ data: ""}),
591
+ block.chainid == 1);// update address lookup for global registry only on mainnet
592
+
593
+ // if not on mainnet: register this registry with global registry as parent
594
+ if (block.chainid != 1) {
595
+
596
+ // modify registry nft id to local registry when not on mainnet
597
+ registryNftId = NftIdLib.toNftId(
598
+ CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID));
599
+
600
+ _registerRegistryForNft(
601
+ block.chainid,
602
+ ObjectInfo({
603
+ nftId: registryNftId,
604
+ parentNftId: GLOBAL_REGISTRY_NFT_ID,
605
+ objectType: REGISTRY(),
606
+ isInterceptor: false,
607
+ objectAddress: address(this),
608
+ initialOwner: NFT_LOCK_ADDRESS,
609
+ data: ""}),
610
+ true);
611
+ }
163
612
  }
164
613
 
614
+ /// @dev staking registration
615
+ function _registerRegistryForNft(
616
+ uint256 chainId,
617
+ ObjectInfo memory info,
618
+ bool updateAddressLookup
619
+ )
620
+ private
621
+ {
622
+ if (!_registryNftIdByChainId[chainId].eqz()) {
623
+ revert ErrorRegistryChainRegistryAlreadyRegistered(info.nftId, chainId);
624
+ }
625
+
626
+ // update registry lookup variables
627
+ _registryNftIdByChainId[chainId] = info.nftId;
628
+ _chainId.push(chainId);
165
629
 
166
- function isRegistered(address object) external view override returns(bool) {
167
- return _nftIdByAddress[object].gtz();
630
+ // register the registry info
631
+ _registerForNft(
632
+ info,
633
+ updateAddressLookup);
168
634
  }
169
635
 
636
+ /// @dev staking registration
637
+ function _registerStaking()
638
+ private
639
+ returns (NftId stakingNftId)
640
+ {
641
+ address stakingOwner = IRegisterable(_stakingAddress).getOwner();
642
+ uint256 stakingId = CHAIN_NFT.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
643
+ stakingNftId = NftIdLib.toNftId(stakingId);
644
+
645
+ _registerForNft(
646
+ ObjectInfo({
647
+ nftId: stakingNftId,
648
+ parentNftId: REGISTRY_NFT_ID,
649
+ objectType: STAKING(),
650
+ isInterceptor: false,
651
+ objectAddress: _stakingAddress,
652
+ initialOwner: stakingOwner,
653
+ data: ""}),
654
+ true);
655
+
656
+ IStaking(_stakingAddress).initializeTokenHandler();
657
+ }
170
658
 
171
- function getInfo(NftId nftId) external view override returns(RegistryInfo memory info) {
172
- return _info[nftId];
659
+ /// @dev Register the provided object info for the specified NFT ID.
660
+ function _registerForNft(
661
+ ObjectInfo memory info,
662
+ bool updateAddressLookup
663
+ )
664
+ internal
665
+ {
666
+ _info[info.nftId] = info;
667
+
668
+ if (updateAddressLookup) {
669
+ _setAddressForNftId(info.nftId, info.objectAddress);
670
+ }
671
+
672
+ // calls nft receiver
673
+ CHAIN_NFT.mint(info.initialOwner, info.nftId.toInt());
674
+
675
+ emit LogRegistryObjectRegistered(info.nftId, info.parentNftId, info.objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
173
676
  }
174
677
 
175
- function getOwner(NftId nftId) external view override returns(address) {
176
- return _chainNft.ownerOf(nftId.toInt());
678
+ function _setAddressForNftId(NftId nftId, address objectAddress)
679
+ internal
680
+ {
681
+ if (objectAddress != address(0)) {
682
+ if (_nftIdByAddress[objectAddress].gtz()) {
683
+ revert ErrorRegistryContractAlreadyRegistered(objectAddress);
684
+ }
685
+
686
+ _nftIdByAddress[objectAddress] = nftId;
687
+ }
177
688
  }
178
689
 
179
- function getNftAddress() external view override returns(address nft) {
180
- return address(_chainNft);
690
+ function _getGlobalRegistryAddress(address globalRegistry) internal view returns (address) {
691
+ if (block.chainid == 1) {
692
+ return address(this);
693
+ } else {
694
+ return globalRegistry;
695
+ }
696
+ }
697
+
698
+ /// @dev defines which object - parent types relations are allowed to register
699
+ /// EACH object type MUST have only one parent type across ALL mappings
700
+ // the only EXCEPTION is STAKE, can have any number of parent types
701
+ function _setupValidCoreTypesAndCombinations()
702
+ private
703
+ {
704
+ _coreTypes[PROTOCOL()] = true;
705
+ _coreTypes[REGISTRY()] = true;
706
+ _coreTypes[SERVICE()] = true;
707
+ _coreTypes[INSTANCE()] = true;
708
+ _coreTypes[PRODUCT()] = true;
709
+ _coreTypes[POOL()] = true;
710
+ _coreTypes[DISTRIBUTION()] = true;
711
+ _coreTypes[DISTRIBUTOR()] = true;
712
+ _coreTypes[ORACLE()] = true;
713
+ _coreTypes[POLICY()] = true;
714
+ _coreTypes[BUNDLE()] = true;
715
+ _coreTypes[STAKING()] = true;
716
+ _coreTypes[STAKE()] = true;
717
+
718
+ // types combinations allowed to use with register() function ONLY
719
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
720
+
721
+ // components with instance parent
722
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
723
+
724
+ // components with product parent
725
+ _coreContractCombinations[DISTRIBUTION()][PRODUCT()] = true;
726
+ _coreContractCombinations[ORACLE()][PRODUCT()] = true;
727
+ _coreContractCombinations[POOL()][PRODUCT()] = true;
728
+
729
+ // objects with component parents
730
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
731
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
732
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
733
+
734
+ // staking
735
+ _coreObjectCombinations[STAKE()][PROTOCOL()] = true;
736
+ _coreObjectCombinations[STAKE()][INSTANCE()] = true;
181
737
  }
182
738
  }