@etherisc/gif-next 0.0.2-fd4931b-974 → 0.0.2-fd5f17a-625

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