@etherisc/gif-next 0.0.2-a84e908-436 → 0.0.2-a8814be-836

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