@etherisc/gif-next 0.0.2-b3a8633-027 → 0.0.2-b3e9a44-364

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 (449) hide show
  1. package/README.md +19 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +32 -51
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +0 -19
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +101 -248
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +59 -222
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +244 -217
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +109 -101
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +59 -37
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +136 -31
  31. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  32. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  33. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  34. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1507 -0
  35. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  37. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1978 -0
  39. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
  41. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  43. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1427 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1187 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1561 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1996 -0
  51. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  52. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +16 -0
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +16 -0
  57. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  58. package/artifacts/contracts/instance/Instance.sol/Instance.json +26 -99
  59. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +96 -99
  61. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  62. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -129
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +55 -146
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +77 -81
  69. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +244 -228
  71. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  73. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  76. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  78. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  80. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  86. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  87. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  88. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  89. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +75 -235
  90. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  91. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
  92. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  94. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +46 -37
  95. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  96. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +16 -0
  97. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  98. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +43 -219
  99. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +53 -144
  101. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +76 -80
  103. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  104. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +95 -280
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  108. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +463 -150
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +170 -86
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  112. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +245 -1
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  114. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +88 -94
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  116. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +376 -171
  117. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  118. package/artifacts/contracts/pool/Pool.sol/Pool.json +85 -276
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  120. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +525 -350
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +114 -82
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  124. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +52 -162
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +73 -89
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  128. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +63 -248
  129. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  130. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  131. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  132. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +279 -181
  133. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  134. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +120 -100
  135. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  136. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +21 -0
  137. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  138. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +163 -6
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  140. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +310 -118
  141. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +59 -43
  143. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  144. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +63 -63
  145. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  146. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +18 -2
  147. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  148. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +421 -320
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +120 -100
  151. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  152. package/artifacts/contracts/product/PricingService.sol/PricingService.json +136 -259
  153. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  154. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +97 -117
  155. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  156. package/artifacts/contracts/product/Product.sol/Product.json +63 -248
  157. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  158. package/artifacts/contracts/product/RiskService.sol/RiskService.json +604 -0
  159. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  160. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +698 -0
  161. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  162. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +22 -3
  163. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  164. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +297 -19
  165. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  166. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +16 -0
  167. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  168. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  169. package/artifacts/contracts/registry/Registry.sol/Registry.json +401 -104
  170. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  171. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +121 -134
  172. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  173. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +39 -313
  174. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  175. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +68 -72
  176. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  177. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  178. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  179. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +45 -16
  180. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  181. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  182. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  183. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  184. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  185. package/artifacts/contracts/shared/Component.sol/Component.json +16 -211
  186. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  187. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +263 -161
  188. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  189. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +121 -95
  190. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  191. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +21 -112
  192. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  193. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  194. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  195. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +16 -26
  196. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +169 -0
  198. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  199. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +35 -37
  200. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  201. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  202. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  203. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  204. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  205. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  206. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  207. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +16 -0
  208. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  209. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  210. package/artifacts/contracts/shared/IService.sol/IService.json +16 -0
  211. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  212. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  213. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  214. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +35 -222
  215. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  216. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  217. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  218. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  219. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  220. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  221. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  222. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  223. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  224. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +24 -97
  225. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  226. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  227. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  228. package/artifacts/contracts/shared/Service.sol/Service.json +21 -112
  229. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  230. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  231. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  232. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  233. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  234. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +43 -27
  235. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  236. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +16 -21
  237. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  238. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
  239. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  240. package/artifacts/contracts/staking/Staking.sol/Staking.json +101 -262
  241. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  242. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  243. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  244. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +93 -88
  245. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  246. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  247. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  248. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +47 -159
  249. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  250. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +72 -76
  251. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  252. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +89 -84
  253. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  254. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
  255. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  256. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/Amount.sol/AmountLib.json +61 -8
  258. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  260. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  262. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  264. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  266. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  267. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  268. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  270. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  271. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  272. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  274. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  276. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  278. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  280. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  282. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  284. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  286. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  290. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  293. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  295. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +52 -2
  297. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  299. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  300. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  301. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +55 -70
  302. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  303. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  304. package/contracts/authorization/AccessAdmin.sol +25 -23
  305. package/contracts/authorization/Authorization.sol +5 -2
  306. package/contracts/authorization/IAccessAdmin.sol +0 -1
  307. package/contracts/distribution/BasicDistribution.sol +6 -15
  308. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  309. package/contracts/distribution/Distribution.sol +25 -12
  310. package/contracts/distribution/DistributionService.sol +114 -54
  311. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  312. package/contracts/distribution/IDistributionComponent.sol +8 -4
  313. package/contracts/distribution/IDistributionService.sol +18 -2
  314. package/contracts/examples/fire/DamageLevel.sol +59 -0
  315. package/contracts/examples/fire/FirePool.sol +75 -0
  316. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  317. package/contracts/examples/fire/FireProduct.sol +411 -0
  318. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  319. package/contracts/examples/fire/FireUSD.sol +26 -0
  320. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  321. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  322. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  323. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  324. package/contracts/instance/IInstance.sol +7 -30
  325. package/contracts/instance/Instance.sol +10 -35
  326. package/contracts/instance/InstanceAdmin.sol +29 -7
  327. package/contracts/instance/InstanceAuthorizationV3.sol +5 -3
  328. package/contracts/instance/InstanceReader.sol +115 -25
  329. package/contracts/instance/InstanceService.sol +63 -41
  330. package/contracts/instance/InstanceServiceManager.sol +6 -7
  331. package/contracts/instance/InstanceStore.sol +12 -1
  332. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  333. package/contracts/instance/module/IBundle.sol +1 -1
  334. package/contracts/instance/module/IComponents.sol +4 -8
  335. package/contracts/instance/module/IDistribution.sol +0 -1
  336. package/contracts/instance/module/IPolicy.sol +24 -24
  337. package/contracts/mock/Dip.sol +1 -1
  338. package/contracts/oracle/IOracleComponent.sol +2 -1
  339. package/contracts/oracle/Oracle.sol +17 -7
  340. package/contracts/oracle/OracleService.sol +41 -33
  341. package/contracts/oracle/OracleServiceManager.sol +6 -6
  342. package/contracts/pool/BasicPool.sol +19 -18
  343. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  344. package/contracts/pool/BundleService.sol +208 -31
  345. package/contracts/pool/BundleServiceManager.sol +6 -6
  346. package/contracts/pool/IBundleService.sol +42 -5
  347. package/contracts/pool/IPoolComponent.sol +24 -8
  348. package/contracts/pool/IPoolService.sol +57 -36
  349. package/contracts/pool/Pool.sol +81 -35
  350. package/contracts/pool/PoolService.sol +231 -104
  351. package/contracts/pool/PoolServiceManager.sol +4 -4
  352. package/contracts/product/ApplicationService.sol +50 -29
  353. package/contracts/product/ApplicationServiceManager.sol +4 -4
  354. package/contracts/product/BasicProduct.sol +3 -32
  355. package/contracts/product/BasicProductAuthorization.sol +3 -0
  356. package/contracts/product/ClaimService.sol +251 -86
  357. package/contracts/product/ClaimServiceManager.sol +4 -4
  358. package/contracts/product/IApplicationService.sol +1 -0
  359. package/contracts/product/IClaimService.sol +31 -7
  360. package/contracts/product/IPolicyService.sol +34 -32
  361. package/contracts/product/IPricingService.sol +7 -7
  362. package/contracts/product/IProductComponent.sol +18 -4
  363. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  364. package/contracts/product/PolicyService.sol +404 -193
  365. package/contracts/product/PolicyServiceManager.sol +4 -4
  366. package/contracts/product/PricingService.sol +47 -47
  367. package/contracts/product/PricingServiceManager.sol +3 -3
  368. package/contracts/product/Product.sol +93 -51
  369. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  370. package/contracts/product/RiskServiceManager.sol +39 -0
  371. package/contracts/registry/ChainNft.sol +51 -19
  372. package/contracts/registry/IRegistry.sol +53 -12
  373. package/contracts/registry/IRegistryService.sol +0 -9
  374. package/contracts/registry/Registry.sol +320 -172
  375. package/contracts/registry/RegistryAdmin.sol +49 -32
  376. package/contracts/registry/RegistryService.sol +55 -48
  377. package/contracts/registry/RegistryServiceManager.sol +2 -2
  378. package/contracts/registry/ReleaseRegistry.sol +25 -67
  379. package/contracts/registry/ServiceAuthorizationV3.sol +6 -8
  380. package/contracts/shared/Component.sol +24 -44
  381. package/contracts/shared/ComponentService.sol +88 -28
  382. package/contracts/shared/ComponentServiceManager.sol +8 -5
  383. package/contracts/shared/ComponentVerifyingService.sol +2 -3
  384. package/contracts/shared/ContractLib.sol +38 -0
  385. package/contracts/shared/IComponent.sol +4 -4
  386. package/contracts/shared/IComponentService.sol +15 -9
  387. package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
  388. package/contracts/shared/INftOwnable.sol +2 -0
  389. package/contracts/shared/IPolicyHolder.sol +12 -22
  390. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
  391. package/contracts/shared/InstanceLinkedComponent.sol +26 -6
  392. package/contracts/shared/NftOwnable.sol +23 -7
  393. package/contracts/shared/PolicyHolder.sol +17 -57
  394. package/contracts/shared/Registerable.sol +4 -4
  395. package/contracts/shared/RegistryLinked.sol +3 -2
  396. package/contracts/shared/Service.sol +16 -11
  397. package/contracts/shared/TokenHandler.sol +100 -19
  398. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  399. package/contracts/staking/IStaking.sol +2 -1
  400. package/contracts/staking/IStakingService.sol +0 -3
  401. package/contracts/staking/StakeManagerLib.sol +18 -25
  402. package/contracts/staking/Staking.sol +16 -28
  403. package/contracts/staking/StakingManager.sol +8 -6
  404. package/contracts/staking/StakingReader.sol +12 -5
  405. package/contracts/staking/StakingService.sol +11 -29
  406. package/contracts/staking/StakingServiceManager.sol +2 -2
  407. package/contracts/staking/TargetManagerLib.sol +7 -3
  408. package/contracts/type/Amount.sol +27 -5
  409. package/contracts/type/Blocknumber.sol +7 -1
  410. package/contracts/type/ClaimId.sol +6 -1
  411. package/contracts/type/NftId.sol +1 -0
  412. package/contracts/type/ObjectType.sol +16 -11
  413. package/contracts/type/PayoutId.sol +10 -10
  414. package/contracts/type/Referral.sol +1 -0
  415. package/contracts/type/RiskId.sol +15 -1
  416. package/contracts/type/Seconds.sol +21 -1
  417. package/contracts/type/StateId.sol +1 -0
  418. package/contracts/type/Timestamp.sol +11 -1
  419. package/contracts/type/UFixed.sol +33 -10
  420. package/contracts/upgradeability/ProxyManager.sol +67 -34
  421. package/contracts/upgradeability/Versionable.sol +2 -2
  422. package/package.json +2 -1
  423. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  424. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  425. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  426. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  427. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  428. package/artifacts/contracts/registry/GlobalRegistry.sol/GlobalRegistry.dbg.json +0 -4
  429. package/artifacts/contracts/registry/GlobalRegistry.sol/GlobalRegistry.json +0 -1503
  430. package/artifacts/contracts/registry/GlobalRegistryAdmin.sol/GlobalRegistryAdmin.dbg.json +0 -4
  431. package/artifacts/contracts/registry/GlobalRegistryAdmin.sol/GlobalRegistryAdmin.json +0 -1881
  432. package/artifacts/contracts/registry/IGlobalRegistry.sol/IGlobalRegistry.dbg.json +0 -4
  433. package/artifacts/contracts/registry/IGlobalRegistry.sol/IGlobalRegistry.json +0 -974
  434. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  435. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  436. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  437. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  438. package/artifacts/contracts/shared/MainnetId.sol/MainnetContract.dbg.json +0 -4
  439. package/artifacts/contracts/shared/MainnetId.sol/MainnetContract.json +0 -34
  440. package/artifacts/contracts/shared/MainnetId.sol/MainnetId.dbg.json +0 -4
  441. package/artifacts/contracts/shared/MainnetId.sol/MainnetId.json +0 -24
  442. package/artifacts/contracts/shared/MainnetId.sol/SidenetContract.dbg.json +0 -4
  443. package/artifacts/contracts/shared/MainnetId.sol/SidenetContract.json +0 -34
  444. package/contracts/product/ProductServiceManager.sol +0 -39
  445. package/contracts/registry/GlobalRegistry.sol +0 -95
  446. package/contracts/registry/GlobalRegistryAdmin.sol +0 -38
  447. package/contracts/registry/IGlobalRegistry.sol +0 -17
  448. package/contracts/shared/InitializableCustom.sol +0 -177
  449. package/contracts/shared/MainnetId.sol +0 -29
@@ -26,6 +26,15 @@ interface IBundleService is IService {
26
26
 
27
27
  error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
28
28
 
29
+ error ErrorBundleServiceFeesWithdrawAmountExceedsLimit(Amount amount, Amount limit);
30
+
31
+ error ErrorBundleServiceUnstakeAmountExceedsLimit(Amount amount, Amount limit);
32
+
33
+ error ErrorBundleServiceExtensionLifetimeIsZero();
34
+
35
+ event LogBundleServiceFeesWithdrawn(NftId bundleNftId, address recipient, address tokenAddress, Amount amount);
36
+ event LogBundleServiceBundleExtended(NftId bundleNftId, Seconds lifetimeExtension, Timestamp extendedExpiredAt);
37
+
29
38
  /// @dev create a new bundle for the specified attributes
30
39
  /// may only be called by pool service
31
40
  function create(
@@ -41,11 +50,20 @@ interface IBundleService is IService {
41
50
  returns(NftId bundleNftId); // the nft id of the newly created bundle
42
51
 
43
52
 
44
- /// @dev increase bundle stakes by the specified amount
45
- /// may only be called by the bundle owner
46
- // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
53
+ /// @dev increase bundle stakes by the specified amount. bundle must not be expired or closed
54
+ /// may only be called by the pool service
55
+ function stake(IInstance instance, NftId bundleNftId, Amount amount) external;
56
+
57
+ /// @dev decrease bundle stakes by the specified amount
58
+ /// may only be called by the pool service
59
+ /// @param instance the instance relevant for the bundle
60
+ /// @param bundleNftId the bundle nft id
61
+ /// @param amount the amount to unstake (set to AmountLib.max() to unstake all available stakes)
62
+ /// @return unstakedAmount the effective unstaked amount
63
+ function unstake(IInstance instance, NftId bundleNftId, Amount amount) external returns (Amount unstakedAmount);
47
64
 
48
- // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
65
+ /// @dev extend the lifetime of the bundle by the specified time in seconds
66
+ function extend(NftId bundleNftId, Seconds lifetimeExtension) external returns (Timestamp extendedExpiredAt);
49
67
 
50
68
  /// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
51
69
  /// only active bundles may be locked
@@ -61,10 +79,12 @@ interface IBundleService is IService {
61
79
  /// only open bundles (active or locked) may be closed
62
80
  /// to close a bundle it may not have any non-closed polices attached to it
63
81
  /// may only be called by registered and unlocked pool components
82
+ /// @return balanceAmount the unstaked amount that was remaining in the bundle
83
+ /// @return feeAmount the fee amount that was remaining for the bundle
64
84
  function close(
65
85
  IInstance instance,
66
86
  NftId bundleNftId
67
- ) external;
87
+ ) external returns (Amount balanceAmount, Amount feeAmount);
68
88
 
69
89
  /// @dev set bundle fee to provided value
70
90
  /// may only be called by registered and unlocked pool components
@@ -103,4 +123,21 @@ interface IBundleService is IService {
103
123
  IInstance instance,
104
124
  NftId policyNftId
105
125
  ) external;
126
+
127
+ // FIXME: move to pool service
128
+ /// @dev Withdraw bundle feeds for the given bundle
129
+ /// @param bundleNftId the bundle Nft Id
130
+ /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
131
+ /// @return withdrawnAmount the effective withdrawn amount
132
+ function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
133
+
134
+ /// @dev returns true iff policy may be closed
135
+ /// a policy can be closed all conditions below are met
136
+ /// - policy exists
137
+ /// - has been activated
138
+ /// - is not yet closed
139
+ /// - has no open claims
140
+ /// - claim amount matches sum insured amount or is expired
141
+ function policyIsCloseable(IInstance instance, NftId policyNftId) external view returns (bool isCloseable);
142
+
106
143
  }
@@ -2,6 +2,7 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Amount} from "../type/Amount.sol";
5
+ import {ClaimId} from "../type/ClaimId.sol";
5
6
  import {Fee} from "../type/Fee.sol";
6
7
  import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
7
8
  import {IComponents} from "../instance/module/IComponents.sol";
@@ -20,10 +21,10 @@ interface IPoolComponent is IInstanceLinkedComponent {
20
21
 
21
22
  event LogPoolVerifiedByPool(address pool, NftId applicationNftId, Amount collateralizationAmount);
22
23
 
23
- /// @dev this is a callback function that is called by the product service when underwriting a policy.
24
- /// the pool has the option to check the details and object to underwriting by reverting.
25
- /// the function is only called for "active" pools that ask to be involved/notified
26
- /// by product related state changes.
24
+ /// @dev This is a callback function that is called by the product service when underwriting a policy.
25
+ /// The pool has the option to check the details and object to underwriting by reverting.
26
+ /// The function is only called for "active" pools that ask to be involved/notified.
27
+ /// The default implementation is empty.
27
28
  function verifyApplication(
28
29
  NftId applicationNftId,
29
30
  bytes memory applicationData,
@@ -32,9 +33,9 @@ interface IPoolComponent is IInstanceLinkedComponent {
32
33
  Amount collateralizationAmount
33
34
  ) external;
34
35
 
35
- /// @dev returns true iff the application matches with the bundle
36
- /// this is a callback function that is only called if a pool declares itself as a verifying pool
37
- /// default implementation returns true
36
+ /// @dev Returns true iff the application matches with the bundle.
37
+ /// This is a callback function that is only called if a pool declares itself as a verifying pool
38
+ /// The default implementation returns true.
38
39
  function applicationMatchesBundle(
39
40
  NftId applicationNftId,
40
41
  bytes memory applicationData,
@@ -46,7 +47,22 @@ interface IPoolComponent is IInstanceLinkedComponent {
46
47
  view
47
48
  returns (bool isMatching);
48
49
 
49
- /// @dev returns initial pool specific infos for this pool
50
+ /// @dev This is a callback function that is called by the claim service when a claim is confirmed.
51
+ /// The pool has the option to implement custom behavirous such as triggering a reinsurance claim or blocking the claim confirmaation.
52
+ /// The default implementation is empty.
53
+ function processConfirmedClaim(
54
+ NftId policyNftId,
55
+ ClaimId claimId,
56
+ Amount amount
57
+ ) external;
58
+
59
+ /// @dev Withdraw bundle feeds for the given bundle
60
+ /// @param bundleNftId the bundle Nft Id
61
+ /// @param amount the amount to withdraw. If set to AMOUNT_MAX, the full commission available is withdrawn
62
+ /// @return withdrawnAmount the effective withdrawn amount
63
+ function withdrawBundleFees(NftId bundleNftId, Amount amount) external returns (Amount withdrawnAmount);
64
+
65
+ /// @dev Returns initial pool specific infos for this pool
50
66
  function getInitialPoolInfo() external view returns (IComponents.PoolInfo memory info);
51
67
 
52
68
  }
@@ -2,14 +2,15 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Amount} from "../type/Amount.sol";
5
+ import {ClaimId} from "../type/ClaimId.sol";
5
6
  import {Fee} from "../type/Fee.sol";
6
- import {NftId} from "../type/NftId.sol";
7
- import {PayoutId} from "../type/PayoutId.sol";
8
7
  import {IBundle} from "../instance/module/IBundle.sol";
9
8
  import {IInstance} from "../instance/IInstance.sol";
10
9
  import {InstanceReader} from "../instance/InstanceReader.sol";
11
10
  import {IPolicy} from "../instance/module/IPolicy.sol";
12
11
  import {IService} from "../shared/IService.sol";
12
+ import {NftId} from "../type/NftId.sol";
13
+ import {PayoutId} from "../type/PayoutId.sol";
13
14
  import {RoleId} from "../type/RoleId.sol";
14
15
  import {Seconds} from "../type/Seconds.sol";
15
16
  import {StateId} from "../type/StateId.sol";
@@ -17,29 +18,29 @@ import {UFixed} from "../type/UFixed.sol";
17
18
 
18
19
  interface IPoolService is IService {
19
20
 
20
- event LogPoolServiceMaxCapitalAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
21
+ event LogPoolServiceMaxBalanceAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
21
22
  event LogPoolServiceBundleOwnerRoleSet(NftId poolNftId, RoleId bundleOwnerRole);
22
23
 
23
24
  event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
24
25
  event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
25
26
 
27
+ event LogPoolServiceBundleStaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount, Amount netAmount);
28
+ event LogPoolServiceBundleUnstaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount);
29
+
30
+ event LogPoolServiceProcessFundedClaim(NftId policyNftId, ClaimId claimId, Amount availableAmount);
31
+
32
+ error ErrorPoolServicePolicyPoolMismatch(NftId policyNftId, NftId productNftId, NftId expectedProductNftId);
26
33
  error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
27
34
  error ErrorPoolServiceInvalidTransferAmount(Amount expectedAmount, Amount actualAmount);
28
-
35
+ error ErrorPoolServiceBundlePoolMismatch(NftId bundleNftId, NftId poolNftId);
36
+ error ErrorPoolServiceMaxBalanceAmountExceeded(NftId poolNftId, Amount maxBalanceAmount, Amount currentBalanceAmount, Amount transferAmount);
37
+
29
38
  /// @dev defines the required role for bundle owners for the calling pool
30
39
  /// default implementation returns PUBLIC ROLE
31
40
  function setBundleOwnerRole(RoleId bundleOwnerRole) external;
32
41
 
33
- /// @dev sets the max capital amount for the calling pool
34
- function setMaxCapitalAmount(Amount maxCapitalAmount) external;
35
-
36
- /// @dev set pool sepecific fees
37
- function setFees(
38
- Fee memory poolFee,
39
- Fee memory stakingFee,
40
- Fee memory performanceFee
41
- ) external;
42
-
42
+ /// @dev sets the max balance amount for the calling pool
43
+ function setMaxBalanceAmount(Amount maxBalanceAmount) external;
43
44
 
44
45
  /// @dev locks required collateral to cover the specified application (and turn it into a policy)
45
46
  /// - retention level == 1: the full collateral amount will be locked by the specified bundle
@@ -71,10 +72,10 @@ interface IPoolService is IService {
71
72
  ) external;
72
73
 
73
74
 
74
- /// @dev reduces the locked collateral in the bundle associated with the specified policy
75
+ /// @dev reduces the locked collateral in the bundle associated with the specified policy and updates pool/bundle counters
75
76
  /// every payout of a policy reduces the collateral by the payout amount
76
77
  /// may only be called by the claim service for unlocked pool components
77
- function reduceCollateral(
78
+ function processPayout(
78
79
  IInstance instance,
79
80
  address token,
80
81
  NftId policyNftId,
@@ -83,13 +84,11 @@ interface IPoolService is IService {
83
84
  ) external;
84
85
 
85
86
 
86
- /// @dev create a new bundle for the provided parameters
87
- /// staking fees will be deducted by the pool service from the staking amount
88
- /// may only be called by registered and unlocked pool components
87
+ /// @dev create a new empty bundle with the provided parameters
88
+ /// may only be called by registered and unlocked pool components.
89
89
  function createBundle(
90
90
  address owner, // initial bundle owner
91
91
  Fee memory fee, // fees deducted from premium that go to bundle owner
92
- Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
93
92
  Seconds lifetime, // initial duration for which new policies are covered
94
93
  bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
95
94
  )
@@ -97,6 +96,18 @@ interface IPoolService is IService {
97
96
  returns(NftId bundleNftId); // the nft id of the newly created bundle
98
97
 
99
98
 
99
+ /// @dev increase stakes for bundle
100
+ /// staking fees will be deducted by the pool service from the staking amount
101
+ /// may only be called by registered and unlocked pool components
102
+ function stake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
103
+
104
+
105
+ /// @dev decrease stakes for bundle
106
+ /// performance fees will be deducted by the pool service from the staking amount
107
+ /// may only be called by registered and unlocked pool components
108
+ function unstake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
109
+
110
+
100
111
  /// @dev closes the specified bundle
101
112
  /// only open bundles (active or locked) may be closed
102
113
  /// to close a bundle it may not have any non-closed polices attached to it
@@ -105,22 +116,30 @@ interface IPoolService is IService {
105
116
  function closeBundle(NftId bundleNftId) external;
106
117
 
107
118
 
108
- /// @dev processes the sale of a bundle and track the pool fee and bundle fee amounts
109
- function processSale(NftId bundleNftId, IPolicy.Premium memory premium) external;
119
+ /// @dev Informs product about available funds to process a confirmed claim.
120
+ /// The function triggers a callback to the product component when the product's property isProcessingFundedClaims is set.
121
+ function processFundedClaim(NftId policyNftId, ClaimId claimId, Amount availableAmount) external;
110
122
 
111
- /// @dev increase stakes for bundle
112
- /// staking fees will be deducted by the pool service from the staking amount
113
- /// may only be called by registered and unlocked pool components
114
- // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
115
123
 
124
+ /// @dev Fund the specified pool wallet with the provided amount.
125
+ /// This function will collect the amount from the sender address and transfers it to the pool wallet.
126
+ /// The function will not update balance amounts managed by the framework.
127
+ /// Only available for externally managed pools.
128
+ function fundPoolWallet(NftId poolNftId, Amount amount) external;
116
129
 
117
- /// @dev decrease stakes for bundle
118
- /// performance fees will be deducted by the pool service from the staking amount
119
- /// may only be called by registered and unlocked pool components
120
- // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
130
+
131
+ /// @dev Defund the specified pool wallet with the provided amount.
132
+ /// This function will transfer the amount from the pool wallet to the sender address.
133
+ /// The function will not update balance amounts managed by the framework.
134
+ /// Only available for externally managed pools.
135
+ function defundPoolWallet(NftId poolNftId, Amount amount) external;
136
+
137
+
138
+ /// @dev processes the sale of a bundle and track the pool fee and bundle fee amounts
139
+ function processSale(NftId bundleNftId, IPolicy.PremiumInfo memory premium) external;
121
140
 
122
141
 
123
- /// @dev calulate required collateral for the provided parameters
142
+ /// @dev Calulate required collateral for the provided parameters.
124
143
  function calculateRequiredCollateral(
125
144
  InstanceReader instanceReader,
126
145
  NftId productNftId,
@@ -129,12 +148,14 @@ interface IPoolService is IService {
129
148
  external
130
149
  view
131
150
  returns(
132
- Amount localCollateralAmount,
133
- Amount totalCollateralAmount
151
+ Amount totalCollateralAmount,
152
+ Amount localCollateralAmount
134
153
  );
135
154
 
136
155
 
137
- /// @dev calulate required collateral for the provided parameters
156
+ /// @dev calulate required collateral for the provided parameters.
157
+ /// Collateralization is applied to sum insured.
158
+ /// Retention level defines the fraction of the collateral that is required locally.
138
159
  function calculateRequiredCollateral(
139
160
  UFixed collateralizationLevel,
140
161
  UFixed retentionLevel,
@@ -143,8 +164,8 @@ interface IPoolService is IService {
143
164
  external
144
165
  pure
145
166
  returns(
146
- Amount localCollateralAmount,
147
- Amount totalCollateralAmount
167
+ Amount totalCollateralAmount,
168
+ Amount localCollateralAmount
148
169
  );
149
170
 
150
171
  }
@@ -2,7 +2,8 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Amount, AmountLib} from "../type/Amount.sol";
5
- import {BUNDLE, COMPONENT, POOL} from "../type/ObjectType.sol";
5
+ import {BUNDLE, COMPONENT, POLICY, POOL} from "../type/ObjectType.sol";
6
+ import {ClaimId} from "../type/ClaimId.sol";
6
7
  import {IBundleService} from "./IBundleService.sol";
7
8
  import {IAuthorization} from "../authorization/IAuthorization.sol";
8
9
  import {IPoolComponent} from "./IPoolComponent.sol";
@@ -10,12 +11,12 @@ import {IPoolService} from "./IPoolService.sol";
10
11
  import {IComponents} from "../instance/module/IComponents.sol";
11
12
  import {IComponentService} from "../shared/IComponentService.sol";
12
13
  import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
13
- import {Fee, FeeLib} from "../type/Fee.sol";
14
- import {NftId, NftIdLib} from "../type/NftId.sol";
14
+ import {Fee} from "../type/Fee.sol";
15
+ import {NftId} from "../type/NftId.sol";
15
16
  import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
16
17
  import {Seconds} from "../type/Seconds.sol";
17
- import {TokenHandler} from "../shared/TokenHandler.sol";
18
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
18
+ import {Timestamp} from "../type/Timestamp.sol";
19
+ import {UFixedLib} from "../type/UFixed.sol";
19
20
 
20
21
  abstract contract Pool is
21
22
  InstanceLinkedComponent,
@@ -39,6 +40,16 @@ abstract contract Pool is
39
40
  }
40
41
 
41
42
 
43
+ function register()
44
+ external
45
+ virtual
46
+ onlyOwner()
47
+ {
48
+ _getPoolStorage()._componentService.registerPool();
49
+ _approveTokenHandler(type(uint256).max);
50
+ }
51
+
52
+
42
53
  /// @dev see {IPoolComponent.verifyApplication}
43
54
  function verifyApplication(
44
55
  NftId applicationNftId,
@@ -50,6 +61,7 @@ abstract contract Pool is
50
61
  public
51
62
  virtual
52
63
  restricted()
64
+ onlyNftOfType(applicationNftId, POLICY())
53
65
  {
54
66
  if(!applicationMatchesBundle(
55
67
  applicationNftId,
@@ -66,6 +78,21 @@ abstract contract Pool is
66
78
  }
67
79
 
68
80
 
81
+ /// @dev see {IPoolComponent.processConfirmedClaim}
82
+ function processConfirmedClaim(
83
+ NftId policyNftId,
84
+ ClaimId claimId,
85
+ Amount amount
86
+ )
87
+ public
88
+ virtual
89
+ restricted()
90
+ onlyNftOfType(policyNftId, POLICY())
91
+ {
92
+ // default implementation is empty
93
+ }
94
+
95
+
69
96
  /// @dev see {IPoolComponent.applicationMatchesBundle}
70
97
  /// Override this function to implement any custom application verification
71
98
  /// Default implementation always returns true
@@ -79,18 +106,23 @@ abstract contract Pool is
79
106
  public
80
107
  virtual
81
108
  view
109
+ onlyNftOfType(applicationNftId, POLICY())
110
+ onlyNftOfType(bundleNftId, BUNDLE())
82
111
  returns (bool isMatching)
83
112
  {
84
113
  return true;
85
114
  }
86
115
 
87
-
88
- function register()
89
- external
116
+ /// @inheritdoc IPoolComponent
117
+ function withdrawBundleFees(NftId bundleNftId, Amount amount)
118
+ external
90
119
  virtual
91
- onlyOwner()
120
+ restricted()
121
+ onlyBundleOwner(bundleNftId)
122
+ onlyNftOfType(bundleNftId, BUNDLE())
123
+ returns (Amount withdrawnAmount)
92
124
  {
93
- _getPoolStorage()._componentService.registerPool();
125
+ return _withdrawBundleFees(bundleNftId, amount);
94
126
  }
95
127
 
96
128
 
@@ -100,19 +132,16 @@ abstract contract Pool is
100
132
  view
101
133
  returns (IComponents.PoolInfo memory poolInfo)
102
134
  {
103
- return IComponents.PoolInfo(
104
- NftIdLib.zero(), // will be set when GIF registers the related product
105
- PUBLIC_ROLE(), // bundleOwnerRole
106
- AmountLib.max(), // maxCapitalAmount,
107
- isNftInterceptor(), // isInterceptingBundleTransfers
108
- false, // isExternallyManaged,
109
- false, // isVerifyingApplications,
110
- UFixedLib.toUFixed(1), // collateralizationLevel,
111
- UFixedLib.toUFixed(1), // retentionLevel,
112
- FeeLib.zero(), // initialPoolFee,
113
- FeeLib.zero(), // initialStakingFee,
114
- FeeLib.zero() // initialPerformanceFee,
115
- );
135
+ return IComponents.PoolInfo({
136
+ maxBalanceAmount: AmountLib.max(),
137
+ bundleOwnerRole: PUBLIC_ROLE(),
138
+ isInterceptingBundleTransfers: isNftInterceptor(),
139
+ isProcessingConfirmedClaims: false,
140
+ isExternallyManaged: false,
141
+ isVerifyingApplications: false,
142
+ collateralizationLevel: UFixedLib.toUFixed(1),
143
+ retentionLevel: UFixedLib.toUFixed(1)
144
+ });
116
145
  }
117
146
 
118
147
  // Internals
@@ -149,7 +178,7 @@ abstract contract Pool is
149
178
  $._bundleService = IBundleService(_getServiceAddress(BUNDLE()));
150
179
  $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
151
180
 
152
- registerInterface(type(IPoolComponent).interfaceId);
181
+ _registerInterface(type(IPoolComponent).interfaceId);
153
182
  }
154
183
 
155
184
  /// @dev increases the staked tokens by the specified amount
@@ -160,8 +189,9 @@ abstract contract Pool is
160
189
  )
161
190
  internal
162
191
  virtual
192
+ returns(Amount)
163
193
  {
164
- // TODO add implementation
194
+ return _getPoolStorage()._poolService.stake(bundleNftId, amount);
165
195
  }
166
196
 
167
197
 
@@ -173,8 +203,9 @@ abstract contract Pool is
173
203
  )
174
204
  internal
175
205
  virtual
206
+ returns(Amount netAmount)
176
207
  {
177
- // TODO add implementation
208
+ return _getPoolStorage()._poolService.unstake(bundleNftId, amount);
178
209
  }
179
210
 
180
211
 
@@ -186,8 +217,9 @@ abstract contract Pool is
186
217
  )
187
218
  internal
188
219
  virtual
220
+ returns (Timestamp extendedExpiredAt)
189
221
  {
190
- // TODO add implementation
222
+ return _getPoolStorage()._bundleService.extend(bundleNftId, lifetimeExtension);
191
223
  }
192
224
 
193
225
 
@@ -217,7 +249,7 @@ abstract contract Pool is
217
249
  /// To close a bundle all all linked policies MUST be in closed state as well.
218
250
  /// Closing a bundle finalizes the bundle bookkeeping including overall profit calculation.
219
251
  /// Once a bundle is closed this action cannot be reversed.
220
- function _close(NftId bundleNftId)
252
+ function _closeBundle(NftId bundleNftId)
221
253
  internal
222
254
  virtual
223
255
  {
@@ -239,13 +271,13 @@ abstract contract Pool is
239
271
  }
240
272
 
241
273
 
242
- /// @dev Sets the maximum overall capital amound held by this pool.
274
+ /// @dev Sets the maximum balance amound held by this pool.
243
275
  /// Function may only be called by pool owner.
244
- function _setMaxCapitalAmount(Amount maxCapitalAmount)
276
+ function _setMaxBalanceAmount(Amount maxBalanceAmount)
245
277
  internal
246
278
  virtual
247
279
  {
248
- _getPoolStorage()._poolService.setMaxCapitalAmount(maxCapitalAmount);
280
+ _getPoolStorage()._poolService.setMaxBalanceAmount(maxBalanceAmount);
249
281
  }
250
282
 
251
283
  /// @dev Sets the required role to create/own bundles.
@@ -275,11 +307,10 @@ abstract contract Pool is
275
307
  _getPoolStorage()._componentService.setPoolFees(poolFee, stakingFee, performanceFee);
276
308
  }
277
309
 
278
- /// @dev Creates a new bundle using the provided parameter values.
310
+ /// @dev Creates a new empty bundle using the provided parameter values.
279
311
  function _createBundle(
280
312
  address bundleOwner,
281
313
  Fee memory fee,
282
- Amount amount,
283
314
  Seconds lifetime,
284
315
  bytes memory filter
285
316
  )
@@ -289,19 +320,34 @@ abstract contract Pool is
289
320
  bundleNftId = _getPoolStorage()._poolService.createBundle(
290
321
  bundleOwner,
291
322
  fee,
292
- amount,
293
323
  lifetime,
294
324
  filter);
295
325
 
296
326
  // TODO add logging
297
327
  }
298
328
 
299
-
300
329
  // TODO remove function once this is no longer used to produce contract locations on the fly ...
301
330
  function getContractLocation(bytes memory name) external pure returns (bytes32 hash) {
302
331
  return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
303
332
  }
304
333
 
334
+ function _withdrawBundleFees(NftId bundleNftId, Amount amount)
335
+ internal
336
+ returns (Amount withdrawnAmount)
337
+ {
338
+ return _getPoolStorage()._bundleService.withdrawBundleFees(bundleNftId, amount);
339
+ }
340
+
341
+ function _processFundedClaim(
342
+ NftId policyNftId,
343
+ ClaimId claimId,
344
+ Amount availableAmount
345
+ )
346
+ internal
347
+ {
348
+ _getPoolStorage()._poolService.processFundedClaim(
349
+ policyNftId, claimId, availableAmount);
350
+ }
305
351
 
306
352
  function _getPoolStorage() private pure returns (PoolStorage storage $) {
307
353
  assembly {