@etherisc/gif-next 0.0.2-9dd41ff-671 → 0.0.2-9e03baf-990

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