@etherisc/gif-next 0.0.2-f08528a-758 → 0.0.2-f0ccf08-591

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