@etherisc/gif-next 0.0.2-f0d86c2-077 → 0.0.2-f13c010-035

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 (747) hide show
  1. package/README.md +297 -25
  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/access → authorization}/IAccess.sol/IAccess.json +1 -1
  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/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  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 +1402 -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 +1048 -0
  26. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  27. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1455 -0
  28. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  29. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +838 -0
  30. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  31. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +929 -0
  32. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  33. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +961 -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 +1538 -0
  38. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
  40. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2072 -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 +1471 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1231 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2095 -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 +290 -1482
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +702 -0
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +421 -1780
  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 +4 -0
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2058 -0
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +995 -0
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +722 -0
  72. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  73. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +3678 -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/base/Cloneable.sol/Cloneable.json +137 -0
  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 +4 -0
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +129 -0
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  88. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/IComponents.sol/IComponents.json} +2 -2
  90. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  92. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  94. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  96. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  97. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  98. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  99. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1039 -0
  100. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  101. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +478 -0
  102. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  103. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  104. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  105. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +788 -0
  106. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  107. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +709 -0
  108. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  109. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +907 -0
  110. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  111. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +966 -0
  112. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +722 -0
  114. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  115. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1299 -0
  116. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  117. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +470 -0
  118. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  119. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1465 -0
  120. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  121. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +834 -0
  122. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  123. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +960 -0
  124. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  125. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +960 -0
  126. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  127. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1283 -0
  128. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  129. package/artifacts/contracts/pool/Pool.sol/Pool.json +1098 -0
  130. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  131. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1625 -0
  132. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  133. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +766 -0
  134. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  135. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +771 -0
  136. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  137. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +710 -0
  138. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  139. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1173 -0
  140. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  141. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +470 -0
  142. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  143. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1431 -0
  144. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  145. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +838 -0
  146. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  147. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +546 -0
  148. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  149. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +942 -0
  150. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  151. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +925 -0
  152. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  153. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +578 -0
  154. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  155. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +1012 -0
  156. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  157. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +429 -0
  158. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  159. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1302 -0
  160. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  161. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +782 -0
  162. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  163. package/artifacts/contracts/product/PricingService.sol/PricingService.json +907 -0
  164. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  165. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +762 -0
  166. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  167. package/artifacts/contracts/product/Product.sol/Product.json +1131 -0
  168. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  169. package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
  170. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  171. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
  172. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  173. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +242 -12
  174. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  175. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +976 -119
  176. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  177. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +1019 -0
  178. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  179. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +39 -0
  180. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  181. package/artifacts/contracts/registry/Registry.sol/Registry.json +1403 -220
  182. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  183. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1886 -0
  184. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  185. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1246 -0
  186. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  187. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +713 -0
  188. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  189. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  190. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  191. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1067 -0
  192. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  193. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +272 -0
  194. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  195. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +661 -0
  196. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  197. package/artifacts/contracts/shared/Component.sol/Component.json +725 -0
  198. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  199. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1785 -0
  200. package/artifacts/contracts/shared/ComponentServiceHelperLib.sol/ComponentServiceHelperLib.dbg.json +4 -0
  201. package/artifacts/contracts/shared/ComponentServiceHelperLib.sol/ComponentServiceHelperLib.json +206 -0
  202. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  203. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +810 -0
  204. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  205. package/artifacts/contracts/{instance/service/IProductService.sol/IProductService.json → shared/ComponentVerifyingService.sol/ComponentVerifyingService.json} +232 -235
  206. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  207. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  208. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  209. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +632 -0
  210. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  211. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1360 -0
  212. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  213. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +723 -0
  214. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  215. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +140 -141
  216. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  217. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +35 -4
  218. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  219. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → shared/INftOwnable.sol/INftOwnable.json} +47 -74
  220. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  221. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +175 -0
  222. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  223. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +113 -24
  224. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  225. package/artifacts/contracts/{registry → shared}/IRegistryLinked.sol/IRegistryLinked.json +13 -2
  226. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  227. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → shared/IService.sol/IService.json} +182 -171
  228. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  229. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  230. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  231. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +829 -0
  232. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  233. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +538 -0
  234. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  235. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +174 -0
  236. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  237. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  238. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  239. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +209 -0
  240. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  241. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +198 -0
  242. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  243. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +224 -23
  244. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  245. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +58 -0
  246. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  247. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → shared/Service.sol/Service.json} +239 -173
  248. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  249. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +546 -0
  250. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  251. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +132 -0
  252. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  253. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1465 -0
  254. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  255. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +1043 -0
  256. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  257. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +440 -0
  258. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  259. package/artifacts/contracts/staking/Staking.sol/Staking.json +1888 -0
  260. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  261. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +205 -0
  262. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  263. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +776 -0
  264. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  265. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +587 -0
  266. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  267. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +1249 -0
  268. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  269. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +710 -0
  270. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  271. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2283 -0
  272. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  273. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +607 -0
  274. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  275. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  276. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  277. package/artifacts/contracts/type/Amount.sol/AmountLib.json +398 -0
  278. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  279. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +225 -0
  280. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  281. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +203 -0
  282. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  283. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  284. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  285. package/artifacts/contracts/type/Fee.sol/FeeLib.json +317 -0
  286. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  287. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  288. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  289. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +209 -0
  290. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  291. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  292. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  293. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +239 -0
  294. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  295. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  296. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  297. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  298. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  299. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  300. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  301. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +142 -0
  302. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  303. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +369 -0
  304. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  305. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +246 -0
  306. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  307. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  308. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  309. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  310. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  311. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +105 -0
  312. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  313. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  314. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  315. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +312 -0
  316. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  317. package/artifacts/contracts/type/UFixed.sol/MathLib.json +16 -0
  318. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  319. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +548 -0
  320. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  321. package/artifacts/contracts/type/Version.sol/VersionLib.json +177 -0
  322. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  323. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +68 -0
  324. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  325. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +55 -0
  326. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  327. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +602 -0
  328. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  329. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  330. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  331. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +78 -0
  332. package/contracts/authorization/AccessAdmin.sol +596 -0
  333. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  334. package/contracts/authorization/Authorization.sol +289 -0
  335. package/contracts/authorization/IAccess.sol +49 -0
  336. package/contracts/authorization/IAccessAdmin.sol +137 -0
  337. package/contracts/authorization/IAuthorization.sol +60 -0
  338. package/contracts/authorization/IServiceAuthorization.sol +40 -0
  339. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  340. package/contracts/authorization/ServiceAuthorization.sol +106 -0
  341. package/contracts/distribution/BasicDistribution.sol +139 -0
  342. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  343. package/contracts/distribution/Distribution.sol +285 -0
  344. package/contracts/distribution/DistributionService.sol +355 -0
  345. package/contracts/distribution/DistributionServiceManager.sol +39 -0
  346. package/contracts/distribution/IDistributionComponent.sol +52 -0
  347. package/contracts/distribution/IDistributionService.sol +101 -0
  348. package/contracts/examples/fire/DamageLevel.sol +59 -0
  349. package/contracts/examples/fire/FirePool.sol +73 -0
  350. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  351. package/contracts/examples/fire/FireProduct.sol +415 -0
  352. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  353. package/contracts/examples/fire/FireUSD.sol +26 -0
  354. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  355. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  356. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  357. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  358. package/contracts/instance/BundleSet.sol +126 -0
  359. package/contracts/instance/IInstance.sol +58 -44
  360. package/contracts/instance/IInstanceService.sol +72 -0
  361. package/contracts/instance/Instance.sol +218 -54
  362. package/contracts/instance/InstanceAdmin.sol +279 -0
  363. package/contracts/instance/InstanceAuthorizationV3.sol +194 -0
  364. package/contracts/instance/InstanceReader.sol +495 -0
  365. package/contracts/instance/InstanceService.sol +413 -0
  366. package/contracts/instance/InstanceServiceManager.sol +39 -0
  367. package/contracts/instance/InstanceStore.sol +287 -0
  368. package/contracts/instance/base/BalanceStore.sol +123 -0
  369. package/contracts/instance/base/Cloneable.sol +28 -0
  370. package/contracts/instance/base/ObjectCounter.sol +21 -0
  371. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  372. package/contracts/instance/base/ObjectSet.sol +79 -0
  373. package/contracts/instance/module/IAccess.sol +46 -0
  374. package/contracts/instance/module/IBundle.sol +20 -0
  375. package/contracts/instance/module/IComponents.sol +51 -0
  376. package/contracts/instance/module/IDistribution.sol +41 -0
  377. package/contracts/instance/module/IPolicy.sol +84 -0
  378. package/contracts/instance/module/IRisk.sol +11 -0
  379. package/contracts/{test/Usdc.sol → mock/Dip.sol} +6 -6
  380. package/contracts/oracle/BasicOracle.sol +47 -0
  381. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  382. package/contracts/oracle/IOracle.sol +36 -0
  383. package/contracts/oracle/IOracleComponent.sol +33 -0
  384. package/contracts/oracle/IOracleService.sol +66 -0
  385. package/contracts/oracle/Oracle.sol +156 -0
  386. package/contracts/oracle/OracleService.sol +291 -0
  387. package/contracts/oracle/OracleServiceManager.sol +39 -0
  388. package/contracts/pool/BasicPool.sol +154 -0
  389. package/contracts/pool/BasicPoolAuthorization.sol +57 -0
  390. package/contracts/pool/BundleService.sol +493 -0
  391. package/contracts/pool/BundleServiceManager.sol +39 -0
  392. package/contracts/pool/IBundleService.sol +143 -0
  393. package/contracts/pool/IPoolComponent.sol +68 -0
  394. package/contracts/pool/IPoolService.sol +167 -0
  395. package/contracts/pool/Pool.sol +335 -0
  396. package/contracts/pool/PoolService.sol +544 -0
  397. package/contracts/pool/PoolServiceManager.sol +39 -0
  398. package/contracts/product/ApplicationService.sol +259 -0
  399. package/contracts/product/ApplicationServiceManager.sol +38 -0
  400. package/contracts/product/BasicProduct.sol +53 -0
  401. package/contracts/product/BasicProductAuthorization.sol +42 -0
  402. package/contracts/product/ClaimService.sol +612 -0
  403. package/contracts/product/ClaimServiceManager.sol +38 -0
  404. package/contracts/product/IApplicationService.sol +63 -0
  405. package/contracts/product/IClaimService.sol +123 -0
  406. package/contracts/product/IPolicyService.sol +80 -0
  407. package/contracts/product/IPricingService.sol +39 -0
  408. package/contracts/product/IProductComponent.sol +59 -0
  409. package/contracts/product/IRiskService.sol +33 -0
  410. package/contracts/product/PolicyService.sol +691 -0
  411. package/contracts/product/PolicyServiceManager.sol +39 -0
  412. package/contracts/product/PricingService.sol +300 -0
  413. package/contracts/product/PricingServiceManager.sol +39 -0
  414. package/contracts/product/Product.sol +455 -0
  415. package/contracts/product/RiskService.sol +96 -0
  416. package/contracts/product/RiskServiceManager.sol +39 -0
  417. package/contracts/registry/ChainNft.sol +128 -40
  418. package/contracts/registry/IRegistry.sol +142 -28
  419. package/contracts/registry/IRegistryService.sol +62 -0
  420. package/contracts/registry/ITransferInterceptor.sol +6 -0
  421. package/contracts/registry/Registry.sol +618 -282
  422. package/contracts/registry/RegistryAdmin.sol +448 -0
  423. package/contracts/registry/RegistryService.sol +241 -0
  424. package/contracts/registry/RegistryServiceManager.sol +53 -0
  425. package/contracts/registry/ReleaseLifecycle.sol +30 -0
  426. package/contracts/registry/ReleaseRegistry.sol +501 -0
  427. package/contracts/registry/ServiceAuthorizationV3.sol +194 -0
  428. package/contracts/registry/TokenRegistry.sol +315 -0
  429. package/contracts/shared/Component.sol +271 -0
  430. package/contracts/shared/ComponentService.sol +686 -0
  431. package/contracts/shared/ComponentServiceHelperLib.sol +118 -0
  432. package/contracts/shared/ComponentServiceManager.sol +38 -0
  433. package/contracts/shared/ComponentVerifyingService.sol +126 -0
  434. package/contracts/shared/ContractLib.sol +38 -0
  435. package/contracts/shared/IComponent.sol +74 -0
  436. package/contracts/shared/IComponentService.sol +121 -0
  437. package/contracts/shared/IInstanceLinkedComponent.sol +41 -0
  438. package/contracts/shared/IKeyValueStore.sol +54 -0
  439. package/contracts/{instance/base → shared}/ILifecycle.sol +6 -5
  440. package/contracts/shared/INftOwnable.sol +25 -0
  441. package/contracts/shared/IPolicyHolder.sol +35 -0
  442. package/contracts/shared/IRegisterable.sol +23 -21
  443. package/contracts/shared/IRegistryLinked.sol +11 -0
  444. package/contracts/shared/IService.sol +25 -0
  445. package/contracts/shared/InitializableERC165.sol +27 -0
  446. package/contracts/shared/InstanceLinkedComponent.sol +213 -0
  447. package/contracts/shared/KeyValueStore.sol +131 -0
  448. package/contracts/shared/Lifecycle.sol +88 -0
  449. package/contracts/shared/NftIdSet.sol +65 -0
  450. package/contracts/shared/NftOwnable.sol +127 -0
  451. package/contracts/shared/PolicyHolder.sol +62 -0
  452. package/contracts/shared/Registerable.sol +62 -63
  453. package/contracts/shared/RegistryLinked.sol +44 -0
  454. package/contracts/shared/Service.sol +84 -0
  455. package/contracts/shared/TokenHandler.sol +183 -0
  456. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  457. package/contracts/staking/IStaking.sol +168 -0
  458. package/contracts/staking/IStakingService.sol +157 -0
  459. package/contracts/staking/StakeManagerLib.sol +224 -0
  460. package/contracts/staking/Staking.sol +497 -0
  461. package/contracts/staking/StakingLifecycle.sol +23 -0
  462. package/contracts/staking/StakingManager.sol +52 -0
  463. package/contracts/staking/StakingReader.sol +190 -0
  464. package/contracts/staking/StakingService.sol +407 -0
  465. package/contracts/staking/StakingServiceManager.sol +44 -0
  466. package/contracts/staking/StakingStore.sol +605 -0
  467. package/contracts/staking/TargetManagerLib.sol +211 -0
  468. package/contracts/{types → type}/AddressSet.sol +1 -1
  469. package/contracts/type/Amount.sol +150 -0
  470. package/contracts/{types → type}/Blocknumber.sol +27 -3
  471. package/contracts/type/ClaimId.sol +80 -0
  472. package/contracts/type/DistributorType.sol +55 -0
  473. package/contracts/type/Fee.sol +66 -0
  474. package/contracts/{types → type}/Key32.sol +8 -3
  475. package/contracts/{types → type}/NftId.sol +22 -15
  476. package/contracts/type/NftIdSet.sol +62 -0
  477. package/contracts/type/ObjectType.sol +276 -0
  478. package/contracts/type/PayoutId.sol +82 -0
  479. package/contracts/type/Referral.sol +90 -0
  480. package/contracts/type/RequestId.sol +75 -0
  481. package/contracts/type/RiskId.sol +57 -0
  482. package/contracts/type/RoleId.sol +162 -0
  483. package/contracts/type/Seconds.sol +101 -0
  484. package/contracts/type/Selector.sol +102 -0
  485. package/contracts/{types → type}/StateId.sol +53 -5
  486. package/contracts/type/String.sol +53 -0
  487. package/contracts/{types → type}/Timestamp.sol +38 -15
  488. package/contracts/type/UFixed.sol +355 -0
  489. package/contracts/{types → type}/Version.sol +17 -2
  490. package/contracts/upgradeability/IVersionable.sol +53 -0
  491. package/contracts/upgradeability/ProxyManager.sol +232 -0
  492. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +14 -0
  493. package/contracts/upgradeability/Versionable.sol +59 -0
  494. package/package.json +12 -7
  495. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  496. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -174
  497. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  498. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  499. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -356
  500. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  501. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -279
  502. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  503. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -387
  504. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  505. package/artifacts/contracts/components/Product.sol/Product.json +0 -305
  506. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  507. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  508. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  509. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  510. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  511. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  512. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  513. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  514. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  515. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  516. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  517. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  518. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  519. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  520. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  521. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  522. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  523. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  524. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  525. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  526. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  527. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  528. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  529. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  530. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  531. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  532. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  533. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  534. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  535. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  536. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  537. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  538. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  539. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  540. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  541. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  542. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  543. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +0 -300
  544. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  545. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -63
  546. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  547. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  548. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  549. package/artifacts/contracts/instance/base/IService.sol/IService.json +0 -300
  550. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  551. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +0 -326
  552. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  553. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -692
  554. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  555. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -169
  556. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  557. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  558. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +0 -300
  559. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  560. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  561. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  562. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  563. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  564. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  565. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -296
  566. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  567. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  568. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -296
  569. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  570. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  571. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  572. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
  573. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  574. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
  575. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  576. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
  577. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  578. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  579. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  580. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
  581. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  582. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  583. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
  584. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  585. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
  586. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  587. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  588. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  589. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
  590. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  591. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
  592. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  593. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  594. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -10
  595. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  596. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
  597. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  598. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +0 -10
  599. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  600. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -533
  601. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  602. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  603. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  604. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -533
  605. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  606. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -523
  607. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  608. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  609. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  610. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  611. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -471
  612. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  613. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -673
  614. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  615. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  616. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  617. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  618. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -35
  619. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  620. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  621. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  622. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -164
  623. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  624. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -164
  625. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  626. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  627. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  628. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
  629. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  630. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
  631. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  632. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -137
  633. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  634. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  635. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  636. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -379
  637. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  638. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -338
  639. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  640. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  641. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  642. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -206
  643. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  644. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -338
  645. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  646. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +0 -10
  647. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  648. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +0 -174
  649. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  650. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  651. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  652. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -218
  653. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  654. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +0 -111
  655. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  656. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  657. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  658. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +0 -10
  659. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  660. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +0 -92
  661. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  662. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +0 -30
  663. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  664. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +0 -92
  665. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  666. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +0 -236
  667. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  668. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
  669. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  670. package/artifacts/contracts/types/Version.sol/VersionLib.json +0 -139
  671. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  672. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +0 -30
  673. package/contracts/components/BaseComponent.sol +0 -88
  674. package/contracts/components/IBaseComponent.sol +0 -19
  675. package/contracts/components/IPoolComponent.sol +0 -57
  676. package/contracts/components/IProductComponent.sol +0 -19
  677. package/contracts/components/Pool.sol +0 -174
  678. package/contracts/components/Product.sol +0 -117
  679. package/contracts/experiment/errors/Require.sol +0 -38
  680. package/contracts/experiment/errors/Revert.sol +0 -44
  681. package/contracts/experiment/inheritance/A.sol +0 -53
  682. package/contracts/experiment/inheritance/B.sol +0 -28
  683. package/contracts/experiment/inheritance/C.sol +0 -34
  684. package/contracts/experiment/inheritance/IA.sol +0 -13
  685. package/contracts/experiment/inheritance/IB.sol +0 -10
  686. package/contracts/experiment/inheritance/IC.sol +0 -12
  687. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  688. package/contracts/experiment/statemachine/ISM.sol +0 -25
  689. package/contracts/experiment/statemachine/README.md +0 -112
  690. package/contracts/experiment/statemachine/SM.sol +0 -57
  691. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  692. package/contracts/experiment/types/TypeA.sol +0 -47
  693. package/contracts/experiment/types/TypeB.sol +0 -29
  694. package/contracts/instance/IInstanceLinked.sol +0 -8
  695. package/contracts/instance/base/ComponentServiceBase.sol +0 -42
  696. package/contracts/instance/base/IInstanceBase.sol +0 -14
  697. package/contracts/instance/base/IKeyValueStore.sol +0 -49
  698. package/contracts/instance/base/IService.sol +0 -15
  699. package/contracts/instance/base/InstanceBase.sol +0 -80
  700. package/contracts/instance/base/KeyValueStore.sol +0 -156
  701. package/contracts/instance/base/Lifecycle.sol +0 -95
  702. package/contracts/instance/base/ModuleBase.sol +0 -52
  703. package/contracts/instance/base/ServiceBase.sol +0 -37
  704. package/contracts/instance/module/access/Access.sol +0 -149
  705. package/contracts/instance/module/access/IAccess.sol +0 -53
  706. package/contracts/instance/module/bundle/BundleModule.sol +0 -136
  707. package/contracts/instance/module/bundle/IBundle.sol +0 -58
  708. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  709. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
  710. package/contracts/instance/module/component/ComponentModule.sol +0 -95
  711. package/contracts/instance/module/component/IComponent.sol +0 -53
  712. package/contracts/instance/module/policy/IPolicy.sol +0 -60
  713. package/contracts/instance/module/policy/PolicyModule.sol +0 -76
  714. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  715. package/contracts/instance/module/pool/PoolModule.sol +0 -87
  716. package/contracts/instance/module/risk/IRisk.sol +0 -10
  717. package/contracts/instance/module/risk/RiskModule.sol +0 -8
  718. package/contracts/instance/module/treasury/ITreasury.sol +0 -103
  719. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  720. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
  721. package/contracts/instance/service/ComponentOwnerService.sol +0 -170
  722. package/contracts/instance/service/IComponentOwnerService.sol +0 -22
  723. package/contracts/instance/service/IPoolService.sol +0 -30
  724. package/contracts/instance/service/IProductService.sol +0 -58
  725. package/contracts/instance/service/PoolService.sol +0 -123
  726. package/contracts/instance/service/ProductService.sol +0 -354
  727. package/contracts/registry/IChainNft.sol +0 -21
  728. package/contracts/registry/IRegistryLinked.sol +0 -8
  729. package/contracts/shared/ERC165.sol +0 -21
  730. package/contracts/shared/IOwnable.sol +0 -6
  731. package/contracts/shared/IVersionable.sol +0 -52
  732. package/contracts/shared/Versionable.sol +0 -89
  733. package/contracts/test/TestFee.sol +0 -25
  734. package/contracts/test/TestPool.sol +0 -22
  735. package/contracts/test/TestProduct.sol +0 -44
  736. package/contracts/test/TestRegisterable.sol +0 -19
  737. package/contracts/test/TestRoleId.sol +0 -14
  738. package/contracts/test/TestService.sol +0 -32
  739. package/contracts/test/TestToken.sol +0 -26
  740. package/contracts/test/TestVersion.sol +0 -44
  741. package/contracts/test/TestVersionable.sol +0 -17
  742. package/contracts/types/ChainId.sol +0 -38
  743. package/contracts/types/Fee.sol +0 -51
  744. package/contracts/types/NftIdSet.sol +0 -60
  745. package/contracts/types/ObjectType.sol +0 -115
  746. package/contracts/types/RoleId.sol +0 -38
  747. package/contracts/types/UFixed.sol +0 -209
@@ -1,381 +1,717 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../instance/base/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
- import {IChainNft} from "./IChainNft.sol";
8
13
  import {ChainNft} from "./ChainNft.sol";
9
14
  import {IRegistry} from "./IRegistry.sol";
10
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
- import {VersionPart} from "../types/Version.sol";
12
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
13
-
14
- // TODO make registry upgradable
15
+ import {IRegisterable} from "../shared/IRegisterable.sol";
16
+ import {ReleaseRegistry} from "./ReleaseRegistry.sol";
17
+ import {TokenRegistry} from "./TokenRegistry.sol";
18
+ import {RegistryAdmin} from "./RegistryAdmin.sol";
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.
15
34
  contract Registry is
16
- IRegisterable,
35
+ Initializable,
36
+ AccessManaged,
17
37
  IRegistry
18
38
  {
19
- using NftIdLib for NftId;
39
+ /// @dev Protocol NFT ID
40
+ NftId public immutable PROTOCOL_NFT_ID;
41
+
42
+ /// @dev Gobal registry NFT ID
43
+ NftId public immutable GLOBAL_REGISTRY_NFT_ID;
44
+
45
+ /// @dev Gobal registry address on mainnet.
46
+ address public immutable GLOBAL_REGISTRY_ADDRESS;
47
+
48
+ /// @dev Registry NFT ID
49
+ NftId public immutable REGISTRY_NFT_ID;
50
+
51
+ /// @dev Deployer address that authorizes the initializer of this contract.
52
+ address public immutable DEPLOYER;
53
+
54
+ /// @dev Registry admin contract for this registry.
55
+ RegistryAdmin public immutable ADMIN;
56
+
57
+ /// @dev Chain NFT contract that keeps track of the ownership of all registered objects.
58
+ ChainNft public immutable CHAIN_NFT;
20
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;
21
63
  string public constant EMPTY_URI = "";
22
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
23
70
  mapping(NftId nftId => ObjectInfo info) private _info;
24
- mapping(NftId nftId => address owner) private _owner;
25
71
  mapping(address object => NftId nftId) private _nftIdByAddress;
26
- mapping(ObjectType objectType => bool) private _isValidType;
27
- mapping(ObjectType objectType => mapping(ObjectType objectParentType => bool)) private _isValidParentType;
28
72
 
29
- mapping(NftId nftId => string stringValue) private _string;
30
- mapping(bytes32 serviceNameHash => mapping(VersionPart majorVersion => address service)) _service;
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;
31
85
 
32
- NftId private _nftId;
33
- IChainNft private _chainNft;
34
- ChainNft private _chainNftInternal;
35
- address private _initialOwner;
86
+ ReleaseRegistry private _releaseRegistry;
87
+ address private _tokenRegistryAddress;
88
+ address private _stakingAddress;
36
89
 
37
- // @dev will own protocol nft and registry nft(s) minted during initialize
38
- address private _protocolOwner;
90
+ modifier onlyDeployer() {
91
+ if (msg.sender != DEPLOYER) {
92
+ revert ErrorRegistryCallerNotDeployer();
93
+ }
94
+ _;
95
+ }
96
+
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);
39
108
 
40
- // TODO refactor once registry becomes upgradable
41
- // @Dev the protocol owner will get ownership of the
42
- // protocol nft and the global registry nft minted in this
43
- // initializer function
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();
120
+ }
121
+
122
+
123
+ /// @dev Wires release registry, token registry and staking contract to this registry.
124
+ /// MUST be called by release registry.
44
125
  function initialize(
45
- address chainNft,
46
- address protocolOwner
126
+ address releaseRegistry,
127
+ address tokenRegistry,
128
+ address staking
47
129
  )
48
- public
130
+ external
131
+ initializer()
132
+ onlyDeployer()
49
133
  {
50
- require(
51
- address(_chainNft) == address(0),
52
- "ERROR:REG-001:ALREADY_INITIALIZED"
53
- );
134
+ // store links to supporting contracts
135
+ _releaseRegistry = ReleaseRegistry(releaseRegistry);
136
+ _tokenRegistryAddress = tokenRegistry;
137
+ _stakingAddress = staking;
54
138
 
55
- _initialOwner = msg.sender;
56
- _protocolOwner = protocolOwner;
139
+ // register staking contract
140
+ _stakingNftId = _registerStaking();
141
+ }
57
142
 
58
- _chainNft = IChainNft(chainNft);
59
- _chainNftInternal = ChainNft(chainNft);
143
+ /// @inheritdoc IRegistry
144
+ function registerRegistry(
145
+ NftId nftId,
146
+ uint256 chainId,
147
+ address registryAddress
148
+ )
149
+ external
150
+ restricted()
151
+ {
152
+ // registration of chain registries only allowed on mainnet
153
+ if (block.chainid != 1) {
154
+ revert ErrorRegistryNotOnMainnet(block.chainid);
155
+ }
60
156
 
61
- // initial registry setup
62
- _registerProtocol();
63
- _nftId = _registerRegistry();
157
+ // registry chain id is not zero
158
+ if(chainId == 0) {
159
+ revert ErrorRegistryChainRegistryChainIdZero(nftId);
160
+ }
64
161
 
65
- // setup rules for further registrations
66
- _setupValidTypes();
67
- _setupValidParentTypes();
68
- }
162
+ // registry address is not zero
163
+ if (registryAddress == address(0)) {
164
+ revert ErrorRegistryChainRegistryAddressZero(nftId, chainId);
165
+ }
69
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
+ }
70
172
 
71
- function register(
72
- address objectAddress
173
+ emit LogChainRegistryRegistration(nftId, chainId, registryAddress);
174
+
175
+ _registerRegistryForNft(
176
+ chainId,
177
+ ObjectInfo({
178
+ nftId: nftId,
179
+ parentNftId: REGISTRY_NFT_ID,
180
+ objectType: REGISTRY(),
181
+ isInterceptor: false,
182
+ objectAddress: registryAddress,
183
+ initialOwner: NFT_LOCK_ADDRESS,
184
+ data: ""
185
+ }),
186
+ false); // do not update address lookup for objects on a different chain
187
+ }
188
+
189
+ // TODO limit service owner to registry admin?
190
+ /// @inheritdoc IRegistry
191
+ function registerService(
192
+ ObjectInfo memory info,
193
+ VersionPart version,
194
+ ObjectType domain
73
195
  )
74
- // TODO add authz (only services may register components etc)
75
- // we have to check how we do authz for registring services (just restrict to protocol owner/registry owner)
76
- external override returns (NftId nftId) {
77
- require(
78
- _nftIdByAddress[objectAddress].eqz(),
79
- "ERROR:REG-002:ALREADY_REGISTERED"
80
- );
81
-
82
- IRegisterable registerable = IRegisterable(objectAddress);
83
- require(
84
- registerable.supportsInterface(type(IRegisterable).interfaceId),
85
- "ERROR:REG-003:NOT_REGISTERABLE"
86
- );
87
-
88
- ObjectType objectType = registerable.getType();
89
- require(
90
- _isValidType[objectType],
91
- "ERROR:REG-004:TYPE_INVALID"
92
- );
93
-
94
- NftId parentNftId = registerable.getParentNftId();
95
- require(
96
- isRegistered(parentNftId),
97
- "ERROR:REG-005:PARENT_NOT_REGISTERED"
98
- );
99
-
100
- require(
101
- _isValidParentType[objectType][_info[parentNftId].objectType],
102
- "ERROR:REG-006:PARENT_TYPE_INVALID"
103
- );
104
-
105
- // also check that nftId and parentNFtId are on the same chain if applicable
106
-
107
- // nft minting
108
- uint256 mintedTokenId = _chainNft.mint(
109
- registerable.getOwner(),
110
- EMPTY_URI
111
- );
112
-
113
- nftId = toNftId(mintedTokenId);
114
-
115
- // special case services
116
- if(registerable.getType() == SERVICE()) {
117
- IService service = IService(objectAddress);
118
- require(
119
- service.supportsInterface(type(IService).interfaceId),
120
- "ERROR:REG-007:NOT_SERVICE"
121
- );
122
-
123
- string memory serviceName = service.getName();
124
- VersionPart majorVersion = service.getMajorVersion();
125
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
126
-
127
- // service specific state
128
- _string[nftId] = serviceName;
129
-
130
- require(
131
- _service[serviceNameHash][majorVersion] == address(0),
132
- "ERROR:REG-008:ALREADY_REGISTERED"
133
- );
134
- _service[serviceNameHash][majorVersion] = objectAddress;
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
+ }
205
+
206
+ // version is defined
207
+ if(version.eqz()) {
208
+ revert ErrorRegistryServiceVersionZero(service);
209
+ }
210
+ // service domain is defined
211
+ if(domain.eqz()) {
212
+ revert ErrorRegistryServiceDomainZero(service, version);
213
+ }
214
+
215
+ // service has proper type
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);
135
228
  }
136
229
 
137
- // create object info and link nft id with it
138
- _registerObjectInfo(registerable, nftId);
230
+ _service[version][domain] = service;
231
+
232
+ emit LogServiceRegistration(version, domain);
233
+
234
+ nftId = _register(info);
139
235
  }
140
236
 
141
237
 
142
- function registerObjectForInstance(
143
- NftId parentNftId,
144
- ObjectType objectType,
145
- address initialOwner,
146
- bytes memory data
147
- )
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
+ // this indidirectly enforces that the parent is registered
248
+ // parentType would be zero for a non-registered parent which is never a valid type combination
249
+ ObjectType parentType = _info[info.parentNftId].objectType;
250
+
251
+ // check type combinations for core objects
252
+ if(objectAddress == address(0)) {
253
+ if(_coreObjectCombinations[objectType][parentType] == false) {
254
+ revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
255
+ }
256
+ }
257
+ // check type combinations for contract objects
258
+ else {
259
+ if(_coreContractCombinations[objectType][parentType] == false) {
260
+ revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
261
+ }
262
+ }
263
+
264
+ nftId = _register(info);
265
+ }
266
+
267
+
268
+ /// @inheritdoc IRegistry
269
+ function registerWithCustomType(ObjectInfo memory info)
148
270
  external
149
- override
150
- returns (
151
- // TODO add onlyRegisteredInstance
152
- NftId nftId
153
- )
271
+ restricted()
272
+ returns(NftId nftId)
154
273
  {
155
- // TODO add more validation
156
- require(
157
- objectType == POLICY() || objectType == BUNDLE(),
158
- "ERROR:REG-010:TYPE_INVALID"
159
- );
160
-
161
- uint256 mintedTokenId = _chainNft.mint(initialOwner, EMPTY_URI);
162
- nftId = toNftId(mintedTokenId);
163
-
164
- ObjectInfo memory info = ObjectInfo(
165
- nftId,
166
- parentNftId,
167
- objectType,
168
- address(0),
169
- initialOwner,
170
- data
171
- );
274
+ ObjectType objectType = info.objectType;
275
+ ObjectType parentType = _info[info.parentNftId].objectType;
172
276
 
173
- _info[nftId] = info;
277
+ if(_coreTypes[objectType]) {
278
+ revert ErrorRegistryCoreTypeRegistration();
279
+ }
280
+
281
+ if(
282
+ objectType == ObjectTypeLib.zero() ||
283
+ parentType == ObjectTypeLib.zero() ||
284
+ parentType == PROTOCOL() ||
285
+ parentType == SERVICE()
286
+ ) {
287
+ revert ErrorRegistryTypesCombinationInvalid(info.objectAddress, objectType, parentType);
288
+ }
289
+
290
+ nftId = _register(info);
291
+ }
292
+
293
+
294
+ /// @dev earliest GIF major version
295
+ function getInitialVersion() external view returns (VersionPart) {
296
+ return VersionPartLib.toVersionPart(_releaseRegistry.INITIAL_GIF_VERSION());
297
+ }
298
+
299
+ /// @dev next GIF release version to be released
300
+ function getNextVersion() external view returns (VersionPart) {
301
+ return _releaseRegistry.getNextVersion();
302
+ }
174
303
 
175
- // add logging
304
+ /// @dev latest active GIF release version
305
+ function getLatestVersion() external view returns (VersionPart) {
306
+ return _releaseRegistry.getLatestVersion();
176
307
  }
177
308
 
178
- function getObjectCount() external view override returns (uint256) {
179
- return _chainNft.totalSupply();
309
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
310
+ return _releaseRegistry.getReleaseInfo(version);
180
311
  }
181
312
 
182
- function getNftId(
183
- address object
184
- ) external view override returns (NftId id) {
313
+ function chainIds() public view returns (uint256) {
314
+ return _chainId.length;
315
+ }
316
+
317
+ function getChainId(uint256 idx) public view returns (uint256) {
318
+ return _chainId[idx];
319
+ }
320
+
321
+ function getRegistryNftId(uint256 chainId) public view returns (NftId nftId) {
322
+ return _registryNftIdByChainId[chainId];
323
+ }
324
+
325
+ function getObjectCount() external view returns (uint256) {
326
+ return CHAIN_NFT.totalSupply();
327
+ }
328
+
329
+ function getNftId() external view returns (NftId nftId) {
330
+ return REGISTRY_NFT_ID;
331
+ }
332
+
333
+ function getProtocolNftId() external view returns (NftId nftId) {
334
+ return PROTOCOL_NFT_ID;
335
+ }
336
+
337
+ function getNftIdForAddress(address object) external view returns (NftId id) {
185
338
  return _nftIdByAddress[object];
186
339
  }
187
340
 
188
- function isRegistered(
189
- NftId nftId
190
- ) public view override returns (bool) {
191
- return _info[nftId].objectType.gtz();
341
+ function ownerOf(NftId nftId) public view returns (address) {
342
+ return CHAIN_NFT.ownerOf(nftId.toInt());
192
343
  }
193
344
 
194
- function isRegistered(
195
- address object
196
- ) external view override returns (bool) {
197
- return _nftIdByAddress[object].gtz();
345
+ function isOwnerOf(NftId nftId, address expectedOwner) public view returns (bool) {
346
+ return CHAIN_NFT.ownerOf(nftId.toInt()) == expectedOwner;
198
347
  }
199
348
 
200
- function getObjectInfo(
201
- NftId nftId
202
- ) external view override returns (ObjectInfo memory info) {
349
+ function ownerOf(address contractAddress) public view returns (address) {
350
+ return CHAIN_NFT.ownerOf(_nftIdByAddress[contractAddress].toInt());
351
+ }
352
+
353
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
203
354
  return _info[nftId];
204
355
  }
205
356
 
206
- function getName(
207
- NftId nftId
208
- ) external view returns (string memory name) {
209
- return _string[nftId];
357
+ function isObjectType(NftId nftId, ObjectType expectedObjectType) external view returns (bool) {
358
+ return _info[nftId].objectType == expectedObjectType;
210
359
  }
211
360
 
212
- function getOwner(NftId nftId) external view override returns (address) {
213
- return _chainNft.ownerOf(nftId.toInt());
361
+ function getObjectAddress(NftId nftId) external view returns (address) {
362
+ return _info[nftId].objectAddress;
214
363
  }
215
364
 
216
- function getChainNft() external view override returns (IChainNft) {
217
- return _chainNft;
365
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
366
+ return _info[_nftIdByAddress[object]];
218
367
  }
219
368
 
220
- // special case to retrive a gif service
221
- function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view override returns (address serviceAddress) {
222
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
223
- return _service[serviceNameHash][majorVersion];
369
+ function isRegistered(NftId nftId) public view returns (bool) {
370
+ return _info[nftId].objectType.gtz();
224
371
  }
225
372
 
226
- // from IERC165
227
- function supportsInterface(bytes4 interfaceId) external pure override returns (bool) {
228
- return interfaceId == type(IRegistry).interfaceId;
373
+ function isRegistered(address object) external view returns (bool) {
374
+ return _nftIdByAddress[object].gtz();
229
375
  }
230
376
 
231
- // from IRegistryLinked
232
- function getRegistry() external view override returns (IRegistry registry) {
233
- return this;
377
+ function isRegisteredService(address object) external view returns (bool) {
378
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
234
379
  }
235
380
 
236
- // from IRegisterable
237
- function register() external pure override returns (NftId nftId) {
238
- return zeroNftId();
381
+ function isRegisteredComponent(address object) external view returns (bool) {
382
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
383
+ return _info[objectParentNftId].objectType == INSTANCE();
239
384
  }
240
385
 
241
- function getType() external pure override returns (ObjectType objectType) {
242
- return REGISTRY();
386
+ function isActiveRelease(VersionPart version) external view returns (bool)
387
+ {
388
+ return _releaseRegistry.isActiveRelease(version);
243
389
  }
244
390
 
391
+ function getStakingAddress() external view returns (address staking) {
392
+ return _stakingAddress;
393
+ }
245
394
 
246
- function getOwner() public view override returns (address owner) {
247
- return _nftId.gtz() ? this.getOwner(_nftId) : _initialOwner;
395
+ function getTokenRegistryAddress() external view returns (address tokenRegistry) {
396
+ return _tokenRegistryAddress;
248
397
  }
249
398
 
250
- function getNftId() external view override (IRegisterable, IRegistry) returns (NftId nftId) {
251
- return _nftId;
399
+ function getServiceAddress(
400
+ ObjectType serviceDomain,
401
+ VersionPart releaseVersion
402
+ ) external view returns (address service)
403
+ {
404
+ service = _service[releaseVersion][serviceDomain];
252
405
  }
253
406
 
254
- function getParentNftId() external view returns (NftId nftId) {
255
- // we're the global registry
256
- if(block.chainid == 1) {
257
- return toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
258
- }
259
- else {
260
- return toNftId(_chainNftInternal.GLOBAL_REGISTRY_ID());
261
- }
407
+ function getReleaseRegistryAddress() external view returns (address) {
408
+ return address(_releaseRegistry);
262
409
  }
263
410
 
264
- function getData() external pure returns (bytes memory data) {
265
- return "";
411
+ function getChainNftAddress() external view override returns (address) {
412
+ return address(CHAIN_NFT);
266
413
  }
267
414
 
268
- // registry specific functions
269
- function getProtocolOwner() external view override returns (address) {
270
- return _protocolOwner;
415
+ function getRegistryAdminAddress() external view returns (address) {
416
+ return address(ADMIN);
271
417
  }
272
418
 
273
- /// @dev defines which types are allowed to register
274
- function _setupValidTypes() internal {
275
- _isValidType[REGISTRY()] = true; // only for global registry
276
- _isValidType[TOKEN()] = true;
277
- _isValidType[SERVICE()] = true;
278
- _isValidType[INSTANCE()] = true;
279
- _isValidType[STAKE()] = true;
280
- _isValidType[PRODUCT()] = true;
281
- _isValidType[ORACLE()] = true;
282
- _isValidType[POOL()] = true;
283
- _isValidType[POLICY()] = true;
284
- _isValidType[BUNDLE()] = true;
419
+ function getAuthority() external view returns (address) {
420
+ return ADMIN.authority();
285
421
  }
286
422
 
287
- /// @dev defines which types - parent type relations are allowed to register
288
- function _setupValidParentTypes() internal {
289
- // registry as parent
290
- _isValidParentType[TOKEN()][REGISTRY()] = true;
291
- _isValidParentType[SERVICE()][REGISTRY()] = true;
292
- _isValidParentType[INSTANCE()][REGISTRY()] = true;
423
+ function getOwner() public view returns (address owner) {
424
+ return ownerOf(address(this));
425
+ }
293
426
 
294
- // instance as parent
295
- _isValidParentType[PRODUCT()][INSTANCE()] = true;
296
- _isValidParentType[DISTRIBUTOR()][INSTANCE()] = true;
297
- _isValidParentType[ORACLE()][INSTANCE()] = true;
298
- _isValidParentType[POOL()][INSTANCE()] = true;
427
+ // IERC165
299
428
 
300
- // product as parent
301
- _isValidParentType[POLICY()][PRODUCT()] = true;
429
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
430
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
431
+ return true;
432
+ }
302
433
 
303
- // pool as parent
304
- _isValidParentType[BUNDLE()][POOL()] = true;
305
- _isValidParentType[STAKE()][POOL()] = true;
434
+ return false;
306
435
  }
307
436
 
308
- /// @dev protocol registration used to anchor the dip ecosystem relations
309
- function _registerProtocol() virtual internal {
310
- uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
311
- _chainNftInternal.mint(_protocolOwner, protocolId);
312
-
313
- NftId protocolNftid = toNftId(protocolId);
314
- ObjectInfo memory protocolInfo = ObjectInfo(
315
- protocolNftid,
316
- zeroNftId(), // parent nft id
317
- PROTOCOL(),
318
- address(0), // contract address
319
- _protocolOwner,
320
- "" // data
321
- );
322
-
323
- _info[protocolNftid] = protocolInfo;
324
- }
325
-
326
- /// @dev registry registration
327
- /// might also register the global registry when not on mainnet
328
- function _registerRegistry() virtual internal returns (NftId registryNftId) {
329
- uint256 registryId = _chainNftInternal.calculateTokenId(2);
330
- registryNftId = toNftId(registryId);
331
-
332
- // we're not the global registry
333
- if(registryId != _chainNftInternal.GLOBAL_REGISTRY_ID()) {
334
- _registerGlobalRegistry();
437
+ // Internals
438
+
439
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
440
+ function _register(ObjectInfo memory info)
441
+ internal
442
+ returns(NftId nftId)
443
+ {
444
+ ObjectType objectType = info.objectType; // do not care here, never PROTOCOL(), REGISTRY()
445
+ bool isInterceptor = info.isInterceptor;
446
+ address objectAddress = info.objectAddress; // do not care here, can be 0
447
+ address owner = info.initialOwner; // do not care here, can be 0, can be equal info.objectAddress
448
+
449
+ NftId parentNftId = info.parentNftId; // do not care here, can not be 0
450
+ ObjectInfo memory parentInfo = _info[parentNftId];
451
+ address parentAddress = parentInfo.objectAddress; // can be 0
452
+
453
+ // parent is contract -> need to check? -> check before minting
454
+ // special case: staking: to protocol possible as well
455
+ // NO LONGER TRUE: special case: global registry nft as parent when not on mainnet -> global registry address is 0
456
+ // special case: when parentNftId == CHAIN_NFT.mint(), check for zero parent address before mint
457
+ // special case: when parentNftId == CHAIN_NFT.mint() && objectAddress == initialOwner
458
+ // Parent can have 0 address in case of STAKE for PROTOCOL / CUSTOM_TYPE for POLICY
459
+ // But it MUST be registered -> parentType != 0 && parentNftId != 0
460
+ /*if(objectType != STAKE()) {
461
+ if(parentAddress == address(0)) {
462
+ revert ErrorRegistryParentAddressZero();
463
+ }
464
+ }*/
465
+
466
+ // global registry is never parent when not on mainnet
467
+ if(block.chainid != 1) {
468
+ if(parentNftId == GLOBAL_REGISTRY_NFT_ID) {
469
+ revert ErrorRegistryGlobalRegistryAsParent(objectAddress, objectType);
470
+ }
335
471
  }
336
472
 
337
- _chainNftInternal.mint(_protocolOwner, registryId);
338
- _registerObjectInfo(this, registryNftId);
473
+ address interceptorAddress = _getInterceptor(
474
+ isInterceptor,
475
+ objectType,
476
+ objectAddress,
477
+ parentInfo.isInterceptor,
478
+ parentAddress);
479
+
480
+ uint256 tokenId = CHAIN_NFT.getNextTokenId();
481
+ nftId = NftIdLib.toNftId(tokenId);
482
+ info.nftId = nftId;
483
+
484
+ _info[nftId] = info;
485
+ _setAddressForNftId(nftId, objectAddress);
486
+
487
+ emit LogRegistration(nftId, parentNftId, objectType, isInterceptor, objectAddress, owner);
488
+
489
+ // calls nft receiver(1) and interceptor(2)
490
+ uint256 mintedTokenId = CHAIN_NFT.mint(
491
+ owner,
492
+ interceptorAddress,
493
+ EMPTY_URI);
494
+
495
+ assert(mintedTokenId == tokenId);
339
496
  }
340
497
 
498
+ /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
499
+ /// special case: STAKES (parent may be any type) -> no intercept call
500
+ /// default case:
501
+ function _getInterceptor(
502
+ bool isInterceptor,
503
+ ObjectType objectType,
504
+ address objectAddress,
505
+ bool parentIsInterceptor,
506
+ address parentObjectAddress
507
+ )
508
+ internal
509
+ pure
510
+ returns (address interceptor)
511
+ {
512
+ // no intercepting calls for stakes
513
+ if (objectType == STAKE()) {
514
+ return address(0);
515
+ }
341
516
 
342
- /// @dev global registry registration for non mainnet registries
343
- function _registerGlobalRegistry() virtual internal {
344
- uint256 globalRegistryId = _chainNftInternal.GLOBAL_REGISTRY_ID();
345
- _chainNftInternal.mint(_protocolOwner, globalRegistryId);
517
+ if (objectAddress == address(0)) {
518
+ if (parentIsInterceptor) {
519
+ return parentObjectAddress;
520
+ } else {
521
+ return address(0);
522
+ }
523
+ }
346
524
 
347
- NftId globalRegistryNftId = toNftId(globalRegistryId);
348
- ObjectInfo memory globalRegistryInfo = ObjectInfo(
349
- globalRegistryNftId,
350
- toNftId(_chainNftInternal.PROTOCOL_NFT_ID()),
351
- REGISTRY(),
352
- address(0), // contract address
353
- _protocolOwner,
354
- "" // data
355
- );
525
+ if (isInterceptor) {
526
+ return objectAddress;
527
+ }
356
528
 
357
- _info[globalRegistryNftId] = globalRegistryInfo;
529
+ return address(0);
358
530
  }
359
531
 
532
+ // Internals called only in constructor
360
533
 
361
- function _registerObjectInfo(
362
- IRegisterable registerable,
363
- NftId nftId
364
- ) internal virtual {
365
- address objectAddress = address(registerable);
366
- ObjectInfo memory info = ObjectInfo(
367
- nftId,
368
- registerable.getParentNftId(),
369
- registerable.getType(),
370
- objectAddress,
371
- registerable.getOwner(),
372
- registerable.getData()
373
- );
534
+ /// @dev protocol registration used to anchor the dip ecosystem relations
535
+ function _registerProtocol()
536
+ private
537
+ returns (NftId protocolNftId)
538
+ {
539
+ uint256 protocolId = CHAIN_NFT.PROTOCOL_NFT_ID();
540
+ protocolNftId = NftIdLib.toNftId(protocolId);
541
+
542
+ _registerForNft(
543
+ ObjectInfo({
544
+ nftId: protocolNftId,
545
+ parentNftId: NftIdLib.zero(),
546
+ objectType: PROTOCOL(),
547
+ isInterceptor: false,
548
+ objectAddress: address(0),
549
+ initialOwner: NFT_LOCK_ADDRESS,
550
+ data: ""}),
551
+ true);
552
+ }
374
553
 
375
- _info[nftId] = info;
376
- _nftIdByAddress[objectAddress] = nftId;
554
+ /// @dev register this registry
555
+ function _registerRegistry()
556
+ internal
557
+ virtual
558
+ returns (NftId registryNftId)
559
+ {
560
+ // initial assignment
561
+ registryNftId = GLOBAL_REGISTRY_NFT_ID;
562
+
563
+ // register global registry
564
+ _registerRegistryForNft(
565
+ 1, // mainnet chain id
566
+ ObjectInfo({
567
+ nftId: GLOBAL_REGISTRY_NFT_ID,
568
+ parentNftId: PROTOCOL_NFT_ID,
569
+ objectType: REGISTRY(),
570
+ isInterceptor: false,
571
+ objectAddress: GLOBAL_REGISTRY_ADDRESS,
572
+ initialOwner: NFT_LOCK_ADDRESS,
573
+ data: ""}),
574
+ block.chainid == 1);// update address lookup for global registry only on mainnet
575
+
576
+ // if not on mainnet: register this registry with global registry as parent
577
+ if (block.chainid != 1) {
578
+
579
+ // modify registry nft id to local registry when not on mainnet
580
+ registryNftId = NftIdLib.toNftId(
581
+ CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID));
582
+
583
+ _registerRegistryForNft(
584
+ block.chainid,
585
+ ObjectInfo({
586
+ nftId: registryNftId,
587
+ parentNftId: GLOBAL_REGISTRY_NFT_ID,
588
+ objectType: REGISTRY(),
589
+ isInterceptor: false,
590
+ objectAddress: address(this),
591
+ initialOwner: NFT_LOCK_ADDRESS,
592
+ data: ""}),
593
+ true);
594
+ }
595
+ }
596
+
597
+ /// @dev staking registration
598
+ function _registerRegistryForNft(
599
+ uint256 chainId,
600
+ ObjectInfo memory info,
601
+ bool updateAddressLookup
602
+ )
603
+ private
604
+ {
605
+ if (!_registryNftIdByChainId[chainId].eqz()) {
606
+ revert ErrorRegistryChainRegistryAlreadyRegistered(info.nftId, chainId);
607
+ }
608
+
609
+ // update registry lookup variables
610
+ _registryNftIdByChainId[chainId] = info.nftId;
611
+ _chainId.push(chainId);
612
+
613
+ // register the registry info
614
+ _registerForNft(
615
+ info,
616
+ updateAddressLookup);
617
+ }
377
618
 
378
- // add logging
619
+ /// @dev staking registration
620
+ function _registerStaking()
621
+ private
622
+ returns (NftId stakingNftId)
623
+ {
624
+ address stakingOwner = IRegisterable(_stakingAddress).getOwner();
625
+ uint256 stakingId = CHAIN_NFT.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
626
+ stakingNftId = NftIdLib.toNftId(stakingId);
627
+
628
+ _registerForNft(
629
+ ObjectInfo({
630
+ nftId: stakingNftId,
631
+ parentNftId: REGISTRY_NFT_ID,
632
+ objectType: STAKING(),
633
+ isInterceptor: false,
634
+ objectAddress: _stakingAddress,
635
+ initialOwner: stakingOwner,
636
+ data: ""}),
637
+ true);
638
+ }
639
+
640
+ /// @dev Register the provided object info for the specified NFT ID.
641
+ function _registerForNft(
642
+ ObjectInfo memory info,
643
+ bool updateAddressLookup
644
+ )
645
+ internal
646
+ {
647
+ _info[info.nftId] = info;
648
+
649
+ if (updateAddressLookup) {
650
+ _setAddressForNftId(info.nftId, info.objectAddress);
651
+ }
652
+
653
+ // calls nft receiver
654
+ CHAIN_NFT.mint(info.initialOwner, info.nftId.toInt());
655
+ }
656
+
657
+ function _setAddressForNftId(NftId nftId, address objectAddress)
658
+ internal
659
+ {
660
+ if (objectAddress != address(0)) {
661
+ if (_nftIdByAddress[objectAddress].gtz()) {
662
+ revert ErrorRegistryContractAlreadyRegistered(objectAddress);
663
+ }
664
+
665
+ _nftIdByAddress[objectAddress] = nftId;
666
+ }
379
667
  }
380
668
 
669
+ function _getGlobalRegistryAddress(address globalRegistry) internal view returns (address) {
670
+ if (block.chainid == 1) {
671
+ return address(this);
672
+ } else {
673
+ return globalRegistry;
674
+ }
675
+ }
676
+
677
+ /// @dev defines which object - parent types relations are allowed to register
678
+ /// EACH object type MUST have only one parent type across ALL mappings
679
+ // the only EXCEPTION is STAKE, can have any number of parent types
680
+ function _setupValidCoreTypesAndCombinations()
681
+ private
682
+ {
683
+ _coreTypes[PROTOCOL()] = true;
684
+ _coreTypes[REGISTRY()] = true;
685
+ _coreTypes[SERVICE()] = true;
686
+ _coreTypes[INSTANCE()] = true;
687
+ _coreTypes[PRODUCT()] = true;
688
+ _coreTypes[POOL()] = true;
689
+ _coreTypes[DISTRIBUTION()] = true;
690
+ _coreTypes[DISTRIBUTOR()] = true;
691
+ _coreTypes[ORACLE()] = true;
692
+ _coreTypes[POLICY()] = true;
693
+ _coreTypes[BUNDLE()] = true;
694
+ _coreTypes[STAKING()] = true;
695
+ _coreTypes[STAKE()] = true;
696
+
697
+ // types combinations allowed to use with register() function ONLY
698
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
699
+
700
+ // components with instance parent
701
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
702
+
703
+ // components with product parent
704
+ _coreContractCombinations[DISTRIBUTION()][PRODUCT()] = true;
705
+ _coreContractCombinations[ORACLE()][PRODUCT()] = true;
706
+ _coreContractCombinations[POOL()][PRODUCT()] = true;
707
+
708
+ // objects with component parents
709
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
710
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
711
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
712
+
713
+ // staking
714
+ _coreObjectCombinations[STAKE()][PROTOCOL()] = true;
715
+ _coreObjectCombinations[STAKE()][INSTANCE()] = true;
716
+ }
381
717
  }