@etherisc/gif-next 0.0.2-ff1bf36-818 → 0.0.2-ff795d8-141

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 (521) hide show
  1. package/README.md +82 -8
  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/accounting/IAccountingService.sol/IAccountingService.json +791 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +658 -259
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1279 -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 +507 -206
  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 +177 -441
  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 +96 -325
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +473 -326
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +187 -125
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +90 -167
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +287 -101
  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 +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 +505 -65
  69. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  70. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +255 -57
  71. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  72. package/artifacts/contracts/instance/Instance.sol/Instance.json +510 -162
  73. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  74. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1010 -334
  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 +1471 -466
  79. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +272 -231
  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 +897 -638
  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 +129 -317
  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 +104 -116
  111. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  112. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
  113. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +105 -269
  115. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +169 -190
  117. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +140 -98
  119. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  120. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +145 -309
  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 +180 -369
  125. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +124 -134
  127. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  128. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +90 -117
  129. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  130. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +135 -158
  131. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  132. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +318 -306
  133. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  134. package/artifacts/contracts/pool/Pool.sol/Pool.json +133 -308
  135. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  136. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +538 -0
  137. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  138. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +538 -557
  139. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  140. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +177 -111
  141. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  142. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +206 -163
  143. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +124 -98
  145. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  146. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +267 -370
  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 +423 -242
  151. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  152. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +158 -124
  153. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  154. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +131 -9
  155. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  156. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +293 -17
  157. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +245 -64
  159. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  160. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +157 -83
  161. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  162. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +258 -209
  163. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  164. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +86 -6
  165. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  166. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +366 -288
  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 +152 -122
  171. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  172. package/artifacts/contracts/product/PricingService.sol/PricingService.json +242 -332
  173. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +126 -140
  175. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  176. package/artifacts/contracts/product/Product.sol/Product.json +259 -362
  177. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  178. package/artifacts/contracts/product/RiskService.sol/RiskService.json +169 -176
  179. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  180. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +129 -95
  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 +342 -42
  185. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  186. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +144 -41
  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 +548 -103
  193. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  194. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +763 -382
  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 +109 -292
  199. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  200. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +104 -90
  201. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  202. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2140 -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 +487 -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 +81 -227
  213. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  214. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +430 -623
  215. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  216. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +143 -131
  217. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  218. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +57 -111
  219. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  220. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +680 -0
  221. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  222. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  223. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  224. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  225. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  226. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  227. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  228. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +81 -75
  229. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  230. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +394 -300
  231. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  232. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +104 -116
  233. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  235. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  236. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  237. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  238. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  239. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  240. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  241. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  242. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +148 -0
  243. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  244. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  245. package/artifacts/contracts/shared/IService.sol/IService.json +55 -2
  246. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  247. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  248. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  249. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +104 -268
  250. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  251. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  252. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  253. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  254. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  255. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  256. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  257. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  258. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  259. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  260. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  261. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +122 -97
  262. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  263. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  264. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  265. package/artifacts/contracts/shared/Service.sol/Service.json +57 -111
  266. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  267. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +327 -73
  268. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  269. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  270. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  271. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
  272. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  273. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +197 -118
  274. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  275. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +155 -23
  276. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  277. package/artifacts/contracts/staking/Staking.sol/Staking.json +300 -337
  278. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  279. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +469 -0
  280. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  281. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  282. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  283. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +142 -103
  284. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  285. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +41 -73
  286. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  287. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +224 -171
  288. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  289. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +121 -95
  290. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  291. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +205 -150
  292. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  293. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +91 -50
  294. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  295. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Amount.sol/AmountLib.json +35 -11
  297. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  299. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  300. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  302. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/Fee.sol/FeeLib.json +94 -38
  304. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  305. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  306. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  307. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  308. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  310. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  311. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  312. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  314. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  316. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  318. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  320. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +125 -7
  322. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +42 -157
  324. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  326. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  328. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  330. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  332. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  333. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  334. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  335. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  336. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +73 -36
  337. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  338. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  339. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  340. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +101 -2
  341. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  342. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  343. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +81 -80
  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/contracts/accounting/AccountingService.sol +261 -0
  348. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  349. package/contracts/accounting/IAccountingService.sol +45 -0
  350. package/contracts/authorization/AccessAdmin.sol +464 -266
  351. package/contracts/authorization/AccessAdminLib.sol +387 -0
  352. package/contracts/authorization/AccessManagerCloneable.sol +146 -4
  353. package/contracts/authorization/Authorization.sol +159 -202
  354. package/contracts/authorization/IAccess.sol +25 -6
  355. package/contracts/authorization/IAccessAdmin.sol +80 -79
  356. package/contracts/authorization/IAuthorization.sol +9 -36
  357. package/contracts/authorization/IServiceAuthorization.sol +57 -17
  358. package/contracts/authorization/ServiceAuthorization.sol +254 -24
  359. package/contracts/distribution/BasicDistribution.sol +20 -17
  360. package/contracts/distribution/BasicDistributionAuthorization.sol +30 -10
  361. package/contracts/distribution/Distribution.sol +39 -89
  362. package/contracts/distribution/DistributionService.sol +235 -115
  363. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  364. package/contracts/distribution/IDistributionComponent.sol +4 -11
  365. package/contracts/distribution/IDistributionService.sol +40 -26
  366. package/contracts/examples/fire/DamageLevel.sol +59 -0
  367. package/contracts/examples/fire/FirePool.sol +86 -0
  368. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  369. package/contracts/examples/fire/FireProduct.sol +433 -0
  370. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  371. package/contracts/examples/fire/FireUSD.sol +26 -0
  372. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  373. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  374. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  375. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  376. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  377. package/contracts/examples/unpermissioned/SimpleProduct.sol +373 -0
  378. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  379. package/contracts/instance/BundleSet.sol +42 -38
  380. package/contracts/instance/IInstance.sol +96 -17
  381. package/contracts/instance/IInstanceService.sol +49 -31
  382. package/contracts/instance/Instance.sol +181 -69
  383. package/contracts/instance/InstanceAdmin.sol +279 -184
  384. package/contracts/instance/InstanceAuthorizationV3.sol +117 -58
  385. package/contracts/instance/InstanceReader.sol +365 -68
  386. package/contracts/instance/InstanceService.sol +271 -208
  387. package/contracts/instance/InstanceServiceManager.sol +6 -7
  388. package/contracts/instance/InstanceStore.sol +23 -2
  389. package/contracts/instance/RiskSet.sol +118 -0
  390. package/contracts/instance/base/ObjectCounter.sol +1 -2
  391. package/contracts/instance/base/ObjectLifecycle.sol +10 -2
  392. package/contracts/instance/base/ObjectSet.sol +31 -33
  393. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  394. package/contracts/instance/module/IBundle.sol +6 -5
  395. package/contracts/instance/module/IComponents.sol +29 -13
  396. package/contracts/instance/module/IDistribution.sol +21 -8
  397. package/contracts/instance/module/IPolicy.sol +49 -28
  398. package/contracts/instance/module/IRisk.sol +5 -0
  399. package/contracts/oracle/BasicOracle.sol +1 -4
  400. package/contracts/oracle/BasicOracleAuthorization.sol +15 -8
  401. package/contracts/oracle/IOracle.sol +9 -4
  402. package/contracts/oracle/IOracleService.sol +2 -1
  403. package/contracts/oracle/Oracle.sol +7 -19
  404. package/contracts/oracle/OracleService.sol +117 -85
  405. package/contracts/oracle/OracleServiceManager.sol +6 -6
  406. package/contracts/pool/BasicPool.sol +32 -25
  407. package/contracts/pool/BasicPoolAuthorization.sol +33 -9
  408. package/contracts/pool/BundleService.sol +93 -134
  409. package/contracts/pool/BundleServiceManager.sol +6 -6
  410. package/contracts/pool/IBundleService.sol +15 -34
  411. package/contracts/pool/IPoolComponent.sol +19 -15
  412. package/contracts/pool/IPoolService.sol +73 -71
  413. package/contracts/pool/Pool.sol +139 -124
  414. package/contracts/pool/PoolLib.sol +353 -0
  415. package/contracts/pool/PoolService.sol +332 -286
  416. package/contracts/pool/PoolServiceManager.sol +4 -4
  417. package/contracts/product/ApplicationService.sol +54 -26
  418. package/contracts/product/ApplicationServiceManager.sol +4 -4
  419. package/contracts/product/BasicProduct.sol +10 -13
  420. package/contracts/product/BasicProductAuthorization.sol +30 -12
  421. package/contracts/product/ClaimService.sol +372 -150
  422. package/contracts/product/ClaimServiceManager.sol +4 -4
  423. package/contracts/product/IApplicationService.sol +8 -2
  424. package/contracts/product/IClaimService.sol +43 -8
  425. package/contracts/product/IPolicyService.sol +39 -28
  426. package/contracts/product/IPricingService.sol +11 -10
  427. package/contracts/product/IProductComponent.sol +27 -5
  428. package/contracts/product/IRiskService.sol +7 -7
  429. package/contracts/product/PolicyService.sol +365 -309
  430. package/contracts/product/PolicyServiceLib.sol +139 -0
  431. package/contracts/product/PolicyServiceManager.sol +4 -4
  432. package/contracts/product/PricingService.sol +64 -59
  433. package/contracts/product/PricingServiceManager.sol +4 -4
  434. package/contracts/product/Product.sol +142 -85
  435. package/contracts/product/RiskService.sol +91 -34
  436. package/contracts/product/RiskServiceManager.sol +4 -4
  437. package/contracts/registry/ChainNft.sol +72 -40
  438. package/contracts/registry/IRegistry.sol +64 -28
  439. package/contracts/registry/IRegistryService.sol +5 -12
  440. package/contracts/registry/IRelease.sol +29 -0
  441. package/contracts/registry/ITransferInterceptor.sol +1 -2
  442. package/contracts/registry/Registry.sol +357 -203
  443. package/contracts/registry/RegistryAdmin.sol +110 -296
  444. package/contracts/registry/RegistryAuthorization.sol +277 -0
  445. package/contracts/registry/RegistryService.sol +37 -48
  446. package/contracts/registry/RegistryServiceManager.sol +3 -3
  447. package/contracts/registry/ReleaseAdmin.sol +195 -0
  448. package/contracts/registry/ReleaseLifecycle.sol +8 -3
  449. package/contracts/registry/ReleaseRegistry.sol +275 -240
  450. package/contracts/registry/ServiceAuthorizationV3.sol +200 -57
  451. package/contracts/registry/TokenRegistry.sol +12 -13
  452. package/contracts/shared/Component.sol +66 -124
  453. package/contracts/shared/ComponentService.sol +395 -375
  454. package/contracts/shared/ComponentServiceManager.sol +8 -5
  455. package/contracts/shared/ComponentVerifyingService.sol +28 -17
  456. package/contracts/shared/ContractLib.sol +357 -0
  457. package/contracts/shared/IComponent.sol +5 -17
  458. package/contracts/shared/IComponentService.sol +42 -40
  459. package/contracts/shared/IInstanceLinkedComponent.sol +3 -22
  460. package/contracts/shared/ILifecycle.sol +3 -1
  461. package/contracts/shared/INftOwnable.sol +2 -0
  462. package/contracts/shared/IPolicyHolder.sol +12 -22
  463. package/contracts/shared/IRegisterable.sol +23 -1
  464. package/contracts/shared/IService.sol +3 -5
  465. package/contracts/shared/InitializableERC165.sol +10 -2
  466. package/contracts/shared/InstanceLinkedComponent.sol +72 -50
  467. package/contracts/shared/KeyValueStore.sol +1 -1
  468. package/contracts/shared/Lifecycle.sol +15 -4
  469. package/contracts/shared/NftOwnable.sol +29 -9
  470. package/contracts/shared/PolicyHolder.sol +15 -52
  471. package/contracts/shared/Registerable.sol +52 -21
  472. package/contracts/shared/RegistryLinked.sol +9 -14
  473. package/contracts/shared/Service.sol +20 -35
  474. package/contracts/shared/TokenHandler.sol +275 -72
  475. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  476. package/contracts/staking/IStaking.sol +25 -13
  477. package/contracts/staking/IStakingService.sol +19 -4
  478. package/contracts/staking/Staking.sol +101 -52
  479. package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +96 -21
  480. package/contracts/staking/StakingManager.sol +8 -6
  481. package/contracts/staking/StakingReader.sol +18 -21
  482. package/contracts/staking/StakingService.sol +85 -25
  483. package/contracts/staking/StakingServiceManager.sol +6 -5
  484. package/contracts/staking/StakingStore.sol +2 -1
  485. package/contracts/staking/TargetManagerLib.sol +8 -4
  486. package/contracts/type/Amount.sol +15 -0
  487. package/contracts/type/ClaimId.sol +6 -1
  488. package/contracts/type/Fee.sol +8 -8
  489. package/contracts/type/Key32.sol +2 -2
  490. package/contracts/type/Key32Set.sol +62 -0
  491. package/contracts/type/NftId.sol +7 -0
  492. package/contracts/type/ObjectType.sol +72 -36
  493. package/contracts/type/PayoutId.sol +10 -10
  494. package/contracts/type/RiskId.sol +38 -6
  495. package/contracts/type/RoleId.sol +61 -55
  496. package/contracts/type/Seconds.sol +8 -0
  497. package/contracts/type/Selector.sol +5 -0
  498. package/contracts/type/StateId.sol +15 -1
  499. package/contracts/type/Timestamp.sol +0 -5
  500. package/contracts/type/UFixed.sol +37 -126
  501. package/contracts/type/Version.sol +54 -5
  502. package/contracts/upgradeability/ProxyManager.sol +79 -43
  503. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +7 -1
  504. package/contracts/upgradeability/Versionable.sol +6 -3
  505. package/package.json +5 -4
  506. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  507. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  508. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  509. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  510. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  511. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  512. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  513. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  514. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  515. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -387
  516. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  517. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  518. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  519. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  520. package/contracts/instance/module/IAccess.sol +0 -46
  521. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,43 +1,44 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IAccountingService} from "../accounting/IAccountingService.sol";
4
5
  import {IBundle} from "../instance/module/IBundle.sol";
5
6
  import {IBundleService} from "./IBundleService.sol";
6
7
  import {IComponents} from "../instance/module/IComponents.sol";
7
8
  import {IComponentService} from "../shared/IComponentService.sol";
8
9
  import {IInstance} from "../instance/IInstance.sol";
9
- import {IInstanceService} from "../instance/IInstanceService.sol";
10
10
  import {IPolicy} from "../instance/module/IPolicy.sol";
11
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
12
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
11
13
  import {IPoolService} from "./IPoolService.sol";
14
+ import {IProductComponent} from "../product/IProductComponent.sol";
12
15
  import {IRegistry} from "../registry/IRegistry.sol";
13
- import {IRegistryService} from "../registry/IRegistryService.sol";
14
16
  import {IStaking} from "../staking/IStaking.sol";
15
17
 
16
18
  import {Amount, AmountLib} from "../type/Amount.sol";
17
- import {Fee, FeeLib} from "../type/Fee.sol";
18
- import {NftId} from "../type/NftId.sol";
19
- import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
20
- import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
21
- import {Fee, FeeLib} from "../type/Fee.sol";
19
+ import {ClaimId} from "../type/ClaimId.sol";
20
+ import {ContractLib} from "../shared/ContractLib.sol";
21
+ import {InstanceReader} from "../instance/InstanceReader.sol";
22
+ import {InstanceStore} from "../instance/InstanceStore.sol";
22
23
  import {KEEP_STATE} from "../type/StateId.sol";
23
- import {Seconds} from "../type/Seconds.sol";
24
+ import {NftId} from "../type/NftId.sol";
25
+ import {ObjectType, ACCOUNTING, POOL, BUNDLE, PRODUCT, POLICY, COMPONENT} from "../type/ObjectType.sol";
26
+ import {PayoutId} from "../type/PayoutId.sol";
27
+ import {PoolLib} from "./PoolLib.sol";
28
+ import {Service} from "../shared/Service.sol";
24
29
  import {TokenHandler} from "../shared/TokenHandler.sol";
25
30
  import {UFixed} from "../type/UFixed.sol";
26
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
27
- import {InstanceReader} from "../instance/InstanceReader.sol";
28
- import {InstanceStore} from "../instance/InstanceStore.sol";
29
31
 
30
32
  string constant POOL_SERVICE_NAME = "PoolService";
31
33
 
34
+
32
35
  contract PoolService is
33
- ComponentVerifyingService,
36
+ Service,
34
37
  IPoolService
35
38
  {
39
+ IAccountingService private _accountingService;
36
40
  IBundleService internal _bundleService;
37
41
  IComponentService internal _componentService;
38
- IInstanceService private _instanceService;
39
- IRegistryService private _registryService;
40
-
41
42
  IStaking private _staking;
42
43
 
43
44
  function _initialize(
@@ -45,33 +46,32 @@ contract PoolService is
45
46
  bytes memory data
46
47
  )
47
48
  internal
48
- initializer
49
49
  virtual override
50
+ initializer()
50
51
  {
51
52
  (
52
- address registryAddress,,
53
- //address managerAddress
54
- address authority
55
- ) = abi.decode(data, (address, address, address));
53
+ address authority,
54
+ address registry
55
+ ) = abi.decode(data, (address, address));
56
56
 
57
- initializeService(registryAddress, authority, owner);
57
+ __Service_init(authority, registry, owner);
58
58
 
59
- _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
59
+ _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
60
60
  _bundleService = IBundleService(_getServiceAddress(BUNDLE()));
61
- _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
62
61
  _componentService = IComponentService(_getServiceAddress(COMPONENT()));
63
-
64
62
  _staking = IStaking(getRegistry().getStakingAddress());
65
63
 
66
- registerInterface(type(IPoolService).interfaceId);
64
+ _registerInterface(type(IPoolService).interfaceId);
67
65
  }
68
66
 
67
+
69
68
  /// @inheritdoc IPoolService
70
69
  function setMaxBalanceAmount(Amount maxBalanceAmount)
71
70
  external
72
71
  virtual
72
+ restricted()
73
73
  {
74
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
74
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
75
75
  InstanceReader instanceReader = instance.getInstanceReader();
76
76
  IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
77
77
 
@@ -82,106 +82,22 @@ contract PoolService is
82
82
  emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
83
83
  }
84
84
 
85
- function setBundleOwnerRole(RoleId bundleOwnerRole)
86
- external
87
- virtual
88
- {
89
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
90
- InstanceReader instanceReader = instance.getInstanceReader();
91
-
92
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
93
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
94
-
95
- // bundle owner role may only be set once per pool
96
- if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
97
- revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
98
- }
99
-
100
- poolInfo.bundleOwnerRole = bundleOwnerRole;
101
- instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
102
-
103
- emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
104
- }
105
-
106
- /// @inheritdoc IPoolService
107
- function createBundle(
108
- address bundleOwner, // initial bundle owner
109
- Fee memory fee, // fees deducted from premium that go to bundle owner
110
- Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
111
- Seconds lifetime, // initial duration for which new policies are covered
112
- bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
113
- )
114
- external
115
- virtual
116
- returns(NftId bundleNftId, Amount netStakedAmount)
117
- {
118
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
119
-
120
- {
121
- InstanceReader instanceReader = instance.getInstanceReader();
122
- IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
123
- Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
124
- if (currentPoolBalance + stakingAmount > poolInfo.maxBalanceAmount) {
125
- revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, stakingAmount);
126
- }
127
- }
128
-
129
-
130
- Amount stakingFeeAmount;
131
- (stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
132
- _getStakingFee(instance.getInstanceReader(), poolNftId),
133
- stakingAmount);
134
-
135
-
136
- bundleNftId = _bundleService.create(
137
- instance,
138
- poolNftId,
139
- bundleOwner,
140
- fee,
141
- netStakedAmount,
142
- lifetime,
143
- filter);
144
-
145
- // pool book keeping
146
- _componentService.increasePoolBalance(
147
- instance.getInstanceStore(),
148
- poolNftId,
149
- netStakedAmount,
150
- stakingFeeAmount);
151
-
152
- // TODO only collect staking token when pool is not externally managed
153
- // pool bookkeeping and collect tokens from bundle owner
154
- _collectStakingAmount(
155
- instance.getInstanceReader(),
156
- poolNftId,
157
- bundleOwner,
158
- stakingAmount);
159
-
160
- emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
161
- }
162
-
163
- function _getStakingFee(InstanceReader instanceReader, NftId poolNftId)
164
- internal
165
- virtual
166
- view
167
- returns (Fee memory stakingFee)
168
- {
169
- NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
170
- return instanceReader.getProductInfo(productNftId).stakingFee;
171
- }
172
85
 
173
86
  function closeBundle(NftId bundleNftId)
174
87
  external
88
+ restricted()
175
89
  virtual
176
90
  {
177
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
91
+ _checkNftType(bundleNftId, BUNDLE());
92
+
93
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
178
94
 
179
95
  // TODO get performance fee for pool (#477)
180
96
 
181
97
  // releasing collateral in bundle
182
98
  (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
183
99
 
184
- _componentService.decreasePoolBalance(
100
+ _accountingService.decreasePoolBalance(
185
101
  instance.getInstanceStore(),
186
102
  poolNftId,
187
103
  unstakedAmount + feeAmount,
@@ -191,28 +107,89 @@ contract PoolService is
191
107
 
192
108
  if ((unstakedAmount + feeAmount).gtz()){
193
109
  IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
194
- poolComponentInfo.tokenHandler.distributeTokens(
195
- poolComponentInfo.wallet,
110
+ poolComponentInfo.tokenHandler.pushToken(
196
111
  getRegistry().ownerOf(bundleNftId),
197
112
  unstakedAmount + feeAmount);
198
113
  }
199
114
  }
200
115
 
116
+
201
117
  /// @inheritdoc IPoolService
202
- function stake(NftId bundleNftId, Amount amount)
203
- external
118
+ function processFundedClaim(
119
+ NftId policyNftId,
120
+ ClaimId claimId,
121
+ Amount availableAmount
122
+ )
123
+ external
124
+ restricted()
204
125
  virtual
205
- // TODO: restricted() (once #462 is done)
206
- returns(Amount netAmount)
207
126
  {
208
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
127
+ _checkNftType(policyNftId, POLICY());
128
+
129
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
209
130
  InstanceReader instanceReader = instance.getInstanceReader();
210
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
211
- IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
131
+ NftId productNftId = getRegistry().getParentNftId(poolNftId);
132
+
133
+ // check policy matches with calling pool
134
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
135
+ if(policyInfo.productNftId != productNftId) {
136
+ revert ErrorPoolServicePolicyPoolMismatch(
137
+ policyNftId,
138
+ policyInfo.productNftId,
139
+ productNftId);
140
+ }
212
141
 
213
- if (bundleInfo.poolNftId != poolNftId) {
214
- revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
142
+ emit LogPoolServiceProcessFundedClaim(policyNftId, claimId, availableAmount);
143
+
144
+ // callback to product component if applicable
145
+ if (instanceReader.getProductInfo(productNftId).isProcessingFundedClaims) {
146
+ address productAddress = getRegistry().getObjectAddress(productNftId);
147
+ IProductComponent(productAddress).processFundedClaim(policyNftId, claimId, availableAmount);
215
148
  }
149
+ }
150
+
151
+
152
+ // function _checkAndGetPoolInfo(NftId bundleNftId)
153
+ // internal
154
+ // view
155
+ // returns (
156
+ // InstanceReader instanceReader,
157
+ // InstanceStore instanceStore,
158
+ // NftId instanceNftId,
159
+ // NftId poolNftId,
160
+ // IComponents.PoolInfo memory poolInfo
161
+ // )
162
+ // {
163
+ // _checkNftType(bundleNftId, BUNDLE());
164
+
165
+ // (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
166
+ // instanceReader = instance.getInstanceReader();
167
+ // instanceStore = instance.getInstanceStore();
168
+ // instanceNftId = instance.getNftId();
169
+ // poolInfo = instanceReader.getPoolInfo(poolNftId);
170
+
171
+ // if (getRegistry().getParentNftId(bundleNftId) != poolNftId) {
172
+ // revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
173
+ // }
174
+ // }
175
+
176
+
177
+ /// @inheritdoc IPoolService
178
+ function stake(NftId bundleNftId, Amount amount)
179
+ external
180
+ virtual
181
+ restricted()
182
+ returns(
183
+ Amount netAmount
184
+ )
185
+ {
186
+ (
187
+ InstanceReader instanceReader,
188
+ InstanceStore instanceStore,
189
+ NftId instanceNftId,
190
+ NftId poolNftId,
191
+ IComponents.PoolInfo memory poolInfo
192
+ ) = PoolLib.checkAndGetPoolInfo(getRegistry(), msg.sender, bundleNftId);
216
193
 
217
194
  {
218
195
  Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
@@ -226,122 +203,167 @@ contract PoolService is
226
203
  (
227
204
  feeAmount,
228
205
  netAmount
229
- ) = FeeLib.calculateFee(
230
- _getStakingFee(instanceReader, poolNftId),
206
+ ) = PoolLib.calculateStakingAmounts(
207
+ getRegistry(),
208
+ instanceReader,
209
+ poolNftId,
231
210
  amount);
232
211
 
233
- // do all the bookkeeping
234
- _componentService.increasePoolBalance(
235
- instance.getInstanceStore(),
212
+ // do all the book keeping
213
+ _accountingService.increasePoolBalance(
214
+ instanceStore,
236
215
  poolNftId,
237
216
  netAmount,
238
217
  feeAmount);
239
218
 
240
- _bundleService.stake(instance, bundleNftId, netAmount);
219
+ _bundleService.stake(instanceReader, instanceStore, bundleNftId, netAmount);
241
220
 
242
- // collect tokens from bundle owner
243
- address bundleOwner = getRegistry().ownerOf(bundleNftId);
244
- emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
221
+ emit LogPoolServiceBundleStaked(instanceNftId, poolNftId, bundleNftId, amount, netAmount);
245
222
 
246
- // TODO only collect staking token when pool is not externally managed
247
- _collectStakingAmount(
248
- instanceReader,
249
- poolNftId,
250
- bundleOwner,
251
- amount);
223
+ // only collect staking amount when pool is not externally managed
224
+ if (!poolInfo.isExternallyManaged) {
225
+
226
+ // collect tokens from bundle owner
227
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
228
+ PoolLib.pullStakingAmount(
229
+ instanceReader,
230
+ poolNftId,
231
+ bundleOwner,
232
+ amount);
233
+ }
252
234
  }
253
235
 
236
+
254
237
  /// @inheritdoc IPoolService
255
238
  function unstake(NftId bundleNftId, Amount amount)
256
239
  external
257
240
  virtual
258
- // TODO: restricted() (once #462 is done)
241
+ restricted()
259
242
  returns(Amount netAmount)
260
243
  {
261
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
262
- InstanceReader instanceReader = instance.getInstanceReader();
263
- InstanceStore instanceStore = instance.getInstanceStore();
264
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
265
-
266
- if (bundleInfo.poolNftId != poolNftId) {
267
- revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
268
- }
244
+ (
245
+ InstanceReader instanceReader,
246
+ InstanceStore instanceStore,
247
+ NftId instanceNftId,
248
+ NftId poolNftId,
249
+ ) = PoolLib.checkAndGetPoolInfo(getRegistry(), msg.sender, bundleNftId);
269
250
 
270
251
  // call bundle service for bookkeeping and additional checks
271
- Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
252
+ Amount unstakedAmount = _bundleService.unstake(instanceStore, bundleNftId, amount);
272
253
 
273
254
  // Important: from now on work only with unstakedAmount as it is the only reliable amount.
274
255
  // if amount was max, this was set to the available amount
275
256
 
276
257
  // TODO: handle performance fees (issue #477)
258
+ netAmount = unstakedAmount;
277
259
 
278
260
  // update pool bookkeeping - performance fees stay in the pool, but as fees
279
- _componentService.decreasePoolBalance(
261
+ _accountingService.decreasePoolBalance(
280
262
  instanceStore,
281
263
  poolNftId,
282
264
  unstakedAmount,
283
265
  AmountLib.zero());
284
266
 
285
- IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
286
- address poolWallet = poolComponentInfo.wallet;
287
- // transfer amount to bundle owner
288
- address owner = getRegistry().ownerOf(bundleNftId);
289
- emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
290
- poolComponentInfo.tokenHandler.distributeTokens(
291
- poolWallet,
292
- owner,
293
- unstakedAmount);
294
- return unstakedAmount;
267
+
268
+ emit LogPoolServiceBundleUnstaked(instanceNftId, poolNftId, bundleNftId, unstakedAmount, netAmount);
269
+
270
+ // only distribute staking amount when pool is not externally managed
271
+ if (!instanceReader.getPoolInfo(poolNftId).isExternallyManaged) {
272
+
273
+ // transfer amount to bundle owner
274
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
275
+ PoolLib.pushUnstakingAmount(
276
+ instanceReader,
277
+ poolNftId,
278
+ bundleOwner,
279
+ netAmount);
280
+ }
295
281
  }
296
282
 
297
283
 
298
- function fundPoolWallet(NftId poolNftId, Amount amount)
284
+ function fundPoolWallet(Amount amount)
299
285
  external
300
286
  virtual
301
287
  restricted()
302
288
  {
303
- // TODO check that poolNftId is externally managed
304
- // TODO implement
289
+ (
290
+ NftId poolNftId,
291
+ IInstance instance
292
+ ) = _getAndVerifyActivePool();
293
+
294
+ // check that pool is externally managed
295
+ InstanceReader reader = instance.getInstanceReader();
296
+ if (!reader.getPoolInfo(poolNftId).isExternallyManaged) {
297
+ revert ErrorPoolServicePoolNotExternallyManaged(poolNftId);
298
+ }
299
+
300
+ address poolOwner = getRegistry().ownerOf(poolNftId);
301
+ emit LogPoolServiceWalletFunded(poolNftId, poolOwner, amount);
302
+
303
+ PoolLib.pullStakingAmount(
304
+ reader,
305
+ poolNftId,
306
+ poolOwner,
307
+ amount);
305
308
  }
306
309
 
307
310
 
308
- function defundPoolWallet(NftId poolNftId, Amount amount)
311
+ function defundPoolWallet(Amount amount)
309
312
  external
310
313
  virtual
311
314
  restricted()
312
315
  {
313
- // TODO check that poolNftId is externally managed
314
- // TODO implement
316
+ (
317
+ NftId poolNftId,
318
+ IInstance instance
319
+ ) = _getAndVerifyActivePool();
320
+
321
+ // check that pool is externally managed
322
+ InstanceReader reader = instance.getInstanceReader();
323
+ if (!reader.getPoolInfo(poolNftId).isExternallyManaged) {
324
+ revert ErrorPoolServicePoolNotExternallyManaged(poolNftId);
325
+ }
326
+
327
+ address poolOwner = getRegistry().ownerOf(poolNftId);
328
+ emit LogPoolServiceWalletDefunded(poolNftId, poolOwner, amount);
329
+
330
+ PoolLib.pushUnstakingAmount(
331
+ reader,
332
+ poolNftId,
333
+ poolOwner,
334
+ amount);
315
335
  }
316
336
 
337
+
317
338
  function processSale(
318
339
  NftId bundleNftId,
319
- IPolicy.Premium memory premium
340
+ IPolicy.PremiumInfo memory premium
320
341
  )
321
342
  external
322
343
  virtual
323
344
  restricted()
324
345
  {
346
+ _checkNftType(bundleNftId, BUNDLE());
347
+
325
348
  IRegistry registry = getRegistry();
326
- IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
327
- IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
328
- IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
329
- IInstance instance = IInstance(instanceObjectInfo.objectAddress);
349
+ NftId poolNftId = registry.getParentNftId(bundleNftId);
350
+ (, address instanceAddress) = ContractLib.getInfoAndInstance(registry, poolNftId, true);
351
+ IInstance instance = IInstance(instanceAddress);
330
352
 
331
- Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
332
- Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
333
- Amount bundleNetAmount = AmountLib.toAmount(premium.netPremiumAmount);
353
+ Amount poolFeeAmount = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
354
+ Amount bundleFeeAmount = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
355
+ Amount bundleNetAmount = premium.netPremiumAmount;
334
356
 
335
357
  InstanceStore instanceStore = instance.getInstanceStore();
336
- _componentService.increasePoolBalance(
358
+ _accountingService.increasePoolBalance(
337
359
  instanceStore,
338
- poolObjectInfo.nftId,
360
+ poolNftId,
339
361
  bundleNetAmount + bundleFeeAmount,
340
362
  poolFeeAmount);
341
363
 
342
- _componentService.increaseBundleBalance(
364
+ _accountingService.increaseBundleBalanceForPool(
343
365
  instanceStore,
344
- bundleObjectInfo.nftId,
366
+ bundleNftId,
345
367
  bundleNetAmount,
346
368
  bundleFeeAmount);
347
369
  }
@@ -359,14 +381,22 @@ contract PoolService is
359
381
  virtual
360
382
  restricted()
361
383
  returns (
362
- Amount localCollateralAmount,
363
- Amount totalCollateralAmount
384
+ Amount totalCollateralAmount,
385
+ Amount localCollateralAmount
364
386
  )
365
387
  {
388
+ _checkNftType(productNftId, PRODUCT());
389
+ _checkNftType(applicationNftId, POLICY());
390
+ _checkNftType(bundleNftId, BUNDLE());
391
+
392
+ NftId poolNftId;
393
+ bool poolIsVerifyingApplications;
366
394
  (
395
+ poolNftId,
396
+ totalCollateralAmount,
367
397
  localCollateralAmount,
368
- totalCollateralAmount
369
- ) = calculateRequiredCollateral(
398
+ poolIsVerifyingApplications
399
+ ) = PoolLib.calculateRequiredCollateral(
370
400
  instance.getInstanceReader(),
371
401
  productNftId,
372
402
  sumInsuredAmount);
@@ -384,36 +414,127 @@ contract PoolService is
384
414
  token,
385
415
  totalCollateralAmount);
386
416
 
387
- // hierarhical riskpool setup
388
- // TODO loop in with pool component to guarantee availability of external capital
389
- if(totalCollateralAmount > localCollateralAmount) {
417
+ // pool callback when required
418
+ if (poolIsVerifyingApplications) {
419
+ IPoolComponent pool = IPoolComponent(
420
+ getRegistry().getObjectAddress(poolNftId));
421
+
422
+ pool.verifyApplication(
423
+ applicationNftId,
424
+ bundleNftId,
425
+ totalCollateralAmount);
390
426
 
427
+ // TODO add logging
391
428
  }
392
- }
393
429
 
430
+ // TODO add logging
431
+ }
394
432
 
395
- function reduceCollateral(
396
- IInstance instance,
397
- address token,
433
+ function processPayout(
434
+ InstanceReader instanceReader,
435
+ InstanceStore instanceStore,
436
+ NftId productNftId,
398
437
  NftId policyNftId,
399
- IPolicy.PolicyInfo memory policyInfo,
400
- Amount payoutAmount
438
+ NftId bundleNftId,
439
+ PayoutId payoutId,
440
+ Amount payoutAmount,
441
+ address payoutBeneficiary
401
442
  )
402
443
  external
403
444
  virtual
404
445
  restricted()
405
446
  {
447
+ // checks
448
+ _checkNftType(policyNftId, POLICY());
449
+
450
+ // effects
451
+ NftId poolNftId = getRegistry().getParentNftId(bundleNftId);
452
+
453
+ _accountingService.decreasePoolBalance(
454
+ instanceStore,
455
+ poolNftId,
456
+ payoutAmount,
457
+ AmountLib.zero());
458
+
459
+ _accountingService.decreaseBundleBalanceForPool(
460
+ instanceStore,
461
+ bundleNftId,
462
+ payoutAmount,
463
+ AmountLib.zero());
464
+
406
465
  _bundleService.releaseCollateral(
407
- instance,
466
+ instanceStore,
408
467
  policyNftId,
409
- policyInfo.bundleNftId,
468
+ bundleNftId,
410
469
  payoutAmount);
411
470
 
412
471
  // update value locked with staking service
472
+ TokenHandler poolTokenHandler = instanceReader.getTokenHandler(poolNftId);
473
+
413
474
  _staking.decreaseTotalValueLocked(
414
- instance.getNftId(),
415
- token,
475
+ instanceReader.getInstanceNftId(),
476
+ address(poolTokenHandler.TOKEN()),
416
477
  payoutAmount);
478
+
479
+ // interactions
480
+ PoolLib.transferTokenAndNotifyPolicyHolder(
481
+ getRegistry(),
482
+ instanceReader,
483
+ poolTokenHandler,
484
+ productNftId,
485
+ policyNftId,
486
+ payoutId,
487
+ payoutAmount,
488
+ payoutBeneficiary);
489
+ }
490
+
491
+
492
+ /// @inheritdoc IPoolService
493
+ function withdrawBundleFees(
494
+ NftId bundleNftId,
495
+ Amount amount
496
+ )
497
+ public
498
+ virtual
499
+ restricted()
500
+ returns (Amount withdrawnAmount)
501
+ {
502
+ // checks
503
+ _checkNftType(bundleNftId, BUNDLE());
504
+
505
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
506
+ InstanceReader reader = instance.getInstanceReader();
507
+
508
+ // determine withdrawn amount
509
+ withdrawnAmount = amount;
510
+ if (withdrawnAmount.gte(AmountLib.max())) {
511
+ withdrawnAmount = reader.getFeeAmount(bundleNftId);
512
+ } else {
513
+ if (withdrawnAmount > reader.getFeeAmount(bundleNftId)) {
514
+ revert ErrorPoolServiceFeesWithdrawAmountExceedsLimit(withdrawnAmount, reader.getFeeAmount(bundleNftId));
515
+ }
516
+ }
517
+
518
+ // effects
519
+ // decrease fee counters by withdrawnAmount
520
+ {
521
+ InstanceStore store = instance.getInstanceStore();
522
+ // decrease fee amount of the bundle
523
+ _accountingService.decreaseBundleBalanceForPool(store, bundleNftId, AmountLib.zero(), withdrawnAmount);
524
+ // decrease pool balance
525
+ _accountingService.decreasePoolBalance(store, poolNftId, withdrawnAmount, AmountLib.zero());
526
+ }
527
+
528
+ // interactions
529
+ // transfer amount to bundle owner
530
+ {
531
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
532
+ TokenHandler tokenHandler = reader.getTokenHandler(poolNftId);
533
+ address token = address(tokenHandler.TOKEN());
534
+ emit LogPoolServiceFeesWithdrawn(bundleNftId, bundleOwner, token, withdrawnAmount);
535
+
536
+ tokenHandler.pushToken(bundleOwner, withdrawnAmount);
537
+ }
417
538
  }
418
539
 
419
540
 
@@ -421,7 +542,6 @@ contract PoolService is
421
542
  /// may only be called by the policy service for unlocked pool components
422
543
  function releaseCollateral(
423
544
  IInstance instance,
424
- address token,
425
545
  NftId policyNftId,
426
546
  IPolicy.PolicyInfo memory policyInfo
427
547
  )
@@ -429,112 +549,38 @@ contract PoolService is
429
549
  virtual
430
550
  restricted()
431
551
  {
552
+ _checkNftType(policyNftId, POLICY());
553
+
432
554
  Amount remainingCollateralAmount = policyInfo.sumInsuredAmount - policyInfo.claimAmount;
433
555
 
434
556
  _bundleService.releaseCollateral(
435
- instance,
557
+ instance.getInstanceStore(),
436
558
  policyNftId,
437
559
  policyInfo.bundleNftId,
438
560
  remainingCollateralAmount);
439
561
 
440
- _bundleService.unlinkPolicy(
441
- instance,
442
- policyNftId);
443
-
444
562
  // update value locked with staking service
563
+ InstanceReader instanceReader = instance.getInstanceReader();
445
564
  _staking.decreaseTotalValueLocked(
446
- instance.getNftId(),
447
- token,
565
+ instanceReader.getInstanceNftId(),
566
+ address(instanceReader.getToken(policyInfo.productNftId)),
448
567
  remainingCollateralAmount);
449
568
  }
450
569
 
451
570
 
452
- function calculateRequiredCollateral(
453
- InstanceReader instanceReader,
454
- NftId productNftId,
455
- Amount sumInsuredAmount
456
- )
457
- public
458
- view
459
- returns(
460
- Amount localCollateralAmount,
461
- Amount totalCollateralAmount
462
- )
463
- {
464
- NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
465
- IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
466
-
467
- (
468
- localCollateralAmount,
469
- totalCollateralAmount
470
- ) = calculateRequiredCollateral(
471
- poolInfo.collateralizationLevel,
472
- poolInfo.retentionLevel,
473
- sumInsuredAmount);
474
- }
475
-
476
-
477
- function calculateRequiredCollateral(
478
- UFixed collateralizationLevel,
479
- UFixed retentionLevel,
480
- Amount sumInsuredAmount
481
- )
482
- public
483
- pure
484
- returns(
485
- Amount localCollateralAmount,
486
- Amount totalCollateralAmount
487
- )
488
- {
489
- // TODO define if only applies to local collateral
490
- // TODO add minimalistic implementation
491
-
492
- // assumptions
493
- // - collateralizationLevel == 1.0
494
- // - retentionLevel == 1.0
495
- localCollateralAmount = sumInsuredAmount;
496
- totalCollateralAmount = localCollateralAmount;
497
- }
498
-
499
-
500
- function _processStakingFees(
501
- Fee memory stakingFee,
502
- Amount stakingAmount
503
- )
571
+ function _getAndVerifyActivePool()
504
572
  internal
505
- returns (Amount stakingNetAmount)
573
+ virtual
574
+ view
575
+ returns (
576
+ NftId poolNftId,
577
+ IInstance instance
578
+ )
506
579
  {
507
- stakingNetAmount = stakingAmount;
508
-
509
- // check if any staking fees apply
510
- if (FeeLib.gtz(stakingFee)) {
511
- (Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
512
- stakingNetAmount = netAmount;
513
-
514
- // TODO update fee balance for pool
515
- }
580
+ return PoolLib.getAndVerifyActivePool(getRegistry(), msg.sender);
516
581
  }
517
582
 
518
583
 
519
- /// @dev transfers the specified amount from the bundle owner to the pool's wallet
520
- function _collectStakingAmount(
521
- InstanceReader instanceReader,
522
- NftId poolNftId,
523
- address bundleOwner,
524
- Amount amount
525
- )
526
- internal
527
- {
528
-
529
- // collecting investor token
530
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
531
- address poolWallet = componentInfo.wallet;
532
- componentInfo.tokenHandler.collectTokens(
533
- bundleOwner,
534
- poolWallet,
535
- amount);
536
- }
537
-
538
584
  function _getDomain() internal pure override returns(ObjectType) {
539
585
  return POOL();
540
586
  }