@etherisc/gif-next 0.0.2-b0a5f9c-428 → 0.0.2-b109dbd-819

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