@etherisc/gif-next 0.0.2-e769e2e-077 → 0.0.2-e79d227-681

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 (535) hide show
  1. package/README.md +77 -10
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1293 -0
  4. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  6. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  8. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  9. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +414 -0
  10. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
  12. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1060 -0
  14. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +295 -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/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -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 +1324 -0
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +470 -0
  26. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +154 -546
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +380 -229
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +198 -96
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +186 -238
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +223 -47
  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 +1429 -0
  40. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
  42. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1979 -0
  44. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -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 +1430 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1177 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1606 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2281 -0
  56. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  57. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +808 -0
  58. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +153 -86
  60. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +181 -119
  62. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  63. package/artifacts/contracts/instance/Instance.sol/Instance.json +174 -215
  64. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1666 -0
  66. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +574 -0
  68. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +876 -160
  70. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +260 -268
  72. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +163 -81
  74. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  75. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +506 -338
  76. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  77. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +810 -0
  78. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  80. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  81. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  82. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  84. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  85. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
  86. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  87. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  88. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  89. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +8 -116
  90. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  91. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  92. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  93. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  94. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  95. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  96. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  97. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  98. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +961 -0
  99. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  100. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +478 -0
  101. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  102. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  103. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  104. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +776 -0
  105. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  106. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +709 -0
  107. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  108. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +877 -0
  109. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  110. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +990 -0
  111. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  112. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +766 -0
  113. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  114. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1254 -0
  115. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  116. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +502 -0
  117. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  118. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +456 -187
  119. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  120. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +218 -80
  121. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  122. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +264 -26
  123. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  124. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +115 -354
  125. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  126. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +464 -223
  127. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  128. package/artifacts/contracts/pool/Pool.sol/Pool.json +152 -682
  129. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  130. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +590 -382
  131. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  132. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +190 -76
  133. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  134. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +147 -161
  135. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  136. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +147 -77
  137. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  138. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1148 -0
  139. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  140. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +470 -0
  141. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  142. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +343 -168
  143. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +200 -90
  145. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  146. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +88 -8
  147. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  148. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +196 -7
  149. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  150. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +364 -121
  151. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  152. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +134 -86
  153. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  154. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +176 -160
  155. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  156. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +51 -3
  157. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  158. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +475 -294
  159. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +199 -81
  161. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  162. package/artifacts/contracts/product/PricingService.sol/PricingService.json +229 -275
  163. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  164. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +172 -102
  165. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  166. package/artifacts/contracts/product/Product.sol/Product.json +201 -486
  167. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  168. package/artifacts/contracts/product/RiskService.sol/RiskService.json +638 -0
  169. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  170. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +718 -0
  171. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  172. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  173. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  174. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +412 -35
  175. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  176. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +225 -196
  177. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  178. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  179. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  180. package/artifacts/contracts/registry/Registry.sol/Registry.json +761 -87
  181. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  182. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1899 -0
  183. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  184. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +278 -306
  185. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  186. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +154 -78
  187. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  188. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  189. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  190. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1067 -0
  191. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  192. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +272 -0
  193. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  194. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +185 -135
  195. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  196. package/artifacts/contracts/shared/Component.sol/Component.json +79 -274
  197. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  198. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +626 -252
  199. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  200. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +209 -99
  201. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  202. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +55 -101
  203. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  204. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +488 -0
  205. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  206. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  207. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  208. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  209. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  210. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +74 -79
  211. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  212. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +561 -13
  213. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  214. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +120 -108
  215. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  216. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +45 -13
  217. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  218. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +34 -3
  219. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  220. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +23 -1
  221. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  222. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +16 -30
  223. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  224. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +36 -1
  225. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  226. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  227. package/artifacts/contracts/shared/IService.sol/IService.json +49 -1
  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 +1 -1
  231. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +129 -360
  232. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  233. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +55 -98
  234. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  235. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -62
  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 +1 -1
  239. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +26 -55
  240. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  241. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +20 -124
  242. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  243. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +62 -87
  244. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  245. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  246. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  247. package/artifacts/contracts/shared/Service.sol/Service.json +55 -101
  248. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  249. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +697 -25
  250. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  251. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
  252. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  253. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  254. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  255. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +462 -634
  256. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  257. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +546 -48
  258. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  259. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +440 -0
  260. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  261. package/artifacts/contracts/staking/Staking.sol/Staking.json +613 -871
  262. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  263. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +205 -0
  264. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  265. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +185 -81
  266. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  267. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +587 -0
  268. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  269. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +633 -173
  270. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  271. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +166 -68
  272. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  273. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2283 -0
  274. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  275. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +607 -0
  276. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  277. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  278. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/Amount.sol/AmountLib.json +121 -4
  280. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +40 -2
  282. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  284. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  286. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/Fee.sol/FeeLib.json +17 -12
  288. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  289. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  290. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  291. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  292. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +47 -4
  294. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  295. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  296. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +149 -2
  298. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  299. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  300. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  302. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  303. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  304. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +99 -5
  306. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +219 -6
  308. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -2
  310. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  311. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  312. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  313. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  314. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  316. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  317. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  318. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +36 -4
  320. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  322. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +71 -2
  324. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  326. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  328. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  329. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  330. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  331. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +618 -0
  332. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  333. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  334. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  335. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  336. package/contracts/authorization/AccessAdmin.sol +616 -0
  337. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  338. package/contracts/authorization/Authorization.sol +289 -0
  339. package/contracts/authorization/IAccess.sol +49 -0
  340. package/contracts/authorization/IAccessAdmin.sol +137 -0
  341. package/contracts/authorization/IAuthorization.sol +60 -0
  342. package/contracts/authorization/IServiceAuthorization.sol +40 -0
  343. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  344. package/contracts/authorization/ServiceAuthorization.sol +106 -0
  345. package/contracts/distribution/BasicDistribution.sol +139 -0
  346. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  347. package/contracts/distribution/Distribution.sol +145 -124
  348. package/contracts/distribution/DistributionService.sol +156 -99
  349. package/contracts/distribution/DistributionServiceManager.sol +13 -25
  350. package/contracts/distribution/IDistributionComponent.sol +27 -41
  351. package/contracts/distribution/IDistributionService.sol +29 -10
  352. package/contracts/examples/fire/DamageLevel.sol +59 -0
  353. package/contracts/examples/fire/FirePool.sol +86 -0
  354. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  355. package/contracts/examples/fire/FireProduct.sol +431 -0
  356. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  357. package/contracts/examples/fire/FireUSD.sol +26 -0
  358. package/contracts/examples/unpermissioned/SimpleDistribution.sol +58 -0
  359. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  360. package/contracts/examples/unpermissioned/SimplePool.sol +108 -0
  361. package/contracts/examples/unpermissioned/SimpleProduct.sol +345 -0
  362. package/contracts/instance/BundleSet.sol +130 -0
  363. package/contracts/instance/IInstance.sol +39 -44
  364. package/contracts/instance/IInstanceService.sol +33 -42
  365. package/contracts/instance/Instance.sol +137 -124
  366. package/contracts/instance/InstanceAdmin.sol +278 -0
  367. package/contracts/instance/InstanceAuthorizationV3.sol +217 -0
  368. package/contracts/instance/InstanceReader.sol +249 -36
  369. package/contracts/instance/InstanceService.sol +227 -151
  370. package/contracts/instance/InstanceServiceManager.sol +14 -29
  371. package/contracts/instance/InstanceStore.sol +85 -57
  372. package/contracts/instance/RiskSet.sol +119 -0
  373. package/contracts/instance/base/BalanceStore.sol +12 -7
  374. package/contracts/instance/base/Cloneable.sol +2 -25
  375. package/contracts/instance/base/ObjectCounter.sol +21 -0
  376. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  377. package/contracts/instance/base/ObjectSet.sol +78 -0
  378. package/contracts/instance/module/IAccess.sol +2 -10
  379. package/contracts/instance/module/IBundle.sol +1 -1
  380. package/contracts/instance/module/IComponents.sol +11 -13
  381. package/contracts/instance/module/IDistribution.sol +0 -1
  382. package/contracts/instance/module/IPolicy.sol +26 -25
  383. package/contracts/instance/module/IRisk.sol +1 -0
  384. package/contracts/mock/Dip.sol +26 -0
  385. package/contracts/oracle/BasicOracle.sol +47 -0
  386. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  387. package/contracts/oracle/IOracle.sol +36 -0
  388. package/contracts/oracle/IOracleComponent.sol +33 -0
  389. package/contracts/oracle/IOracleService.sol +66 -0
  390. package/contracts/oracle/Oracle.sol +156 -0
  391. package/contracts/oracle/OracleService.sol +309 -0
  392. package/contracts/oracle/OracleServiceManager.sol +39 -0
  393. package/contracts/pool/BasicPool.sol +175 -0
  394. package/contracts/pool/BasicPoolAuthorization.sol +68 -0
  395. package/contracts/pool/BundleService.sol +232 -122
  396. package/contracts/pool/BundleServiceManager.sol +13 -25
  397. package/contracts/pool/IBundleService.sol +34 -18
  398. package/contracts/pool/IPoolComponent.sol +20 -70
  399. package/contracts/pool/IPoolService.sol +57 -51
  400. package/contracts/pool/Pool.sol +208 -162
  401. package/contracts/pool/PoolService.sol +372 -181
  402. package/contracts/pool/PoolServiceManager.sol +12 -24
  403. package/contracts/product/ApplicationService.sol +90 -84
  404. package/contracts/product/ApplicationServiceManager.sol +12 -9
  405. package/contracts/product/BasicProduct.sol +49 -0
  406. package/contracts/product/BasicProductAuthorization.sol +42 -0
  407. package/contracts/product/ClaimService.sol +331 -153
  408. package/contracts/product/ClaimServiceManager.sol +12 -9
  409. package/contracts/product/IApplicationService.sol +7 -3
  410. package/contracts/product/IClaimService.sol +35 -5
  411. package/contracts/product/IPolicyService.sol +47 -35
  412. package/contracts/product/IPricingService.sol +11 -11
  413. package/contracts/product/IProductComponent.sol +26 -9
  414. package/contracts/product/{IProductService.sol → IRiskService.sol} +2 -2
  415. package/contracts/product/PolicyService.sol +524 -262
  416. package/contracts/product/PolicyServiceManager.sol +12 -27
  417. package/contracts/product/PricingService.sol +64 -64
  418. package/contracts/product/PricingServiceManager.sol +12 -24
  419. package/contracts/product/Product.sol +189 -139
  420. package/contracts/product/{ProductService.sol → RiskService.sol} +35 -50
  421. package/contracts/product/RiskServiceManager.sol +39 -0
  422. package/contracts/registry/ChainNft.sol +68 -37
  423. package/contracts/registry/IRegistry.sol +90 -28
  424. package/contracts/registry/IRegistryService.sol +26 -43
  425. package/contracts/registry/ITransferInterceptor.sol +1 -2
  426. package/contracts/registry/Registry.sol +424 -228
  427. package/contracts/registry/RegistryAdmin.sol +451 -0
  428. package/contracts/registry/RegistryService.sol +63 -149
  429. package/contracts/registry/RegistryServiceManager.sol +23 -30
  430. package/contracts/registry/ReleaseLifecycle.sol +30 -0
  431. package/contracts/registry/ReleaseRegistry.sol +485 -0
  432. package/contracts/registry/ServiceAuthorizationV3.sol +175 -0
  433. package/contracts/registry/TokenRegistry.sol +187 -59
  434. package/contracts/shared/Component.sol +56 -125
  435. package/contracts/shared/ComponentService.sol +411 -201
  436. package/contracts/shared/ComponentServiceManager.sol +10 -7
  437. package/contracts/shared/ComponentVerifyingService.sol +40 -23
  438. package/contracts/shared/ContractLib.sol +224 -0
  439. package/contracts/shared/IComponent.sol +11 -18
  440. package/contracts/shared/IComponentService.sol +52 -13
  441. package/contracts/shared/IInstanceLinkedComponent.sol +11 -16
  442. package/contracts/shared/IKeyValueStore.sol +2 -1
  443. package/contracts/shared/ILifecycle.sol +3 -2
  444. package/contracts/shared/INftOwnable.sol +3 -1
  445. package/contracts/shared/IPolicyHolder.sol +12 -17
  446. package/contracts/shared/IRegisterable.sol +11 -0
  447. package/contracts/shared/IService.sol +9 -2
  448. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +4 -4
  449. package/contracts/shared/InstanceLinkedComponent.sol +103 -43
  450. package/contracts/shared/KeyValueStore.sol +30 -68
  451. package/contracts/shared/Lifecycle.sol +30 -63
  452. package/contracts/shared/NftIdSet.sol +65 -0
  453. package/contracts/shared/NftOwnable.sol +31 -22
  454. package/contracts/shared/PolicyHolder.sol +18 -50
  455. package/contracts/shared/Registerable.sol +19 -11
  456. package/contracts/shared/RegistryLinked.sol +9 -14
  457. package/contracts/shared/Service.sol +44 -37
  458. package/contracts/shared/TokenHandler.sol +358 -27
  459. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  460. package/contracts/staking/IStaking.sol +133 -37
  461. package/contracts/staking/IStakingService.sol +93 -41
  462. package/contracts/staking/StakeManagerLib.sol +224 -0
  463. package/contracts/staking/Staking.sol +394 -101
  464. package/contracts/staking/StakingLifecycle.sol +23 -0
  465. package/contracts/staking/StakingManager.sol +24 -18
  466. package/contracts/staking/StakingReader.sol +190 -0
  467. package/contracts/staking/StakingService.sol +282 -42
  468. package/contracts/staking/StakingServiceManager.sol +10 -7
  469. package/contracts/staking/StakingStore.sol +605 -0
  470. package/contracts/staking/TargetManagerLib.sol +211 -0
  471. package/contracts/type/AddressSet.sol +1 -1
  472. package/contracts/type/Amount.sol +39 -3
  473. package/contracts/type/Blocknumber.sol +20 -2
  474. package/contracts/type/ClaimId.sol +6 -1
  475. package/contracts/type/Fee.sol +1 -1
  476. package/contracts/type/Key32.sol +2 -2
  477. package/contracts/type/Key32Set.sol +62 -0
  478. package/contracts/type/NftId.sol +16 -4
  479. package/contracts/type/NftIdSet.sol +1 -1
  480. package/contracts/type/ObjectType.sol +178 -65
  481. package/contracts/type/PayoutId.sol +10 -10
  482. package/contracts/type/Referral.sol +2 -1
  483. package/contracts/type/RequestId.sol +75 -0
  484. package/contracts/type/RiskId.sol +31 -5
  485. package/contracts/type/RoleId.sol +98 -74
  486. package/contracts/type/Seconds.sol +48 -1
  487. package/contracts/type/Selector.sol +102 -0
  488. package/contracts/type/StateId.sol +41 -2
  489. package/contracts/type/String.sol +53 -0
  490. package/contracts/type/Timestamp.sol +17 -3
  491. package/contracts/type/UFixed.sol +38 -9
  492. package/contracts/type/Version.sol +4 -2
  493. package/contracts/{shared → upgradeability}/ProxyManager.sol +90 -27
  494. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  495. package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
  496. package/package.json +11 -7
  497. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  498. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -778
  499. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  500. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1348
  501. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  502. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -132
  503. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  504. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -256
  505. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  506. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  507. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -673
  508. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  509. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -636
  510. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  511. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -308
  512. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  513. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -688
  514. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.dbg.json +0 -4
  515. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.json +0 -137
  516. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  517. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  518. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  519. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  520. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  521. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  522. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -569
  523. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  524. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  525. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  526. package/contracts/instance/BundleManager.sol +0 -126
  527. package/contracts/instance/InstanceAccessManager.sol +0 -543
  528. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -336
  529. package/contracts/instance/base/ObjectManager.sol +0 -82
  530. package/contracts/product/ProductServiceManager.sol +0 -54
  531. package/contracts/registry/RegistryAccessManager.sol +0 -213
  532. package/contracts/registry/ReleaseManager.sol +0 -375
  533. package/contracts/registry/ServiceAuthorizationsLib.sol +0 -173
  534. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
  535. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
@@ -1,48 +1,52 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Amount, AmountLib} from "../type/Amount.sol";
5
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
6
- import {Fee, FeeLib} from "../type/Fee.sol";
7
- import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
8
- import {IRegistry} from "../registry/IRegistry.sol";
9
- import {IRegistryService} from "../registry/IRegistryService.sol";
10
- import {IInstance} from "../instance/IInstance.sol";
11
- import {IAccess} from "../instance/module/IAccess.sol";
12
- import {NftId} from "../type/NftId.sol";
13
- import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, POOL, PRODUCT} from "../type/ObjectType.sol";
14
- import {RoleId, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, POLICY_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../type/RoleId.sol";
15
- import {KEEP_STATE} from "../type/StateId.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IComponent} from "../shared/IComponent.sol";
16
7
  import {IComponents} from "../instance/module/IComponents.sol";
17
8
  import {IComponentService} from "./IComponentService.sol";
18
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
9
+ import {IInstance} from "../instance/IInstance.sol";
10
+ import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
11
+ import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
12
+ import {InstanceReader} from "../instance/InstanceReader.sol";
13
+ import {InstanceStore} from "../instance/InstanceStore.sol";
19
14
  import {IInstanceService} from "../instance/IInstanceService.sol";
20
15
  import {IPoolComponent} from "../pool/IPoolComponent.sol";
21
16
  import {IProductComponent} from "../product/IProductComponent.sol";
22
- import {InstanceReader} from "../instance/InstanceReader.sol";
23
- import {InstanceStore} from "../instance/InstanceStore.sol";
24
- import {TokenHandler} from "./TokenHandler.sol";
17
+ import {IRegisterable} from "../shared/IRegisterable.sol";
18
+ import {IRegistry} from "../registry/IRegistry.sol";
19
+ import {IRegistryService} from "../registry/IRegistryService.sol";
20
+
21
+ import {Amount, AmountLib} from "../type/Amount.sol";
22
+ import {ContractLib} from "../shared/ContractLib.sol";
23
+ import {Fee, FeeLib} from "../type/Fee.sol";
24
+ import {KEEP_STATE} from "../type/StateId.sol";
25
+ import {NftId} from "../type/NftId.sol";
26
+ import {ObjectType, REGISTRY, BUNDLE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, INSTANCE, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
27
+ import {Service} from "../shared/Service.sol";
28
+ import {TokenHandler} from "../shared/TokenHandler.sol";
29
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
30
+
25
31
 
26
32
  contract ComponentService is
27
- ComponentVerifyingService,
33
+ Service,
28
34
  IComponentService
29
35
  {
30
-
31
- error ErrorComponentServiceAlreadyRegistered(address component);
32
- error ErrorComponentServiceNotComponent(address component);
33
- error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
34
- error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
35
- error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
36
- error ErrorComponentServiceComponentLocked(address component);
37
- error ErrorComponentServiceSenderNotService(address sender);
38
- error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
39
-
40
36
  bool private constant INCREASE = true;
41
37
  bool private constant DECREASE = false;
42
38
 
43
39
  IRegistryService private _registryService;
44
40
  IInstanceService private _instanceService;
45
41
 
42
+ modifier onlyComponent(address component) {
43
+ if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
44
+ revert ErrorComponentServiceNotInstanceLinkedComponent(component);
45
+ }
46
+ _;
47
+ }
48
+
49
+
46
50
  function _initialize(
47
51
  address owner,
48
52
  bytes memory data
@@ -51,46 +55,89 @@ contract ComponentService is
51
55
  virtual override
52
56
  initializer()
53
57
  {
54
- // TODO check this, might no longer be the way, refactor if necessary
55
- address registryAddress;
56
- address initialOwner;
57
- (registryAddress, initialOwner) = abi.decode(data, (address, address));
58
+ (
59
+ address registryAddress,
60
+ address authority
61
+ ) = abi.decode(data, (address, address));
58
62
 
59
- initializeService(registryAddress, address(0), owner);
63
+ _initializeService(registryAddress, authority, owner);
60
64
 
61
65
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
62
66
  _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
63
67
 
64
- registerInterface(type(IComponentService).interfaceId);
68
+ _registerInterface(type(IComponentService).interfaceId);
65
69
  }
66
70
 
71
+ //-------- component ----------------------------------------------------//
67
72
 
68
- function getDomain() public pure virtual override returns(ObjectType) {
69
- return COMPONENT();
73
+ function registerComponent(address component)
74
+ external
75
+ virtual
76
+ onlyComponent(component)
77
+ returns (NftId componentNftId)
78
+ {
79
+ // type specific registration
80
+ ObjectType componentType = IInstanceLinkedComponent(component).getInitialInfo().objectType;
81
+ if (componentType == POOL()) {
82
+ return _registerPool(component);
83
+ }
84
+ if (componentType == DISTRIBUTION()) {
85
+ return _registerDistribution(component);
86
+ }
87
+ if (componentType == ORACLE()) {
88
+ return _registerOracle(component);
89
+ }
90
+
91
+ // fail
92
+ revert ErrorComponentServiceTypeNotSupported(component, componentType);
70
93
  }
71
94
 
72
- //-------- component ----------------------------------------------------//
95
+ function approveTokenHandler(
96
+ IERC20Metadata token,
97
+ Amount amount
98
+ )
99
+ external
100
+ virtual
101
+ {
102
+ // checks
103
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
104
+ TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
105
+ componentNftId).tokenHandler;
73
106
 
74
- function setWallet(address newWallet) external virtual {
75
- (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
76
- IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
77
- address currentWallet = info.wallet;
107
+ // effects
108
+ tokenHandler.approve(token, amount);
109
+ }
78
110
 
79
- if (newWallet == address(0)) {
80
- revert ErrorComponentServiceNewWalletAddressZero();
81
- }
82
111
 
83
- if (currentWallet == address(0)) {
84
- revert ErrorComponentServiceWalletAddressZero();
85
- }
112
+ function approveStakingTokenHandler(
113
+ IERC20Metadata token,
114
+ Amount amount
115
+ )
116
+ external
117
+ virtual
118
+ {
119
+ // checks
120
+ ContractLib.getAndVerifyStaking(
121
+ getRegistry(),
122
+ msg.sender); // only active
123
+
124
+ // effects
125
+ TokenHandler tokenHandler = IComponent(msg.sender).getTokenHandler();
126
+ tokenHandler.approve(token, amount);
127
+ }
86
128
 
87
- if (newWallet == currentWallet) {
88
- revert ErrorComponentServiceWalletAddressIsSameAsCurrent();
89
- }
90
129
 
91
- info.wallet = newWallet;
92
- instance.getInstanceStore().updateComponent(componentNftId, info, KEEP_STATE());
93
- emit LogComponentServiceWalletAddressChanged(componentNftId, currentWallet, newWallet);
130
+ function setWallet(address newWallet)
131
+ external
132
+ virtual
133
+ {
134
+ // checks
135
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
136
+ TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
137
+ componentNftId).tokenHandler;
138
+
139
+ // effects
140
+ tokenHandler.setWallet(newWallet);
94
141
  }
95
142
 
96
143
  // TODO implement
@@ -99,40 +146,63 @@ contract ComponentService is
99
146
  // TODO implement
100
147
  function unlock() external virtual {}
101
148
 
149
+ function withdrawFees(Amount amount)
150
+ external
151
+ virtual
152
+ returns (Amount withdrawnAmount)
153
+ {
154
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
155
+ IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
156
+ address componentWallet = info.tokenHandler.getWallet();
157
+
158
+ // determine withdrawn amount
159
+ withdrawnAmount = amount;
160
+ if (withdrawnAmount.gte(AmountLib.max())) {
161
+ withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
162
+ } else if (withdrawnAmount.eqz()) {
163
+ revert ErrorComponentServiceWithdrawAmountIsZero();
164
+ } else {
165
+ Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
166
+ if (withdrawnAmount.gt(withdrawLimit)) {
167
+ revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
168
+ }
169
+ }
170
+
171
+ // decrease fee counters by withdrawnAmount
172
+ _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
173
+
174
+ // transfer amount to component owner
175
+ address componentOwner = getRegistry().ownerOf(componentNftId);
176
+ emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
177
+ info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
178
+ }
179
+
102
180
 
103
181
  //-------- product ------------------------------------------------------//
104
182
 
105
- function registerProduct()
183
+ function registerProduct(address productAddress)
106
184
  external
107
185
  virtual
186
+ onlyComponent(productAddress)
187
+ returns (NftId productNftId)
108
188
  {
109
- address contractAddress = msg.sender;
110
- RoleId[] memory roles = new RoleId[](1);
111
- bytes4[][] memory selectors = new bytes4[][](1);
189
+ // register/create component setup
190
+ InstanceAdmin instanceAdmin;
191
+ InstanceStore instanceStore;
192
+ (, instanceAdmin, instanceStore,, productNftId) = _register(
193
+ productAddress,
194
+ PRODUCT());
112
195
 
113
- // authorizaion for distribution owner
114
- roles[0] = PRODUCT_OWNER_ROLE();
115
- selectors[0] = _createSelectors(IProductComponent.setFees.selector);
196
+ // get product
197
+ IProductComponent product = IProductComponent(productAddress);
116
198
 
117
- // register/create component setup
118
- (
119
- InstanceReader instanceReader,
120
- InstanceStore instanceStore,
121
- NftId productNftId
122
- ) = _register(
123
- contractAddress,
124
- PRODUCT(),
125
- PRODUCT_OWNER_ROLE(),
126
- roles,
127
- selectors);
128
-
129
- // create product info
130
- IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
131
- instanceStore.createProduct(productNftId, productInfo);
132
-
133
- // link distribution and pool to product
134
- _linkToProduct(instanceReader, instanceStore, productInfo.distributionNftId, productNftId);
135
- _linkToProduct(instanceReader, instanceStore, productInfo.poolNftId, productNftId);
199
+ // create info
200
+ instanceStore.createProduct(
201
+ productNftId,
202
+ product.getInitialProductInfo());
203
+
204
+ // authorize
205
+ instanceAdmin.initializeComponentAuthorization(product);
136
206
  }
137
207
 
138
208
 
@@ -143,7 +213,7 @@ contract ComponentService is
143
213
  external
144
214
  virtual
145
215
  {
146
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
216
+ (NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
147
217
  IComponents.ProductInfo memory productInfo = instance.getInstanceReader().getProductInfo(productNftId);
148
218
  bool feesChanged = false;
149
219
 
@@ -167,7 +237,6 @@ contract ComponentService is
167
237
  }
168
238
  }
169
239
 
170
-
171
240
  function increaseProductFees(
172
241
  InstanceStore instanceStore,
173
242
  NftId productNftId,
@@ -178,6 +247,7 @@ contract ComponentService is
178
247
  // TODO re-enable once role granting is stable and fixed
179
248
  // restricted()
180
249
  {
250
+ _checkNftType(productNftId, PRODUCT());
181
251
  _changeTargetBalance(INCREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
182
252
  }
183
253
 
@@ -188,35 +258,43 @@ contract ComponentService is
188
258
  // TODO re-enable once role granting is stable and fixed
189
259
  // restricted()
190
260
  {
261
+ _checkNftType(productNftId, PRODUCT());
191
262
  _changeTargetBalance(DECREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
192
263
  }
193
264
 
194
265
  //-------- distribution -------------------------------------------------//
195
266
 
196
267
  /// @dev registers the sending component as a distribution component
197
- function registerDistribution()
198
- external
268
+ function _registerDistribution(address distributioAddress)
269
+ internal
199
270
  virtual
271
+ returns (NftId distributionNftId)
200
272
  {
201
- address contractAddress = msg.sender;
202
- RoleId[] memory roles = new RoleId[](2);
203
- bytes4[][] memory selectors = new bytes4[][](2);
204
-
205
- // authorizaion for distribution owner
206
- roles[0] = DISTRIBUTION_OWNER_ROLE();
207
- selectors[0] = _createSelectors(IDistributionComponent.setFees.selector);
273
+ // register/create component info
274
+ InstanceReader instanceReader;
275
+ InstanceAdmin instanceAdmin;
276
+ InstanceStore instanceStore;
277
+ NftId productNftId;
278
+ (instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
279
+ distributioAddress,
280
+ DISTRIBUTION());
281
+
282
+ // check product is still expecting a distribution registration
283
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
284
+ if (!productInfo.hasDistribution) {
285
+ revert ErrorProductServiceNoDistributionExpected(productNftId);
286
+ }
287
+ if (productInfo.distributionNftId.gtz()) {
288
+ revert ErrorProductServiceDistributionAlreadyRegistered(productNftId, productInfo.distributionNftId);
289
+ }
208
290
 
209
- // authorizaion for product service
210
- roles[1] = PRODUCT_SERVICE_ROLE();
211
- selectors[1] = _createSelectors(IDistributionComponent.processRenewal.selector);
291
+ // set distribution in product info
292
+ productInfo.distributionNftId = distributionNftId;
293
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
212
294
 
213
- // register/create component info
214
- _register(
215
- contractAddress,
216
- DISTRIBUTION(),
217
- DISTRIBUTION_OWNER_ROLE(),
218
- roles,
219
- selectors);
295
+ // authorize
296
+ instanceAdmin.initializeComponentAuthorization(
297
+ IInstanceLinkedComponent(distributioAddress));
220
298
  }
221
299
 
222
300
 
@@ -227,7 +305,7 @@ contract ComponentService is
227
305
  external
228
306
  virtual
229
307
  {
230
- (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
308
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
231
309
  (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
232
310
  instance.getInstanceReader(), distributionNftId);
233
311
  bool feesChanged = false;
@@ -263,6 +341,7 @@ contract ComponentService is
263
341
  // TODO re-enable once role granting is stable and fixed
264
342
  // restricted()
265
343
  {
344
+ _checkNftType(distributionNftId, DISTRIBUTION());
266
345
  _changeTargetBalance(INCREASE, instanceStore, distributionNftId, amount, feeAmount);
267
346
  }
268
347
 
@@ -278,44 +357,113 @@ contract ComponentService is
278
357
  // TODO re-enable once role granting is stable and fixed
279
358
  // restricted()
280
359
  {
360
+ _checkNftType(distributionNftId, DISTRIBUTION());
281
361
  _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
282
362
  }
283
363
 
284
- //-------- pool ---------------------------------------------------------//
364
+ //-------- distributor -------------------------------------------------------//
285
365
 
286
- /// @dev registers the sending component as a distribution component
287
- function registerPool()
366
+ function increaseDistributorBalance(
367
+ InstanceStore instanceStore,
368
+ NftId distributorNftId,
369
+ Amount amount,
370
+ Amount feeAmount
371
+ )
288
372
  external
289
373
  virtual
374
+ // TODO re-enable once role granting is stable and fixed
375
+ // restricted()
290
376
  {
291
- address contractAddress = msg.sender;
292
- RoleId[] memory roles = new RoleId[](2);
293
- bytes4[][] memory selectors = new bytes4[][](2);
377
+ _checkNftType(distributorNftId, DISTRIBUTOR());
378
+ _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
379
+ }
294
380
 
295
- // authorizaion for distribution owner
296
- roles[0] = POOL_OWNER_ROLE();
297
- selectors[0] = _createSelectors(IPoolComponent.setFees.selector);
381
+ function decreaseDistributorBalance(
382
+ InstanceStore instanceStore,
383
+ NftId distributorNftId,
384
+ Amount amount,
385
+ Amount feeAmount
386
+ )
387
+ external
388
+ virtual
389
+ // TODO re-enable once role granting is stable and fixed
390
+ // restricted()
391
+ {
392
+ _checkNftType(distributorNftId, DISTRIBUTOR());
393
+ _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
394
+ }
298
395
 
299
- // authorizaion for product service
300
- roles[1] = POLICY_SERVICE_ROLE();
301
- selectors[1] = _createSelectors(IPoolComponent.verifyApplication.selector);
396
+ //-------- oracle -------------------------------------------------------//
302
397
 
398
+ function _registerOracle(address oracleAddress)
399
+ internal
400
+ virtual
401
+ returns (NftId oracleNftId)
402
+ {
303
403
  // register/create component setup
304
- (
305
- , // instance reader
306
- InstanceStore instanceStore,
307
- NftId componentNftId
308
- ) = _register(
309
- contractAddress,
310
- POOL(),
311
- POOL_OWNER_ROLE(),
312
- roles,
313
- selectors);
404
+ InstanceReader instanceReader;
405
+ InstanceAdmin instanceAdmin;
406
+ InstanceStore instanceStore;
407
+ NftId productNftId;
408
+
409
+ (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) = _register(
410
+ oracleAddress,
411
+ ORACLE());
412
+
413
+ // check product is still expecting an oracle registration
414
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
415
+ if (productInfo.expectedNumberOfOracles == 0) {
416
+ revert ErrorProductServiceNoOraclesExpected(productNftId);
417
+ }
418
+ if (productInfo.numberOfOracles == productInfo.expectedNumberOfOracles) {
419
+ revert ErrorProductServiceOraclesAlreadyRegistered(productNftId, productInfo.expectedNumberOfOracles);
420
+ }
421
+
422
+ // update/add oracle to product info
423
+ productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
424
+ productInfo.numberOfOracles++;
425
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
426
+
427
+ // authorize
428
+ instanceAdmin.initializeComponentAuthorization(
429
+ IInstanceLinkedComponent(oracleAddress));
430
+ }
431
+
432
+ //-------- pool ---------------------------------------------------------//
433
+
434
+ function _registerPool(address poolAddress)
435
+ internal
436
+ virtual
437
+ returns (NftId poolNftId)
438
+ {
439
+ // register/create component setup
440
+ InstanceReader instanceReader;
441
+ InstanceAdmin instanceAdmin;
442
+ InstanceStore instanceStore;
443
+ NftId productNftId;
444
+
445
+ (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) = _register(
446
+ poolAddress,
447
+ POOL());
448
+
449
+ // check product is still expecting a pool registration
450
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
451
+ if (productInfo.poolNftId.gtz()) {
452
+ revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
453
+ }
314
454
 
315
455
  // create info
456
+ IPoolComponent pool = IPoolComponent(poolAddress);
316
457
  instanceStore.createPool(
317
- componentNftId,
318
- IPoolComponent(contractAddress).getInitialPoolInfo());
458
+ poolNftId,
459
+ pool.getInitialPoolInfo());
460
+
461
+ // update pool in product info
462
+ productInfo.poolNftId = poolNftId;
463
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
464
+
465
+ // authorize
466
+ instanceAdmin.initializeComponentAuthorization(pool);
319
467
  }
320
468
 
321
469
 
@@ -327,7 +475,8 @@ contract ComponentService is
327
475
  external
328
476
  virtual
329
477
  {
330
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
478
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActiveComponent(POOL());
479
+
331
480
  (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
332
481
  instance.getInstanceReader(), poolNftId);
333
482
  bool feesChanged = false;
@@ -370,6 +519,7 @@ contract ComponentService is
370
519
  // TODO re-enable once role granting is stable and fixed
371
520
  // restricted()
372
521
  {
522
+ _checkNftType(poolNftId, POOL());
373
523
  _changeTargetBalance(INCREASE, instanceStore, poolNftId, amount, feeAmount);
374
524
  }
375
525
 
@@ -384,6 +534,7 @@ contract ComponentService is
384
534
  // TODO re-enable once role granting is stable and fixed
385
535
  // restricted()
386
536
  {
537
+ _checkNftType(poolNftId, POOL());
387
538
  _changeTargetBalance(DECREASE, instanceStore, poolNftId, amount, feeAmount);
388
539
  }
389
540
 
@@ -400,6 +551,7 @@ contract ComponentService is
400
551
  // TODO re-enable once role granting is stable and fixed
401
552
  // restricted()
402
553
  {
554
+ _checkNftType(bundleNftId, BUNDLE());
403
555
  _changeTargetBalance(INCREASE, instanceStore, bundleNftId, amount, feeAmount);
404
556
  }
405
557
 
@@ -414,6 +566,7 @@ contract ComponentService is
414
566
  // TODO re-enable once role granting is stable and fixed
415
567
  // restricted()
416
568
  {
569
+ _checkNftType(bundleNftId, BUNDLE());
417
570
  _changeTargetBalance(DECREASE, instanceStore, bundleNftId, amount, feeAmount);
418
571
  }
419
572
 
@@ -441,74 +594,72 @@ contract ComponentService is
441
594
  }
442
595
  }
443
596
 
444
- /// @dev registers the component represented by the provided address
597
+ /// @dev Registers the component represented by the provided address.
445
598
  function _register(
446
599
  address componentAddress, // address of component to register
447
- ObjectType requiredType, // required type for component for registration
448
- RoleId requiredRole, // role required for comonent owner for registration
449
- RoleId[] memory roles, // roles with write access to component
450
- bytes4[][] memory selectors // authorized functions per role with write access
600
+ ObjectType requiredType // required type for component for registration
451
601
  )
452
602
  internal
453
603
  virtual
454
604
  returns (
455
605
  InstanceReader instanceReader,
606
+ InstanceAdmin instanceAdmin,
456
607
  InstanceStore instanceStore,
608
+ NftId parentNftId,
457
609
  NftId componentNftId
458
610
  )
459
611
  {
612
+ NftId instanceNftId;
613
+ IInstance instance;
614
+ IInstanceLinkedComponent component;
615
+ address initialOwner;
616
+
460
617
  (
461
- IInstance instance,
462
- IInstanceLinkedComponent component,
463
- address owner
618
+ instanceNftId,
619
+ instance,
620
+ parentNftId,
621
+ component,
622
+ initialOwner
464
623
  ) = _getAndVerifyRegisterableComponent(
624
+ getRegistry(),
465
625
  componentAddress,
466
- requiredType,
467
- requiredRole);
626
+ requiredType);
468
627
 
469
- // register component with registry
470
- componentNftId = _registryService.registerComponent(
471
- component,
472
- requiredType,
473
- owner).nftId;
474
-
475
- component.linkToRegisteredNftId();
476
-
477
- // save amended component info with instance
628
+ // get instance supporting contracts (as function return values)
478
629
  instanceReader = instance.getInstanceReader();
630
+ instanceAdmin = instance.getInstanceAdmin();
479
631
  instanceStore = instance.getInstanceStore();
480
632
 
481
- IComponents.ComponentInfo memory componentInfo = component.getComponentInfo();
482
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
483
- instanceStore.createComponent(component.getNftId(), componentInfo);
484
-
485
- // configure instance authorization
486
- _instanceService.createComponentTarget(
487
- instance.getNftId(),
488
- componentAddress,
489
- component.getName(),
490
- selectors,
491
- roles);
492
- }
633
+ // register with registry
634
+ if (requiredType == PRODUCT()) {
635
+ componentNftId = _registryService.registerProduct(
636
+ component, initialOwner).nftId;
637
+ } else {
638
+ componentNftId = _registryService.registerProductLinkedComponent(
639
+ component, requiredType, initialOwner).nftId;
640
+ }
493
641
 
642
+ // deploy and wire token handler
643
+ IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
644
+ IERC20Metadata token = componentInfo.token;
645
+ componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
646
+ address(getRegistry()),
647
+ address(component), // initially, component is its own wallet
648
+ address(token),
649
+ address(instanceAdmin.authority()));
650
+
651
+ // set token handler allowance to max
652
+ // componentInfo.tokenHandler.approve(token, AmountLib.max());
494
653
 
495
- /// @dev link the component info corresponding to the componentNftId to the provided productNftId
496
- function _linkToProduct(
497
- InstanceReader instanceReader,
498
- InstanceStore instanceStore,
499
- NftId componentNftId,
500
- NftId productNftId
501
- )
502
- internal
503
- {
504
- // only link components that are registered
505
- if(componentNftId.eqz()) {
506
- return;
507
- }
508
-
509
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
510
- componentInfo.productNftId = productNftId;
511
- instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
654
+ // register component with instance
655
+ instanceStore.createComponent(
656
+ componentNftId,
657
+ componentInfo);
658
+
659
+ // link component contract to nft id
660
+ component.linkToRegisteredNftId();
661
+
662
+ emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
512
663
  }
513
664
 
514
665
 
@@ -527,12 +678,6 @@ contract ComponentService is
527
678
  }
528
679
 
529
680
 
530
- function _createSelectors(bytes4 selector) internal view returns (bytes4[] memory selectors) {
531
- selectors = new bytes4[](1);
532
- selectors[0] = selector;
533
- }
534
-
535
-
536
681
  function _getLinkedProductInfo(
537
682
  InstanceReader instanceReader,
538
683
  NftId componentNftId
@@ -544,53 +689,118 @@ contract ComponentService is
544
689
  IComponents.ProductInfo memory info
545
690
  )
546
691
  {
547
- productNftId = instanceReader.getComponentInfo(componentNftId).productNftId;
692
+ productNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
548
693
  info = instanceReader.getProductInfo(productNftId);
549
694
  }
550
695
 
551
696
 
552
- /// @dev based on the provided component address required type and role returns the component and related instance contract
553
- /// the function reverts iff:
554
- /// - the component has already been registered
697
+ /// @dev Based on the provided component address required type the component
698
+ /// and related instance contract this function reverts iff:
699
+ /// - the sender is not registered
555
700
  /// - the component contract does not support IInstanceLinkedComponent
556
701
  /// - the component type does not match with the required type
557
- /// - the initial component owner misses the required role (with the instance access manager)
702
+ /// - the component has already been registered
558
703
  function _getAndVerifyRegisterableComponent(
704
+ IRegistry registry,
559
705
  address componentAddress,
560
- ObjectType requiredType,
561
- RoleId requiredRole
706
+ ObjectType requiredType
562
707
  )
563
708
  internal
564
- // view
709
+ view
565
710
  returns (
711
+ NftId instanceNftId,
566
712
  IInstance instance,
713
+ NftId parentNftId,
567
714
  IInstanceLinkedComponent component,
568
- address owner
715
+ address initialOwner
569
716
  )
570
717
  {
571
- // check component has not already been registered
572
- if (getRegistry().getNftId(componentAddress).gtz()) {
573
- revert ErrorComponentServiceAlreadyRegistered(componentAddress);
718
+ // check sender (instance or product) is registered
719
+ IRegistry.ObjectInfo memory senderInfo = registry.getObjectInfo(msg.sender);
720
+ if (senderInfo.nftId.eqz()) {
721
+ revert ErrorComponentServiceSenderNotRegistered(msg.sender);
574
722
  }
575
723
 
576
- // check this is a component
577
- component = IInstanceLinkedComponent(componentAddress);
578
- if(!component.supportsInterface(type(IInstanceLinkedComponent).interfaceId)) {
579
- revert ErrorComponentServiceNotComponent(componentAddress);
580
- }
724
+ // the sender is the parent of the component to be registered
725
+ // an instance caller wanting to register a product - or -
726
+ // a product caller wantint go register a distribution, oracle or pool
727
+ parentNftId = senderInfo.nftId;
581
728
 
582
729
  // check component is of required type
730
+ component = IInstanceLinkedComponent(componentAddress);
583
731
  IRegistry.ObjectInfo memory info = component.getInitialInfo();
584
732
  if(info.objectType != requiredType) {
585
733
  revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
586
734
  }
587
735
 
588
- // check instance has assigned required role to inital owner
589
- instance = _getInstance(info.parentNftId);
590
- owner = info.initialOwner;
736
+ // check component has not already been registered
737
+ if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
738
+ revert ErrorComponentServiceAlreadyRegistered(componentAddress);
739
+ }
740
+
741
+ // check release matches
742
+ address parentAddress = registry.getObjectAddress(parentNftId);
743
+ if (component.getRelease() != IRegisterable(parentAddress).getRelease()) {
744
+ revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
745
+ }
746
+
747
+ // check component belongs to same product cluster
748
+ // parent of product must be instance, parent of other componet types must be product
749
+ if (info.parentNftId != senderInfo.nftId) {
750
+ revert ErrorComponentServiceSenderNotComponentParent(senderInfo.nftId, info.parentNftId);
751
+ }
752
+
753
+ // verify parent is registered instance
754
+ if (requiredType == PRODUCT()) {
755
+ if (senderInfo.objectType != INSTANCE()) {
756
+ revert ErrorComponentServiceParentNotInstance(senderInfo.nftId, senderInfo.objectType);
757
+ }
758
+
759
+ instanceNftId = senderInfo.nftId;
760
+ // verify parent is registered product
761
+ } else {
762
+ if (senderInfo.objectType != PRODUCT()) {
763
+ revert ErrorComponentServiceParentNotProduct(senderInfo.nftId, senderInfo.objectType);
764
+ }
765
+
766
+ instanceNftId = senderInfo.parentNftId;
767
+ }
591
768
 
592
- if(!instance.getInstanceAccessManager().hasRole(requiredRole, owner)) {
593
- revert ErrorComponentServiceExpectedRoleMissing(info.parentNftId, requiredRole, owner);
769
+ // get initial owner and instance
770
+ initialOwner = info.initialOwner;
771
+ instance = IInstance(registry.getObjectAddress(instanceNftId));
772
+ }
773
+
774
+ function _getAndVerifyActiveComponent(ObjectType expectedType)
775
+ internal
776
+ view
777
+ returns (
778
+ NftId componentNftId,
779
+ IInstance instance
780
+ )
781
+ {
782
+ IRegistry.ObjectInfo memory info;
783
+ address instanceAddress;
784
+
785
+ if (expectedType != COMPONENT()) {
786
+ (info, instanceAddress) = ContractLib.getAndVerifyComponent(
787
+ getRegistry(),
788
+ msg.sender, // caller
789
+ expectedType,
790
+ true); // only active
791
+ } else {
792
+ (info, instanceAddress) = ContractLib.getAndVerifyAnyComponent(
793
+ getRegistry(),
794
+ msg.sender,
795
+ true); // only active
594
796
  }
797
+
798
+ // get component nft id and instance
799
+ componentNftId = info.nftId;
800
+ instance = IInstance(instanceAddress);
801
+ }
802
+
803
+ function _getDomain() internal pure virtual override returns(ObjectType) {
804
+ return COMPONENT();
595
805
  }
596
806
  }