@etherisc/gif-next 0.0.2-c0457ac-280 → 0.0.2-c0923b6-664

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