@etherisc/gif-next 0.0.2-f12cf4d-104 → 0.0.2-f13d67f-541

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