@etherisc/gif-next 0.0.2-ffa91a6-022 → 3.0.0-06d5e8b-738

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 (504) hide show
  1. package/README.md +124 -332
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +106 -38
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +111 -45
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +58 -6
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +370 -141
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1582 -202
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +2 -2
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +266 -64
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +263 -87
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +102 -19
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +256 -16
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +426 -27
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +63 -38
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +269 -69
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -12
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +376 -147
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +160 -78
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +20 -11
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +232 -19
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +108 -79
  42. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +268 -68
  44. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +136 -95
  46. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +268 -68
  48. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  49. package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.dbg.json +4 -0
  50. package/artifacts/contracts/examples/flight/FlightLib.sol/FlightLib.json +728 -0
  51. package/artifacts/contracts/examples/flight/FlightMessageVerifier.sol/FlightMessageVerifier.dbg.json +4 -0
  52. package/artifacts/contracts/examples/flight/FlightMessageVerifier.sol/FlightMessageVerifier.json +229 -0
  53. package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.dbg.json +4 -0
  54. package/artifacts/contracts/examples/flight/FlightOracle.sol/FlightOracle.json +1234 -0
  55. package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.dbg.json +4 -0
  56. package/artifacts/contracts/examples/flight/FlightOracleAuthorization.sol/FlightOracleAuthorization.json +896 -0
  57. package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.dbg.json +4 -0
  58. package/artifacts/contracts/examples/flight/FlightPool.sol/FlightPool.json +1466 -0
  59. package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.dbg.json +4 -0
  60. package/artifacts/contracts/examples/flight/FlightPoolAuthorization.sol/FlightPoolAuthorization.json +844 -0
  61. package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.dbg.json +4 -0
  62. package/artifacts/contracts/examples/flight/FlightProduct.sol/FlightProduct.json +2497 -0
  63. package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.dbg.json +4 -0
  64. package/artifacts/contracts/examples/flight/FlightProductAuthorization.sol/FlightProductAuthorization.json +891 -0
  65. package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.dbg.json +4 -0
  66. package/artifacts/contracts/examples/flight/FlightUSD.sol/FlightUSD.json +586 -0
  67. package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.dbg.json +4 -0
  68. package/artifacts/contracts/examples/flight/originalV1.sol/FlightDelayChainlink.json +901 -0
  69. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  70. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +86 -45
  71. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
  72. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +268 -68
  73. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  74. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +35 -26
  75. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  76. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +130 -105
  77. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
  78. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +268 -68
  79. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  80. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +333 -147
  81. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
  82. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +268 -68
  83. package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
  84. package/artifacts/contracts/{shared/IKeyValueStore.sol/IKeyValueStore.json → instance/BaseStore.sol/BaseStore.json} +51 -229
  85. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  86. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  87. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +4 -0
  88. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.json +304 -0
  89. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  90. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +374 -35
  91. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +305 -5
  93. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  94. package/artifacts/contracts/instance/Instance.sol/Instance.json +425 -97
  95. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  96. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +753 -401
  97. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  98. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +236 -80
  99. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  100. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +747 -553
  101. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +331 -31
  103. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  104. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +100 -42
  105. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  106. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1323 -2012
  107. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +4 -0
  108. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +3427 -0
  109. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
  110. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +101 -88
  111. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  112. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
  113. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  114. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  115. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  116. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  117. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  118. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  119. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  120. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +1 -1
  121. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +20 -20
  122. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  123. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  124. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  125. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  126. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  127. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  128. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  129. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +25 -16
  130. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  131. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +282 -65
  132. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  133. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  134. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +19 -10
  135. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  136. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +29 -0
  137. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  138. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +19 -10
  139. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  140. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +83 -38
  141. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  142. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +116 -50
  143. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  144. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +59 -58
  145. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  146. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +268 -68
  147. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  148. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +300 -123
  149. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +144 -58
  151. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  152. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +186 -33
  153. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  154. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +29 -20
  155. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  156. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +238 -19
  157. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  158. package/artifacts/contracts/pool/Pool.sol/Pool.json +29 -20
  159. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
  160. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +100 -34
  161. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  162. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +338 -79
  163. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  164. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +141 -63
  165. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  166. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +216 -59
  167. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  168. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +113 -43
  169. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  170. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +46 -37
  171. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  172. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +268 -68
  173. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  174. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +142 -102
  175. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  176. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +128 -70
  177. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  178. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +166 -1
  179. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  180. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +50 -10
  181. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  182. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +55 -0
  183. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  184. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +29 -0
  185. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  186. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +40 -31
  187. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  188. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +203 -18
  189. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  190. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +157 -86
  191. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +1 -1
  192. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +511 -21
  193. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  194. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +138 -72
  195. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  196. package/artifacts/contracts/product/PricingService.sol/PricingService.json +93 -112
  197. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  198. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +115 -65
  199. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  200. package/artifacts/contracts/product/Product.sol/Product.json +40 -31
  201. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  202. package/artifacts/contracts/product/RiskService.sol/RiskService.json +231 -46
  203. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  204. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +101 -43
  205. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  206. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  207. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +33 -22
  208. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  209. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +29 -0
  210. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
  211. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  212. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  213. package/artifacts/contracts/registry/Registry.sol/Registry.json +71 -60
  214. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  215. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +539 -314
  216. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +1 -1
  217. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +335 -76
  218. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  219. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +41 -12
  220. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  221. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +96 -38
  222. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
  223. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +551 -246
  224. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  225. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  226. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  227. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +169 -111
  228. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  229. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +459 -26
  230. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  231. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +119 -59
  232. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  233. package/artifacts/contracts/shared/Component.sol/Component.json +19 -10
  234. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  235. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +196 -201
  236. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  237. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +130 -64
  238. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  239. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +76 -41
  240. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
  241. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
  242. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
  243. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +2 -2
  244. package/artifacts/contracts/shared/IAuthorizedComponent.sol/IAuthorizedComponent.dbg.json +4 -0
  245. package/artifacts/contracts/shared/{ComponentVerifyingService.sol/ComponentVerifyingService.json → IAuthorizedComponent.sol/IAuthorizedComponent.json} +238 -90
  246. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  247. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +19 -10
  248. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  249. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +111 -132
  250. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  251. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -10
  252. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  253. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  254. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +19 -0
  255. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  256. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  257. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +19 -0
  258. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  259. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  260. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  261. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  262. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  263. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -10
  264. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  265. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  266. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  267. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  268. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +21 -2
  269. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  270. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  271. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  272. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -0
  273. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  274. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  275. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  276. package/artifacts/contracts/shared/Service.sol/Service.json +29 -0
  277. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  278. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  279. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
  280. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +2 -2
  281. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  282. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
  283. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  284. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1390 -134
  285. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  286. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +97 -117
  287. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
  288. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
  289. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  290. package/artifacts/contracts/staking/Staking.sol/Staking.json +1479 -192
  291. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +1 -1
  292. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +77 -76
  293. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  294. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +139 -64
  295. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  296. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +296 -152
  297. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  298. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +131 -167
  299. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  300. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +96 -46
  301. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  302. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1615 -815
  303. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
  304. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
  305. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  306. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +153 -91
  307. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  308. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/Amount.sol/AmountLib.json +10 -10
  310. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  311. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +64 -19
  312. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  313. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
  314. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  316. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  318. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/Fee.sol/FeeLib.json +93 -37
  320. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  321. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  322. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
  323. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +2 -2
  324. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  326. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  327. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  328. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +22 -25
  330. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  332. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  333. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +23 -4
  334. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  335. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  336. package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.dbg.json +4 -0
  337. package/artifacts/contracts/type/RequestIdSet.sol/LibRequestIdSet.json +33 -0
  338. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  339. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  340. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  341. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +39 -218
  342. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  343. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +64 -2
  344. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  345. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  346. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  347. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  348. package/artifacts/contracts/type/String.sol/StrLib.json +69 -2
  349. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  350. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +37 -5
  351. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  352. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +60 -36
  353. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  354. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  355. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  356. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +10 -0
  357. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  358. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +81 -27
  359. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  360. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
  361. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  362. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +10 -0
  363. package/contracts/accounting/AccountingService.sol +15 -3
  364. package/contracts/accounting/IAccountingService.sol +4 -2
  365. package/contracts/authorization/AccessAdmin.sol +303 -326
  366. package/contracts/authorization/AccessAdminLib.sol +535 -23
  367. package/contracts/authorization/AccessManagerCloneable.sol +0 -18
  368. package/contracts/authorization/Authorization.sol +64 -239
  369. package/contracts/authorization/IAccess.sol +29 -12
  370. package/contracts/authorization/IAccessAdmin.sol +25 -53
  371. package/contracts/authorization/IAuthorization.sol +3 -57
  372. package/contracts/authorization/IServiceAuthorization.sol +55 -17
  373. package/contracts/authorization/ServiceAuthorization.sol +228 -34
  374. package/contracts/distribution/BasicDistribution.sol +3 -4
  375. package/contracts/distribution/BasicDistributionAuthorization.sol +11 -4
  376. package/contracts/distribution/Distribution.sol +9 -8
  377. package/contracts/distribution/DistributionService.sol +125 -62
  378. package/contracts/distribution/IDistributionComponent.sol +3 -1
  379. package/contracts/distribution/IDistributionService.sol +20 -8
  380. package/contracts/examples/fire/FireProduct.sol +6 -6
  381. package/contracts/examples/flight/FlightLib.sol +300 -0
  382. package/contracts/examples/flight/FlightMessageVerifier.sol +128 -0
  383. package/contracts/examples/flight/FlightOracle.sol +171 -0
  384. package/contracts/examples/flight/FlightOracleAuthorization.sol +53 -0
  385. package/contracts/examples/flight/FlightPool.sol +89 -0
  386. package/contracts/examples/flight/FlightPoolAuthorization.sol +37 -0
  387. package/contracts/examples/flight/FlightProduct.sol +685 -0
  388. package/contracts/examples/flight/FlightProductAuthorization.sol +69 -0
  389. package/contracts/examples/flight/FlightUSD.sol +28 -0
  390. package/contracts/examples/flight/originalV1.sol +396 -0
  391. package/contracts/examples/unpermissioned/SimpleProduct.sol +83 -19
  392. package/contracts/instance/BaseStore.sol +93 -0
  393. package/contracts/instance/IBaseStore.sol +37 -0
  394. package/contracts/instance/IInstance.sol +57 -6
  395. package/contracts/instance/IInstanceService.sol +42 -7
  396. package/contracts/instance/Instance.sol +111 -56
  397. package/contracts/instance/InstanceAdmin.sol +150 -294
  398. package/contracts/instance/InstanceAuthorizationV3.sol +106 -66
  399. package/contracts/instance/InstanceReader.sol +376 -392
  400. package/contracts/instance/InstanceService.sol +186 -134
  401. package/contracts/instance/InstanceStore.sol +153 -128
  402. package/contracts/instance/ProductStore.sol +290 -0
  403. package/contracts/instance/RiskSet.sol +10 -2
  404. package/contracts/instance/TargetNames.sol +10 -0
  405. package/contracts/instance/base/BalanceStore.sol +4 -6
  406. package/contracts/instance/base/ObjectLifecycle.sol +2 -6
  407. package/contracts/instance/module/IBundle.sol +6 -5
  408. package/contracts/instance/module/IComponents.sol +15 -5
  409. package/contracts/instance/module/IDistribution.sol +17 -7
  410. package/contracts/instance/module/IPolicy.sol +28 -8
  411. package/contracts/instance/module/IRisk.sol +2 -0
  412. package/contracts/oracle/BasicOracle.sol +2 -3
  413. package/contracts/oracle/BasicOracleAuthorization.sol +18 -2
  414. package/contracts/oracle/IOracle.sol +9 -4
  415. package/contracts/oracle/IOracleService.sol +12 -12
  416. package/contracts/oracle/Oracle.sol +4 -6
  417. package/contracts/oracle/OracleService.sol +8 -8
  418. package/contracts/pool/BasicPool.sol +4 -16
  419. package/contracts/pool/BasicPoolAuthorization.sol +10 -5
  420. package/contracts/pool/BundleService.sol +34 -43
  421. package/contracts/pool/IBundleService.sol +14 -13
  422. package/contracts/pool/IPoolService.sol +7 -2
  423. package/contracts/pool/Pool.sol +6 -18
  424. package/contracts/pool/PoolLib.sol +127 -2
  425. package/contracts/pool/PoolService.sol +40 -181
  426. package/contracts/product/ApplicationService.sol +64 -11
  427. package/contracts/product/BasicProduct.sol +2 -3
  428. package/contracts/product/BasicProductAuthorization.sol +13 -5
  429. package/contracts/product/ClaimService.sol +99 -105
  430. package/contracts/product/IApplicationService.sol +21 -2
  431. package/contracts/product/IClaimService.sol +5 -4
  432. package/contracts/product/IPolicyService.sol +9 -2
  433. package/contracts/product/IRiskService.sol +18 -3
  434. package/contracts/product/PolicyService.sol +40 -59
  435. package/contracts/product/PolicyServiceLib.sol +79 -5
  436. package/contracts/product/PricingService.sol +28 -31
  437. package/contracts/product/Product.sol +40 -16
  438. package/contracts/product/RiskService.sol +50 -15
  439. package/contracts/registry/IRegistry.sol +15 -9
  440. package/contracts/registry/IRelease.sol +6 -3
  441. package/contracts/registry/Registry.sol +15 -9
  442. package/contracts/registry/RegistryAdmin.sol +39 -118
  443. package/contracts/registry/RegistryAuthorization.sol +139 -69
  444. package/contracts/registry/RegistryService.sol +1 -1
  445. package/contracts/registry/ReleaseAdmin.sol +59 -106
  446. package/contracts/registry/ReleaseRegistry.sol +20 -12
  447. package/contracts/registry/ServiceAuthorizationV3.sol +43 -32
  448. package/contracts/registry/TokenRegistry.sol +56 -52
  449. package/contracts/shared/Component.sol +8 -8
  450. package/contracts/shared/ComponentService.sol +245 -262
  451. package/contracts/shared/ContractLib.sol +106 -75
  452. package/contracts/shared/EcdsaChecker.sol +5 -0
  453. package/contracts/shared/IAuthorizedComponent.sol +15 -0
  454. package/contracts/shared/IComponent.sol +1 -1
  455. package/contracts/shared/IComponentService.sol +14 -15
  456. package/contracts/shared/IInstanceLinkedComponent.sol +2 -5
  457. package/contracts/shared/INftOwnable.sol +2 -0
  458. package/contracts/shared/IRegisterable.sol +0 -1
  459. package/contracts/shared/InstanceLinkedComponent.sol +64 -26
  460. package/contracts/shared/NftOwnable.sol +3 -1
  461. package/contracts/shared/PolicyHolder.sol +3 -2
  462. package/contracts/shared/Service.sol +6 -4
  463. package/contracts/staking/IStaking.sol +261 -70
  464. package/contracts/staking/IStakingService.sol +39 -84
  465. package/contracts/staking/ITargetLimitHandler.sol +17 -0
  466. package/contracts/staking/Staking.sol +468 -217
  467. package/contracts/staking/StakingLib.sol +38 -124
  468. package/contracts/staking/StakingManager.sol +4 -3
  469. package/contracts/staking/StakingReader.sol +62 -71
  470. package/contracts/staking/StakingService.sol +42 -185
  471. package/contracts/staking/StakingServiceManager.sol +1 -0
  472. package/contracts/staking/StakingStore.sol +1093 -331
  473. package/contracts/staking/TargetHandler.sol +132 -0
  474. package/contracts/staking/TargetManagerLib.sol +69 -46
  475. package/contracts/type/Amount.sol +4 -0
  476. package/contracts/type/Blocknumber.sol +17 -22
  477. package/contracts/type/ChainId.sol +101 -0
  478. package/contracts/type/Fee.sol +8 -8
  479. package/contracts/type/NftId.sol +3 -3
  480. package/contracts/type/ObjectType.sol +17 -33
  481. package/contracts/type/Referral.sol +6 -0
  482. package/contracts/type/RequestIdSet.sol +62 -0
  483. package/contracts/type/RoleId.sol +57 -59
  484. package/contracts/type/Seconds.sol +23 -0
  485. package/contracts/type/String.sol +42 -0
  486. package/contracts/type/Timestamp.sol +14 -3
  487. package/contracts/type/UFixed.sol +28 -10
  488. package/contracts/upgradeability/IVersionable.sol +3 -0
  489. package/contracts/upgradeability/ProxyManager.sol +26 -12
  490. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
  491. package/contracts/upgradeability/Versionable.sol +6 -3
  492. package/package.json +2 -1
  493. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +0 -4
  494. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +0 -24
  495. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  496. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  497. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  498. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +0 -538
  499. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
  500. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -205
  501. package/contracts/shared/ComponentVerifyingService.sol +0 -128
  502. package/contracts/shared/IKeyValueStore.sol +0 -54
  503. package/contracts/shared/KeyValueStore.sol +0 -131
  504. package/contracts/staking/StakingLifecycle.sol +0 -23
@@ -4,7 +4,6 @@ pragma solidity ^0.8.20;
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
6
  import {IAccountingService} from "../accounting/IAccountingService.sol";
7
- import {IComponent} from "../shared/IComponent.sol";
8
7
  import {IComponents} from "../instance/module/IComponents.sol";
9
8
  import {IComponentService} from "./IComponentService.sol";
10
9
  import {IInstance} from "../instance/IInstance.sol";
@@ -12,24 +11,25 @@ import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
12
11
  import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
13
12
  import {InstanceReader} from "../instance/InstanceReader.sol";
14
13
  import {InstanceStore} from "../instance/InstanceStore.sol";
15
- import {IInstanceService} from "../instance/IInstanceService.sol";
16
14
  import {IPoolComponent} from "../pool/IPoolComponent.sol";
17
15
  import {IProductComponent} from "../product/IProductComponent.sol";
18
- import {IRegisterable} from "../shared/IRegisterable.sol";
19
16
  import {IRegistry} from "../registry/IRegistry.sol";
20
17
  import {IRegistryService} from "../registry/IRegistryService.sol";
18
+ import {IStaking} from "../staking/IStaking.sol";
19
+ import {IStakingService} from "../staking/IStakingService.sol";
21
20
 
22
21
  import {AccessManagerCloneable} from "../authorization/AccessManagerCloneable.sol";
23
22
  import {Amount, AmountLib} from "../type/Amount.sol";
23
+ import {ChainIdLib} from "../type/ChainId.sol";
24
24
  import {ContractLib} from "../shared/ContractLib.sol";
25
25
  import {Fee, FeeLib} from "../type/Fee.sol";
26
26
  import {KEEP_STATE} from "../type/StateId.sol";
27
27
  import {NftId, NftIdLib} from "../type/NftId.sol";
28
- import {ObjectType, ACCOUNTING, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
28
+ import {ObjectType, ACCOUNTING, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
29
+ import {ProductStore} from "../instance/ProductStore.sol";
29
30
  import {Service} from "../shared/Service.sol";
30
31
  import {TokenHandler} from "../shared/TokenHandler.sol";
31
32
  import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
32
- import {VersionPart} from "../type/Version.sol";
33
33
 
34
34
 
35
35
  contract ComponentService is
@@ -41,32 +41,7 @@ contract ComponentService is
41
41
 
42
42
  IAccountingService private _accountingService;
43
43
  IRegistryService private _registryService;
44
- IInstanceService private _instanceService;
45
-
46
- modifier onlyComponent(address component) {
47
- _checkSupportsInterface(component);
48
- _;
49
- }
50
-
51
- modifier onlyInstance() {
52
- NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
53
- if (instanceNftId.eqz()) {
54
- revert ErrorComponentServiceNotRegistered(msg.sender);
55
- }
56
-
57
- ObjectType objectType = getRegistry().getObjectInfo(instanceNftId).objectType;
58
- if (objectType != INSTANCE()) {
59
- revert ErrorComponentServiceNotInstance(msg.sender, objectType);
60
- }
61
-
62
- VersionPart instanceVersion = IInstance(msg.sender).getRelease();
63
- if (instanceVersion != getVersion().toMajorPart()) {
64
- revert ErrorComponentServiceInstanceVersionMismatch(msg.sender, instanceVersion);
65
- }
66
-
67
- _;
68
- }
69
-
44
+ IStaking private _staking;
70
45
 
71
46
  function _initialize(
72
47
  address owner,
@@ -85,63 +60,74 @@ contract ComponentService is
85
60
 
86
61
  _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
87
62
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
88
- _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
63
+ _staking = IStakingService(_getServiceAddress(STAKING())).getStaking();
89
64
 
90
65
  _registerInterface(type(IComponentService).interfaceId);
91
66
  }
92
67
 
93
68
  //-------- component ----------------------------------------------------//
94
69
 
95
- function registerComponent(address component)
70
+ /// @inheritdoc IComponentService
71
+ function registerComponent(address componentAddress)
96
72
  external
97
73
  virtual
98
- onlyComponent(component)
74
+ restricted()
99
75
  returns (NftId componentNftId)
100
76
  {
101
- // type specific registration
102
- IRegistry.ObjectInfo memory componentObjectInfo = IInstanceLinkedComponent(component).getInitialInfo();
103
- ObjectType componentType = componentObjectInfo.objectType;
104
- IComponent productComponent = IComponent(getRegistry().getObjectAddress(componentObjectInfo.parentNftId));
105
-
106
- if (componentType == POOL()) {
107
- return _registerPool(component, address(productComponent.getToken()));
108
- }
109
- if (componentType == DISTRIBUTION()) {
110
- return _registerDistribution(component, address(productComponent.getToken()));
77
+ // checks
78
+ // check sender is registered product
79
+ IRegistry registry = getRegistry();
80
+ if (!registry.isObjectType(msg.sender, PRODUCT())) {
81
+ revert ErrorComponentServiceCallerNotProduct(msg.sender);
111
82
  }
112
- if (componentType == ORACLE()) {
113
- return _registerOracle(component, address(productComponent.getToken()));
83
+
84
+ // check provided address is product contract
85
+ if (!_isInstanceLinkedComponent(componentAddress)) {
86
+ revert ErrorComponentServiceNotComponent(componentAddress);
114
87
  }
115
88
 
116
- // fail
117
- revert ErrorComponentServiceTypeNotSupported(component, componentType);
89
+ NftId productNftId = registry.getNftIdForAddress(msg.sender);
90
+ IInstance instance = IInstance(
91
+ registry.getObjectAddress(
92
+ registry.getParentNftId(productNftId)));
93
+
94
+ componentNftId = _verifyAndRegister(
95
+ instance,
96
+ componentAddress,
97
+ productNftId, // product is parent of component to be registered
98
+ address(0)); // token will be inhereited from product
118
99
  }
119
100
 
101
+
102
+ /// @inheritdoc IComponentService
120
103
  function approveTokenHandler(
121
104
  IERC20Metadata token,
122
105
  Amount amount
123
106
  )
124
107
  external
125
108
  virtual
109
+ restricted()
126
110
  {
127
111
  // checks
128
- (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
129
- TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
130
- componentNftId).tokenHandler;
112
+ (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
113
+ TokenHandler tokenHandler = instance.getInstanceReader().getTokenHandler(
114
+ componentNftId);
131
115
 
132
116
  // effects
133
117
  tokenHandler.approve(token, amount);
134
118
  }
135
119
 
136
120
 
121
+ /// @inheritdoc IComponentService
137
122
  function setWallet(address newWallet)
138
123
  external
139
124
  virtual
125
+ restricted()
140
126
  {
141
127
  // checks
142
- (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
143
- TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
144
- componentNftId).tokenHandler;
128
+ (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
129
+ TokenHandler tokenHandler = instance.getInstanceReader().getTokenHandler(
130
+ componentNftId);
145
131
 
146
132
  // effects
147
133
  tokenHandler.setWallet(newWallet);
@@ -156,11 +142,13 @@ contract ComponentService is
156
142
  (, IInstance instance) = _getAndVerifyComponent(COMPONENT(), false);
157
143
 
158
144
  address component = msg.sender;
159
- instance.getInstanceAdmin().setComponentLocked(
145
+ instance.getInstanceAdmin().setContractLocked(
160
146
  component,
161
147
  locked);
148
+ emit LogComponentServiceComponentLocked(component, locked);
162
149
  }
163
150
 
151
+
164
152
  /// @inheritdoc IComponentService
165
153
  function withdrawFees(Amount amount)
166
154
  external
@@ -169,7 +157,7 @@ contract ComponentService is
169
157
  returns (Amount withdrawnAmount)
170
158
  {
171
159
  // checks
172
- (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
160
+ (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
173
161
  InstanceReader instanceReader = instance.getInstanceReader();
174
162
 
175
163
  // determine withdrawn amount
@@ -214,51 +202,70 @@ contract ComponentService is
214
202
 
215
203
  //-------- product ------------------------------------------------------//
216
204
 
205
+ /// @inheritdoc IComponentService
217
206
  function registerProduct(address productAddress, address token)
218
207
  external
219
208
  virtual
209
+ restricted()
220
210
  nonReentrant()
221
- onlyComponent(productAddress)
222
211
  returns (NftId productNftId)
223
212
  {
224
- // register/create component setup
225
- InstanceAdmin instanceAdmin;
226
- InstanceStore instanceStore;
227
- (, instanceAdmin, instanceStore,, productNftId) = _register(
228
- productAddress,
229
- PRODUCT(),
213
+ // checks
214
+ // check sender is registered instance
215
+ IRegistry registry = getRegistry();
216
+ if (!registry.isObjectType(msg.sender, INSTANCE())) {
217
+ revert ErrorComponentServiceCallerNotInstance(msg.sender);
218
+ }
219
+
220
+ // check provided address is product contract
221
+ if (!_isProduct(productAddress)) {
222
+ revert ErrorComponentServiceNotProduct(productAddress);
223
+ }
224
+
225
+ IInstance instance = IInstance(msg.sender);
226
+ NftId instanceNftId = registry.getNftIdForAddress(msg.sender);
227
+ productNftId = _verifyAndRegister(
228
+ instance,
229
+ productAddress,
230
+ instanceNftId, // instance is parent of product to be registered
230
231
  token);
231
232
 
232
- // get product
233
- IProductComponent product = IProductComponent(productAddress);
234
-
235
- IComponents.ProductInfo memory initialProductInfo = product.getInitialProductInfo();
236
- // force initialization of linked components with empty values to
237
- // ensure no components are linked upon initialization of the product
238
- initialProductInfo.poolNftId = NftIdLib.zero();
239
- initialProductInfo.distributionNftId = NftIdLib.zero();
240
- initialProductInfo.oracleNftId = new NftId[](initialProductInfo.expectedNumberOfOracles);
233
+ // add product specific token for product to staking
234
+ _staking.addTargetToken(
235
+ instanceNftId,
236
+ token);
237
+ }
241
238
 
242
- // create info
243
- instanceStore.createProduct(
244
- productNftId,
245
- initialProductInfo);
246
239
 
247
- instanceStore.createFee(
248
- productNftId,
249
- product.getInitialFeeInfo());
240
+ function _isProduct(address target) internal view virtual returns (bool) {
241
+ if (!_isInstanceLinkedComponent(target)) {
242
+ return false;
243
+ }
244
+
245
+ return IInstanceLinkedComponent(target).getInitialInfo().objectType == PRODUCT();
250
246
  }
251
247
 
252
248
 
249
+ function _isInstanceLinkedComponent(address target) internal view virtual returns (bool) {
250
+ if (!ContractLib.isContract(target)) {
251
+ return false;
252
+ }
253
+
254
+ return ContractLib.supportsInterface(target, type(IInstanceLinkedComponent).interfaceId);
255
+ }
256
+
257
+
258
+ /// @inheritdoc IComponentService
253
259
  function setProductFees(
254
260
  Fee memory productFee, // product fee on net premium
255
261
  Fee memory processingFee // product fee on payout amounts
256
262
  )
257
263
  external
258
264
  virtual
265
+ restricted()
259
266
  nonReentrant()
260
267
  {
261
- (NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
268
+ (NftId productNftId, IInstance instance) = _getAndVerifyComponent(PRODUCT(), true);
262
269
  IComponents.FeeInfo memory feeInfo = instance.getInstanceReader().getFeeInfo(productNftId);
263
270
  bool feesChanged = false;
264
271
 
@@ -277,32 +284,53 @@ contract ComponentService is
277
284
  }
278
285
 
279
286
  if(feesChanged) {
280
- instance.getInstanceStore().updateFee(productNftId, feeInfo);
287
+ instance.getProductStore().updateFee(productNftId, feeInfo);
281
288
  emit LogComponentServiceProductFeesUpdated(productNftId);
282
289
  }
283
290
  }
284
291
 
292
+
293
+ function _createProduct(
294
+ ProductStore productStore,
295
+ NftId productNftId,
296
+ address productAddress
297
+ )
298
+ internal
299
+ virtual
300
+ {
301
+ // create product in instance instanceStore
302
+ IProductComponent product = IProductComponent(productAddress);
303
+ IComponents.ProductInfo memory initialProductInfo = product.getInitialProductInfo();
304
+ // force initialization of linked components with empty values to
305
+ // ensure no components are linked upon initialization of the product
306
+ initialProductInfo.poolNftId = NftIdLib.zero();
307
+ initialProductInfo.distributionNftId = NftIdLib.zero();
308
+ initialProductInfo.oracleNftId = new NftId[](initialProductInfo.expectedNumberOfOracles);
309
+
310
+ // create info
311
+ productStore.createProduct(
312
+ productNftId,
313
+ initialProductInfo);
314
+
315
+ productStore.createFee(
316
+ productNftId,
317
+ product.getInitialFeeInfo());
318
+ }
319
+
285
320
  //-------- distribution -------------------------------------------------//
286
321
 
287
322
  /// @dev registers the sending component as a distribution component
288
- function _registerDistribution(address distributioAddress, address token)
323
+ function _createDistribution(
324
+ ProductStore productStore,
325
+ NftId productNftId,
326
+ NftId distributionNftId,
327
+ IComponents.ProductInfo memory productInfo
328
+ )
289
329
  internal
290
330
  virtual
291
331
  nonReentrant()
292
- returns (NftId distributionNftId)
293
332
  {
294
- // register/create component info
295
- InstanceReader instanceReader;
296
- InstanceAdmin instanceAdmin;
297
- InstanceStore instanceStore;
298
- NftId productNftId;
299
- (instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
300
- distributioAddress,
301
- DISTRIBUTION(),
302
- token);
303
-
304
333
  // check product is still expecting a distribution registration
305
- IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
306
334
  if (!productInfo.hasDistribution) {
307
335
  revert ErrorProductServiceNoDistributionExpected(productNftId);
308
336
  }
@@ -312,7 +340,7 @@ contract ComponentService is
312
340
 
313
341
  // set distribution in product info
314
342
  productInfo.distributionNftId = distributionNftId;
315
- instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
343
+ productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
316
344
  }
317
345
 
318
346
 
@@ -322,8 +350,9 @@ contract ComponentService is
322
350
  )
323
351
  external
324
352
  virtual
353
+ restricted()
325
354
  {
326
- (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
355
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyComponent(DISTRIBUTION(), true);
327
356
  (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
328
357
  instance.getInstanceReader(), distributionNftId);
329
358
  bool feesChanged = false;
@@ -343,31 +372,23 @@ contract ComponentService is
343
372
  }
344
373
 
345
374
  if(feesChanged) {
346
- instance.getInstanceStore().updateFee(productNftId, feeInfo);
375
+ instance.getProductStore().updateFee(productNftId, feeInfo);
347
376
  emit LogComponentServiceDistributionFeesUpdated(distributionNftId);
348
377
  }
349
378
  }
350
379
 
351
380
  //-------- oracle -------------------------------------------------------//
352
381
 
353
- function _registerOracle(address oracleAddress, address token)
382
+ function _createOracle(
383
+ ProductStore productStore,
384
+ NftId productNftId,
385
+ NftId oracleNftId,
386
+ IComponents.ProductInfo memory productInfo
387
+ )
354
388
  internal
355
389
  virtual
356
- returns (NftId oracleNftId)
357
390
  {
358
- // register/create component setup
359
- InstanceReader instanceReader;
360
- InstanceAdmin instanceAdmin;
361
- InstanceStore instanceStore;
362
- NftId productNftId;
363
-
364
- (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) = _register(
365
- oracleAddress,
366
- ORACLE(),
367
- token);
368
-
369
391
  // check product is still expecting an oracle registration
370
- IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
371
392
  if (productInfo.expectedNumberOfOracles == 0) {
372
393
  revert ErrorProductServiceNoOraclesExpected(productNftId);
373
394
  }
@@ -378,42 +399,37 @@ contract ComponentService is
378
399
  // update/add oracle to product info
379
400
  productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
380
401
  productInfo.numberOfOracles++;
381
- instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
402
+ productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
382
403
  }
383
404
 
384
405
  //-------- pool ---------------------------------------------------------//
385
406
 
386
- function _registerPool(address poolAddress, address token)
407
+ function _createPool(
408
+ InstanceStore instanceStore,
409
+ ProductStore productStore,
410
+ NftId productNftId,
411
+ NftId poolNftId,
412
+ address componentAddress,
413
+ IComponents.ProductInfo memory productInfo
414
+ )
387
415
  internal
388
416
  virtual
389
- returns (NftId poolNftId)
390
417
  {
391
- // register/create component setup
392
- InstanceReader instanceReader;
393
- InstanceAdmin instanceAdmin;
394
- InstanceStore instanceStore;
395
- NftId productNftId;
396
-
397
- (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) = _register(
398
- poolAddress,
399
- POOL(),
400
- token);
401
-
402
418
  // check product is still expecting a pool registration
403
- IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
419
+ //IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
404
420
  if (productInfo.poolNftId.gtz()) {
405
421
  revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
406
422
  }
407
423
 
408
424
  // create info
409
- IPoolComponent pool = IPoolComponent(poolAddress);
425
+ IPoolComponent pool = IPoolComponent(componentAddress);
410
426
  instanceStore.createPool(
411
427
  poolNftId,
412
428
  pool.getInitialPoolInfo());
413
429
 
414
430
  // update pool in product info
415
431
  productInfo.poolNftId = poolNftId;
416
- instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
432
+ productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
417
433
  }
418
434
 
419
435
 
@@ -424,8 +440,9 @@ contract ComponentService is
424
440
  )
425
441
  external
426
442
  virtual
443
+ restricted()
427
444
  {
428
- (NftId poolNftId, IInstance instance) = _getAndVerifyActiveComponent(POOL());
445
+ (NftId poolNftId, IInstance instance) = _getAndVerifyComponent(POOL(), true);
429
446
 
430
447
  (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
431
448
  instance.getInstanceReader(), poolNftId);
@@ -453,91 +470,116 @@ contract ComponentService is
453
470
  }
454
471
 
455
472
  if(feesChanged) {
456
- instance.getInstanceStore().updateFee(productNftId, feeInfo);
473
+ instance.getProductStore().updateFee(productNftId, feeInfo);
457
474
  emit LogComponentServicePoolFeesUpdated(poolNftId);
458
475
  }
459
476
  }
460
477
 
478
+
461
479
  /// @dev Registers the component represented by the provided address.
462
- function _register(
463
- address componentAddress, // address of component to register
464
- ObjectType requiredType, // required type for component for registration
480
+ /// The caller must ensure componentAddress is IInstanceLinkedComponent.
481
+ function _verifyAndRegister(
482
+ IInstance instance,
483
+ address componentAddress,
484
+ NftId parentNftId,
465
485
  address token
466
486
  )
467
487
  internal
468
488
  virtual
469
- returns (
470
- InstanceReader instanceReader,
471
- InstanceAdmin instanceAdmin,
472
- InstanceStore instanceStore,
473
- NftId parentNftId,
474
- NftId componentNftId
475
- )
489
+ returns (NftId componentNftId)
476
490
  {
477
- NftId instanceNftId;
478
- IInstance instance;
479
- IInstanceLinkedComponent component;
480
- address initialOwner;
481
-
482
491
  (
483
- instanceNftId,
484
- instance,
485
- parentNftId,
486
- component,
487
- initialOwner
492
+ IInstanceLinkedComponent component,
493
+ IRegistry.ObjectInfo memory objectInfo // initial component info
488
494
  ) = _getAndVerifyRegisterableComponent(
489
- getRegistry(),
490
495
  componentAddress,
491
- requiredType);
496
+ parentNftId);
492
497
 
493
- {
494
- // check if provided token is whitelisted and active
495
- if (!ContractLib.isActiveToken(
496
- getRegistry().getTokenRegistryAddress(),
497
- token,
498
- block.chainid,
499
- AccessManagerCloneable(authority()).getRelease())
500
- ) {
501
- revert ErrorComponentServiceTokenInvalid(token);
502
- }
503
- }
504
-
505
- // get instance supporting contracts (as function return values)
506
- instanceReader = instance.getInstanceReader();
507
- instanceAdmin = instance.getInstanceAdmin();
508
- instanceStore = instance.getInstanceStore();
498
+ InstanceStore instanceStore = instance.getInstanceStore();
499
+ ObjectType componentType = objectInfo.objectType;
509
500
 
510
- // register with registry
511
- if (requiredType == PRODUCT()) {
501
+ if(componentType == PRODUCT()) {
502
+ // register product with registry
512
503
  componentNftId = _registryService.registerProduct(
513
- component, initialOwner).nftId;
504
+ component,
505
+ objectInfo.initialOwner).nftId;
506
+
507
+ // create product info in instance store
508
+ _createProduct(instance.getProductStore(), componentNftId, componentAddress);
514
509
  } else {
510
+ // register non product component with registry
515
511
  componentNftId = _registryService.registerProductLinkedComponent(
516
- component, requiredType, initialOwner).nftId;
512
+ component,
513
+ objectInfo.objectType,
514
+ objectInfo.initialOwner).nftId;
515
+
516
+ InstanceReader instanceReader = instance.getInstanceReader();
517
+
518
+ // create non product component info in instance store
519
+ NftId productNftId = parentNftId;
520
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
521
+ if(componentType == POOL()) {
522
+ _createPool(instanceStore, instance.getProductStore(), productNftId, componentNftId, componentAddress, productInfo);
523
+ } else if(componentType == DISTRIBUTION()) {
524
+ _createDistribution(instance.getProductStore(), productNftId, componentNftId, productInfo);
525
+ } else if(componentType == ORACLE()) {
526
+ _createOracle(instance.getProductStore(), productNftId, componentNftId, productInfo);
527
+ } else {
528
+ revert ErrorComponentServiceComponentTypeNotSupported(componentAddress, componentType);
529
+ }
530
+
531
+ // get product's token
532
+ token = address(instanceReader.getTokenHandler(productNftId).TOKEN());
517
533
  }
518
534
 
535
+ _checkToken(instance, token);
536
+
537
+ InstanceAdmin instanceAdmin = instance.getInstanceAdmin();
538
+
519
539
  // deploy and wire token handler
520
- {
521
- IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
522
- componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
523
- address(getRegistry()),
524
- componentAddress, // initially, component is its own wallet
525
- token,
526
- address(instanceAdmin.authority()));
527
-
528
- // register component with instance
529
- instanceStore.createComponent(
530
- componentNftId,
531
- componentInfo);
532
- }
540
+ IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
541
+ componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
542
+ address(getRegistry()),
543
+ address(component), // initially, component is its own wallet
544
+ token,
545
+ instanceAdmin.authority());
546
+
547
+ // register component with instance
548
+ instanceStore.createComponent(
549
+ componentNftId,
550
+ componentInfo);
533
551
 
534
552
  // link component contract to nft id
535
553
  component.linkToRegisteredNftId();
536
554
 
537
555
  // authorize
538
- instanceAdmin.initializeComponentAuthorization(componentAddress, requiredType);
556
+ instanceAdmin.initializeComponentAuthorization(componentAddress, componentType);
557
+
558
+ emit LogComponentServiceRegistered(
559
+ instance.getNftId(),
560
+ componentNftId,
561
+ componentType,
562
+ address(component),
563
+ token,
564
+ objectInfo.initialOwner);
565
+ }
566
+
539
567
 
540
- emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, componentAddress, token, initialOwner);
568
+ function _checkToken(IInstance instance, address token)
569
+ internal
570
+ view
571
+ {
572
+ if (! instance.isTokenRegistryDisabled()) {
573
+ // check if provided token is whitelisted and active
574
+ if (!ContractLib.isActiveToken(
575
+ getRegistry().getTokenRegistryAddress(),
576
+ ChainIdLib.current(),
577
+ token,
578
+ AccessManagerCloneable(authority()).getRelease())
579
+ ) {
580
+ revert ErrorComponentServiceTokenInvalid(token);
581
+ }
582
+ }
541
583
  }
542
584
 
543
585
 
@@ -574,98 +616,44 @@ contract ComponentService is
574
616
 
575
617
  /// @dev Based on the provided component address required type the component
576
618
  /// and related instance contract this function reverts iff:
577
- /// - the sender is not registered
578
- /// - the component contract does not support IInstanceLinkedComponent
579
- /// - the component type does not match with the required type
619
+ /// - the component parent does not match with the required parent
620
+ /// - the component release does not match with the service release
580
621
  /// - the component has already been registered
581
622
  function _getAndVerifyRegisterableComponent(
582
- IRegistry registry,
583
623
  address componentAddress,
584
- ObjectType requiredType
624
+ NftId requiredParent
585
625
  )
586
626
  internal
587
627
  view
588
628
  returns (
589
- NftId instanceNftId,
590
- IInstance instance,
591
- NftId parentNftId,
592
629
  IInstanceLinkedComponent component,
593
- address initialOwner
630
+ IRegistry.ObjectInfo memory info
594
631
  )
595
632
  {
596
- // check sender (instance or product) is registered
597
- IRegistry.ObjectInfo memory senderInfo = registry.getObjectInfo(msg.sender);
598
- if (senderInfo.nftId.eqz()) {
599
- revert ErrorComponentServiceSenderNotRegistered(msg.sender);
600
- }
601
-
602
- // the sender is the parent of the component to be registered
603
- // an instance caller wanting to register a product - or -
604
- // a product caller wantint go register a distribution, oracle or pool
605
- parentNftId = senderInfo.nftId;
606
-
607
- // check component is of required type
608
633
  component = IInstanceLinkedComponent(componentAddress);
609
- IRegistry.ObjectInfo memory info = component.getInitialInfo();
610
- if(info.objectType != requiredType) {
611
- revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
612
- }
634
+ info = component.getInitialInfo();
613
635
 
614
- // check component has not already been registered
615
- if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
616
- revert ErrorComponentServiceAlreadyRegistered(componentAddress);
636
+ // check component parent
637
+ if(info.parentNftId != requiredParent) {
638
+ revert ErrorComponentServiceComponentParentInvalid(componentAddress, requiredParent, info.parentNftId);
617
639
  }
618
640
 
619
- // component release matches servie release
620
- address parentAddress = registry.getObjectAddress(parentNftId);
621
- if (component.getRelease() != getRelease()) {
622
- revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), getRelease());
623
- // component release matches parent release
624
- } else if (component.getRelease() != IRegisterable(parentAddress).getRelease()){
625
- revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
641
+ // check component release (must match with service release)
642
+ if(component.getRelease() != getRelease()) {
643
+ revert ErrorComponentServiceComponentReleaseMismatch(componentAddress, getRelease(), component.getRelease());
626
644
  }
627
645
 
628
- // check component belongs to same product cluster
629
- // parent of product must be instance, parent of other componet types must be product
630
- if (info.parentNftId != senderInfo.nftId) {
631
- revert ErrorComponentServiceSenderNotComponentParent(senderInfo.nftId, info.parentNftId);
632
- }
633
-
634
- // verify parent is registered instance
635
- if (requiredType == PRODUCT()) {
636
- if (senderInfo.objectType != INSTANCE()) {
637
- revert ErrorComponentServiceParentNotInstance(senderInfo.nftId, senderInfo.objectType);
638
- }
639
-
640
- instanceNftId = senderInfo.nftId;
641
- // verify parent is registered product
642
- } else {
643
- if (senderInfo.objectType != PRODUCT()) {
644
- revert ErrorComponentServiceParentNotProduct(senderInfo.nftId, senderInfo.objectType);
645
- }
646
-
647
- instanceNftId = senderInfo.parentNftId;
646
+ // check component has not already been registered
647
+ if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
648
+ revert ErrorComponentServiceComponentAlreadyRegistered(componentAddress);
648
649
  }
649
-
650
- // get initial owner and instance
651
- initialOwner = info.initialOwner;
652
- instance = IInstance(registry.getObjectAddress(instanceNftId));
653
650
  }
654
651
 
652
+
655
653
  function _setLocked(InstanceAdmin instanceAdmin, address componentAddress, bool locked) internal {
656
654
  instanceAdmin.setTargetLocked(componentAddress, locked);
657
655
  }
658
656
 
659
- function _getAndVerifyActiveComponent(ObjectType expectedType)
660
- internal
661
- view
662
- returns (
663
- NftId componentNftId,
664
- IInstance instance
665
- )
666
- {
667
- return _getAndVerifyComponent(expectedType, true); // only active
668
- }
669
657
 
670
658
  function _getAndVerifyComponent(ObjectType expectedType, bool isActive)
671
659
  internal
@@ -696,13 +684,8 @@ contract ComponentService is
696
684
  instance = IInstance(instanceAddress);
697
685
  }
698
686
 
687
+
699
688
  function _getDomain() internal pure virtual override returns(ObjectType) {
700
689
  return COMPONENT();
701
690
  }
702
-
703
- function _checkSupportsInterface(address component) internal view {
704
- if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
705
- revert ErrorComponentServiceNotInstanceLinkedComponent(component);
706
- }
707
- }
708
691
  }