@etherisc/gif-next 0.0.2-d696c44-627 → 0.0.2-d6a50e7-658

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