@etherisc/gif-next 0.0.2-def25d4-556 → 0.0.2-df69269-973

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