@etherisc/gif-next 0.0.2-860ef47-116 → 0.0.2-864c5f3-808

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 (516) hide show
  1. package/README.md +32 -8
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -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 +203 -77
  10. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +200 -16
  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 +142 -44
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +107 -15
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +165 -391
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +206 -27
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +103 -321
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +337 -366
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +133 -119
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +115 -143
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +203 -129
  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 +1475 -0
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +589 -0
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2032 -0
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +589 -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 +1479 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +589 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1195 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1655 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +589 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2432 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +589 -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 +158 -57
  69. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  70. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +105 -103
  71. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  72. package/artifacts/contracts/instance/Instance.sol/Instance.json +194 -154
  73. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  74. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +446 -143
  75. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +150 -90
  77. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1017 -271
  79. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +131 -266
  81. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +102 -92
  83. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  84. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +707 -438
  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 +114 -340
  106. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  107. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +180 -29
  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 +102 -130
  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 +90 -308
  115. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +153 -190
  117. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +122 -88
  119. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  120. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +112 -330
  121. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  122. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +206 -27
  123. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  124. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +159 -443
  125. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +106 -140
  127. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  128. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +84 -158
  129. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  130. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +124 -163
  131. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  132. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +312 -295
  133. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  134. package/artifacts/contracts/pool/Pool.sol/Pool.json +109 -338
  135. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  136. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
  137. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  138. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +440 -550
  139. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  140. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +130 -112
  141. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  142. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +134 -184
  143. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +91 -93
  145. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  146. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +243 -400
  147. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  148. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +206 -27
  149. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  150. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +415 -234
  151. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  152. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +140 -114
  153. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  154. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +94 -9
  155. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  156. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +308 -16
  157. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +306 -130
  159. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  160. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +136 -83
  161. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  162. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +235 -202
  163. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  164. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +67 -8
  165. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  166. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +369 -336
  167. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  168. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
  169. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  170. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +129 -103
  171. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  172. package/artifacts/contracts/product/PricingService.sol/PricingService.json +227 -314
  173. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +120 -122
  175. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  176. package/artifacts/contracts/product/Product.sol/Product.json +241 -398
  177. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  178. package/artifacts/contracts/product/RiskService.sol/RiskService.json +659 -0
  179. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  180. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +732 -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 +334 -34
  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 +540 -95
  193. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  194. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +349 -167
  195. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  196. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +109 -292
  197. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  198. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +94 -80
  199. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  200. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1849 -0
  201. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  202. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  203. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  204. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +420 -246
  205. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  206. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  207. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  208. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
  209. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  210. package/artifacts/contracts/shared/Component.sol/Component.json +76 -265
  211. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  212. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +501 -626
  213. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  214. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +136 -128
  215. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  216. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +57 -111
  217. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  218. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +541 -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 +89 -88
  227. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  228. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +446 -276
  229. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  230. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +102 -130
  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 +16 -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 +148 -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 +55 -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 +89 -307
  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 +22 -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 +122 -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 +57 -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 +134 -125
  272. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  273. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +77 -16
  274. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  275. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +76 -106
  276. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  277. package/artifacts/contracts/staking/Staking.sol/Staking.json +210 -366
  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 +122 -95
  282. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  283. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  284. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  285. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +122 -164
  286. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  287. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +99 -85
  288. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  289. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +149 -108
  290. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  291. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +55 -24
  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 +33 -9
  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 +3 -3
  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 +2 -2
  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 +79 -15
  322. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -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/Timestamp.sol/TimestampLib.dbg.json +1 -1
  332. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  333. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  334. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +16 -3
  335. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  336. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  337. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  338. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +47 -2
  339. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  340. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  341. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
  342. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  343. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  344. package/contracts/accounting/AccountingService.sol +262 -0
  345. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  346. package/contracts/accounting/IAccountingService.sol +45 -0
  347. package/contracts/authorization/AccessAdmin.sol +232 -134
  348. package/contracts/authorization/AccessManagerCloneable.sol +136 -3
  349. package/contracts/authorization/Authorization.sol +321 -202
  350. package/contracts/authorization/IAccess.sol +1 -0
  351. package/contracts/authorization/IAccessAdmin.sol +17 -10
  352. package/contracts/authorization/IAuthorization.sol +27 -7
  353. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  354. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  355. package/contracts/distribution/BasicDistribution.sol +15 -12
  356. package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
  357. package/contracts/distribution/Distribution.sol +42 -48
  358. package/contracts/distribution/DistributionService.sol +135 -104
  359. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  360. package/contracts/distribution/IDistributionComponent.sol +1 -1
  361. package/contracts/distribution/IDistributionService.sol +29 -24
  362. package/contracts/examples/fire/DamageLevel.sol +59 -0
  363. package/contracts/examples/fire/FirePool.sol +90 -0
  364. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  365. package/contracts/examples/fire/FireProduct.sol +437 -0
  366. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  367. package/contracts/examples/fire/FireUSD.sol +26 -0
  368. package/contracts/examples/unpermissioned/SimpleDistribution.sol +57 -0
  369. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  370. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  371. package/contracts/examples/unpermissioned/SimplePool.sol +106 -0
  372. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  373. package/contracts/examples/unpermissioned/SimpleProduct.sol +377 -0
  374. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  375. package/contracts/instance/BundleSet.sol +42 -38
  376. package/contracts/instance/IInstance.sol +21 -37
  377. package/contracts/instance/IInstanceService.sol +9 -29
  378. package/contracts/instance/Instance.sol +59 -66
  379. package/contracts/instance/InstanceAdmin.sol +256 -85
  380. package/contracts/instance/InstanceAuthorizationV3.sol +56 -47
  381. package/contracts/instance/InstanceReader.sol +267 -43
  382. package/contracts/instance/InstanceService.sol +125 -164
  383. package/contracts/instance/InstanceServiceManager.sol +6 -7
  384. package/contracts/instance/InstanceStore.sol +23 -2
  385. package/contracts/instance/RiskSet.sol +118 -0
  386. package/contracts/instance/base/ObjectCounter.sol +1 -2
  387. package/contracts/instance/base/ObjectLifecycle.sol +11 -4
  388. package/contracts/instance/base/ObjectSet.sol +31 -33
  389. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  390. package/contracts/instance/module/IComponents.sol +14 -10
  391. package/contracts/instance/module/IDistribution.sol +5 -2
  392. package/contracts/instance/module/IPolicy.sol +26 -25
  393. package/contracts/instance/module/IRisk.sol +3 -0
  394. package/contracts/oracle/BasicOracle.sol +0 -1
  395. package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
  396. package/contracts/oracle/IOracleService.sol +2 -1
  397. package/contracts/oracle/Oracle.sol +7 -17
  398. package/contracts/oracle/OracleService.sol +113 -81
  399. package/contracts/oracle/OracleServiceManager.sol +6 -6
  400. package/contracts/pool/BasicPool.sol +35 -26
  401. package/contracts/pool/BasicPoolAuthorization.sol +29 -11
  402. package/contracts/pool/BundleService.sol +106 -161
  403. package/contracts/pool/BundleServiceManager.sol +6 -6
  404. package/contracts/pool/IBundleService.sol +18 -37
  405. package/contracts/pool/IPoolComponent.sol +19 -15
  406. package/contracts/pool/IPoolService.sol +90 -74
  407. package/contracts/pool/Pool.sol +140 -123
  408. package/contracts/pool/PoolLib.sol +216 -0
  409. package/contracts/pool/PoolService.sol +512 -305
  410. package/contracts/pool/PoolServiceManager.sol +4 -4
  411. package/contracts/product/ApplicationService.sol +72 -43
  412. package/contracts/product/ApplicationServiceManager.sol +4 -4
  413. package/contracts/product/BasicProduct.sol +11 -12
  414. package/contracts/product/BasicProductAuthorization.sol +24 -11
  415. package/contracts/product/ClaimService.sol +368 -153
  416. package/contracts/product/ClaimServiceManager.sol +4 -4
  417. package/contracts/product/IApplicationService.sol +6 -2
  418. package/contracts/product/IClaimService.sol +44 -8
  419. package/contracts/product/IPolicyService.sol +53 -42
  420. package/contracts/product/IPricingService.sol +10 -10
  421. package/contracts/product/IProductComponent.sol +27 -5
  422. package/contracts/product/{IProductService.sol → IRiskService.sol} +6 -9
  423. package/contracts/product/PolicyService.sol +456 -303
  424. package/contracts/product/PolicyServiceLib.sol +65 -0
  425. package/contracts/product/PolicyServiceManager.sol +4 -4
  426. package/contracts/product/PricingService.sol +66 -62
  427. package/contracts/product/PricingServiceManager.sol +4 -4
  428. package/contracts/product/Product.sol +154 -96
  429. package/contracts/product/RiskService.sol +144 -0
  430. package/contracts/product/RiskServiceManager.sol +39 -0
  431. package/contracts/registry/ChainNft.sol +72 -40
  432. package/contracts/registry/IRegistry.sol +60 -28
  433. package/contracts/registry/IRegistryService.sol +5 -12
  434. package/contracts/registry/IRelease.sol +26 -0
  435. package/contracts/registry/ITransferInterceptor.sol +1 -2
  436. package/contracts/registry/Registry.sol +357 -203
  437. package/contracts/registry/RegistryAdmin.sol +171 -182
  438. package/contracts/registry/RegistryService.sol +37 -48
  439. package/contracts/registry/RegistryServiceManager.sol +3 -3
  440. package/contracts/registry/ReleaseAdmin.sol +245 -0
  441. package/contracts/registry/ReleaseLifecycle.sol +8 -3
  442. package/contracts/registry/ReleaseRegistry.sol +258 -232
  443. package/contracts/registry/ServiceAuthorizationV3.sol +99 -52
  444. package/contracts/registry/TokenRegistry.sol +6 -8
  445. package/contracts/shared/Component.sol +74 -127
  446. package/contracts/shared/ComponentService.sol +426 -385
  447. package/contracts/shared/ComponentServiceManager.sol +8 -5
  448. package/contracts/shared/ComponentVerifyingService.sol +28 -17
  449. package/contracts/shared/ContractLib.sol +253 -0
  450. package/contracts/shared/IComponent.sol +8 -17
  451. package/contracts/shared/IComponentService.sol +41 -37
  452. package/contracts/shared/IInstanceLinkedComponent.sol +6 -32
  453. package/contracts/shared/ILifecycle.sol +3 -1
  454. package/contracts/shared/INftOwnable.sol +2 -0
  455. package/contracts/shared/IPolicyHolder.sol +12 -22
  456. package/contracts/shared/IRegisterable.sol +23 -1
  457. package/contracts/shared/IService.sol +3 -5
  458. package/contracts/shared/InitializableERC165.sol +2 -2
  459. package/contracts/shared/InstanceLinkedComponent.sol +73 -48
  460. package/contracts/shared/KeyValueStore.sol +1 -1
  461. package/contracts/shared/Lifecycle.sol +15 -4
  462. package/contracts/shared/NftOwnable.sol +29 -9
  463. package/contracts/shared/PolicyHolder.sol +15 -52
  464. package/contracts/shared/Registerable.sol +55 -21
  465. package/contracts/shared/RegistryLinked.sol +9 -14
  466. package/contracts/shared/Service.sol +15 -32
  467. package/contracts/shared/TokenHandler.sol +309 -26
  468. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  469. package/contracts/staking/IStaking.sol +7 -9
  470. package/contracts/staking/IStakingService.sol +8 -3
  471. package/contracts/staking/StakeManagerLib.sol +19 -26
  472. package/contracts/staking/Staking.sol +71 -61
  473. package/contracts/staking/StakingManager.sol +8 -6
  474. package/contracts/staking/StakingReader.sol +13 -6
  475. package/contracts/staking/StakingService.sol +54 -35
  476. package/contracts/staking/StakingServiceManager.sol +6 -5
  477. package/contracts/staking/TargetManagerLib.sol +7 -3
  478. package/contracts/type/Amount.sol +15 -0
  479. package/contracts/type/ClaimId.sol +6 -1
  480. package/contracts/type/Key32.sol +2 -2
  481. package/contracts/type/Key32Set.sol +62 -0
  482. package/contracts/type/NftId.sol +7 -0
  483. package/contracts/type/ObjectType.sol +52 -20
  484. package/contracts/type/PayoutId.sol +10 -10
  485. package/contracts/type/RiskId.sol +38 -6
  486. package/contracts/type/RoleId.sol +23 -15
  487. package/contracts/type/Seconds.sol +8 -0
  488. package/contracts/type/Selector.sol +5 -0
  489. package/contracts/type/StateId.sol +15 -1
  490. package/contracts/type/Timestamp.sol +0 -5
  491. package/contracts/type/UFixed.sol +13 -119
  492. package/contracts/type/Version.sol +15 -5
  493. package/contracts/upgradeability/ProxyManager.sol +68 -34
  494. package/contracts/upgradeability/Versionable.sol +2 -2
  495. package/package.json +5 -4
  496. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  497. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  498. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  499. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  500. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  501. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  502. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  503. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  504. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  505. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  506. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  507. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  508. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  509. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  510. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  511. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  512. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  513. package/contracts/instance/module/IAccess.sol +0 -46
  514. package/contracts/product/ProductService.sol +0 -99
  515. package/contracts/product/ProductServiceManager.sol +0 -39
  516. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,45 +1,44 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
-
4
+ import {IAccountingService} from "../accounting/IAccountingService.sol";
6
5
  import {IBundle} from "../instance/module/IBundle.sol";
7
6
  import {IBundleService} from "./IBundleService.sol";
8
7
  import {IComponents} from "../instance/module/IComponents.sol";
9
8
  import {IComponentService} from "../shared/IComponentService.sol";
10
9
  import {IInstance} from "../instance/IInstance.sol";
11
- import {IInstanceService} from "../instance/IInstanceService.sol";
12
10
  import {IPolicy} from "../instance/module/IPolicy.sol";
11
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
12
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
13
13
  import {IPoolService} from "./IPoolService.sol";
14
+ import {IProductComponent} from "../product/IProductComponent.sol";
14
15
  import {IRegistry} from "../registry/IRegistry.sol";
15
- import {IRegistryService} from "../registry/IRegistryService.sol";
16
16
  import {IStaking} from "../staking/IStaking.sol";
17
17
 
18
18
  import {Amount, AmountLib} from "../type/Amount.sol";
19
- import {Fee, FeeLib} from "../type/Fee.sol";
20
- import {NftId, NftIdLib} from "../type/NftId.sol";
21
- import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
22
- import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
23
- 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";
24
23
  import {KEEP_STATE} from "../type/StateId.sol";
25
- 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";
26
29
  import {TokenHandler} from "../shared/TokenHandler.sol";
27
30
  import {UFixed} from "../type/UFixed.sol";
28
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
29
- import {InstanceReader} from "../instance/InstanceReader.sol";
30
- import {InstanceStore} from "../instance/InstanceStore.sol";
31
31
 
32
32
  string constant POOL_SERVICE_NAME = "PoolService";
33
33
 
34
+
34
35
  contract PoolService is
35
- ComponentVerifyingService,
36
+ Service,
36
37
  IPoolService
37
38
  {
39
+ IAccountingService private _accountingService;
38
40
  IBundleService internal _bundleService;
39
41
  IComponentService internal _componentService;
40
- IInstanceService private _instanceService;
41
- IRegistryService private _registryService;
42
-
43
42
  IStaking private _staking;
44
43
 
45
44
  function _initialize(
@@ -47,212 +46,191 @@ contract PoolService is
47
46
  bytes memory data
48
47
  )
49
48
  internal
50
- initializer
51
49
  virtual override
50
+ initializer()
52
51
  {
53
52
  (
54
- address registryAddress,,
55
- //address managerAddress
56
- address authority
57
- ) = abi.decode(data, (address, address, address));
53
+ address authority,
54
+ address registry
55
+ ) = abi.decode(data, (address, address));
58
56
 
59
- initializeService(registryAddress, authority, owner);
57
+ __Service_init(authority, registry, owner);
60
58
 
61
- _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
59
+ _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
62
60
  _bundleService = IBundleService(_getServiceAddress(BUNDLE()));
63
- _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
64
61
  _componentService = IComponentService(_getServiceAddress(COMPONENT()));
65
-
66
62
  _staking = IStaking(getRegistry().getStakingAddress());
67
63
 
68
- registerInterface(type(IPoolService).interfaceId);
64
+ _registerInterface(type(IPoolService).interfaceId);
69
65
  }
70
66
 
71
67
 
72
- function setMaxCapitalAmount(Amount maxCapitalAmount)
68
+ /// @inheritdoc IPoolService
69
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
73
70
  external
74
71
  virtual
75
72
  {
76
- /*
77
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
73
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
78
74
  InstanceReader instanceReader = instance.getInstanceReader();
75
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
79
76
 
80
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
81
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
82
- Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
83
-
84
- poolInfo.maxCapitalAmount = maxCapitalAmount;
77
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
78
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
85
79
  instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
86
80
 
87
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
88
- */
81
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
89
82
  }
90
83
 
91
- function setBundleOwnerRole(RoleId bundleOwnerRole)
84
+
85
+ function closeBundle(NftId bundleNftId)
92
86
  external
93
87
  virtual
94
88
  {
95
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
96
- InstanceReader instanceReader = instance.getInstanceReader();
89
+ _checkNftType(bundleNftId, BUNDLE());
97
90
 
98
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
99
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
100
-
101
- // bundle owner role may only be set once per pool
102
- if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
103
- revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
104
- }
91
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
105
92
 
106
- poolInfo.bundleOwnerRole = bundleOwnerRole;
107
- instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
108
-
109
- emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
110
- }
111
-
112
- /// @inheritdoc IPoolService
113
- function createBundle(
114
- address bundleOwner, // initial bundle owner
115
- Fee memory fee, // fees deducted from premium that go to bundle owner
116
- Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
117
- Seconds lifetime, // initial duration for which new policies are covered
118
- bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
119
- )
120
- external
121
- virtual
122
- returns(NftId bundleNftId, Amount netStakedAmount)
123
- {
124
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
125
-
126
- Amount stakingFeeAmount;
127
- (stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
128
- _getStakingFee(instance.getInstanceReader(), poolNftId),
129
- stakingAmount);
93
+ // TODO get performance fee for pool (#477)
130
94
 
131
- // TODO: (staking amount + existing pool balance) must be be > maxCapitalAmount
95
+ // releasing collateral in bundle
96
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
132
97
 
133
- bundleNftId = _bundleService.create(
134
- instance,
135
- poolNftId,
136
- bundleOwner,
137
- fee,
138
- netStakedAmount,
139
- lifetime,
140
- filter);
141
-
142
- // pool book keeping
143
- _componentService.increasePoolBalance(
98
+ _accountingService.decreasePoolBalance(
144
99
  instance.getInstanceStore(),
145
100
  poolNftId,
146
- netStakedAmount,
147
- stakingFeeAmount);
148
-
149
- // pool bookkeeping and collect tokens from bundle owner
150
- _collectStakingAmount(
151
- instance.getInstanceReader(),
152
- poolNftId,
153
- bundleOwner,
154
- stakingAmount);
101
+ unstakedAmount + feeAmount,
102
+ AmountLib.zero());
103
+
104
+ emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
155
105
 
156
- emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
106
+ if ((unstakedAmount + feeAmount).gtz()){
107
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
108
+ poolComponentInfo.tokenHandler.pushToken(
109
+ getRegistry().ownerOf(bundleNftId),
110
+ unstakedAmount + feeAmount);
111
+ }
157
112
  }
158
113
 
159
- function _getStakingFee(InstanceReader instanceReader, NftId poolNftId)
160
- internal
161
- virtual
162
- view
163
- returns (Fee memory stakingFee)
164
- {
165
- NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
166
- return instanceReader.getProductInfo(productNftId).stakingFee;
167
- }
168
114
 
169
- function closeBundle(NftId bundleNftId)
115
+ /// @inheritdoc IPoolService
116
+ function processFundedClaim(
117
+ NftId policyNftId,
118
+ ClaimId claimId,
119
+ Amount availableAmount
120
+ )
170
121
  external
171
122
  virtual
172
123
  {
173
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
124
+ _checkNftType(policyNftId, POLICY());
174
125
 
175
- // TODO get performance fee for pool (#477)
176
-
177
- // releasing collateral in bundle
178
- (Amount balanceAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
179
-
180
- _componentService.decreasePoolBalance(
181
- instance.getInstanceStore(),
182
- poolNftId,
183
- balanceAmount,
184
- feeAmount);
185
-
186
- emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
126
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
127
+ InstanceReader instanceReader = instance.getInstanceReader();
128
+ NftId productNftId = getRegistry().getParentNftId(poolNftId);
129
+
130
+ // check policy matches with calling pool
131
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
132
+ if(policyInfo.productNftId != productNftId) {
133
+ revert ErrorPoolServicePolicyPoolMismatch(
134
+ policyNftId,
135
+ policyInfo.productNftId,
136
+ productNftId);
137
+ }
187
138
 
188
- {
189
- IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
190
- TokenHandler tokenHandler = poolComponentInfo.tokenHandler;
191
- IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
192
-
193
- // TODO: centralize token handling (issue #471)
194
-
195
- // check allowance
196
- uint256 tokenAllowance = token.allowance(poolComponentInfo.wallet, address(tokenHandler));
197
- if (tokenAllowance < (balanceAmount.toInt() + feeAmount.toInt())) {
198
- revert ErrorPoolServiceWalletAllowanceTooSmall(poolComponentInfo.wallet, address(tokenHandler), tokenAllowance, balanceAmount.toInt() + feeAmount.toInt());
199
- }
139
+ emit LogPoolServiceProcessFundedClaim(policyNftId, claimId, availableAmount);
200
140
 
201
- // transfer amount to bundle owner
202
- address bundleOwner = getRegistry().ownerOf(bundleNftId);
203
- tokenHandler.transfer(poolComponentInfo.wallet, bundleOwner, balanceAmount + feeAmount);
141
+ // callback to product component if applicable
142
+ if (instanceReader.getProductInfo(productNftId).isProcessingFundedClaims) {
143
+ address productAddress = getRegistry().getObjectAddress(productNftId);
144
+ IProductComponent(productAddress).processFundedClaim(policyNftId, claimId, availableAmount);
204
145
  }
205
146
  }
206
147
 
148
+
149
+ // function _checkAndGetPoolInfo(NftId bundleNftId)
150
+ // internal
151
+ // view
152
+ // returns (
153
+ // InstanceReader instanceReader,
154
+ // InstanceStore instanceStore,
155
+ // NftId instanceNftId,
156
+ // NftId poolNftId,
157
+ // IComponents.PoolInfo memory poolInfo
158
+ // )
159
+ // {
160
+ // _checkNftType(bundleNftId, BUNDLE());
161
+
162
+ // (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
163
+ // instanceReader = instance.getInstanceReader();
164
+ // instanceStore = instance.getInstanceStore();
165
+ // instanceNftId = instance.getNftId();
166
+ // poolInfo = instanceReader.getPoolInfo(poolNftId);
167
+
168
+ // if (getRegistry().getParentNftId(bundleNftId) != poolNftId) {
169
+ // revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
170
+ // }
171
+ // }
172
+
173
+
207
174
  /// @inheritdoc IPoolService
208
175
  function stake(NftId bundleNftId, Amount amount)
209
176
  external
210
177
  virtual
211
178
  // TODO: restricted() (once #462 is done)
212
- returns(Amount netAmount)
179
+ returns(
180
+ Amount netAmount
181
+ )
213
182
  {
214
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
215
- InstanceReader instanceReader = instance.getInstanceReader();
216
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
217
- IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
218
-
219
- if (bundleInfo.poolNftId != poolNftId) {
220
- revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
221
- }
183
+ (
184
+ InstanceReader instanceReader,
185
+ InstanceStore instanceStore,
186
+ NftId instanceNftId,
187
+ NftId poolNftId,
188
+ IComponents.PoolInfo memory poolInfo
189
+ ) = PoolLib.checkAndGetPoolInfo(getRegistry(), msg.sender, bundleNftId);
222
190
 
223
- Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
224
- if (amount + currentPoolBalance > poolInfo.maxCapitalAmount) {
225
- revert ErrorPoolServiceMaxCapitalAmountExceeded(poolNftId, poolInfo.maxCapitalAmount, currentPoolBalance, amount);
191
+ {
192
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
193
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
194
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
195
+ }
226
196
  }
227
197
 
228
198
  // calculate fees
199
+ Amount feeAmount;
229
200
  (
230
- Amount feeAmount,
231
- Amount netAmount
232
- ) = FeeLib.calculateFee(
233
- _getStakingFee(instanceReader, poolNftId),
201
+ feeAmount,
202
+ netAmount
203
+ ) = PoolLib.calculateStakingAmounts(
204
+ getRegistry(),
205
+ instanceReader,
206
+ poolNftId,
234
207
  amount);
235
208
 
236
- // do all the bookkeeping
237
- _componentService.increasePoolBalance(
238
- instance.getInstanceStore(),
209
+ // do all the book keeping
210
+ _accountingService.increasePoolBalance(
211
+ instanceStore,
239
212
  poolNftId,
240
213
  netAmount,
241
214
  feeAmount);
242
215
 
243
- _bundleService.stake(instance, bundleNftId, netAmount);
216
+ _bundleService.stake(instanceReader, instanceStore, bundleNftId, netAmount);
244
217
 
245
- // collect tokens from bundle owner
246
- address bundleOwner = getRegistry().ownerOf(bundleNftId);
247
- _collectStakingAmount(
248
- instanceReader,
249
- poolNftId,
250
- bundleOwner,
251
- amount);
218
+ emit LogPoolServiceBundleStaked(instanceNftId, poolNftId, bundleNftId, amount, netAmount);
219
+
220
+ // only collect staking amount when pool is not externally managed
221
+ if (!poolInfo.isExternallyManaged) {
252
222
 
253
- emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
223
+ // collect tokens from bundle owner
224
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
225
+ _pullStakingAmount(
226
+ instanceReader,
227
+ poolNftId,
228
+ bundleOwner,
229
+ amount);
230
+ }
254
231
  }
255
232
 
233
+
256
234
  /// @inheritdoc IPoolService
257
235
  function unstake(NftId bundleNftId, Amount amount)
258
236
  external
@@ -260,84 +238,129 @@ contract PoolService is
260
238
  // TODO: restricted() (once #462 is done)
261
239
  returns(Amount netAmount)
262
240
  {
263
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
264
- InstanceReader instanceReader = instance.getInstanceReader();
265
- InstanceStore instanceStore = instance.getInstanceStore();
266
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
267
-
268
- if (bundleInfo.poolNftId != poolNftId) {
269
- revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
270
- }
271
-
272
- if (amount.eqz()) {
273
- revert ErrorPoolServiceAmountIsZero();
274
- }
241
+ (
242
+ InstanceReader instanceReader,
243
+ InstanceStore instanceStore,
244
+ NftId instanceNftId,
245
+ NftId poolNftId,
246
+ ) = PoolLib.checkAndGetPoolInfo(getRegistry(), msg.sender, bundleNftId);
275
247
 
276
248
  // call bundle service for bookkeeping and additional checks
277
- Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
249
+ Amount unstakedAmount = _bundleService.unstake(instanceStore, bundleNftId, amount);
278
250
 
279
251
  // Important: from now on work only with unstakedAmount as it is the only reliable amount.
280
252
  // if amount was max, this was set to the available amount
281
253
 
282
254
  // TODO: handle performance fees (issue #477)
255
+ netAmount = unstakedAmount;
283
256
 
284
257
  // update pool bookkeeping - performance fees stay in the pool, but as fees
285
- _componentService.decreasePoolBalance(
258
+ _accountingService.decreasePoolBalance(
286
259
  instanceStore,
287
260
  poolNftId,
288
261
  unstakedAmount,
289
262
  AmountLib.zero());
290
263
 
291
- IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
292
- address poolWallet = poolComponentInfo.wallet;
293
264
 
294
- // check allowance
295
- {
296
- IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
297
- uint256 tokenAllowance = token.allowance(poolWallet, address(poolComponentInfo.tokenHandler));
298
- if (tokenAllowance < unstakedAmount.toInt()) {
299
- revert ErrorPoolServiceWalletAllowanceTooSmall(poolWallet, address(poolComponentInfo.tokenHandler), tokenAllowance, amount.toInt());
300
- }
265
+ emit LogPoolServiceBundleUnstaked(instanceNftId, poolNftId, bundleNftId, unstakedAmount, netAmount);
266
+
267
+ // only distribute staking amount when pool is not externally managed
268
+ if (!instanceReader.getPoolInfo(poolNftId).isExternallyManaged) {
269
+
270
+ // transfer amount to bundle owner
271
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
272
+ _pushUnstakingAmount(
273
+ instanceReader,
274
+ poolNftId,
275
+ bundleOwner,
276
+ netAmount);
301
277
  }
278
+ }
302
279
 
303
- // transfer amount to bundle owner
304
- address owner = getRegistry().ownerOf(bundleNftId);
305
- // TODO: centralize token handling (issue #471)
306
- poolComponentInfo.tokenHandler.transfer(poolWallet, owner, unstakedAmount);
307
-
308
- emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
309
280
 
310
- return unstakedAmount;
281
+ function fundPoolWallet(Amount amount)
282
+ external
283
+ virtual
284
+ // restricted()
285
+ {
286
+ (
287
+ NftId poolNftId,
288
+ IInstance instance
289
+ ) = _getAndVerifyActivePool();
290
+
291
+ // check that pool is externally managed
292
+ InstanceReader reader = instance.getInstanceReader();
293
+ if (!reader.getPoolInfo(poolNftId).isExternallyManaged) {
294
+ revert ErrorPoolServicePoolNotExternallyManaged(poolNftId);
295
+ }
296
+
297
+ address poolOwner = getRegistry().ownerOf(poolNftId);
298
+ emit LogPoolServiceWalletFunded(poolNftId, poolOwner, amount);
299
+
300
+ _pullStakingAmount(
301
+ reader,
302
+ poolNftId,
303
+ poolOwner,
304
+ amount);
311
305
  }
312
306
 
307
+
308
+ function defundPoolWallet(Amount amount)
309
+ external
310
+ virtual
311
+ // restricted()
312
+ {
313
+ (
314
+ NftId poolNftId,
315
+ IInstance instance
316
+ ) = _getAndVerifyActivePool();
317
+
318
+ // check that pool is externally managed
319
+ InstanceReader reader = instance.getInstanceReader();
320
+ if (!reader.getPoolInfo(poolNftId).isExternallyManaged) {
321
+ revert ErrorPoolServicePoolNotExternallyManaged(poolNftId);
322
+ }
323
+
324
+ address poolOwner = getRegistry().ownerOf(poolNftId);
325
+ emit LogPoolServiceWalletDefunded(poolNftId, poolOwner, amount);
326
+
327
+ _pushUnstakingAmount(
328
+ reader,
329
+ poolNftId,
330
+ poolOwner,
331
+ amount);
332
+ }
333
+
334
+
313
335
  function processSale(
314
336
  NftId bundleNftId,
315
- IPolicy.Premium memory premium
337
+ IPolicy.PremiumInfo memory premium
316
338
  )
317
339
  external
318
340
  virtual
319
341
  restricted()
320
342
  {
343
+ _checkNftType(bundleNftId, BUNDLE());
344
+
321
345
  IRegistry registry = getRegistry();
322
- IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
323
- IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
324
- IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
325
- IInstance instance = IInstance(instanceObjectInfo.objectAddress);
346
+ NftId poolNftId = registry.getParentNftId(bundleNftId);
347
+ (, address instanceAddress) = ContractLib.getInfoAndInstance(registry, poolNftId, true);
348
+ IInstance instance = IInstance(instanceAddress);
326
349
 
327
- Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
328
- Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
329
- Amount bundleNetAmount = AmountLib.toAmount(premium.netPremiumAmount);
350
+ Amount poolFeeAmount = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
351
+ Amount bundleFeeAmount = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
352
+ Amount bundleNetAmount = premium.netPremiumAmount;
330
353
 
331
354
  InstanceStore instanceStore = instance.getInstanceStore();
332
- _componentService.increasePoolBalance(
355
+ _accountingService.increasePoolBalance(
333
356
  instanceStore,
334
- poolObjectInfo.nftId,
357
+ poolNftId,
335
358
  bundleNetAmount + bundleFeeAmount,
336
359
  poolFeeAmount);
337
360
 
338
- _componentService.increaseBundleBalance(
361
+ _accountingService.increaseBundleBalanceForPool(
339
362
  instanceStore,
340
- bundleObjectInfo.nftId,
363
+ bundleNftId,
341
364
  bundleNetAmount,
342
365
  bundleFeeAmount);
343
366
  }
@@ -355,14 +378,22 @@ contract PoolService is
355
378
  virtual
356
379
  restricted()
357
380
  returns (
358
- Amount localCollateralAmount,
359
- Amount totalCollateralAmount
381
+ Amount totalCollateralAmount,
382
+ Amount localCollateralAmount
360
383
  )
361
384
  {
385
+ _checkNftType(productNftId, PRODUCT());
386
+ _checkNftType(applicationNftId, POLICY());
387
+ _checkNftType(bundleNftId, BUNDLE());
388
+
389
+ NftId poolNftId;
390
+ bool poolIsVerifyingApplications;
362
391
  (
392
+ poolNftId,
393
+ totalCollateralAmount,
363
394
  localCollateralAmount,
364
- totalCollateralAmount
365
- ) = calculateRequiredCollateral(
395
+ poolIsVerifyingApplications
396
+ ) = PoolLib.calculateRequiredCollateral(
366
397
  instance.getInstanceReader(),
367
398
  productNftId,
368
399
  sumInsuredAmount);
@@ -380,36 +411,172 @@ contract PoolService is
380
411
  token,
381
412
  totalCollateralAmount);
382
413
 
383
- // hierarhical riskpool setup
384
- // TODO loop in with pool component to guarantee availability of external capital
385
- if(totalCollateralAmount > localCollateralAmount) {
414
+ // pool callback when required
415
+ if (poolIsVerifyingApplications) {
416
+ IPoolComponent pool = IPoolComponent(
417
+ getRegistry().getObjectAddress(poolNftId));
386
418
 
419
+ pool.verifyApplication(
420
+ applicationNftId,
421
+ bundleNftId,
422
+ totalCollateralAmount);
423
+
424
+ // TODO add logging
387
425
  }
388
- }
389
426
 
427
+ // TODO add logging
428
+ }
390
429
 
391
- function reduceCollateral(
392
- IInstance instance,
393
- address token,
430
+ function processPayout(
431
+ InstanceReader instanceReader,
432
+ InstanceStore instanceStore,
433
+ NftId productNftId,
394
434
  NftId policyNftId,
395
- IPolicy.PolicyInfo memory policyInfo,
396
- Amount payoutAmount
435
+ NftId bundleNftId,
436
+ PayoutId payoutId,
437
+ Amount payoutAmount,
438
+ address payoutBeneficiary
397
439
  )
398
440
  external
399
441
  virtual
400
442
  restricted()
401
443
  {
444
+ // checks
445
+ _checkNftType(policyNftId, POLICY());
446
+
447
+ // effects
448
+ NftId poolNftId = getRegistry().getParentNftId(bundleNftId);
449
+
450
+ _accountingService.decreasePoolBalance(
451
+ instanceStore,
452
+ poolNftId,
453
+ payoutAmount,
454
+ AmountLib.zero());
455
+
456
+ _accountingService.decreaseBundleBalanceForPool(
457
+ instanceStore,
458
+ bundleNftId,
459
+ payoutAmount,
460
+ AmountLib.zero());
461
+
402
462
  _bundleService.releaseCollateral(
403
- instance,
463
+ instanceStore,
404
464
  policyNftId,
405
- policyInfo.bundleNftId,
465
+ bundleNftId,
406
466
  payoutAmount);
407
467
 
408
468
  // update value locked with staking service
469
+ TokenHandler poolTokenHandler = TokenHandler(
470
+ instanceReader.getTokenHandler(
471
+ poolNftId));
472
+
409
473
  _staking.decreaseTotalValueLocked(
410
- instance.getNftId(),
411
- token,
474
+ instanceReader.getInstanceNftId(),
475
+ address(poolTokenHandler.TOKEN()),
412
476
  payoutAmount);
477
+
478
+ // interactions
479
+ _transferTokenAndNotifyPolicyHolder(
480
+ instanceReader,
481
+ poolTokenHandler,
482
+ productNftId,
483
+ policyNftId,
484
+ payoutId,
485
+ payoutAmount,
486
+ payoutBeneficiary);
487
+ }
488
+
489
+ function _transferTokenAndNotifyPolicyHolder(
490
+ InstanceReader instanceReader,
491
+ TokenHandler poolTokenHandler,
492
+ NftId productNftId,
493
+ NftId policyNftId,
494
+ PayoutId payoutId,
495
+ Amount payoutAmount,
496
+ address payoutBeneficiary
497
+ )
498
+ internal
499
+ {
500
+ (
501
+ Amount netPayoutAmount,
502
+ Amount processingFeeAmount,
503
+ address beneficiary
504
+ ) = PoolLib.calculatePayoutAmounts(
505
+ getRegistry(),
506
+ instanceReader,
507
+ productNftId,
508
+ policyNftId,
509
+ payoutAmount,
510
+ payoutBeneficiary);
511
+
512
+ // 1st token tx to payout to beneficiary
513
+ poolTokenHandler.pushToken(
514
+ beneficiary,
515
+ netPayoutAmount);
516
+
517
+ // 2nd token tx to transfer processing fees to product wallet
518
+ // if processingFeeAmount > 0
519
+ if (processingFeeAmount.gtz()) {
520
+ poolTokenHandler.pushToken(
521
+ instanceReader.getWallet(productNftId),
522
+ processingFeeAmount);
523
+ }
524
+
525
+ // callback to policy holder if applicable
526
+ _policyHolderPayoutExecuted(
527
+ policyNftId,
528
+ payoutId,
529
+ beneficiary,
530
+ netPayoutAmount);
531
+ }
532
+
533
+
534
+ /// @inheritdoc IPoolService
535
+ function withdrawBundleFees(
536
+ NftId bundleNftId,
537
+ Amount amount
538
+ )
539
+ public
540
+ virtual
541
+ restricted()
542
+ returns (Amount withdrawnAmount)
543
+ {
544
+ // checks
545
+ _checkNftType(bundleNftId, BUNDLE());
546
+
547
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
548
+ InstanceReader reader = instance.getInstanceReader();
549
+
550
+ // determine withdrawn amount
551
+ withdrawnAmount = amount;
552
+ if (withdrawnAmount.gte(AmountLib.max())) {
553
+ withdrawnAmount = reader.getFeeAmount(bundleNftId);
554
+ } else {
555
+ if (withdrawnAmount > reader.getFeeAmount(bundleNftId)) {
556
+ revert ErrorPoolServiceFeesWithdrawAmountExceedsLimit(withdrawnAmount, reader.getFeeAmount(bundleNftId));
557
+ }
558
+ }
559
+
560
+ // effects
561
+ // decrease fee counters by withdrawnAmount
562
+ {
563
+ InstanceStore store = instance.getInstanceStore();
564
+ // decrease fee amount of the bundle
565
+ _accountingService.decreaseBundleBalanceForPool(store, bundleNftId, AmountLib.zero(), withdrawnAmount);
566
+ // decrease pool balance
567
+ _accountingService.decreasePoolBalance(store, poolNftId, withdrawnAmount, AmountLib.zero());
568
+ }
569
+
570
+ // interactions
571
+ // transfer amount to bundle owner
572
+ {
573
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
574
+ TokenHandler tokenHandler = reader.getTokenHandler(poolNftId);
575
+ address token = address(tokenHandler.TOKEN());
576
+ emit LogPoolServiceFeesWithdrawn(bundleNftId, bundleOwner, token, withdrawnAmount);
577
+
578
+ tokenHandler.pushToken(bundleOwner, withdrawnAmount);
579
+ }
413
580
  }
414
581
 
415
582
 
@@ -417,7 +584,6 @@ contract PoolService is
417
584
  /// may only be called by the policy service for unlocked pool components
418
585
  function releaseCollateral(
419
586
  IInstance instance,
420
- address token,
421
587
  NftId policyNftId,
422
588
  IPolicy.PolicyInfo memory policyInfo
423
589
  )
@@ -425,124 +591,165 @@ contract PoolService is
425
591
  virtual
426
592
  restricted()
427
593
  {
594
+ _checkNftType(policyNftId, POLICY());
595
+
428
596
  Amount remainingCollateralAmount = policyInfo.sumInsuredAmount - policyInfo.claimAmount;
429
597
 
430
598
  _bundleService.releaseCollateral(
431
- instance,
599
+ instance.getInstanceStore(),
432
600
  policyNftId,
433
601
  policyInfo.bundleNftId,
434
602
  remainingCollateralAmount);
435
603
 
436
- _bundleService.unlinkPolicy(
437
- instance,
438
- policyNftId);
439
-
440
604
  // update value locked with staking service
605
+ InstanceReader instanceReader = instance.getInstanceReader();
441
606
  _staking.decreaseTotalValueLocked(
442
- instance.getNftId(),
443
- token,
607
+ instanceReader.getInstanceNftId(),
608
+ address(instanceReader.getToken(policyInfo.productNftId)),
444
609
  remainingCollateralAmount);
445
610
  }
446
611
 
447
612
 
448
- function calculateRequiredCollateral(
449
- InstanceReader instanceReader,
450
- NftId productNftId,
451
- Amount sumInsuredAmount
613
+ // function calculateRequiredCollateral(
614
+ // InstanceReader instanceReader,
615
+ // NftId productNftId,
616
+ // Amount sumInsuredAmount
617
+ // )
618
+ // public
619
+ // view
620
+ // returns(
621
+ // NftId poolNftId,
622
+ // Amount totalCollateralAmount,
623
+ // Amount localCollateralAmount,
624
+ // bool poolIsVerifyingApplications
625
+ // )
626
+ // {
627
+ // return CollateralLib.calculateRequiredCollateral(
628
+ // instanceReader,
629
+ // productNftId,
630
+ // sumInsuredAmount);
631
+ // }
632
+
633
+ // _checkNftType(productNftId, PRODUCT());
634
+
635
+ // poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
636
+ // IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
637
+ // poolIsVerifyingApplications = poolInfo.isVerifyingApplications;
638
+
639
+ // (
640
+ // totalCollateralAmount,
641
+ // localCollateralAmount
642
+ // ) = calculateRequiredCollateral(
643
+ // poolInfo.collateralizationLevel,
644
+ // poolInfo.retentionLevel,
645
+ // sumInsuredAmount);
646
+ // }
647
+
648
+
649
+ // function calculateRequiredCollateral(
650
+ // UFixed collateralizationLevel,
651
+ // UFixed retentionLevel,
652
+ // Amount sumInsuredAmount
653
+ // )
654
+ // public
655
+ // pure
656
+ // returns(
657
+ // Amount totalCollateralAmount,
658
+ // Amount localCollateralAmount
659
+ // )
660
+ // {
661
+ // // collateralization is applied to sum insured
662
+ // UFixed totalUFixed = collateralizationLevel * sumInsuredAmount.toUFixed();
663
+ // totalCollateralAmount = AmountLib.toAmount(totalUFixed.toInt());
664
+
665
+ // // retention level defines how much capital is required locally
666
+ // localCollateralAmount = AmountLib.toAmount(
667
+ // (retentionLevel * totalUFixed).toInt());
668
+ // }
669
+
670
+
671
+
672
+
673
+ function _policyHolderPayoutExecuted(
674
+ NftId policyNftId,
675
+ PayoutId payoutId,
676
+ address beneficiary,
677
+ Amount payoutAmount
452
678
  )
453
- public
454
- view
455
- returns(
456
- Amount localCollateralAmount,
457
- Amount totalCollateralAmount
458
- )
679
+ internal
459
680
  {
460
- NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
461
- IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
462
-
463
- (
464
- localCollateralAmount,
465
- totalCollateralAmount
466
- ) = calculateRequiredCollateral(
467
- poolInfo.collateralizationLevel,
468
- poolInfo.retentionLevel,
469
- sumInsuredAmount);
681
+ IPolicyHolder policyHolder = PoolLib.getPolicyHolder(getRegistry(), policyNftId);
682
+ if(address(policyHolder) != address(0)) {
683
+ policyHolder.payoutExecuted(policyNftId, payoutId, payoutAmount, beneficiary);
684
+ }
470
685
  }
471
686
 
472
687
 
473
- function calculateRequiredCollateral(
474
- UFixed collateralizationLevel,
475
- UFixed retentionLevel,
476
- Amount sumInsuredAmount
688
+ /// @dev Transfers the specified amount from the "from account" to the pool's wallet
689
+ function _pullStakingAmount(
690
+ InstanceReader reader,
691
+ NftId poolNftId,
692
+ address from,
693
+ Amount amount
477
694
  )
478
- public
479
- pure
480
- returns(
481
- Amount localCollateralAmount,
482
- Amount totalCollateralAmount
483
- )
695
+ internal
484
696
  {
485
- // TODO define if only applies to local collateral
486
- // TODO add minimalistic implementation
487
-
488
- // assumptions
489
- // - collateralizationLevel == 1.0
490
- // - retentionLevel == 1.0
491
- localCollateralAmount = sumInsuredAmount;
492
- totalCollateralAmount = localCollateralAmount;
697
+ IComponents.ComponentInfo memory info = reader.getComponentInfo(poolNftId);
698
+ info.tokenHandler.pullToken(
699
+ from,
700
+ amount);
493
701
  }
494
702
 
495
-
496
- function _processStakingFees(
497
- Fee memory stakingFee,
498
- Amount stakingAmount
703
+ /// @dev Transfers the specified amount from the pool's wallet to the "to account"
704
+ function _pushUnstakingAmount(
705
+ InstanceReader reader,
706
+ NftId poolNftId,
707
+ address to,
708
+ Amount amount
499
709
  )
500
710
  internal
501
- returns (Amount stakingNetAmount)
502
711
  {
503
- stakingNetAmount = stakingAmount;
504
-
505
- // check if any staking fees apply
506
- if (FeeLib.gtz(stakingFee)) {
507
- (Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
508
- stakingNetAmount = netAmount;
509
-
510
- // TODO update fee balance for pool
511
- }
712
+ IComponents.ComponentInfo memory info = reader.getComponentInfo(poolNftId);
713
+ info.tokenHandler.pushToken(
714
+ to,
715
+ amount);
512
716
  }
513
717
 
514
718
 
515
- // TODO create (I)TreasuryService that deals with all gif related token transfers
516
- /// @dev transfers the specified amount from the bundle owner to the pool's wallet
517
- function _collectStakingAmount(
518
- InstanceReader instanceReader,
519
- NftId poolNftId,
520
- address bundleOwner,
521
- Amount amount
522
- )
719
+ function _getAndVerifyActivePool()
523
720
  internal
721
+ virtual
722
+ view
723
+ returns (
724
+ NftId poolNftId,
725
+ IInstance instance
726
+ )
524
727
  {
728
+ return PoolLib.getAndVerifyActivePool(getRegistry(), msg.sender);
729
+ }
525
730
 
526
- // collecting investor token
527
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
528
- TokenHandler tokenHandler = componentInfo.tokenHandler;
529
- address poolWallet = componentInfo.wallet;
530
-
531
- if(amount.gtz()) {
532
- uint256 allowance = IERC20Metadata(componentInfo.token).allowance(bundleOwner, address(tokenHandler));
533
- if (allowance < amount.toInt()) {
534
- revert ErrorPoolServiceWalletAllowanceTooSmall(bundleOwner, address(tokenHandler), allowance, amount.toInt());
535
- }
731
+ // function _getAndVerifyActivePool()
732
+ // internal
733
+ // virtual
734
+ // view
735
+ // returns (
736
+ // NftId poolNftId,
737
+ // IInstance instance
738
+ // )
739
+ // {
740
+ // (
741
+ // IRegistry.ObjectInfo memory info,
742
+ // address instanceAddress
743
+ // ) = ContractLib.getAndVerifyComponent(
744
+ // getRegistry(),
745
+ // msg.sender,
746
+ // POOL(),
747
+ // true); // only active pools
748
+
749
+ // poolNftId = info.nftId;
750
+ // instance = IInstance(instanceAddress);
751
+ // }
536
752
 
537
- // TODO: centralize token handling (issue #471)
538
- tokenHandler.transfer(
539
- bundleOwner,
540
- poolWallet,
541
- amount);
542
- } else {
543
- revert ErrorPoolServiceAmountIsZero();
544
- }
545
- }
546
753
 
547
754
  function _getDomain() internal pure override returns(ObjectType) {
548
755
  return POOL();