@etherisc/gif-next 0.0.2-b8776f3-780 → 0.0.2-b8da656-306

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 (656) hide show
  1. package/README.md +384 -20
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1234 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +358 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/{instance/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 +1013 -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 +1405 -0
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +818 -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/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  38. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1491 -0
  40. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  42. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1946 -0
  44. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
  46. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  47. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1411 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1545 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1980 -0
  56. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  57. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  58. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +293 -1120
  60. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  61. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +757 -0
  62. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  63. package/artifacts/contracts/instance/Instance.sol/Instance.json +380 -1290
  64. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1623 -0
  66. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
  68. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  69. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2043 -0
  70. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1053 -0
  72. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +714 -0
  74. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +3607 -0
  76. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  77. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  78. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +137 -0
  80. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  82. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
  84. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  85. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  86. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  87. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +129 -0
  88. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IBundle.sol/IBundle.json} +2 -2
  90. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  92. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
  94. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  95. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  96. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  97. package/artifacts/contracts/instance/{treasury/ITreasury.sol/ITreasury.json → module/IRisk.sol/IRisk.json} +2 -2
  98. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  99. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  100. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  101. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +979 -0
  102. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  103. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
  104. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  105. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  106. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  107. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +765 -0
  108. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  109. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +675 -0
  110. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  111. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +871 -0
  112. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  113. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +927 -0
  114. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  115. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +710 -0
  116. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  117. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1276 -0
  118. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  119. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
  120. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  121. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1431 -0
  122. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  123. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +822 -0
  124. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  125. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +931 -0
  126. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  127. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +937 -0
  128. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  129. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1267 -0
  130. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  131. package/artifacts/contracts/pool/Pool.sol/Pool.json +1062 -0
  132. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  133. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1612 -0
  134. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  135. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +758 -0
  136. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  137. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +737 -0
  138. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  139. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +698 -0
  140. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  141. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1098 -0
  142. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  143. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
  144. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  145. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1397 -0
  146. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  147. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +826 -0
  148. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  149. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +517 -0
  150. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  151. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +913 -0
  152. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  153. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +896 -0
  154. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  155. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +549 -0
  156. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  157. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +950 -0
  158. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  159. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +400 -0
  160. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  161. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1268 -0
  162. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  163. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +770 -0
  164. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  165. package/artifacts/contracts/product/PricingService.sol/PricingService.json +865 -0
  166. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  167. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +746 -0
  168. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  169. package/artifacts/contracts/product/Product.sol/Product.json +1056 -0
  170. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  171. package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
  172. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  173. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -0
  174. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  175. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +295 -2
  176. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  177. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +966 -25
  178. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  179. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +940 -0
  180. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  181. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
  182. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  183. package/artifacts/contracts/registry/Registry.sol/Registry.json +1471 -113
  184. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  185. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1858 -0
  186. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  187. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1162 -0
  188. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  189. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +701 -0
  190. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  191. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
  192. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  193. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1169 -0
  194. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  195. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +214 -0
  196. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  197. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +661 -0
  198. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  199. package/artifacts/contracts/shared/Component.sol/Component.json +685 -0
  200. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  201. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1573 -0
  202. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  203. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +794 -0
  204. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  205. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +432 -0
  206. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  207. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  208. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  209. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +605 -0
  210. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  211. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1033 -0
  212. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  213. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +700 -0
  214. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  215. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +474 -0
  216. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  217. package/artifacts/contracts/{experiment/statemachine/ISM.sol/ISM.json → shared/ILifecycle.sol/ILifecycle.json} +37 -51
  218. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  219. package/artifacts/contracts/{registry/Registry.sol/Registerable.json → shared/INftOwnable.sol/INftOwnable.json} +42 -77
  220. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  221. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +175 -0
  222. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  223. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +181 -0
  224. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  225. package/artifacts/contracts/{instance/access/IAccess.sol/IAccessCheckRole.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +11 -11
  226. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  227. package/artifacts/contracts/shared/IService.sol/IService.json +346 -0
  228. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  229. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  230. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  231. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +793 -0
  232. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  233. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +497 -0
  234. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  235. package/artifacts/contracts/{instance/lifecycle/ILifecycle.sol/ILifecycleModule.json → shared/Lifecycle.sol/Lifecycle.json} +19 -68
  236. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  237. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  238. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  239. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +193 -0
  240. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  241. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +198 -0
  242. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  243. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +264 -0
  244. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  245. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +58 -0
  246. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  247. package/artifacts/contracts/shared/Service.sol/Service.json +400 -0
  248. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  249. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +469 -0
  250. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  251. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  252. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  253. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1438 -0
  254. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  255. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +1035 -0
  256. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  257. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +440 -0
  258. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  259. package/artifacts/contracts/staking/Staking.sol/Staking.json +1828 -0
  260. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  261. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
  262. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  263. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +750 -0
  264. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  265. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +587 -0
  266. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  267. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +1236 -0
  268. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  269. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +698 -0
  270. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  271. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2242 -0
  272. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  273. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +607 -0
  274. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  275. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +10 -0
  276. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  277. package/artifacts/contracts/type/Amount.sol/AmountLib.json +398 -0
  278. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  279. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +225 -0
  280. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  281. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +203 -0
  282. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  283. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +104 -0
  284. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  285. package/artifacts/contracts/type/Fee.sol/FeeLib.json +317 -0
  286. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  287. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +125 -0
  288. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  289. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +209 -0
  290. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  291. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +33 -0
  292. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  293. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +239 -0
  294. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  295. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  296. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  297. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +142 -0
  298. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  299. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  300. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  301. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +142 -0
  302. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  303. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +369 -0
  304. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  305. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +246 -0
  306. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  307. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  308. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  309. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  310. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  311. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +92 -0
  312. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  313. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  314. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  315. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +312 -0
  316. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  317. package/artifacts/contracts/type/UFixed.sol/MathLib.json +16 -0
  318. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  319. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +548 -0
  320. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  321. package/artifacts/contracts/type/Version.sol/VersionLib.json +177 -0
  322. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  323. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +68 -0
  324. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  325. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +55 -0
  326. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  327. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +586 -0
  328. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  329. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  330. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  331. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +78 -0
  332. package/contracts/authorization/AccessAdmin.sol +592 -0
  333. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  334. package/contracts/authorization/Authorization.sol +221 -0
  335. package/contracts/authorization/IAccess.sol +48 -0
  336. package/contracts/authorization/IAccessAdmin.sol +135 -0
  337. package/contracts/authorization/IAuthorization.sol +54 -0
  338. package/contracts/authorization/IModuleAuthorization.sol +21 -0
  339. package/contracts/authorization/IServiceAuthorization.sol +38 -0
  340. package/contracts/authorization/ModuleAuthorization.sol +78 -0
  341. package/contracts/authorization/ServiceAuthorization.sol +90 -0
  342. package/contracts/distribution/BasicDistribution.sol +138 -0
  343. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  344. package/contracts/distribution/Distribution.sol +295 -0
  345. package/contracts/distribution/DistributionService.sol +336 -0
  346. package/contracts/distribution/DistributionServiceManager.sol +39 -0
  347. package/contracts/distribution/IDistributionComponent.sol +52 -0
  348. package/contracts/distribution/IDistributionService.sol +101 -0
  349. package/contracts/examples/fire/DamageLevel.sol +59 -0
  350. package/contracts/examples/fire/FirePool.sol +75 -0
  351. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  352. package/contracts/examples/fire/FireProduct.sol +410 -0
  353. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  354. package/contracts/examples/fire/FireUSD.sol +26 -0
  355. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  356. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  357. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  358. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  359. package/contracts/instance/BundleSet.sol +126 -0
  360. package/contracts/instance/IInstance.sol +60 -22
  361. package/contracts/instance/IInstanceService.sol +92 -0
  362. package/contracts/instance/Instance.sol +211 -54
  363. package/contracts/instance/InstanceAdmin.sol +288 -0
  364. package/contracts/instance/InstanceAuthorizationV3.sol +204 -0
  365. package/contracts/instance/InstanceReader.sol +495 -0
  366. package/contracts/instance/InstanceService.sol +465 -0
  367. package/contracts/instance/InstanceServiceManager.sol +39 -0
  368. package/contracts/instance/InstanceStore.sol +287 -0
  369. package/contracts/instance/base/BalanceStore.sol +123 -0
  370. package/contracts/instance/base/Cloneable.sol +28 -0
  371. package/contracts/instance/base/ObjectCounter.sol +21 -0
  372. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  373. package/contracts/instance/base/ObjectSet.sol +79 -0
  374. package/contracts/instance/module/IAccess.sol +46 -0
  375. package/contracts/instance/module/IBundle.sol +20 -0
  376. package/contracts/instance/module/IComponents.sol +48 -0
  377. package/contracts/instance/module/IDistribution.sol +41 -0
  378. package/contracts/instance/module/IPolicy.sol +84 -0
  379. package/contracts/instance/module/IRisk.sol +11 -0
  380. package/contracts/mock/Dip.sol +26 -0
  381. package/contracts/oracle/BasicOracle.sol +48 -0
  382. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  383. package/contracts/oracle/IOracle.sol +36 -0
  384. package/contracts/oracle/IOracleComponent.sol +33 -0
  385. package/contracts/oracle/IOracleService.sol +65 -0
  386. package/contracts/oracle/Oracle.sol +167 -0
  387. package/contracts/oracle/OracleService.sol +281 -0
  388. package/contracts/oracle/OracleServiceManager.sol +39 -0
  389. package/contracts/pool/BasicPool.sol +166 -0
  390. package/contracts/pool/BasicPoolAuthorization.sol +58 -0
  391. package/contracts/pool/BundleService.sol +461 -0
  392. package/contracts/pool/BundleServiceManager.sol +39 -0
  393. package/contracts/pool/IBundleService.sol +143 -0
  394. package/contracts/pool/IPoolComponent.sol +68 -0
  395. package/contracts/pool/IPoolService.sol +171 -0
  396. package/contracts/pool/Pool.sol +353 -0
  397. package/contracts/pool/PoolService.sol +563 -0
  398. package/contracts/pool/PoolServiceManager.sol +39 -0
  399. package/contracts/product/ApplicationService.sol +251 -0
  400. package/contracts/product/ApplicationServiceManager.sol +38 -0
  401. package/contracts/product/BasicProduct.sol +53 -0
  402. package/contracts/product/BasicProductAuthorization.sol +43 -0
  403. package/contracts/product/ClaimService.sol +581 -0
  404. package/contracts/product/ClaimServiceManager.sol +38 -0
  405. package/contracts/product/IApplicationService.sol +63 -0
  406. package/contracts/product/IClaimService.sol +123 -0
  407. package/contracts/product/IPolicyService.sol +80 -0
  408. package/contracts/product/IPricingService.sol +39 -0
  409. package/contracts/product/IProductComponent.sol +53 -0
  410. package/contracts/product/IRiskService.sol +33 -0
  411. package/contracts/product/PolicyService.sol +686 -0
  412. package/contracts/product/PolicyServiceManager.sol +39 -0
  413. package/contracts/product/PricingService.sol +300 -0
  414. package/contracts/product/PricingServiceManager.sol +39 -0
  415. package/contracts/product/Product.sol +432 -0
  416. package/contracts/product/RiskService.sol +96 -0
  417. package/contracts/product/RiskServiceManager.sol +39 -0
  418. package/contracts/registry/ChainNft.sol +176 -61
  419. package/contracts/registry/IRegistry.sol +148 -45
  420. package/contracts/registry/IRegistryService.sol +60 -0
  421. package/contracts/registry/ITransferInterceptor.sol +7 -0
  422. package/contracts/registry/Registry.sol +658 -133
  423. package/contracts/registry/RegistryAdmin.sol +464 -0
  424. package/contracts/registry/RegistryService.sol +259 -0
  425. package/contracts/registry/RegistryServiceManager.sol +53 -0
  426. package/contracts/registry/ReleaseLifecycle.sol +27 -0
  427. package/contracts/registry/ReleaseRegistry.sol +491 -0
  428. package/contracts/registry/ServiceAuthorizationV3.sol +198 -0
  429. package/contracts/registry/TokenRegistry.sol +315 -0
  430. package/contracts/shared/Component.sol +268 -0
  431. package/contracts/shared/ComponentService.sol +641 -0
  432. package/contracts/shared/ComponentServiceManager.sol +38 -0
  433. package/contracts/shared/ComponentVerifyingService.sol +116 -0
  434. package/contracts/shared/ContractLib.sol +38 -0
  435. package/contracts/shared/IComponent.sol +70 -0
  436. package/contracts/shared/IComponentService.sol +108 -0
  437. package/contracts/shared/IInstanceLinkedComponent.sol +49 -0
  438. package/contracts/shared/IKeyValueStore.sol +54 -0
  439. package/contracts/shared/ILifecycle.sol +29 -0
  440. package/contracts/shared/INftOwnable.sol +23 -0
  441. package/contracts/shared/IPolicyHolder.sol +35 -0
  442. package/contracts/shared/IRegisterable.sol +15 -0
  443. package/contracts/shared/IRegistryLinked.sol +11 -0
  444. package/contracts/shared/IService.sol +25 -0
  445. package/contracts/shared/InitializableERC165.sol +27 -0
  446. package/contracts/shared/InstanceLinkedComponent.sol +171 -0
  447. package/contracts/shared/KeyValueStore.sol +131 -0
  448. package/contracts/shared/Lifecycle.sol +77 -0
  449. package/contracts/shared/NftIdSet.sol +65 -0
  450. package/contracts/shared/NftOwnable.sol +107 -0
  451. package/contracts/shared/PolicyHolder.sol +62 -0
  452. package/contracts/shared/Registerable.sol +75 -0
  453. package/contracts/shared/RegistryLinked.sol +44 -0
  454. package/contracts/shared/Service.sol +87 -0
  455. package/contracts/shared/TokenHandler.sol +139 -0
  456. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  457. package/contracts/staking/IStaking.sol +168 -0
  458. package/contracts/staking/IStakingService.sol +160 -0
  459. package/contracts/staking/StakeManagerLib.sol +224 -0
  460. package/contracts/staking/Staking.sol +498 -0
  461. package/contracts/staking/StakingLifecycle.sol +23 -0
  462. package/contracts/staking/StakingManager.sol +52 -0
  463. package/contracts/staking/StakingReader.sol +190 -0
  464. package/contracts/staking/StakingService.sol +407 -0
  465. package/contracts/staking/StakingServiceManager.sol +44 -0
  466. package/contracts/staking/StakingStore.sol +605 -0
  467. package/contracts/staking/TargetManagerLib.sol +211 -0
  468. package/contracts/type/AddressSet.sol +58 -0
  469. package/contracts/type/Amount.sol +150 -0
  470. package/contracts/{types → type}/Blocknumber.sol +27 -3
  471. package/contracts/type/ClaimId.sol +80 -0
  472. package/contracts/type/DistributorType.sol +55 -0
  473. package/contracts/type/Fee.sol +66 -0
  474. package/contracts/type/Key32.sol +50 -0
  475. package/contracts/type/NftId.sol +79 -0
  476. package/contracts/type/NftIdSet.sol +62 -0
  477. package/contracts/type/ObjectType.sol +275 -0
  478. package/contracts/type/PayoutId.sol +82 -0
  479. package/contracts/type/Referral.sol +90 -0
  480. package/contracts/type/RequestId.sol +75 -0
  481. package/contracts/type/RiskId.sol +57 -0
  482. package/contracts/type/RoleId.sol +174 -0
  483. package/contracts/type/Seconds.sol +101 -0
  484. package/contracts/type/Selector.sol +102 -0
  485. package/contracts/{types → type}/StateId.sol +51 -6
  486. package/contracts/type/String.sol +53 -0
  487. package/contracts/{types → type}/Timestamp.sol +52 -8
  488. package/contracts/type/UFixed.sol +355 -0
  489. package/contracts/type/Version.sol +110 -0
  490. package/contracts/upgradeability/IVersionable.sol +53 -0
  491. package/contracts/upgradeability/ProxyManager.sol +231 -0
  492. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +14 -0
  493. package/contracts/upgradeability/Versionable.sol +59 -0
  494. package/package.json +19 -7
  495. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  496. package/artifacts/contracts/components/Component.sol/Component.json +0 -205
  497. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  498. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  499. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  500. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -255
  501. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  502. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  503. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  504. package/artifacts/contracts/components/Pool.sol/Pool.json +0 -328
  505. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  506. package/artifacts/contracts/components/Product.sol/Product.json +0 -346
  507. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  508. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  509. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  510. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  511. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  512. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  513. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  514. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  515. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  516. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  517. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  518. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  519. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  520. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  521. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  522. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  523. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  524. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  525. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  526. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  527. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  528. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  529. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  530. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  531. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  532. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  533. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  534. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  535. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  536. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  537. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  538. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  539. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  540. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  541. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  542. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  543. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  544. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  545. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  546. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  547. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  548. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  549. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -299
  550. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  551. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  552. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  553. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  554. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  555. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  556. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  557. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  558. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  559. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  560. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  561. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  562. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  563. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  564. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  565. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  566. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  567. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  568. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -254
  569. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  570. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -254
  571. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  572. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  573. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
  574. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  575. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
  576. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  577. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  578. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  579. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
  580. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  581. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  582. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  583. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  584. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  585. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  586. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  587. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  588. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  589. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  590. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  591. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  592. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
  593. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  594. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  595. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  596. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  597. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  598. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  599. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  600. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  601. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  602. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  603. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +0 -174
  604. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  605. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  606. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  607. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +0 -92
  608. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  609. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +0 -92
  610. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  611. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +0 -92
  612. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  613. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +0 -174
  614. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  615. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  616. package/contracts/components/Component.sol +0 -77
  617. package/contracts/components/IPool.sol +0 -15
  618. package/contracts/components/IProduct.sol +0 -16
  619. package/contracts/components/Pool.sol +0 -52
  620. package/contracts/components/Product.sol +0 -89
  621. package/contracts/experiment/errors/Require.sol +0 -38
  622. package/contracts/experiment/errors/Revert.sol +0 -44
  623. package/contracts/experiment/inheritance/A.sol +0 -53
  624. package/contracts/experiment/inheritance/B.sol +0 -28
  625. package/contracts/experiment/inheritance/C.sol +0 -34
  626. package/contracts/experiment/inheritance/IA.sol +0 -13
  627. package/contracts/experiment/inheritance/IB.sol +0 -10
  628. package/contracts/experiment/inheritance/IC.sol +0 -12
  629. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  630. package/contracts/experiment/statemachine/ISM.sol +0 -25
  631. package/contracts/experiment/statemachine/README.md +0 -112
  632. package/contracts/experiment/statemachine/SM.sol +0 -57
  633. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  634. package/contracts/experiment/types/TypeA.sol +0 -47
  635. package/contracts/experiment/types/TypeB.sol +0 -29
  636. package/contracts/instance/access/Access.sol +0 -165
  637. package/contracts/instance/access/IAccess.sol +0 -63
  638. package/contracts/instance/component/ComponentModule.sol +0 -274
  639. package/contracts/instance/component/IComponent.sol +0 -74
  640. package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
  641. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  642. package/contracts/instance/policy/IPolicy.sol +0 -50
  643. package/contracts/instance/policy/PolicyModule.sol +0 -114
  644. package/contracts/instance/pool/IPoolModule.sol +0 -23
  645. package/contracts/instance/pool/PoolModule.sol +0 -81
  646. package/contracts/instance/product/IProductService.sol +0 -36
  647. package/contracts/instance/product/ProductService.sol +0 -136
  648. package/contracts/instance/treasury/ITreasury.sol +0 -91
  649. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  650. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  651. package/contracts/registry/IChainNft.sol +0 -21
  652. package/contracts/types/ChainId.sol +0 -38
  653. package/contracts/types/Fee.sol +0 -32
  654. package/contracts/types/NftId.sol +0 -51
  655. package/contracts/types/ObjectType.sol +0 -107
  656. package/contracts/types/UFixed.sol +0 -206
@@ -1,182 +1,707 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
+
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";
12
+
13
+ import {ChainNft} from "./ChainNft.sol";
14
+ import {IRegistry} from "./IRegistry.sol";
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";
19
+
20
+ /// @dev IMPORTANT
21
+ // Each NFT minted by registry is accosiated with:
22
+ // 1) NFT owner
23
+ // 2) registred contract OR object stored in registered (parent) contract
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.
34
+ contract Registry is
35
+ Initializable,
36
+ AccessManaged,
37
+ IRegistry
38
+ {
39
+ /// @dev Protocol NFT ID
40
+ NftId public immutable PROTOCOL_NFT_ID;
41
+
42
+ /// @dev Gobal registry NFT ID
43
+ NftId public immutable GLOBAL_REGISTRY_NFT_ID;
44
+
45
+ /// @dev Gobal registry address on mainnet.
46
+ address public immutable GLOBAL_REGISTRY_ADDRESS;
47
+
48
+ /// @dev Registry NFT ID
49
+ NftId public immutable REGISTRY_NFT_ID;
50
+
51
+ /// @dev Deployer address that authorizes the initializer of this contract.
52
+ address public immutable DEPLOYER;
53
+
54
+ /// @dev Registry admin contract for this registry.
55
+ RegistryAdmin public immutable ADMIN;
56
+
57
+ /// @dev Chain NFT contract that keeps track of the ownership of all registered objects.
58
+ ChainNft public immutable CHAIN_NFT;
59
+
60
+ address public constant NFT_LOCK_ADDRESS = address(0x1);
61
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
62
+ uint256 public constant STAKING_TOKEN_SEQUENCE_ID = 3;
63
+ string public constant EMPTY_URI = "";
64
+
65
+ /// @dev keep track of different registries on different chains
66
+ mapping(uint256 chainId => NftId registryNftId) private _registryNftIdByChainId;
67
+ uint256[] private _chainId;
68
+
69
+ /// @dev keep track of object info and address reverse lookup
70
+ mapping(NftId nftId => ObjectInfo info) private _info;
71
+ mapping(address object => NftId nftId) private _nftIdByAddress;
72
+
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;
3
77
 
4
- import {IChainNft} from "./IChainNft.sol";
5
- import {IRegistry, IRegistryLinked, IRegisterable} from "./IRegistry.sol";
6
- import {NftId, toNftId, NftIdLib} from "../types/NftId.sol";
7
- import {ObjectType, INSTANCE, POLICY, BUNDLE} from "../types/ObjectType.sol";
78
+ mapping(ObjectType objectType => mapping(
79
+ ObjectType parentType => bool)) private _coreContractCombinations;
8
80
 
9
- contract RegistryLinked is IRegistryLinked {
10
- IRegistry internal _registry;
81
+ mapping(ObjectType objectType => mapping(
82
+ ObjectType parentType => bool)) private _coreObjectCombinations;
11
83
 
12
- constructor(address registry) {
13
- _registry = IRegistry(registry);
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();
93
+ }
94
+ _;
14
95
  }
15
96
 
16
- function getRegistry() external view override returns (IRegistry registry) {
17
- return _registry;
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())
104
+ {
105
+ DEPLOYER = msg.sender;
106
+ ADMIN = admin;
107
+ GLOBAL_REGISTRY_ADDRESS = _getGlobalRegistryAddress(globalRegistry);
108
+
109
+ // deploy NFT
110
+ CHAIN_NFT = new ChainNft(address(this));
111
+ GLOBAL_REGISTRY_NFT_ID = NftIdLib.toNftId(
112
+ CHAIN_NFT.GLOBAL_REGISTRY_ID());
113
+
114
+ // initial registry setup
115
+ PROTOCOL_NFT_ID = _registerProtocol();
116
+ REGISTRY_NFT_ID = _registerRegistry();
117
+
118
+ // set object types and object parent relations
119
+ _setupValidCoreTypesAndCombinations();
18
120
  }
19
- }
20
121
 
21
- abstract contract Registerable is RegistryLinked, IRegisterable {
22
- using NftIdLib for NftId;
23
122
 
24
- address private _initialOwner;
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;
25
138
 
26
- constructor(address registry) RegistryLinked(registry) {
27
- _initialOwner = msg.sender;
139
+ // register staking contract
140
+ _stakingNftId = _registerStaking();
28
141
  }
29
142
 
30
- // getType, getData and register need to be implemented by concrete contract
143
+ /// @inheritdoc IRegistry
144
+ function registerRegistry(
145
+ NftId nftId,
146
+ uint256 chainId,
147
+ address registryAddress
148
+ )
149
+ external
150
+ restricted()
151
+ {
152
+ // registration of chain registries only allowed on mainnet
153
+ if (block.chainid != 1) {
154
+ revert ErrorRegistryNotOnMainnet(block.chainid);
155
+ }
156
+
157
+ // registry chain id is not zero
158
+ if(chainId == 0) {
159
+ revert ErrorRegistryChainRegistryChainIdZero(nftId);
160
+ }
161
+
162
+ // registry address is not zero
163
+ if (registryAddress == address(0)) {
164
+ revert ErrorRegistryChainRegistryAddressZero(nftId, chainId);
165
+ }
166
+
167
+ // registry nft id matches registry chain id
168
+ uint256 expectedRegistryId = CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID, chainId);
169
+ if (nftId != NftIdLib.toNftId(expectedRegistryId)) {
170
+ revert ErrorRegistryChainRegistryNftIdInvalid(nftId, chainId);
171
+ }
31
172
 
32
- function isRegisterable() external pure override returns (bool) {
33
- return true;
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
34
187
  }
35
188
 
36
- function getInitialOwner() public view override returns (address deployer) {
37
- return _initialOwner;
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()
198
+ returns(NftId nftId)
199
+ {
200
+ // service address is defined
201
+ address service = info.objectAddress;
202
+ if(service == address(0)) {
203
+ revert ErrorRegistryServiceAddressZero();
204
+ }
205
+
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);
213
+ }
214
+
215
+ // service has proper type
216
+ if(info.objectType != SERVICE()) {
217
+ revert ErrorRegistryNotService(service, info.objectType);
218
+ }
219
+
220
+ // service parent has registry type
221
+ if(info.parentNftId != REGISTRY_NFT_ID) {
222
+ revert ErrorRegistryServiceParentNotRegistry(service, version, info.parentNftId);
223
+ }
224
+
225
+ // service has not already been registered
226
+ if(_service[version][domain] != address(0)) {
227
+ revert ErrorRegistryServiceDomainAlreadyRegistered(service, version, domain);
228
+ }
229
+
230
+ _service[version][domain] = service;
231
+
232
+ emit LogServiceRegistration(version, domain);
233
+
234
+ nftId = _register(info);
38
235
  }
39
236
 
40
- function isRegistered() public view override returns (bool) {
41
- NftId nftId = _registry.getNftId(address(this));
42
- return nftId.gtz();
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
+
247
+ // this indidirectly enforces that the parent is registered
248
+ // parentType would be zero for a non-registered parent which is never a valid type combination
249
+ ObjectType parentType = _info[info.parentNftId].objectType;
250
+
251
+ // check type combinations for core objects
252
+ if(objectAddress == address(0)) {
253
+ if(_coreObjectCombinations[objectType][parentType] == false) {
254
+ revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
255
+ }
256
+ }
257
+ // check type combinations for contract objects
258
+ else {
259
+ if(_coreContractCombinations[objectType][parentType] == false) {
260
+ revert ErrorRegistryTypesCombinationInvalid(objectAddress, objectType, parentType);
261
+ }
262
+ }
263
+
264
+ nftId = _register(info);
43
265
  }
44
266
 
45
- function getNftId() public view override returns (NftId nftId) {
46
- return _registry.getNftId(address(this));
267
+
268
+ /// @inheritdoc IRegistry
269
+ function registerWithCustomType(ObjectInfo memory info)
270
+ external
271
+ restricted()
272
+ returns(NftId nftId)
273
+ {
274
+ ObjectType objectType = info.objectType;
275
+ ObjectType parentType = _info[info.parentNftId].objectType;
276
+
277
+ if(_coreTypes[objectType]) {
278
+ revert ErrorRegistryCoreTypeRegistration();
279
+ }
280
+
281
+ if(
282
+ objectType == ObjectTypeLib.zero() ||
283
+ parentType == ObjectTypeLib.zero() ||
284
+ parentType == PROTOCOL() ||
285
+ parentType == SERVICE()
286
+ ) {
287
+ revert ErrorRegistryTypesCombinationInvalid(info.objectAddress, objectType, parentType);
288
+ }
289
+
290
+ nftId = _register(info);
47
291
  }
48
292
 
49
- function getOwner() public view override returns (address owner) {
50
- NftId id = _registry.getNftId(address(this));
51
- owner = _registry.getOwner(id);
52
- return owner != address(0) ? owner : _initialOwner;
293
+
294
+ /// @dev earliest GIF major version
295
+ function getInitialVersion() external view returns (VersionPart) {
296
+ return VersionPartLib.toVersionPart(_releaseRegistry.INITIAL_GIF_VERSION());
53
297
  }
54
- }
55
298
 
56
- contract Registry is IRegistry {
57
- using NftIdLib for NftId;
299
+ /// @dev next GIF release version to be released
300
+ function getNextVersion() external view returns (VersionPart) {
301
+ return _releaseRegistry.getNextVersion();
302
+ }
58
303
 
59
- string public constant EMPTY_URI = "";
304
+ /// @dev latest active GIF release version
305
+ function getLatestVersion() external view returns (VersionPart) {
306
+ return _releaseRegistry.getLatestVersion();
307
+ }
60
308
 
61
- mapping(NftId nftId => RegistryInfo info) private _info;
62
- mapping(NftId nftId => address owner) private _owner;
63
- mapping(address object => NftId nftId) private _nftIdByAddress;
309
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
310
+ return _releaseRegistry.getReleaseInfo(version);
311
+ }
312
+
313
+ function chainIds() public view returns (uint256) {
314
+ return _chainId.length;
315
+ }
316
+
317
+ function getChainId(uint256 idx) public view returns (uint256) {
318
+ return _chainId[idx];
319
+ }
320
+
321
+ function getRegistryNftId(uint256 chainId) public view returns (NftId nftId) {
322
+ return _registryNftIdByChainId[chainId];
323
+ }
324
+
325
+ function getObjectCount() external view returns (uint256) {
326
+ return CHAIN_NFT.totalSupply();
327
+ }
328
+
329
+ function getNftId() external view returns (NftId nftId) {
330
+ return REGISTRY_NFT_ID;
331
+ }
332
+
333
+ function getProtocolNftId() external view returns (NftId nftId) {
334
+ return PROTOCOL_NFT_ID;
335
+ }
336
+
337
+ function getNftIdForAddress(address object) external view returns (NftId id) {
338
+ return _nftIdByAddress[object];
339
+ }
64
340
 
65
- IChainNft private _chainNft;
66
-
67
- function initialize(address chainNft) external {
68
- require(
69
- address(_chainNft) == address(0),
70
- "ERROR:REG-001:ALREADY_INITIALIZED"
71
- );
72
- _chainNft = IChainNft(chainNft);
73
- }
74
-
75
- function register(
76
- address objectAddress
77
- ) external override returns (NftId nftId) {
78
- require(
79
- _nftIdByAddress[objectAddress].eqz(),
80
- "ERROR:REG-002:ALREADY_REGISTERED"
81
- );
82
-
83
- IRegisterable registerable = IRegisterable(objectAddress);
84
- require(
85
- registerable.isRegisterable(),
86
- "ERROR:REG-003:NOT_REGISTERABLE"
87
- );
88
-
89
- // check parent exists (for objects not instances)
90
- if (registerable.getType() != INSTANCE()) {
91
- RegistryInfo memory parentInfo = _info[
92
- registerable.getParentNftId()
93
- ];
94
- require(parentInfo.nftId.gtz(), "ERROR:REG-004:PARENT_NOT_FOUND");
95
- // check validity of parent relation, valid relations are
96
- // policy -> product, bundle -> pool, product -> instance, pool -> instance
97
- }
98
-
99
- uint256 mintedTokenId = _chainNft.mint(
100
- registerable.getInitialOwner(),
101
- EMPTY_URI
102
- );
103
- nftId = toNftId(mintedTokenId);
104
-
105
- RegistryInfo memory info = RegistryInfo(
106
- nftId,
107
- registerable.getParentNftId(),
108
- registerable.getType(),
109
- objectAddress,
110
- registerable.getInitialOwner()
111
- );
341
+ function ownerOf(NftId nftId) public view returns (address) {
342
+ return CHAIN_NFT.ownerOf(nftId.toInt());
343
+ }
344
+
345
+ function ownerOf(address contractAddress) public view returns (address) {
346
+ return CHAIN_NFT.ownerOf(_nftIdByAddress[contractAddress].toInt());
347
+ }
348
+
349
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
350
+ return _info[nftId];
351
+ }
352
+
353
+ function getObjectAddress(NftId nftId) external view returns (address) {
354
+ return _info[nftId].objectAddress;
355
+ }
356
+
357
+ function getObjectInfo(address object) external view returns (ObjectInfo memory) {
358
+ return _info[_nftIdByAddress[object]];
359
+ }
360
+
361
+ function isRegistered(NftId nftId) public view returns (bool) {
362
+ return _info[nftId].objectType.gtz();
363
+ }
364
+
365
+ function isRegistered(address object) external view returns (bool) {
366
+ return _nftIdByAddress[object].gtz();
367
+ }
368
+
369
+ function isRegisteredService(address object) external view returns (bool) {
370
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
371
+ }
372
+
373
+ function isRegisteredComponent(address object) external view returns (bool) {
374
+ NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
375
+ return _info[objectParentNftId].objectType == INSTANCE();
376
+ }
377
+
378
+ function isActiveRelease(VersionPart version) external view returns (bool)
379
+ {
380
+ return _releaseRegistry.isActiveRelease(version);
381
+ }
382
+
383
+ function getStakingAddress() external view returns (address staking) {
384
+ return _stakingAddress;
385
+ }
386
+
387
+ function getTokenRegistryAddress() external view returns (address tokenRegistry) {
388
+ return _tokenRegistryAddress;
389
+ }
390
+
391
+ function getServiceAddress(
392
+ ObjectType serviceDomain,
393
+ VersionPart releaseVersion
394
+ ) external view returns (address service)
395
+ {
396
+ service = _service[releaseVersion][serviceDomain];
397
+ }
398
+
399
+ function getReleaseRegistryAddress() external view returns (address) {
400
+ return address(_releaseRegistry);
401
+ }
402
+
403
+ function getChainNftAddress() external view override returns (address) {
404
+ return address(CHAIN_NFT);
405
+ }
406
+
407
+ function getRegistryAdminAddress() external view returns (address) {
408
+ return address(ADMIN);
409
+ }
410
+
411
+ function getAuthority() external view returns (address) {
412
+ return ADMIN.authority();
413
+ }
414
+
415
+ function getOwner() public view returns (address owner) {
416
+ return ownerOf(address(this));
417
+ }
418
+
419
+ // IERC165
420
+
421
+ function supportsInterface(bytes4 interfaceId) external pure returns (bool) {
422
+ if(interfaceId == type(IERC165).interfaceId || interfaceId == type(IRegistry).interfaceId) {
423
+ return true;
424
+ }
425
+
426
+ return false;
427
+ }
428
+
429
+ // Internals
430
+
431
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
432
+ function _register(ObjectInfo memory info)
433
+ internal
434
+ returns(NftId nftId)
435
+ {
436
+ ObjectType objectType = info.objectType; // do not care here, never PROTOCOL(), REGISTRY()
437
+ bool isInterceptor = info.isInterceptor;
438
+ address objectAddress = info.objectAddress; // do not care here, can be 0
439
+ address owner = info.initialOwner; // do not care here, can be 0, can be equal info.objectAddress
440
+
441
+ NftId parentNftId = info.parentNftId; // do not care here, can not be 0
442
+ ObjectInfo memory parentInfo = _info[parentNftId];
443
+ address parentAddress = parentInfo.objectAddress; // can be 0
444
+
445
+ // parent is contract -> need to check? -> check before minting
446
+ // special case: staking: to protocol possible as well
447
+ // NO LONGER TRUE: special case: global registry nft as parent when not on mainnet -> global registry address is 0
448
+ // special case: when parentNftId == CHAIN_NFT.mint(), check for zero parent address before mint
449
+ // special case: when parentNftId == CHAIN_NFT.mint() && objectAddress == initialOwner
450
+ // Parent can have 0 address in case of STAKE for PROTOCOL / CUSTOM_TYPE for POLICY
451
+ // But it MUST be registered -> parentType != 0 && parentNftId != 0
452
+ /*if(objectType != STAKE()) {
453
+ if(parentAddress == address(0)) {
454
+ revert ErrorRegistryParentAddressZero();
455
+ }
456
+ }*/
457
+
458
+ // global registry is never parent when not on mainnet
459
+ if(block.chainid != 1) {
460
+ if(parentNftId == GLOBAL_REGISTRY_NFT_ID) {
461
+ revert ErrorRegistryGlobalRegistryAsParent(objectAddress, objectType);
462
+ }
463
+ }
464
+
465
+ address interceptorAddress = _getInterceptor(
466
+ isInterceptor,
467
+ objectType,
468
+ objectAddress,
469
+ parentInfo.isInterceptor,
470
+ parentAddress);
471
+
472
+ uint256 tokenId = CHAIN_NFT.getNextTokenId();
473
+ nftId = NftIdLib.toNftId(tokenId);
474
+ info.nftId = nftId;
112
475
 
113
476
  _info[nftId] = info;
114
- _nftIdByAddress[objectAddress] = nftId;
477
+ _setAddressForNftId(nftId, objectAddress);
478
+
479
+ emit LogRegistration(nftId, parentNftId, objectType, isInterceptor, objectAddress, owner);
115
480
 
116
- // add logging
481
+ // calls nft receiver(1) and interceptor(2)
482
+ uint256 mintedTokenId = CHAIN_NFT.mint(
483
+ owner,
484
+ interceptorAddress,
485
+ EMPTY_URI);
486
+
487
+ assert(mintedTokenId == tokenId);
117
488
  }
118
489
 
119
- function registerObjectForInstance(
120
- NftId parentNftId,
490
+ /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
491
+ /// special case: STAKES (parent may be any type) -> no intercept call
492
+ /// default case:
493
+ function _getInterceptor(
494
+ bool isInterceptor,
121
495
  ObjectType objectType,
122
- address initialOwner
496
+ address objectAddress,
497
+ bool parentIsInterceptor,
498
+ address parentObjectAddress
123
499
  )
124
- external
125
- override
126
- returns (
127
- // TODO add onlyRegisteredInstance
128
- NftId nftId
129
- )
130
- {
131
- // TODO add more validation
132
- require(
133
- objectType == POLICY() || objectType == BUNDLE(),
134
- "ERROR:REG-005:TYPE_INVALID"
135
- );
136
-
137
- uint256 mintedTokenId = _chainNft.mint(initialOwner, EMPTY_URI);
138
- nftId = toNftId(mintedTokenId);
139
-
140
- RegistryInfo memory info = RegistryInfo(
141
- nftId,
142
- parentNftId,
143
- objectType,
144
- address(0),
145
- initialOwner
146
- );
500
+ internal
501
+ pure
502
+ returns (address interceptor)
503
+ {
504
+ // no intercepting calls for stakes
505
+ if (objectType == STAKE()) {
506
+ return address(0);
507
+ }
147
508
 
148
- _info[nftId] = info;
509
+ if (objectAddress == address(0)) {
510
+ if (parentIsInterceptor) {
511
+ return parentObjectAddress;
512
+ } else {
513
+ return address(0);
514
+ }
515
+ }
516
+
517
+ if (isInterceptor) {
518
+ return objectAddress;
519
+ }
149
520
 
150
- // add logging
521
+ return address(0);
151
522
  }
152
523
 
153
- function getObjectCount() external view override returns (uint256) {
154
- return _chainNft.totalSupply();
524
+ // Internals called only in constructor
525
+
526
+ /// @dev protocol registration used to anchor the dip ecosystem relations
527
+ function _registerProtocol()
528
+ private
529
+ returns (NftId protocolNftId)
530
+ {
531
+ uint256 protocolId = CHAIN_NFT.PROTOCOL_NFT_ID();
532
+ protocolNftId = NftIdLib.toNftId(protocolId);
533
+
534
+ _registerForNft(
535
+ ObjectInfo({
536
+ nftId: protocolNftId,
537
+ parentNftId: NftIdLib.zero(),
538
+ objectType: PROTOCOL(),
539
+ isInterceptor: false,
540
+ objectAddress: address(0),
541
+ initialOwner: NFT_LOCK_ADDRESS,
542
+ data: ""}),
543
+ true);
155
544
  }
156
545
 
157
- function getNftId(
158
- address object
159
- ) external view override returns (NftId id) {
160
- return _nftIdByAddress[object];
546
+ /// @dev register this registry
547
+ function _registerRegistry()
548
+ internal
549
+ virtual
550
+ returns (NftId registryNftId)
551
+ {
552
+ // initial assignment
553
+ registryNftId = GLOBAL_REGISTRY_NFT_ID;
554
+
555
+ // register global registry
556
+ _registerRegistryForNft(
557
+ 1, // mainnet chain id
558
+ ObjectInfo({
559
+ nftId: GLOBAL_REGISTRY_NFT_ID,
560
+ parentNftId: PROTOCOL_NFT_ID,
561
+ objectType: REGISTRY(),
562
+ isInterceptor: false,
563
+ objectAddress: GLOBAL_REGISTRY_ADDRESS,
564
+ initialOwner: NFT_LOCK_ADDRESS,
565
+ data: ""}),
566
+ block.chainid == 1);// update address lookup for global registry only on mainnet
567
+
568
+ // if not on mainnet: register this registry with global registry as parent
569
+ if (block.chainid != 1) {
570
+
571
+ // modify registry nft id to local registry when not on mainnet
572
+ registryNftId = NftIdLib.toNftId(
573
+ CHAIN_NFT.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID));
574
+
575
+ _registerRegistryForNft(
576
+ block.chainid,
577
+ ObjectInfo({
578
+ nftId: registryNftId,
579
+ parentNftId: GLOBAL_REGISTRY_NFT_ID,
580
+ objectType: REGISTRY(),
581
+ isInterceptor: false,
582
+ objectAddress: address(this),
583
+ initialOwner: NFT_LOCK_ADDRESS,
584
+ data: ""}),
585
+ true);
586
+ }
161
587
  }
162
588
 
163
- function isRegistered(
164
- address object
165
- ) external view override returns (bool) {
166
- return _nftIdByAddress[object].gtz();
589
+ /// @dev staking registration
590
+ function _registerRegistryForNft(
591
+ uint256 chainId,
592
+ ObjectInfo memory info,
593
+ bool updateAddressLookup
594
+ )
595
+ private
596
+ {
597
+ if (!_registryNftIdByChainId[chainId].eqz()) {
598
+ revert ErrorRegistryChainRegistryAlreadyRegistered(info.nftId, chainId);
599
+ }
600
+
601
+ // update registry lookup variables
602
+ _registryNftIdByChainId[chainId] = info.nftId;
603
+ _chainId.push(chainId);
604
+
605
+ // register the registry info
606
+ _registerForNft(
607
+ info,
608
+ updateAddressLookup);
167
609
  }
168
610
 
169
- function getInfo(
170
- NftId nftId
171
- ) external view override returns (RegistryInfo memory info) {
172
- return _info[nftId];
611
+ /// @dev staking registration
612
+ function _registerStaking()
613
+ private
614
+ returns (NftId stakingNftId)
615
+ {
616
+ address stakingOwner = IRegisterable(_stakingAddress).getOwner();
617
+ uint256 stakingId = CHAIN_NFT.calculateTokenId(STAKING_TOKEN_SEQUENCE_ID);
618
+ stakingNftId = NftIdLib.toNftId(stakingId);
619
+
620
+ _registerForNft(
621
+ ObjectInfo({
622
+ nftId: stakingNftId,
623
+ parentNftId: REGISTRY_NFT_ID,
624
+ objectType: STAKING(),
625
+ isInterceptor: false,
626
+ objectAddress: _stakingAddress,
627
+ initialOwner: stakingOwner,
628
+ data: ""}),
629
+ true);
630
+ }
631
+
632
+ /// @dev Register the provided object info for the specified NFT ID.
633
+ function _registerForNft(
634
+ ObjectInfo memory info,
635
+ bool updateAddressLookup
636
+ )
637
+ internal
638
+ {
639
+ _info[info.nftId] = info;
640
+
641
+ if (updateAddressLookup) {
642
+ _setAddressForNftId(info.nftId, info.objectAddress);
643
+ }
644
+
645
+ // calls nft receiver
646
+ CHAIN_NFT.mint(info.initialOwner, info.nftId.toInt());
647
+ }
648
+
649
+ function _setAddressForNftId(NftId nftId, address objectAddress)
650
+ internal
651
+ {
652
+ if (objectAddress != address(0)) {
653
+ if (_nftIdByAddress[objectAddress].gtz()) {
654
+ revert ErrorRegistryContractAlreadyRegistered(objectAddress);
655
+ }
656
+
657
+ _nftIdByAddress[objectAddress] = nftId;
658
+ }
173
659
  }
174
660
 
175
- function getOwner(NftId nftId) external view override returns (address) {
176
- return _chainNft.ownerOf(nftId.toInt());
661
+ function _getGlobalRegistryAddress(address globalRegistry) internal view returns (address) {
662
+ if (block.chainid == 1) {
663
+ return address(this);
664
+ } else {
665
+ return globalRegistry;
666
+ }
177
667
  }
178
668
 
179
- function getNftAddress() external view override returns (address nft) {
180
- return address(_chainNft);
669
+ /// @dev defines which object - parent types relations are allowed to register
670
+ /// EACH object type MUST have only one parent type across ALL mappings
671
+ // the only EXCEPTION is STAKE, can have any number of parent types
672
+ function _setupValidCoreTypesAndCombinations()
673
+ private
674
+ {
675
+ _coreTypes[PROTOCOL()] = true;
676
+ _coreTypes[REGISTRY()] = true;
677
+ _coreTypes[SERVICE()] = true;
678
+ _coreTypes[INSTANCE()] = true;
679
+ _coreTypes[PRODUCT()] = true;
680
+ _coreTypes[POOL()] = true;
681
+ _coreTypes[DISTRIBUTION()] = true;
682
+ _coreTypes[DISTRIBUTOR()] = true;
683
+ _coreTypes[ORACLE()] = true;
684
+ _coreTypes[POLICY()] = true;
685
+ _coreTypes[BUNDLE()] = true;
686
+ _coreTypes[STAKING()] = true;
687
+ _coreTypes[STAKE()] = true;
688
+
689
+ // types combinations allowed to use with register() function ONLY
690
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
691
+
692
+ // components with instance parent
693
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
694
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
695
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
696
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
697
+
698
+ // objects with component parents
699
+ _coreObjectCombinations[DISTRIBUTOR()][DISTRIBUTION()] = true;
700
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
701
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
702
+
703
+ // staking
704
+ _coreObjectCombinations[STAKE()][PROTOCOL()] = true;
705
+ _coreObjectCombinations[STAKE()][INSTANCE()] = true;
181
706
  }
182
707
  }