@etherisc/gif-next 0.0.2-790d44b-698 → 0.0.2-791e161-234

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