@etherisc/gif-next 0.0.2-743affe-003 → 0.0.2-758fb77-627

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 (764) hide show
  1. package/README.md +227 -17
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1253 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +358 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/{instance/module/access → authorization}/IAccess.sol/IAccess.json +1 -1
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1032 -0
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +258 -0
  14. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +290 -0
  16. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +148 -0
  18. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +390 -0
  20. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +190 -0
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1342 -0
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +410 -0
  26. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  27. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +1012 -0
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  29. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1400 -0
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +787 -0
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  33. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +906 -0
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  35. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +932 -0
  36. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1463 -0
  38. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  40. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1660 -0
  42. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +410 -0
  44. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1411 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1517 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1978 -0
  54. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  55. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  56. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +344 -1864
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +757 -0
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +445 -2209
  62. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1626 -0
  64. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
  66. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1850 -0
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1048 -0
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +683 -0
  72. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  73. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +3587 -0
  74. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  76. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  77. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +137 -0
  78. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  80. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
  82. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  84. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +129 -0
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
  88. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/IComponents.sol/IComponents.json} +2 -2
  90. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
  92. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  93. package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
  94. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  95. package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
  96. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  97. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  98. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  99. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +979 -0
  100. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  101. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
  102. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  103. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  104. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  105. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +765 -0
  106. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  107. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +675 -0
  108. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  109. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +871 -0
  110. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  111. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +922 -0
  112. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  113. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +679 -0
  114. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  115. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1248 -0
  116. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  117. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
  118. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  119. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1362 -0
  120. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  121. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +771 -0
  122. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  123. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +907 -0
  124. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  125. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +909 -0
  126. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  127. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1198 -0
  128. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  129. package/artifacts/contracts/pool/Pool.sol/Pool.json +1034 -0
  130. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  131. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1469 -0
  132. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  133. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +695 -0
  134. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  135. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +732 -0
  136. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  137. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +667 -0
  138. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  139. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1096 -0
  140. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  141. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
  142. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  143. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1325 -0
  144. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  145. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +775 -0
  146. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  147. package/artifacts/contracts/{instance/service/IPoolService.sol/IPoolService.json → product/IApplicationService.sol/IApplicationService.json} +277 -244
  148. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  149. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +886 -0
  150. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  151. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +785 -0
  152. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  153. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +549 -0
  154. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  155. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +948 -0
  156. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  157. package/artifacts/contracts/{instance/service/IComponentOwnerService.sol/IComponentOwnerService.json → product/IRiskService.sol/IRiskService.json} +187 -176
  158. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  159. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1104 -0
  160. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  161. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +715 -0
  162. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  163. package/artifacts/contracts/product/PricingService.sol/PricingService.json +860 -0
  164. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  165. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +715 -0
  166. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  167. package/artifacts/contracts/product/Product.sol/Product.json +1054 -0
  168. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  169. package/artifacts/contracts/product/RiskService.sol/RiskService.json +583 -0
  170. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  171. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +651 -0
  172. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  173. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +103 -2
  174. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  175. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +593 -54
  176. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  177. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +457 -185
  178. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  179. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  180. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  181. package/artifacts/contracts/registry/Registry.sol/Registry.json +935 -175
  182. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  183. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1861 -0
  184. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  185. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +696 -217
  186. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  187. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
  188. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  189. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
  190. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  191. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1169 -0
  192. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  193. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +214 -0
  194. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  195. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +661 -0
  196. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  197. package/artifacts/contracts/shared/Component.sol/Component.json +685 -0
  198. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  199. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1568 -0
  200. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  201. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +753 -0
  202. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  203. package/artifacts/contracts/{instance/base/ComponentServiceBase.sol/ComponentServiceBase.json → shared/ComponentVerifyingService.sol/ComponentVerifyingService.json} +202 -168
  204. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  205. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +605 -0
  206. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  207. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1033 -0
  208. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  209. package/artifacts/contracts/{instance/service/IProductService.sol/IProductService.json → shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json} +379 -353
  210. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  211. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +474 -0
  212. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  213. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +1 -6
  214. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  215. package/artifacts/contracts/{instance/module/component/IComponent.sol/IComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +66 -52
  216. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  217. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +165 -0
  218. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  219. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +65 -8
  220. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  221. package/artifacts/contracts/{registry → shared}/IRegistryLinked.sol/IRegistryLinked.json +13 -2
  222. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  223. package/artifacts/contracts/{instance/base → shared}/IService.sol/IService.json +155 -153
  224. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +4 -0
  225. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +39 -0
  226. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  227. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  228. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  229. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +793 -0
  230. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  231. package/artifacts/contracts/{instance/base/IKeyValueStore.sol/IKeyValueStore.json → shared/KeyValueStore.sol/KeyValueStore.json} +102 -165
  232. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  233. package/artifacts/contracts/{experiment/statemachine/ISM.sol/ISM.json → shared/Lifecycle.sol/Lifecycle.json} +54 -45
  234. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  235. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  236. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  237. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +193 -0
  238. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  239. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +188 -0
  240. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  241. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +116 -12
  242. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  243. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +58 -0
  244. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  245. package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +177 -162
  246. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  247. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +469 -0
  248. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  249. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  250. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  251. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1438 -0
  252. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  253. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +1035 -0
  254. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  255. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +440 -0
  256. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  257. package/artifacts/contracts/staking/Staking.sol/Staking.json +1828 -0
  258. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  259. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
  260. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  261. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +714 -0
  262. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  263. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +592 -0
  264. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  265. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +1231 -0
  266. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  267. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +667 -0
  268. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  269. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2242 -0
  270. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  271. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +607 -0
  272. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  273. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  274. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  275. package/artifacts/contracts/type/Amount.sol/AmountLib.json +374 -0
  276. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  277. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +225 -0
  278. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  279. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  280. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  281. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  282. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  283. package/artifacts/contracts/type/Fee.sol/FeeLib.json +317 -0
  284. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  285. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  286. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  287. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +209 -0
  288. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  289. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  290. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  291. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +239 -0
  292. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  293. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  294. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  295. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  296. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  297. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  298. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  299. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +142 -0
  300. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  301. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +369 -0
  302. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  303. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +246 -0
  304. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  305. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  306. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  307. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  308. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  309. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  310. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  311. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  312. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  313. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +312 -0
  314. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  315. package/artifacts/contracts/type/UFixed.sol/MathLib.json +16 -0
  316. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  317. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +535 -0
  318. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  319. package/artifacts/contracts/type/Version.sol/VersionLib.json +177 -0
  320. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  321. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +68 -0
  322. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  323. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +55 -0
  324. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  325. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +566 -0
  326. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  327. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  328. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  329. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +78 -0
  330. package/contracts/authorization/AccessAdmin.sol +589 -0
  331. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  332. package/contracts/authorization/Authorization.sol +217 -0
  333. package/contracts/authorization/IAccess.sol +48 -0
  334. package/contracts/authorization/IAccessAdmin.sol +136 -0
  335. package/contracts/authorization/IAuthorization.sol +54 -0
  336. package/contracts/authorization/IModuleAuthorization.sol +21 -0
  337. package/contracts/authorization/IServiceAuthorization.sol +38 -0
  338. package/contracts/authorization/ModuleAuthorization.sol +78 -0
  339. package/contracts/authorization/ServiceAuthorization.sol +90 -0
  340. package/contracts/distribution/BasicDistribution.sol +138 -0
  341. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  342. package/contracts/distribution/Distribution.sol +295 -0
  343. package/contracts/distribution/DistributionService.sol +336 -0
  344. package/contracts/distribution/DistributionServiceManager.sol +39 -0
  345. package/contracts/distribution/IDistributionComponent.sol +52 -0
  346. package/contracts/distribution/IDistributionService.sol +101 -0
  347. package/contracts/examples/fire/FirePool.sol +76 -0
  348. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  349. package/contracts/examples/fire/FireProduct.sol +316 -0
  350. package/contracts/examples/fire/FireProductAuthorization.sol +16 -0
  351. package/contracts/examples/fire/FireUSD.sol +26 -0
  352. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  353. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  354. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  355. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  356. package/contracts/instance/BundleSet.sol +126 -0
  357. package/contracts/instance/IInstance.sol +57 -48
  358. package/contracts/instance/IInstanceService.sol +92 -0
  359. package/contracts/instance/Instance.sol +214 -70
  360. package/contracts/instance/InstanceAdmin.sol +285 -0
  361. package/contracts/instance/InstanceAuthorizationV3.sol +204 -0
  362. package/contracts/instance/InstanceReader.sol +430 -0
  363. package/contracts/instance/InstanceService.sol +467 -0
  364. package/contracts/instance/InstanceServiceManager.sol +40 -0
  365. package/contracts/instance/InstanceStore.sol +287 -0
  366. package/contracts/instance/base/BalanceStore.sol +123 -0
  367. package/contracts/instance/base/Cloneable.sol +28 -0
  368. package/contracts/instance/base/ObjectCounter.sol +21 -0
  369. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  370. package/contracts/instance/base/ObjectSet.sol +79 -0
  371. package/contracts/instance/module/IAccess.sol +46 -0
  372. package/contracts/instance/module/IBundle.sol +20 -0
  373. package/contracts/instance/module/IComponents.sol +46 -0
  374. package/contracts/instance/module/IDistribution.sol +41 -0
  375. package/contracts/instance/module/IPolicy.sol +84 -0
  376. package/contracts/instance/module/IRisk.sol +11 -0
  377. package/contracts/{test/TestToken.sol → mock/Dip.sol} +6 -6
  378. package/contracts/oracle/BasicOracle.sol +48 -0
  379. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  380. package/contracts/oracle/IOracle.sol +36 -0
  381. package/contracts/oracle/IOracleComponent.sol +33 -0
  382. package/contracts/oracle/IOracleService.sol +65 -0
  383. package/contracts/oracle/Oracle.sol +167 -0
  384. package/contracts/oracle/OracleService.sol +279 -0
  385. package/contracts/oracle/OracleServiceManager.sol +39 -0
  386. package/contracts/pool/BasicPool.sol +166 -0
  387. package/contracts/pool/BasicPoolAuthorization.sol +58 -0
  388. package/contracts/pool/BundleService.sol +438 -0
  389. package/contracts/pool/BundleServiceManager.sol +39 -0
  390. package/contracts/pool/IBundleService.sol +134 -0
  391. package/contracts/pool/IPoolComponent.sol +58 -0
  392. package/contracts/pool/IPoolService.sol +160 -0
  393. package/contracts/pool/Pool.sol +326 -0
  394. package/contracts/pool/PoolService.sol +509 -0
  395. package/contracts/pool/PoolServiceManager.sol +39 -0
  396. package/contracts/product/ApplicationService.sol +248 -0
  397. package/contracts/product/ApplicationServiceManager.sol +38 -0
  398. package/contracts/product/BasicProduct.sol +53 -0
  399. package/contracts/product/BasicProductAuthorization.sol +43 -0
  400. package/contracts/product/ClaimService.sol +487 -0
  401. package/contracts/product/ClaimServiceManager.sol +38 -0
  402. package/contracts/product/IApplicationService.sol +63 -0
  403. package/contracts/product/IClaimService.sol +122 -0
  404. package/contracts/product/IPolicyService.sol +73 -0
  405. package/contracts/product/IPricingService.sol +39 -0
  406. package/contracts/product/IProductComponent.sol +39 -0
  407. package/contracts/product/IRiskService.sol +33 -0
  408. package/contracts/product/PolicyService.sol +573 -0
  409. package/contracts/product/PolicyServiceManager.sol +39 -0
  410. package/contracts/product/PricingService.sol +301 -0
  411. package/contracts/product/PricingServiceManager.sol +39 -0
  412. package/contracts/product/Product.sol +425 -0
  413. package/contracts/product/RiskService.sol +97 -0
  414. package/contracts/product/RiskServiceManager.sol +39 -0
  415. package/contracts/registry/ChainNft.sol +96 -33
  416. package/contracts/registry/IRegistry.sol +133 -40
  417. package/contracts/registry/IRegistryService.sol +56 -16
  418. package/contracts/registry/ITransferInterceptor.sol +1 -0
  419. package/contracts/registry/Registry.sol +541 -344
  420. package/contracts/registry/RegistryAdmin.sol +464 -0
  421. package/contracts/registry/RegistryService.sol +150 -281
  422. package/contracts/registry/RegistryServiceManager.sol +53 -0
  423. package/contracts/registry/ReleaseLifecycle.sol +27 -0
  424. package/contracts/registry/ReleaseRegistry.sol +491 -0
  425. package/contracts/registry/ServiceAuthorizationV3.sol +199 -0
  426. package/contracts/registry/TokenRegistry.sol +315 -0
  427. package/contracts/shared/Component.sol +268 -0
  428. package/contracts/shared/ComponentService.sol +641 -0
  429. package/contracts/shared/ComponentServiceManager.sol +35 -0
  430. package/contracts/shared/ComponentVerifyingService.sol +117 -0
  431. package/contracts/shared/IComponent.sol +70 -0
  432. package/contracts/shared/IComponentService.sol +108 -0
  433. package/contracts/shared/IInstanceLinkedComponent.sol +49 -0
  434. package/contracts/shared/IKeyValueStore.sol +54 -0
  435. package/contracts/{instance/base → shared}/ILifecycle.sol +4 -5
  436. package/contracts/shared/INftOwnable.sol +23 -0
  437. package/contracts/shared/IPolicyHolder.sol +36 -0
  438. package/contracts/shared/IRegisterable.sol +5 -12
  439. package/contracts/shared/IRegistryLinked.sol +11 -0
  440. package/contracts/shared/IService.sol +25 -0
  441. package/contracts/shared/InitializableCustom.sol +177 -0
  442. package/contracts/shared/InitializableERC165.sol +27 -0
  443. package/contracts/shared/InstanceLinkedComponent.sol +172 -0
  444. package/contracts/shared/KeyValueStore.sol +131 -0
  445. package/contracts/shared/Lifecycle.sol +77 -0
  446. package/contracts/shared/NftIdSet.sol +65 -0
  447. package/contracts/shared/NftOwnable.sol +107 -0
  448. package/contracts/shared/PolicyHolder.sol +56 -0
  449. package/contracts/shared/Registerable.sol +31 -73
  450. package/contracts/shared/RegistryLinked.sol +44 -0
  451. package/contracts/shared/Service.sol +82 -0
  452. package/contracts/shared/TokenHandler.sol +139 -0
  453. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  454. package/contracts/staking/IStaking.sol +168 -0
  455. package/contracts/staking/IStakingService.sol +160 -0
  456. package/contracts/staking/StakeManagerLib.sol +224 -0
  457. package/contracts/staking/Staking.sol +498 -0
  458. package/contracts/staking/StakingLifecycle.sol +23 -0
  459. package/contracts/staking/StakingManager.sol +50 -0
  460. package/contracts/staking/StakingReader.sol +183 -0
  461. package/contracts/staking/StakingService.sol +407 -0
  462. package/contracts/staking/StakingServiceManager.sol +44 -0
  463. package/contracts/staking/StakingStore.sol +605 -0
  464. package/contracts/staking/TargetManagerLib.sol +211 -0
  465. package/contracts/{types → type}/AddressSet.sol +1 -1
  466. package/contracts/type/Amount.sol +135 -0
  467. package/contracts/{types → type}/Blocknumber.sol +27 -3
  468. package/contracts/type/ClaimId.sol +75 -0
  469. package/contracts/type/DistributorType.sol +55 -0
  470. package/contracts/type/Fee.sol +66 -0
  471. package/contracts/{types → type}/Key32.sol +8 -3
  472. package/contracts/{types → type}/NftId.sol +21 -15
  473. package/contracts/type/NftIdSet.sol +62 -0
  474. package/contracts/type/ObjectType.sol +275 -0
  475. package/contracts/type/PayoutId.sol +82 -0
  476. package/contracts/type/Referral.sol +90 -0
  477. package/contracts/type/RequestId.sol +75 -0
  478. package/contracts/{types → type}/RiskId.sol +16 -2
  479. package/contracts/type/RoleId.sol +174 -0
  480. package/contracts/type/Seconds.sol +101 -0
  481. package/contracts/type/Selector.sol +102 -0
  482. package/contracts/{types → type}/StateId.sol +40 -5
  483. package/contracts/type/String.sol +53 -0
  484. package/contracts/{types → type}/Timestamp.sol +38 -15
  485. package/contracts/type/UFixed.sol +351 -0
  486. package/contracts/{types → type}/Version.sol +8 -2
  487. package/contracts/{shared → upgradeability}/IVersionable.sol +5 -48
  488. package/contracts/upgradeability/ProxyManager.sol +198 -0
  489. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +2 -4
  490. package/contracts/upgradeability/Versionable.sol +59 -0
  491. package/package.json +11 -7
  492. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  493. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -213
  494. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  495. package/artifacts/contracts/components/Distribution.sol/Distribution.json +0 -445
  496. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  497. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -177
  498. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  499. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -343
  500. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  501. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +0 -474
  502. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  503. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -373
  504. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  505. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -602
  506. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  507. package/artifacts/contracts/components/Product.sol/Product.json +0 -502
  508. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  509. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  510. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  511. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  512. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  513. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  514. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  515. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  516. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  517. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  518. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  519. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  520. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  521. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  522. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  523. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  524. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  525. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  526. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  527. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  528. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  529. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  530. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  531. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  532. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  533. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  534. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  535. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  536. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  537. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  538. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  539. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  540. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  541. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
  542. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
  543. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  544. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  545. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  546. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  547. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  548. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
  549. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  550. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +0 -456
  551. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  552. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -710
  553. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  554. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -169
  555. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
  556. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
  557. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
  558. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
  559. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
  560. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  561. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
  562. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
  563. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
  564. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
  565. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
  566. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
  567. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  568. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -117
  569. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
  570. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
  571. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  572. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
  573. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
  574. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
  575. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
  576. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
  577. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  578. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  579. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
  580. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  581. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
  582. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  583. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
  584. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  585. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -164
  586. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  587. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
  588. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
  589. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
  590. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
  591. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
  592. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
  593. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  594. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +0 -10
  595. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  596. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -638
  597. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  598. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
  599. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  600. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -638
  601. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  602. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -690
  603. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  604. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -526
  605. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  606. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  607. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +0 -369
  608. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  609. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  610. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  611. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -649
  612. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  613. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -964
  614. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  615. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
  616. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  617. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.dbg.json +0 -4
  618. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.json +0 -344
  619. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  620. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -35
  621. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
  622. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
  623. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  624. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -205
  625. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  626. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -310
  627. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  628. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  629. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  630. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -228
  631. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
  632. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -445
  633. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  634. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  635. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
  636. package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -602
  637. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
  638. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -632
  639. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  640. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -191
  641. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  642. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  643. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  644. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -472
  645. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  646. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -338
  647. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  648. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  649. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  650. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -270
  651. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  652. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -338
  653. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  654. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +0 -10
  655. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  656. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +0 -174
  657. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  658. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  659. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  660. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  661. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  662. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +0 -111
  663. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  664. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -153
  665. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  666. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +0 -10
  667. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  668. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +0 -92
  669. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
  670. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
  671. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  672. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +0 -86
  673. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  674. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +0 -30
  675. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  676. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  677. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +0 -236
  678. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  679. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
  680. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  681. package/artifacts/contracts/types/Version.sol/VersionLib.json +0 -177
  682. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  683. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +0 -30
  684. package/contracts/components/BaseComponent.sol +0 -79
  685. package/contracts/components/Distribution.sol +0 -155
  686. package/contracts/components/IBaseComponent.sol +0 -19
  687. package/contracts/components/IDistributionComponent.sol +0 -47
  688. package/contracts/components/IPoolComponent.sol +0 -65
  689. package/contracts/components/IProductComponent.sol +0 -39
  690. package/contracts/components/Pool.sol +0 -246
  691. package/contracts/components/Product.sol +0 -299
  692. package/contracts/experiment/errors/Require.sol +0 -38
  693. package/contracts/experiment/errors/Revert.sol +0 -44
  694. package/contracts/experiment/inheritance/A.sol +0 -53
  695. package/contracts/experiment/inheritance/B.sol +0 -28
  696. package/contracts/experiment/inheritance/C.sol +0 -34
  697. package/contracts/experiment/inheritance/IA.sol +0 -13
  698. package/contracts/experiment/inheritance/IB.sol +0 -10
  699. package/contracts/experiment/inheritance/IC.sol +0 -12
  700. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  701. package/contracts/experiment/statemachine/ISM.sol +0 -25
  702. package/contracts/experiment/statemachine/SM.sol +0 -57
  703. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  704. package/contracts/experiment/types/TypeA.sol +0 -47
  705. package/contracts/experiment/types/TypeB.sol +0 -29
  706. package/contracts/instance/IInstanceLinked.sol +0 -8
  707. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  708. package/contracts/instance/base/IInstanceBase.sol +0 -23
  709. package/contracts/instance/base/IKeyValueStore.sol +0 -50
  710. package/contracts/instance/base/IService.sol +0 -15
  711. package/contracts/instance/base/InstanceBase.sol +0 -89
  712. package/contracts/instance/base/KeyValueStore.sol +0 -161
  713. package/contracts/instance/base/Lifecycle.sol +0 -100
  714. package/contracts/instance/base/ModuleBase.sol +0 -57
  715. package/contracts/instance/base/ServiceBase.sol +0 -43
  716. package/contracts/instance/module/access/Access.sol +0 -149
  717. package/contracts/instance/module/access/IAccess.sol +0 -53
  718. package/contracts/instance/module/bundle/BundleModule.sol +0 -134
  719. package/contracts/instance/module/bundle/IBundle.sol +0 -53
  720. package/contracts/instance/module/component/ComponentModule.sol +0 -71
  721. package/contracts/instance/module/component/IComponent.sol +0 -28
  722. package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
  723. package/contracts/instance/module/distribution/IDistribution.sol +0 -10
  724. package/contracts/instance/module/policy/IPolicy.sol +0 -63
  725. package/contracts/instance/module/policy/PolicyModule.sol +0 -91
  726. package/contracts/instance/module/pool/IPoolModule.sol +0 -41
  727. package/contracts/instance/module/pool/PoolModule.sol +0 -95
  728. package/contracts/instance/module/risk/IRisk.sol +0 -26
  729. package/contracts/instance/module/risk/RiskModule.sol +0 -62
  730. package/contracts/instance/module/treasury/ITreasury.sol +0 -84
  731. package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
  732. package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
  733. package/contracts/instance/service/ComponentOwnerService.sol +0 -272
  734. package/contracts/instance/service/DistributionService.sol +0 -54
  735. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  736. package/contracts/instance/service/IDistributionService.sol +0 -12
  737. package/contracts/instance/service/IPoolService.sol +0 -37
  738. package/contracts/instance/service/IProductService.sol +0 -107
  739. package/contracts/instance/service/PoolService.sol +0 -149
  740. package/contracts/instance/service/ProductService.sol +0 -509
  741. package/contracts/registry/IChainNft.sol +0 -22
  742. package/contracts/registry/IRegistryLinked.sol +0 -8
  743. package/contracts/registry/RegistryInstaller.sol +0 -100
  744. package/contracts/shared/ERC165.sol +0 -21
  745. package/contracts/shared/IOwnable.sol +0 -6
  746. package/contracts/shared/ProxyManager.sol +0 -115
  747. package/contracts/shared/Versionable.sol +0 -147
  748. package/contracts/test/TestDistribution.sol +0 -22
  749. package/contracts/test/TestFee.sol +0 -25
  750. package/contracts/test/TestPool.sol +0 -27
  751. package/contracts/test/TestProduct.sol +0 -74
  752. package/contracts/test/TestRegisterable.sol +0 -18
  753. package/contracts/test/TestRoleId.sol +0 -14
  754. package/contracts/test/TestService.sol +0 -26
  755. package/contracts/test/TestVersion.sol +0 -44
  756. package/contracts/test/TestVersionable.sol +0 -17
  757. package/contracts/test/Usdc.sol +0 -26
  758. package/contracts/types/ChainId.sol +0 -38
  759. package/contracts/types/Fee.sol +0 -56
  760. package/contracts/types/NftIdSet.sol +0 -60
  761. package/contracts/types/ObjectType.sol +0 -131
  762. package/contracts/types/ReferralId.sol +0 -48
  763. package/contracts/types/RoleId.sol +0 -38
  764. package/contracts/types/UFixed.sol +0 -209
@@ -1,463 +1,506 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../instance/base/IService.sol";
4
+ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
6
+ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
7
+ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
8
+
9
+ import {NftId, NftIdLib} from "../type/NftId.sol";
10
+ import {VersionPart, VersionPartLib} from "../type/Version.sol";
11
+ import {ObjectType, ObjectTypeLib, PROTOCOL, REGISTRY, SERVICE, INSTANCE, STAKE, STAKING, PRODUCT, DISTRIBUTION, DISTRIBUTOR, ORACLE, POOL, POLICY, BUNDLE} from "../type/ObjectType.sol";
6
12
 
7
- import {IChainNft} from "./IChainNft.sol";
8
13
  import {ChainNft} from "./ChainNft.sol";
9
14
  import {IRegistry} from "./IRegistry.sol";
10
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
11
- import {Version, VersionPart, VersionLib} from "../types/Version.sol";
12
- import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
13
- import {ITransferInterceptor} from "./ITransferInterceptor.sol";
14
-
15
- import {IOwnable} from "../shared/IOwnable.sol";
16
- import {ERC165} from "../shared/ERC165.sol";
17
-
15
+ import {IRegisterable} from "../shared/IRegisterable.sol";
16
+ import {ReleaseRegistry} from "./ReleaseRegistry.sol";
17
+ import {TokenRegistry} from "./TokenRegistry.sol";
18
+ import {RegistryAdmin} from "./RegistryAdmin.sol";
18
19
 
19
- // IMPORTANT
20
+ /// @dev IMPORTANT
20
21
  // Each NFT minted by registry is accosiated with:
21
22
  // 1) NFT owner
22
23
  // 2) registred contract OR object stored in registered (parent) contract
23
- // Four registration flows:
24
- // 1) non IRegisterable address by registryOwner (TOKEN)
25
- // 2) IRegisterable address by registryOwner (SERVICE)
26
- // 3) IRegisterable address by approved service (INSTANCE, COMPONENT)
27
- // 4) state object by approved service (POLICY, BUNDLE, STAKE)
28
-
24
+ // Five registration flows:
25
+ // 1) registerService() -> registers IService address by ReleaseRegistry (ReleaseRegistry is set at deployment time)
26
+ // 2) register() -> registers IRegisterable address by IService (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
27
+ // 3) -> registers object by IService (POLICY, BUNDLE, STAKE)
28
+ // 4) registerWithCustomType() -> registers IRegisterable address with custom type by IService
29
+ // 5) registerRegistry() -> registers IRegistry address (from different chain) by GifAdmin. Works ONLY on mainnet.
30
+ // Note: getters by address MUST not be used with this address (will return 0 or data related to different object or even revert)
31
+
32
+ /// @dev Chain Registry contract implementing IRegistry.
33
+ /// IRegistry for method details.
29
34
  contract Registry is
30
- ERC165,
35
+ Initializable,
36
+ AccessManaged,
31
37
  IRegistry
32
38
  {
33
- // register
34
- error NotRegistryService();
35
- error ZeroParentAddress();
36
- error ContractAlreadyRegistered(address objectAddress);
37
- error InvalidServiceVersion(VersionPart majorVersion);
38
- error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
39
-
40
- // approve
41
- error NotOwner();
42
- error NotRegisteredContract(NftId registrarNftId);
43
- error NotService(NftId registrarNftId);
44
- error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
45
-
46
- uint256 public constant MAJOR_VERSION_MIN = 3;
47
-
48
- string public constant EMPTY_URI = "";
39
+ /// @dev Protocol NFT ID
40
+ NftId public immutable PROTOCOL_NFT_ID;
49
41
 
50
- address constant public NFT_LOCK_ADDRESS = address(0x1);
42
+ /// @dev Gobal registry NFT ID
43
+ NftId public immutable GLOBAL_REGISTRY_NFT_ID;
51
44
 
52
- mapping(NftId nftId => ObjectInfo info) _info;
53
- mapping(address object => NftId nftId) _nftIdByAddress;
45
+ /// @dev Gobal registry address on mainnet.
46
+ address public immutable GLOBAL_REGISTRY_ADDRESS;
54
47
 
55
- mapping(NftId registrator => mapping(
56
- ObjectType objectType => bool)) _isApproved;
48
+ /// @dev Registry NFT ID
49
+ NftId public immutable REGISTRY_NFT_ID;
57
50
 
58
- mapping(ObjectType objectType => mapping(
59
- ObjectType parentType => bool)) _isValidContractCombination;
51
+ /// @dev Deployer address that authorizes the initializer of this contract.
52
+ address public immutable DEPLOYER;
60
53
 
61
- mapping(ObjectType objectType => mapping(
62
- ObjectType parentType => bool)) _isValidObjectCombination;
54
+ /// @dev Registry admin contract for this registry.
55
+ RegistryAdmin public immutable ADMIN;
63
56
 
64
- mapping(NftId nftId => string name) _string;
65
- mapping(bytes32 serviceNameHash => mapping(
66
- VersionPart majorVersion => address service)) _service;
57
+ /// @dev Chain NFT contract that keeps track of the ownership of all registered objects.
58
+ ChainNft public immutable CHAIN_NFT;
67
59
 
68
- NftId _registryNftId;
69
- NftId _serviceNftId; // set in stone upon registry creation
70
- IChainNft _chainNft;
71
- ChainNft _chainNftInternal;
60
+ address public constant NFT_LOCK_ADDRESS = address(0x1);
61
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
62
+ uint256 public constant STAKING_TOKEN_SEQUENCE_ID = 3;
63
+ string public constant EMPTY_URI = "";
72
64
 
73
- /// @dev will own protocol, global registry, registry and registry service nfts minted during creation
74
- // TODO registry nft can be transfered while protocol, global registry and registry service nfts are not transferable
75
- // TODO get owner from one place -> nft contract
76
- address _protocolOwner;
65
+ /// @dev keep track of different registries on different chains
66
+ mapping(uint256 chainId => NftId registryNftId) private _registryNftIdByChainId;
67
+ uint256[] private _chainId;
77
68
 
78
- /*
79
- modifier onlyInitialOwner() {
80
- if(
81
- msg.sender != getOwner() ||
82
- msg.sender != _info[_registryNftId].initialOwner) {
83
- revert NotInitialOwner();
84
- }
85
- }*/
69
+ /// @dev keep track of object info and address reverse lookup
70
+ mapping(NftId nftId => ObjectInfo info) private _info;
71
+ mapping(address object => NftId nftId) private _nftIdByAddress;
86
72
 
87
- modifier onlyOwner() {
88
- if(msg.sender != getOwner()) {
89
- revert NotOwner();
90
- }
91
- _;
92
- }
73
+ /// @dev keep track of service addresses by version and domain
74
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
75
+
76
+ mapping(ObjectType objectType => bool) private _coreTypes;
77
+
78
+ mapping(ObjectType objectType => mapping(
79
+ ObjectType parentType => bool)) private _coreContractCombinations;
80
+
81
+ mapping(ObjectType objectType => mapping(
82
+ ObjectType parentType => bool)) private _coreObjectCombinations;
93
83
 
94
- modifier onlyRegistryService() {
95
-
96
- if(msg.sender != _info[_serviceNftId].objectAddress) {
97
- revert NotRegistryService();
84
+ NftId private _stakingNftId;
85
+
86
+ ReleaseRegistry private _releaseRegistry;
87
+ address private _tokenRegistryAddress;
88
+ address private _stakingAddress;
89
+
90
+ modifier onlyDeployer() {
91
+ if (msg.sender != DEPLOYER) {
92
+ revert ErrorRegistryCallerNotDeployer();
98
93
  }
99
94
  _;
100
95
  }
101
96
 
102
- constructor(address protocolOwner, VersionPart majorVersion)
97
+ // TODO when create2 strategy is added to ignition:
98
+ // 1. move globalRegistry arg out from constructor into initialize()
99
+ // 2. add testRegistry_deployChainRegistryAtGlobalRegistryAddress
100
+ /// @dev Creates the registry contract and populates it with the protocol and registry objects.
101
+ /// Internally deploys the ChainNft contract.
102
+ constructor(RegistryAdmin admin, address globalRegistry)
103
+ AccessManaged(admin.authority())
103
104
  {
104
- require(protocolOwner > address(0), "Registry: protocol owner is 0");
105
- require(majorVersion.toInt() == MAJOR_VERSION_MIN, "Registry: initial major version of registry service is not MAJOR_VERSION_MIN");
106
-
107
- // TODO registry owner can change, while protocol is not?
108
- _protocolOwner = protocolOwner;
105
+ DEPLOYER = msg.sender;
106
+ ADMIN = admin;
107
+ GLOBAL_REGISTRY_ADDRESS = _getGlobalRegistryAddress(globalRegistry);
109
108
 
110
109
  // deploy NFT
111
- _chainNftInternal = new ChainNft(address(this));// adds 10kb to deployment size
112
- _chainNft = IChainNft(_chainNftInternal);
110
+ CHAIN_NFT = new ChainNft(address(this));
111
+ GLOBAL_REGISTRY_NFT_ID = NftIdLib.toNftId(
112
+ CHAIN_NFT.GLOBAL_REGISTRY_ID());
113
113
 
114
114
  // initial registry setup
115
- _registerProtocol();
115
+ PROTOCOL_NFT_ID = _registerProtocol();
116
+ REGISTRY_NFT_ID = _registerRegistry();
116
117
 
117
- _registerRegistry();
118
+ // set object types and object parent relations
119
+ _setupValidCoreTypesAndCombinations();
120
+ }
118
121
 
119
- _registerRegistryService();
120
122
 
121
- // set object parent relations
122
- _setupValidObjectParentCombinations();
123
+ /// @dev Wires release registry, token registry and staking contract to this registry.
124
+ /// MUST be called by release registry.
125
+ function initialize(
126
+ address releaseRegistry,
127
+ address tokenRegistry,
128
+ address staking
129
+ )
130
+ external
131
+ initializer()
132
+ onlyDeployer()
133
+ {
134
+ // store links to supporting contracts
135
+ _releaseRegistry = ReleaseRegistry(releaseRegistry);
136
+ _tokenRegistryAddress = tokenRegistry;
137
+ _stakingAddress = staking;
123
138
 
124
- _registerInterface(type(IRegistry).interfaceId);
125
- _registerInterface(type(IOwnable).interfaceId);
139
+ // register staking contract
140
+ _stakingNftId = _registerStaking();
126
141
  }
127
142
 
128
- /// @dev registry protects only from tampering existing records and invalid types pairs
129
- // IMPORTANT: rare case when parentNftId is not registered and == next nftId -> technincally this is ZeroParentAddress error
130
- // to catch this check parent address before minting !!!!
131
- // TODO service registration means its approval for some type?
132
- function register(ObjectInfo memory info)
143
+ /// @inheritdoc IRegistry
144
+ function registerRegistry(
145
+ NftId nftId,
146
+ uint256 chainId,
147
+ address registryAddress
148
+ )
133
149
  external
134
- onlyRegistryService
150
+ restricted()
151
+ {
152
+ // registration of chain registries only allowed on mainnet
153
+ if (block.chainid != 1) {
154
+ revert ErrorRegistryNotOnMainnet(block.chainid);
155
+ }
156
+
157
+ // registry chain id is not zero
158
+ if(chainId == 0) {
159
+ revert ErrorRegistryChainRegistryChainIdZero(nftId);
160
+ }
161
+
162
+ // registry address is not zero
163
+ if (registryAddress == address(0)) {
164
+ revert ErrorRegistryChainRegistryAddressZero(nftId, chainId);
165
+ }
166
+
167
+ // registry nft id matches registry chain id
168
+ uint256 expectedRegistryId = CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID, chainId);
169
+ if (nftId != NftIdLib.toNftId(expectedRegistryId)) {
170
+ revert ErrorRegistryChainRegistryNftIdInvalid(nftId, chainId);
171
+ }
172
+
173
+ emit LogChainRegistryRegistration(nftId, chainId, registryAddress);
174
+
175
+ _registerRegistryForNft(
176
+ chainId,
177
+ ObjectInfo({
178
+ nftId: nftId,
179
+ parentNftId: REGISTRY_NFT_ID,
180
+ objectType: REGISTRY(),
181
+ isInterceptor: false,
182
+ objectAddress: registryAddress,
183
+ initialOwner: NFT_LOCK_ADDRESS,
184
+ data: ""
185
+ }),
186
+ false); // do not update address lookup for objects on a different chain
187
+ }
188
+
189
+ // TODO limit service owner to registry admin?
190
+ /// @inheritdoc IRegistry
191
+ function registerService(
192
+ ObjectInfo memory info,
193
+ VersionPart version,
194
+ ObjectType domain
195
+ )
196
+ external
197
+ restricted()
135
198
  returns(NftId nftId)
136
199
  {
137
- ObjectType objectType = info.objectType;
138
- NftId parentNftId = info.parentNftId;
139
- ObjectInfo memory parentInfo = _info[parentNftId];
140
- ObjectType parentType = parentInfo.objectType; // see function header
141
- address parentAddress = parentInfo.objectAddress;
200
+ // service address is defined
201
+ address service = info.objectAddress;
202
+ if(service == address(0)) {
203
+ revert ErrorRegistryServiceAddressZero();
204
+ }
142
205
 
143
- // parent is contract -> need to check? -> check before minting
144
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
145
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
146
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
147
- if(parentAddress == address(0)) {
148
- revert ZeroParentAddress();
206
+ // version is defined
207
+ if(version.eqz()) {
208
+ revert ErrorRegistryServiceVersionZero(service);
209
+ }
210
+ // service domain is defined
211
+ if(domain.eqz()) {
212
+ revert ErrorRegistryServiceDomainZero(service, version);
149
213
  }
150
214
 
151
- address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
215
+ // service has proper type
216
+ if(info.objectType != SERVICE()) {
217
+ revert ErrorRegistryNotService(service, info.objectType);
218
+ }
152
219
 
153
- uint256 mintedTokenId = _chainNft.mint(
154
- info.initialOwner,
155
- interceptor,
156
- EMPTY_URI);
157
- nftId = toNftId(mintedTokenId);
220
+ // service parent has registry type
221
+ if(info.parentNftId != REGISTRY_NFT_ID) {
222
+ revert ErrorRegistryServiceParentNotRegistry(service, version, info.parentNftId);
223
+ }
158
224
 
159
- // TODO move nftId out of info struct
160
- // getters by nftId -> return struct without nftId
161
- // getters by address -> return nftId AND struct
162
- info.nftId = nftId;
163
- _info[nftId] = info;
225
+ // service has not already been registered
226
+ if(_service[version][domain] != address(0)) {
227
+ revert ErrorRegistryServiceDomainAlreadyRegistered(service, version, domain);
228
+ }
164
229
 
165
- if(info.objectAddress > address(0))
166
- {
167
- // TODO if need to add types latter -> at least call this check from registry service
168
- // parent is registered + object-parent types are valid
169
- if(_isValidContractCombination[objectType][parentType] == false) {
170
- revert InvalidTypesCombination(objectType, parentType);
171
- }
230
+ _service[version][domain] = service;
172
231
 
173
- address contractAddress = info.objectAddress;
232
+ emit LogServiceRegistration(version, domain);
174
233
 
175
- if(_nftIdByAddress[contractAddress].gtz()) {
176
- revert ContractAlreadyRegistered(contractAddress);
177
- }
234
+ nftId = _register(info);
235
+ }
178
236
 
179
- _nftIdByAddress[contractAddress] = nftId;
180
-
181
- // special case
182
- if(objectType == SERVICE())
183
- {
184
- (
185
- string memory serviceName,
186
- VersionPart majorVersion
187
- ) = abi.decode(info.data, (string, VersionPart));
188
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
189
-
190
- // TODO MUST guarantee consistency of registerable.getVersion() and majorVersion here
191
- // TODO update _serviceNftId when registryService with new major version is registered? -> it is fixed in current setup
192
- // TODO do not use names -> each object type is registered by corresponding service -> conflicting with approve()
193
- if(
194
- majorVersion.toInt() < MAJOR_VERSION_MIN ||
195
- (majorVersion.toInt() > MAJOR_VERSION_MIN &&
196
- _service[serviceNameHash][VersionLib.toVersionPart(majorVersion.toInt() - 1)] == address(0) )
197
- ) {
198
- revert InvalidServiceVersion(majorVersion);
199
- }
200
-
201
- if(_service[serviceNameHash][majorVersion] != address(0)) {
202
- revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
203
- }
204
-
205
- _string[nftId] = serviceName;
206
- _service[serviceNameHash][majorVersion] = contractAddress;
207
-
208
- emit LogServiceNameRegistration(serviceName, majorVersion);
237
+
238
+ /// @inheritdoc IRegistry
239
+ function register(ObjectInfo memory info)
240
+ external
241
+ restricted()
242
+ returns(NftId nftId)
243
+ {
244
+ address objectAddress = info.objectAddress;
245
+ ObjectType objectType = info.objectType;
246
+ ObjectType parentType = _info[info.parentNftId].objectType;
247
+
248
+ // check type combinations for core objects
249
+ if(objectAddress == address(0)) {
250
+ if(_coreObjectCombinations[objectType][parentType] == false) {
251
+ revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
209
252
  }
210
253
  }
211
- else
212
- {
213
- if(_isValidObjectCombination[objectType][parentType] == false) {
214
- revert InvalidTypesCombination(objectType, parentType);
254
+ // check type combinations for contract objects
255
+ else {
256
+ if(_coreContractCombinations[objectType][parentType] == false) {
257
+ revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
215
258
  }
216
259
  }
217
260
 
218
- emit LogRegistration(nftId, info.parentNftId, info.objectType, info.objectAddress, info.initialOwner);
261
+ nftId = _register(info);
219
262
  }
220
263
 
221
- function registerFrom(
222
- address from,
223
- ObjectInfo memory info
224
- ) external returns (NftId nftId)
225
- {
226
- revert();
227
- }
228
-
229
264
 
230
- /// @dev
231
- // msg.sender - registry owner
232
- // CAN approve only registered service contract
233
- // CAN approve any combination specified in _isValidCombination
234
- // CAN NOT approve itself
235
- // TODO in case where exists exactly one registered service per objectType (and major version):
236
- // - registration and approve is a single operation, no need for separate approve() function
237
- // - then approve can be used to adding new valid object-parent combinations???
238
- function approve(
239
- NftId serviceNftId,
240
- ObjectType objectType,
241
- ObjectType parentType
242
- )
243
- public
244
- onlyOwner()
265
+ /// @inheritdoc IRegistry
266
+ function registerWithCustomType(ObjectInfo memory info)
267
+ external
268
+ restricted()
269
+ returns(NftId nftId)
245
270
  {
246
- address serviceAddress = _info[serviceNftId].objectAddress;
247
-
248
- if(_nftIdByAddress[serviceAddress].eqz()) {
249
- revert NotRegisteredContract(serviceNftId);
250
- }
271
+ ObjectType objectType = info.objectType;
272
+ ObjectType parentType = _info[info.parentNftId].objectType;
251
273
 
252
- if(_info[serviceNftId].objectType != SERVICE()) {
253
- revert NotService(serviceNftId);
274
+ if(_coreTypes[objectType]) {
275
+ revert ErrorRegistryCoreTypeRegistration();
254
276
  }
255
277
 
256
278
  if(
257
- _isValidContractCombination[objectType][parentType] == false &&
258
- _isValidObjectCombination[objectType][parentType] == false) {
259
- revert InvalidTypesCombination(objectType, parentType);
279
+ objectType == ObjectTypeLib.zero() ||
280
+ parentType == ObjectTypeLib.zero() ||
281
+ parentType == PROTOCOL() ||
282
+ parentType == SERVICE()
283
+ ) {
284
+ revert ErrorRegistryTypesCombinationInvalid(info.objectAddress, objectType, parentType);
260
285
  }
261
286
 
262
- _isApproved[serviceNftId][objectType] = true;
287
+ nftId = _register(info);
288
+ }
289
+
263
290
 
264
- emit LogApproval(serviceNftId, objectType);
291
+ /// @dev earliest GIF major version
292
+ function getInitialVersion() external view returns (VersionPart) {
293
+ return VersionPartLib.toVersionPart(_releaseRegistry.INITIAL_GIF_VERSION());
265
294
  }
266
295
 
267
- /// @dev returns false for registry owner nft
268
- // TODO allowance by address?
269
- // TODO checked by registry service -> but registry owner can upgrade registry service not to check allowance....
270
- function allowance(
271
- NftId nftId,
272
- ObjectType object
273
- )
274
- public
275
- view
276
- returns (bool)
277
- {
278
- return _isApproved[nftId][object];
296
+ /// @dev next GIF release version to be released
297
+ function getNextVersion() external view returns (VersionPart) {
298
+ return _releaseRegistry.getNextVersion();
299
+ }
300
+
301
+ /// @dev latest active GIF release version
302
+ function getLatestVersion() external view returns (VersionPart) {
303
+ return _releaseRegistry.getLatestVersion();
304
+ }
305
+
306
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
307
+ return _releaseRegistry.getReleaseInfo(version);
308
+ }
309
+
310
+ function chainIds() public view returns (uint256) {
311
+ return _chainId.length;
279
312
  }
280
313
 
281
- // from IRegistry
282
- function getObjectCount() external view override returns (uint256) {
283
-
284
- return _chainNft.totalSupply();
314
+ function getChainId(uint256 idx) public view returns (uint256) {
315
+ return _chainId[idx];
285
316
  }
286
317
 
287
- function getNftId(address object) external view override returns (NftId id) {
318
+ function getRegistryNftId(uint256 chainId) public view returns (NftId nftId) {
319
+ return _registryNftIdByChainId[chainId];
320
+ }
321
+
322
+ function getObjectCount() external view returns (uint256) {
323
+ return CHAIN_NFT.totalSupply();
324
+ }
325
+
326
+ function getNftId() external view returns (NftId nftId) {
327
+ return REGISTRY_NFT_ID;
328
+ }
329
+
330
+ function getProtocolNftId() external view returns (NftId nftId) {
331
+ return PROTOCOL_NFT_ID;
332
+ }
333
+
334
+ function getNftIdForAddress(address object) external view returns (NftId id) {
288
335
  return _nftIdByAddress[object];
289
336
  }
290
337
 
291
- function ownerOf(NftId nftId) public view override returns (address) {
292
- return _chainNft.ownerOf(nftId.toInt());
338
+ function ownerOf(NftId nftId) public view returns (address) {
339
+ return CHAIN_NFT.ownerOf(nftId.toInt());
293
340
  }
294
341
 
295
342
  function ownerOf(address contractAddress) public view returns (address) {
296
-
297
- return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
343
+ return CHAIN_NFT.ownerOf(_nftIdByAddress[contractAddress].toInt());
298
344
  }
299
345
 
300
- function getObjectInfo(NftId nftId) external view override returns (ObjectInfo memory) {
346
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
301
347
  return _info[nftId];
302
348
  }
303
349
 
304
- function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
305
-
350
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
306
351
  return _info[_nftIdByAddress[object]];
307
352
  }
308
353
 
309
- function isRegistered(NftId nftId) public view override returns (bool) {
354
+ function isRegistered(NftId nftId) public view returns (bool) {
310
355
  return _info[nftId].objectType.gtz();
311
356
  }
312
357
 
313
- function isRegistered(address object) external view override returns (bool) {
358
+ function isRegistered(address object) external view returns (bool) {
314
359
  return _nftIdByAddress[object].gtz();
315
360
  }
316
361
 
317
- function getServiceName(NftId nftId) external view returns (string memory) {
318
- return _string[nftId];
362
+ function isRegisteredService(address object) external view returns (bool) {
363
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
319
364
  }
320
365
 
321
- // special case to retrive a gif service
322
- function getServiceAddress(
323
- string memory serviceName,
324
- VersionPart majorVersion
325
- ) external view returns (address)
366
+ function isRegisteredComponent(address object) external view returns (bool) {
367
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
368
+ return _info[objectParentNftId].objectType == INSTANCE();
369
+ }
370
+
371
+ function isActiveRelease(VersionPart version) external view returns (bool)
326
372
  {
327
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
328
- return _service[serviceNameHash][majorVersion];
373
+ return _releaseRegistry.isActiveRelease(version);
329
374
  }
330
375
 
331
- function getProtocolOwner() external view override returns (address) {
332
- return _protocolOwner;
376
+ function getStakingAddress() external view returns (address staking) {
377
+ //return getObjectInfo(_stakingNftId).objectAddress;
378
+ //return _info[_stakingNftId].objectAddress;
379
+ return _stakingAddress;
333
380
  }
334
381
 
335
- function getChainNft() external view override returns (IChainNft) {
336
- return _chainNft;
382
+ function getTokenRegistryAddress() external view returns (address tokenRegistry) {
383
+ return _tokenRegistryAddress;
337
384
  }
338
385
 
339
- // from IOwnable
340
- function getOwner() public view returns (address owner) {
341
- return ownerOf(address(this));
386
+ function getServiceAddress(
387
+ ObjectType serviceDomain,
388
+ VersionPart releaseVersion
389
+ ) external view returns (address service)
390
+ {
391
+ service = _service[releaseVersion][serviceDomain];
342
392
  }
343
393
 
344
- // Internals, called only in constructor
394
+ function getReleaseRegistryAddress() external view returns (address) {
395
+ return address(_releaseRegistry);
396
+ }
345
397
 
346
- /// @dev protocol registration used to anchor the dip ecosystem relations
347
- function _registerProtocol()
348
- internal
349
- {
350
- uint256 protocolId = _chainNftInternal.PROTOCOL_NFT_ID();
351
- NftId protocolNftId = toNftId(protocolId);
398
+ function getChainNftAddress() external view override returns (address) {
399
+ return address(CHAIN_NFT);
400
+ }
352
401
 
353
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, protocolId);
402
+ function getRegistryAdminAddress() external view returns (address) {
403
+ return address(ADMIN);
404
+ }
354
405
 
355
- _info[protocolNftId] = ObjectInfo(
356
- protocolNftId,
357
- zeroNftId(), // parent
358
- PROTOCOL(),
359
- false, // isInterceptor
360
- address(0), // objectAddress
361
- NFT_LOCK_ADDRESS,// initialOwner
362
- ""
363
- );
406
+ function getAuthority() external view returns (address) {
407
+ return ADMIN.authority();
364
408
  }
365
409
 
366
- /// @dev registry registration
367
- /// might also register the global registry when not on mainnet
368
- function _registerRegistry()
369
- internal
370
- {
371
- uint256 registryId = _chainNftInternal.calculateTokenId(2);
372
- NftId registryNftId = toNftId(registryId);
410
+ function getOwner() public view returns (address owner) {
411
+ return ownerOf(address(this));
412
+ }
373
413
 
374
- NftId parentNftId;
414
+ // IERC165
375
415
 
376
- if(registryId != _chainNftInternal.GLOBAL_REGISTRY_ID())
377
- {// we're not the global registry
378
- _registerGlobalRegistry();
379
- parentNftId = toNftId(_chainNftInternal.GLOBAL_REGISTRY_ID());
380
- }
381
- else
382
- {// we are global registry
383
- parentNftId = toNftId(_chainNftInternal.PROTOCOL_NFT_ID());
416
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
417
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
418
+ return true;
384
419
  }
385
420
 
386
- _chainNftInternal.mint(_protocolOwner, registryId);
387
-
388
- _info[registryNftId] = ObjectInfo(
389
- registryNftId,
390
- parentNftId,
391
- REGISTRY(),
392
- false, // isInterceptor
393
- address(this),
394
- _protocolOwner,
395
- ""
396
- );
397
- _nftIdByAddress[address(this)] = registryNftId;
398
- _registryNftId = registryNftId;
421
+ return false;
399
422
  }
400
423
 
424
+ // Internals
401
425
 
402
- /// @dev global registry registration for non mainnet registries
403
- function _registerGlobalRegistry()
426
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
427
+ function _register(ObjectInfo memory info)
404
428
  internal
429
+ returns(NftId nftId)
405
430
  {
406
- uint256 globalRegistryId = _chainNftInternal.GLOBAL_REGISTRY_ID();
431
+ ObjectType objectType = info.objectType; // do not care here, never PROTOCOL(), REGISTRY()
432
+ bool isInterceptor = info.isInterceptor;
433
+ address objectAddress = info.objectAddress; // do not care here, can be 0
434
+ address owner = info.initialOwner; // do not care here, can be 0, can be equal info.objectAddress
407
435
 
408
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, globalRegistryId);
436
+ NftId parentNftId = info.parentNftId; // do not care here, can not be 0
437
+ ObjectInfo memory parentInfo = _info[parentNftId];
438
+ address parentAddress = parentInfo.objectAddress; // can be 0
409
439
 
410
- NftId globalRegistryNftId = toNftId(globalRegistryId);
440
+ // parent is contract -> need to check? -> check before minting
441
+ // special case: staking: to protocol possible as well
442
+ // NO LONGER TRUE: special case: global registry nft as parent when not on mainnet -> global registry address is 0
443
+ // special case: when parentNftId == CHAIN_NFT.mint(), check for zero parent address before mint
444
+ // special case: when parentNftId == CHAIN_NFT.mint() && objectAddress == initialOwner
445
+ // Parent can have 0 address in case of STAKE for PROTOCOL / CUSTOM_TYPE for POLICY
446
+ // But it MUST be registered -> parentType != 0 && parentNftId != 0
447
+ /*if(objectType != STAKE()) {
448
+ if(parentAddress == address(0)) {
449
+ revert ErrorRegistryParentAddressZero();
450
+ }
451
+ }*/
452
+
453
+ // global registry is never parent when not on mainnet
454
+ if(block.chainid != 1) {
455
+ if(parentNftId == GLOBAL_REGISTRY_NFT_ID) {
456
+ revert ErrorRegistryGlobalRegistryAsParent(objectAddress, objectType);
457
+ }
458
+ }
411
459
 
412
- _info[globalRegistryNftId] = ObjectInfo(
413
- globalRegistryNftId,
414
- toNftId(_chainNftInternal.PROTOCOL_NFT_ID()), // parent
415
- REGISTRY(),
416
- false, // isInterceptor
417
- address(0), // objectAddress
418
- NFT_LOCK_ADDRESS, // initialOwner
419
- "" // data
420
- );
421
- }
460
+ address interceptorAddress = _getInterceptor(
461
+ isInterceptor,
462
+ objectType,
463
+ objectAddress,
464
+ parentInfo.isInterceptor,
465
+ parentAddress);
422
466
 
423
- function _registerRegistryService()
424
- internal
425
- {
426
- uint256 serviceId = _chainNftInternal.calculateTokenId(3);
427
- NftId serviceNftId = toNftId(serviceId);
467
+ uint256 tokenId = CHAIN_NFT.getNextTokenId();
468
+ nftId = NftIdLib.toNftId(tokenId);
469
+ info.nftId = nftId;
428
470
 
429
- _chainNftInternal.mint(NFT_LOCK_ADDRESS, serviceId);
471
+ _info[nftId] = info;
472
+ _setAddressForNftId(nftId, objectAddress);
430
473
 
431
- _info[serviceNftId] = ObjectInfo(
432
- serviceNftId,
433
- _registryNftId,
434
- SERVICE(),
435
- false, // isInterceptor
436
- msg.sender, // service deploys registry
437
- NFT_LOCK_ADDRESS, // initialOwner,
438
- ""
439
- );
474
+ emit LogRegistration(nftId, parentNftId, objectType, isInterceptor, objectAddress, owner);
440
475
 
441
- _nftIdByAddress[msg.sender] = serviceNftId;
476
+ // calls nft receiver(1) and interceptor(2)
477
+ uint256 mintedTokenId = CHAIN_NFT.mint(
478
+ owner,
479
+ interceptorAddress,
480
+ EMPTY_URI);
442
481
 
443
- string memory serviceName = "RegistryService";
444
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
445
- _service[serviceNameHash][VersionLib.toVersionPart(MAJOR_VERSION_MIN)] = msg.sender;
446
- _string[serviceNftId] = serviceName;
447
- _serviceNftId = serviceNftId;
482
+ assert(mintedTokenId == tokenId);
448
483
  }
449
484
 
450
485
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
486
+ /// special case: STAKES (parent may be any type) -> no intercept call
487
+ /// default case:
451
488
  function _getInterceptor(
452
489
  bool isInterceptor,
490
+ ObjectType objectType,
453
491
  address objectAddress,
454
492
  bool parentIsInterceptor,
455
493
  address parentObjectAddress
456
494
  )
457
495
  internal
458
- view
496
+ pure
459
497
  returns (address interceptor)
460
498
  {
499
+ // no intercepting calls for stakes
500
+ if (objectType == STAKE()) {
501
+ return address(0);
502
+ }
503
+
461
504
  if (objectAddress == address(0)) {
462
505
  if (parentIsInterceptor) {
463
506
  return parentObjectAddress;
@@ -473,33 +516,187 @@ contract Registry is
473
516
  return address(0);
474
517
  }
475
518
 
476
- /// @dev defines which object - parent types relations are allowed to register
477
- // IMPORTANT:
478
- // 1) EACH object type MUST have only one parent type across ALL mappings
479
- // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
480
- // 3) DO NOT use REGISTRY as object type
481
- // 2) DO NOT use PROTOCOL and "zeroObjectType"
482
- function _setupValidObjectParentCombinations()
519
+ // Internals called only in constructor
520
+
521
+ /// @dev protocol registration used to anchor the dip ecosystem relations
522
+ function _registerProtocol()
523
+ private
524
+ returns (NftId protocolNftId)
525
+ {
526
+ uint256 protocolId = CHAIN_NFT.PROTOCOL_NFT_ID();
527
+ protocolNftId = NftIdLib.toNftId(protocolId);
528
+
529
+ _registerForNft(
530
+ ObjectInfo({
531
+ nftId: protocolNftId,
532
+ parentNftId: NftIdLib.zero(),
533
+ objectType: PROTOCOL(),
534
+ isInterceptor: false,
535
+ objectAddress: address(0),
536
+ initialOwner: NFT_LOCK_ADDRESS,
537
+ data: ""}),
538
+ true);
539
+ }
540
+
541
+ /// @dev register this registry
542
+ function _registerRegistry()
483
543
  internal
544
+ virtual
545
+ returns (NftId registryNftId)
546
+ {
547
+ // initial assignment
548
+ registryNftId = GLOBAL_REGISTRY_NFT_ID;
549
+
550
+ // register global registry
551
+ _registerRegistryForNft(
552
+ 1, // mainnet chain id
553
+ ObjectInfo({
554
+ nftId: GLOBAL_REGISTRY_NFT_ID,
555
+ parentNftId: PROTOCOL_NFT_ID,
556
+ objectType: REGISTRY(),
557
+ isInterceptor: false,
558
+ objectAddress: GLOBAL_REGISTRY_ADDRESS,
559
+ initialOwner: NFT_LOCK_ADDRESS,
560
+ data: ""}),
561
+ block.chainid == 1);// update address lookup for global registry only on mainnet
562
+
563
+ // if not on mainnet: register this registry with global registry as parent
564
+ if (block.chainid != 1) {
565
+
566
+ // modify registry nft id to local registry when not on mainnet
567
+ registryNftId = NftIdLib.toNftId(
568
+ CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID));
569
+
570
+ _registerRegistryForNft(
571
+ block.chainid,
572
+ ObjectInfo({
573
+ nftId: registryNftId,
574
+ parentNftId: GLOBAL_REGISTRY_NFT_ID,
575
+ objectType: REGISTRY(),
576
+ isInterceptor: false,
577
+ objectAddress: address(this),
578
+ initialOwner: NFT_LOCK_ADDRESS,
579
+ data: ""}),
580
+ true);
581
+ }
582
+ }
583
+
584
+ /// @dev staking registration
585
+ function _registerRegistryForNft(
586
+ uint256 chainId,
587
+ ObjectInfo memory info,
588
+ bool updateAddressLookup
589
+ )
590
+ private
484
591
  {
485
- // registry as parent, ONLY registry owner
486
- _isValidContractCombination[TOKEN()][REGISTRY()] = true;
487
- _isValidContractCombination[SERVICE()][REGISTRY()] = true;
592
+ if (!_registryNftIdByChainId[chainId].eqz()) {
593
+ revert ErrorRegistryChainRegistryAlreadyRegistered(info.nftId, chainId);
594
+ }
488
595
 
489
- // registry as parent, ONLY approved
490
- _isValidContractCombination[INSTANCE()][REGISTRY()] = true;
596
+ // update registry lookup variables
597
+ _registryNftIdByChainId[chainId] = info.nftId;
598
+ _chainId.push(chainId);
491
599
 
492
- // instance as parent, ONLY approved
493
- _isValidContractCombination[PRODUCT()][INSTANCE()] = true;
494
- _isValidContractCombination[DISTRIBUTION()][INSTANCE()] = true;
495
- _isValidContractCombination[ORACLE()][INSTANCE()] = true;
496
- _isValidContractCombination[POOL()][INSTANCE()] = true;
600
+ // register the registry info
601
+ _registerForNft(
602
+ info,
603
+ updateAddressLookup);
604
+ }
497
605
 
498
- // product as parent, ONLY approved
499
- _isValidObjectCombination[POLICY()][PRODUCT()] = true;
606
+ /// @dev staking registration
607
+ function _registerStaking()
608
+ private
609
+ returns (NftId stakingNftId)
610
+ {
611
+ address stakingOwner = IRegisterable(_stakingAddress).getOwner();
612
+ uint256 stakingId = CHAIN_NFT.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
613
+ stakingNftId = NftIdLib.toNftId(stakingId);
614
+
615
+ _registerForNft(
616
+ ObjectInfo({
617
+ nftId: stakingNftId,
618
+ parentNftId: REGISTRY_NFT_ID,
619
+ objectType: STAKING(),
620
+ isInterceptor: false,
621
+ objectAddress: _stakingAddress,
622
+ initialOwner: stakingOwner,
623
+ data: ""}),
624
+ true);
625
+ }
500
626
 
501
- // pool as parent, ONLY approved
502
- _isValidObjectCombination[BUNDLE()][POOL()] = true;
503
- _isValidObjectCombination[STAKE()][POOL()] = true;
627
+ /// @dev Register the provided object info for the specified NFT ID.
628
+ function _registerForNft(
629
+ ObjectInfo memory info,
630
+ bool updateAddressLookup
631
+ )
632
+ internal
633
+ {
634
+ _info[info.nftId] = info;
635
+
636
+ if (updateAddressLookup) {
637
+ _setAddressForNftId(info.nftId, info.objectAddress);
638
+ }
639
+
640
+ // calls nft receiver
641
+ CHAIN_NFT.mint(info.initialOwner, info.nftId.toInt());
642
+ }
643
+
644
+ function _setAddressForNftId(NftId nftId, address objectAddress)
645
+ internal
646
+ {
647
+ if (objectAddress != address(0)) {
648
+ if (_nftIdByAddress[objectAddress].gtz()) {
649
+ revert ErrorRegistryContractAlreadyRegistered(objectAddress);
650
+ }
651
+
652
+ _nftIdByAddress[objectAddress] = nftId;
653
+ }
654
+ }
655
+
656
+ function _getGlobalRegistryAddress(address globalRegistry) internal view returns (address) {
657
+ if (block.chainid == 1) {
658
+ return address(this);
659
+ } else {
660
+ return globalRegistry;
661
+ }
662
+ }
663
+
664
+ /// @dev defines which object - parent types relations are allowed to register
665
+ /// EACH object type MUST have only one parent type across ALL mappings
666
+ // the only EXCEPTION is STAKE, can have any number of parent types
667
+ function _setupValidCoreTypesAndCombinations()
668
+ private
669
+ {
670
+ _coreTypes[PROTOCOL()] = true;
671
+ _coreTypes[REGISTRY()] = true;
672
+ _coreTypes[SERVICE()] = true;
673
+ _coreTypes[INSTANCE()] = true;
674
+ _coreTypes[PRODUCT()] = true;
675
+ _coreTypes[POOL()] = true;
676
+ _coreTypes[DISTRIBUTION()] = true;
677
+ _coreTypes[DISTRIBUTOR()] = true;
678
+ _coreTypes[ORACLE()] = true;
679
+ _coreTypes[POLICY()] = true;
680
+ _coreTypes[BUNDLE()] = true;
681
+ _coreTypes[STAKING()] = true;
682
+ _coreTypes[STAKE()] = true;
683
+
684
+ // types combinations allowed to use with register() function ONLY
685
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
686
+
687
+ // components with instance parent
688
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
689
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
690
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
691
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
692
+
693
+ // objects with component parents
694
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
695
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
696
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
697
+
698
+ // staking
699
+ _coreObjectCombinations[STAKE()][PROTOCOL()] = true;
700
+ _coreObjectCombinations[STAKE()][INSTANCE()] = true;
504
701
  }
505
702
  }