@etherisc/gif-next 0.0.2-92c50c2-136 → 0.0.2-9306579-093

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