@etherisc/gif-next 0.0.2-a4051e9-983 → 0.0.2-a4799c5-153

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