@etherisc/gif-next 0.0.2-e20063b-144 → 0.0.2-e25d641-064

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