@etherisc/gif-next 0.0.2-7afe9ac-654 → 0.0.2-7b09b39-121

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 (288) hide show
  1. package/README.md +16 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +2 -2
  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/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  14. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +30 -60
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +0 -38
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +93 -96
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +45 -49
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  28. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  29. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  30. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  31. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  32. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  33. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  34. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +2 -2
  36. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
  38. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +80 -122
  40. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
  42. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
  44. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +72 -194
  46. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  48. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  50. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  51. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  53. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  55. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  61. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  62. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  63. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  64. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +18 -48
  65. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  66. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  67. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  68. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  69. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  71. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +0 -38
  72. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  73. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  74. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  76. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  77. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +11 -99
  78. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  79. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  80. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  81. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +288 -67
  82. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +78 -34
  84. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  85. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +134 -1
  86. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  87. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1 -57
  88. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  89. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +189 -54
  90. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  91. package/artifacts/contracts/pool/Pool.sol/Pool.json +1 -95
  92. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +337 -90
  94. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +75 -19
  96. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  97. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +21 -32
  98. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +9 -17
  100. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  101. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +0 -38
  102. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  103. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
  104. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  105. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +82 -58
  106. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +34 -30
  108. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  109. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  110. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  111. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  112. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  113. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +184 -88
  114. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  115. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  116. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  117. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  118. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +291 -139
  119. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  120. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +54 -26
  121. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  122. package/artifacts/contracts/product/PricingService.sol/PricingService.json +7 -2
  123. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  125. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  126. package/artifacts/contracts/product/Product.sol/Product.json +0 -38
  127. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  128. package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
  129. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
  131. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  132. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  133. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  134. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  135. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  136. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  137. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  138. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2 -2
  139. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  140. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  141. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  142. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  143. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  144. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  145. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +2 -2
  146. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  147. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
  148. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  149. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  150. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  151. package/artifacts/contracts/shared/Component.sol/Component.json +0 -38
  152. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  153. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +148 -76
  154. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  155. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +47 -39
  156. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  157. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  158. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  159. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +56 -0
  160. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  161. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  162. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  163. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  164. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  166. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  167. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  168. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  169. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  170. package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
  171. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  172. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +0 -38
  173. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  174. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  175. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  176. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  177. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  178. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  179. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  180. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  181. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  182. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  183. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  184. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  185. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  186. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +53 -6
  187. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  188. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  189. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  190. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +12 -2
  191. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  192. package/artifacts/contracts/staking/Staking.sol/Staking.json +56 -70
  193. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  194. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  195. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +29 -17
  196. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  197. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  198. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  199. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
  200. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  201. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +12 -12
  202. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  203. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +17 -12
  204. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  205. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +7 -2
  206. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  207. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  208. package/artifacts/contracts/type/Amount.sol/AmountLib.json +13 -8
  209. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  210. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  211. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  212. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  213. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  214. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  215. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  216. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  217. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  218. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  219. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  220. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  221. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  222. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  223. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  224. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  226. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  228. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  230. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  232. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  234. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  236. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  238. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  239. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  240. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
  241. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  242. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  243. package/contracts/distribution/BasicDistribution.sol +4 -15
  244. package/contracts/distribution/Distribution.sol +3 -9
  245. package/contracts/distribution/DistributionService.sol +11 -13
  246. package/contracts/instance/InstanceReader.sol +10 -7
  247. package/contracts/instance/InstanceStore.sol +2 -1
  248. package/contracts/instance/base/ObjectLifecycle.sol +2 -3
  249. package/contracts/instance/module/IBundle.sol +1 -1
  250. package/contracts/instance/module/IComponents.sol +1 -6
  251. package/contracts/instance/module/IDistribution.sol +0 -1
  252. package/contracts/instance/module/IPolicy.sol +1 -1
  253. package/contracts/mock/Dip.sol +1 -1
  254. package/contracts/oracle/Oracle.sol +2 -6
  255. package/contracts/pool/BasicPool.sol +7 -5
  256. package/contracts/pool/BasicPoolAuthorization.sol +5 -2
  257. package/contracts/pool/BundleService.sol +126 -16
  258. package/contracts/pool/IBundleService.sol +21 -6
  259. package/contracts/pool/IPoolService.sol +15 -16
  260. package/contracts/pool/Pool.sol +14 -14
  261. package/contracts/pool/PoolService.sol +174 -48
  262. package/contracts/product/ApplicationService.sol +35 -15
  263. package/contracts/product/BasicProduct.sol +3 -33
  264. package/contracts/product/ClaimService.sol +16 -8
  265. package/contracts/product/IApplicationService.sol +1 -0
  266. package/contracts/product/IClaimService.sol +1 -0
  267. package/contracts/product/IPolicyService.sol +19 -12
  268. package/contracts/product/PolicyService.sol +189 -108
  269. package/contracts/product/PricingService.sol +5 -1
  270. package/contracts/product/Product.sol +22 -1
  271. package/contracts/registry/ReleaseRegistry.sol +0 -2
  272. package/contracts/shared/Component.sol +8 -7
  273. package/contracts/shared/ComponentService.sol +34 -4
  274. package/contracts/shared/IComponent.sol +4 -3
  275. package/contracts/shared/IComponentService.sol +5 -9
  276. package/contracts/shared/IInstanceLinkedComponent.sol +8 -8
  277. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  278. package/contracts/shared/NftOwnable.sol +2 -2
  279. package/contracts/shared/PolicyHolder.sol +2 -5
  280. package/contracts/shared/TokenHandler.sol +4 -0
  281. package/contracts/staking/Staking.sol +3 -1
  282. package/contracts/staking/StakingService.sol +8 -12
  283. package/contracts/type/Blocknumber.sol +7 -1
  284. package/contracts/type/Seconds.sol +13 -1
  285. package/contracts/type/Timestamp.sol +11 -1
  286. package/contracts/type/UFixed.sol +26 -8
  287. package/package.json +1 -1
  288. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
@@ -1,6 +1,9 @@
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
+
6
+ import {IBundle} from "../instance/module/IBundle.sol";
4
7
  import {IBundleService} from "./IBundleService.sol";
5
8
  import {IComponents} from "../instance/module/IComponents.sol";
6
9
  import {IComponentService} from "../shared/IComponentService.sol";
@@ -14,7 +17,7 @@ import {IStaking} from "../staking/IStaking.sol";
14
17
 
15
18
  import {Amount, AmountLib} from "../type/Amount.sol";
16
19
  import {Fee, FeeLib} from "../type/Fee.sol";
17
- import {NftId, NftIdLib} from "../type/NftId.sol";
20
+ import {NftId} from "../type/NftId.sol";
18
21
  import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
19
22
  import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
20
23
  import {Fee, FeeLib} from "../type/Fee.sol";
@@ -65,24 +68,20 @@ contract PoolService is
65
68
  registerInterface(type(IPoolService).interfaceId);
66
69
  }
67
70
 
68
-
69
- function setMaxCapitalAmount(Amount maxCapitalAmount)
71
+ /// @inheritdoc IPoolService
72
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
70
73
  external
71
74
  virtual
72
75
  {
73
- /*
74
76
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
75
77
  InstanceReader instanceReader = instance.getInstanceReader();
78
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
76
79
 
77
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
78
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
79
- Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
80
-
81
- poolInfo.maxCapitalAmount = maxCapitalAmount;
80
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
81
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
82
82
  instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
83
83
 
84
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
85
- */
84
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
86
85
  }
87
86
 
88
87
  function setBundleOwnerRole(RoleId bundleOwnerRole)
@@ -106,27 +105,7 @@ contract PoolService is
106
105
  emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
107
106
  }
108
107
 
109
-
110
- function setFees(
111
- Fee memory poolFee,
112
- Fee memory stakingFee,
113
- Fee memory performanceFee
114
- )
115
- external
116
- virtual
117
- {
118
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
119
-
120
- IComponents.PoolInfo memory poolInfo = instance.getInstanceReader().getPoolInfo(poolNftId);
121
- poolInfo.poolFee = poolFee;
122
- poolInfo.stakingFee = stakingFee;
123
- poolInfo.performanceFee = performanceFee;
124
-
125
- instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
126
-
127
- // TODO add logging
128
- }
129
-
108
+ /// @inheritdoc IPoolService
130
109
  function createBundle(
131
110
  address bundleOwner, // initial bundle owner
132
111
  Fee memory fee, // fees deducted from premium that go to bundle owner
@@ -136,24 +115,32 @@ contract PoolService is
136
115
  )
137
116
  external
138
117
  virtual
139
- returns(NftId bundleNftId)
118
+ returns(NftId bundleNftId, Amount netStakedAmount)
140
119
  {
141
120
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
142
- InstanceReader instanceReader = instance.getInstanceReader();
143
121
 
144
- (
145
- Amount stakingFeeAmount,
146
- Amount stakingNetAmount
147
- ) = FeeLib.calculateFee(
148
- _getStakingFee(instanceReader, poolNftId),
122
+ {
123
+ InstanceReader instanceReader = instance.getInstanceReader();
124
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
125
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
126
+ if (currentPoolBalance + stakingAmount > poolInfo.maxBalanceAmount) {
127
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, stakingAmount);
128
+ }
129
+ }
130
+
131
+
132
+ Amount stakingFeeAmount;
133
+ (stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
134
+ _getStakingFee(instance.getInstanceReader(), poolNftId),
149
135
  stakingAmount);
150
136
 
137
+
151
138
  bundleNftId = _bundleService.create(
152
139
  instance,
153
140
  poolNftId,
154
141
  bundleOwner,
155
142
  fee,
156
- stakingNetAmount,
143
+ netStakedAmount,
157
144
  lifetime,
158
145
  filter);
159
146
 
@@ -161,12 +148,12 @@ contract PoolService is
161
148
  _componentService.increasePoolBalance(
162
149
  instance.getInstanceStore(),
163
150
  poolNftId,
164
- stakingAmount,
151
+ netStakedAmount,
165
152
  stakingFeeAmount);
166
153
 
167
154
  // pool bookkeeping and collect tokens from bundle owner
168
155
  _collectStakingAmount(
169
- instanceReader,
156
+ instance.getInstanceReader(),
170
157
  poolNftId,
171
158
  bundleOwner,
172
159
  stakingAmount);
@@ -180,8 +167,8 @@ contract PoolService is
180
167
  view
181
168
  returns (Fee memory stakingFee)
182
169
  {
183
- NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
184
- return instanceReader.getPoolInfo(productNftId).stakingFee;
170
+ NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
171
+ return instanceReader.getProductInfo(productNftId).stakingFee;
185
172
  }
186
173
 
187
174
  function closeBundle(NftId bundleNftId)
@@ -190,16 +177,147 @@ contract PoolService is
190
177
  {
191
178
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
192
179
 
193
- // TODO book keeping for pool collateral released outside of retention level
180
+ // TODO get performance fee for pool (#477)
194
181
 
195
182
  // releasing collateral in bundle
196
- _bundleService.close(instance, bundleNftId);
197
-
198
- // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
183
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
199
184
 
185
+ _componentService.decreasePoolBalance(
186
+ instance.getInstanceStore(),
187
+ poolNftId,
188
+ unstakedAmount + feeAmount,
189
+ AmountLib.zero());
190
+
200
191
  emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
192
+
193
+ if ((unstakedAmount + feeAmount).gtz()){
194
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
195
+ TokenHandler tokenHandler = poolComponentInfo.tokenHandler;
196
+ IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
197
+
198
+ // TODO: centralize token handling (issue #471)
199
+
200
+ // check allowance
201
+ uint256 tokenAllowance = token.allowance(poolComponentInfo.wallet, address(tokenHandler));
202
+ if (tokenAllowance < (unstakedAmount.toInt() + feeAmount.toInt())) {
203
+ revert ErrorPoolServiceWalletAllowanceTooSmall(
204
+ poolComponentInfo.wallet,
205
+ address(tokenHandler),
206
+ tokenAllowance,
207
+ unstakedAmount.toInt() + feeAmount.toInt());
208
+ }
209
+
210
+ // transfer amount to bundle owner
211
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
212
+ tokenHandler.transfer(poolComponentInfo.wallet, bundleOwner, unstakedAmount + feeAmount);
213
+ }
214
+ }
215
+
216
+ /// @inheritdoc IPoolService
217
+ function stake(NftId bundleNftId, Amount amount)
218
+ external
219
+ virtual
220
+ // TODO: restricted() (once #462 is done)
221
+ returns(Amount netAmount)
222
+ {
223
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
224
+ InstanceReader instanceReader = instance.getInstanceReader();
225
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
226
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
227
+
228
+ if (bundleInfo.poolNftId != poolNftId) {
229
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
230
+ }
231
+
232
+ {
233
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
234
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
235
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
236
+ }
237
+ }
238
+
239
+ // calculate fees
240
+ Amount feeAmount;
241
+ (
242
+ feeAmount,
243
+ netAmount
244
+ ) = FeeLib.calculateFee(
245
+ _getStakingFee(instanceReader, poolNftId),
246
+ amount);
247
+
248
+ // do all the bookkeeping
249
+ _componentService.increasePoolBalance(
250
+ instance.getInstanceStore(),
251
+ poolNftId,
252
+ netAmount,
253
+ feeAmount);
254
+
255
+ _bundleService.stake(instance, bundleNftId, netAmount);
256
+
257
+ // collect tokens from bundle owner
258
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
259
+ emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
260
+ _collectStakingAmount(
261
+ instanceReader,
262
+ poolNftId,
263
+ bundleOwner,
264
+ amount);
201
265
  }
202
266
 
267
+ /// @inheritdoc IPoolService
268
+ function unstake(NftId bundleNftId, Amount amount)
269
+ external
270
+ virtual
271
+ // TODO: restricted() (once #462 is done)
272
+ returns(Amount netAmount)
273
+ {
274
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
275
+ InstanceReader instanceReader = instance.getInstanceReader();
276
+ InstanceStore instanceStore = instance.getInstanceStore();
277
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
278
+
279
+ if (bundleInfo.poolNftId != poolNftId) {
280
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
281
+ }
282
+
283
+ if (amount.eqz()) {
284
+ revert ErrorPoolServiceAmountIsZero();
285
+ }
286
+
287
+ // call bundle service for bookkeeping and additional checks
288
+ Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
289
+
290
+ // Important: from now on work only with unstakedAmount as it is the only reliable amount.
291
+ // if amount was max, this was set to the available amount
292
+
293
+ // TODO: handle performance fees (issue #477)
294
+
295
+ // update pool bookkeeping - performance fees stay in the pool, but as fees
296
+ _componentService.decreasePoolBalance(
297
+ instanceStore,
298
+ poolNftId,
299
+ unstakedAmount,
300
+ AmountLib.zero());
301
+
302
+ IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
303
+ address poolWallet = poolComponentInfo.wallet;
304
+
305
+ // check allowance
306
+ {
307
+ IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
308
+ uint256 tokenAllowance = token.allowance(poolWallet, address(poolComponentInfo.tokenHandler));
309
+ if (tokenAllowance < unstakedAmount.toInt()) {
310
+ revert ErrorPoolServiceWalletAllowanceTooSmall(poolWallet, address(poolComponentInfo.tokenHandler), tokenAllowance, amount.toInt());
311
+ }
312
+ }
313
+
314
+ // transfer amount to bundle owner
315
+ address owner = getRegistry().ownerOf(bundleNftId);
316
+ emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
317
+ // TODO: centralize token handling (issue #471)
318
+ poolComponentInfo.tokenHandler.transfer(poolWallet, owner, unstakedAmount);
319
+ return unstakedAmount;
320
+ }
203
321
 
204
322
  function processSale(
205
323
  NftId bundleNftId,
@@ -420,10 +538,18 @@ contract PoolService is
420
538
  address poolWallet = componentInfo.wallet;
421
539
 
422
540
  if(amount.gtz()) {
541
+ uint256 allowance = IERC20Metadata(componentInfo.token).allowance(bundleOwner, address(tokenHandler));
542
+ if (allowance < amount.toInt()) {
543
+ revert ErrorPoolServiceWalletAllowanceTooSmall(bundleOwner, address(tokenHandler), allowance, amount.toInt());
544
+ }
545
+
546
+ // TODO: centralize token handling (issue #471)
423
547
  tokenHandler.transfer(
424
548
  bundleOwner,
425
549
  poolWallet,
426
550
  amount);
551
+ } else {
552
+ revert ErrorPoolServiceAmountIsZero();
427
553
  }
428
554
  }
429
555
 
@@ -128,6 +128,7 @@ contract ApplicationService is
128
128
  address applicationOwner,
129
129
  RiskId riskId,
130
130
  Amount sumInsuredAmount,
131
+ Amount premiumAmount,
131
132
  Seconds lifetime,
132
133
  NftId bundleNftId,
133
134
  ReferralId referralId,
@@ -152,13 +153,45 @@ contract ApplicationService is
152
153
  applicationNftId = _registerApplication(productNftId, applicationOwner);
153
154
 
154
155
  // create policy info for application
155
- IPolicy.PolicyInfo memory applicationInfo = IPolicy.PolicyInfo({
156
+ IPolicy.PolicyInfo memory applicationInfo = _createApplicationInfo(
157
+ productNftId,
158
+ riskId,
159
+ sumInsuredAmount,
160
+ premiumAmount,
161
+ lifetime,
162
+ bundleNftId,
163
+ referralId,
164
+ applicationData);
165
+
166
+ // register application with instance
167
+ instance.getInstanceStore().createApplication(
168
+ applicationNftId,
169
+ applicationInfo);
170
+
171
+ // TODO: add logging
172
+ }
173
+
174
+ function _createApplicationInfo(
175
+ NftId productNftId,
176
+ RiskId riskId,
177
+ Amount sumInsuredAmount,
178
+ Amount premiumAmount,
179
+ Seconds lifetime,
180
+ NftId bundleNftId,
181
+ ReferralId referralId,
182
+ bytes memory applicationData
183
+ )
184
+ internal
185
+ virtual
186
+ returns (IPolicy.PolicyInfo memory applicationInfo)
187
+ {
188
+ return IPolicy.PolicyInfo({
156
189
  productNftId: productNftId,
157
190
  bundleNftId: bundleNftId,
158
191
  referralId: referralId,
159
192
  riskId: riskId,
160
193
  sumInsuredAmount: sumInsuredAmount,
161
- premiumAmount: AmountLib.zero(),
194
+ premiumAmount: premiumAmount,
162
195
  premiumPaidAmount: AmountLib.zero(),
163
196
  lifetime: lifetime,
164
197
  applicationData: applicationData,
@@ -171,21 +204,8 @@ contract ApplicationService is
171
204
  expiredAt: zeroTimestamp(),
172
205
  closedAt: zeroTimestamp()
173
206
  });
174
-
175
- // TODO consider to provide this amount externally
176
- // actual calculation is done 2nd time anyway for premium collection
177
- // calculate premium amount
178
- applicationInfo.premiumAmount = _calculatePremiumAmount(applicationInfo);
179
-
180
- // register application with instance
181
- instance.getInstanceStore().createApplication(
182
- applicationNftId,
183
- applicationInfo);
184
-
185
- // TODO: add logging
186
207
  }
187
208
 
188
-
189
209
  function renew(
190
210
  NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
191
211
  NftId bundleNftId // will likely need a newer bundle for underwriting
@@ -1,43 +1,15 @@
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
-
6
- import {Amount, AmountLib} from "../type/Amount.sol";
7
- import {ClaimId} from "../type/ClaimId.sol";
8
- import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
9
- import {Fee, FeeLib} from "../type/Fee.sol";
10
- import {IRisk} from "../instance/module/IRisk.sol";
11
- import {IApplicationService} from "./IApplicationService.sol";
4
+ import {Fee} from "../type/Fee.sol";
12
5
  import {IAuthorization} from "../authorization/IAuthorization.sol";
13
- import {IComponentService} from "../shared/IComponentService.sol";
14
- import {IPolicyService} from "./IPolicyService.sol";
15
- import {IProductService} from "./IProductService.sol";
16
- import {IClaimService} from "./IClaimService.sol";
17
- import {IPricingService} from "./IPricingService.sol";
18
- import {IProductComponent} from "./IProductComponent.sol";
19
- import {NftId, NftIdLib} from "../type/NftId.sol";
6
+ import {NftId} from "../type/NftId.sol";
20
7
  import {Product} from "../product/Product.sol";
21
- import {PayoutId} from "../type/PayoutId.sol";
22
- import {COMPONENT, PRODUCT, APPLICATION, POLICY, CLAIM, PRICE } from "../type/ObjectType.sol";
23
- import {ReferralId} from "../type/Referral.sol";
24
- import {RiskId, RiskIdLib} from "../type/RiskId.sol";
25
- import {Seconds} from "../type/Seconds.sol";
26
- import {StateId} from "../type/StateId.sol";
27
- import {Timestamp} from "../type/Timestamp.sol";
28
-
29
- import {TokenHandler} from "../shared/TokenHandler.sol";
30
-
31
- import {InstanceReader} from "../instance/InstanceReader.sol";
32
- import {IPolicy} from "../instance/module/IPolicy.sol";
33
- import {IComponents} from "../instance/module/IComponents.sol";
34
- import {Pool} from "../pool/Pool.sol";
35
- import {Distribution} from "../distribution/Distribution.sol";
36
8
 
37
9
  abstract contract BasicProduct is
38
10
  Product
39
11
  {
40
-
12
+
41
13
  function setFees(
42
14
  Fee memory productFee,
43
15
  Fee memory processingFee
@@ -49,8 +21,6 @@ abstract contract BasicProduct is
49
21
  {
50
22
  _setFees(productFee, processingFee);
51
23
  }
52
-
53
-
54
24
  function _initializeBasicProduct(
55
25
  address registry,
56
26
  NftId instanceNftId,
@@ -294,7 +294,7 @@ contract ClaimService is
294
294
  (
295
295
  Amount netPayoutAmount,
296
296
  address beneficiary
297
- ) = _transferPayoutAmount(
297
+ ) = _calculatePayoutAmount(
298
298
  instanceReader,
299
299
  policyNftId,
300
300
  policyInfo,
@@ -302,11 +302,24 @@ contract ClaimService is
302
302
 
303
303
  // TODO callback IPolicyHolder
304
304
 
305
+ if (netPayoutAmount.eqz()) {
306
+ revert ErrorClaimsServicePayoutAmountIsZero(policyNftId, payoutId);
307
+ }
308
+
305
309
  emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount);
310
+
311
+ {
312
+ NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
313
+ IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
314
+ // TODO: centralize token handling (issue #471)
315
+ poolInfo.tokenHandler.transfer(
316
+ poolInfo.wallet,
317
+ beneficiary,
318
+ netPayoutAmount);
319
+ }
306
320
  }
307
321
 
308
- // TODO create (I)TreasuryService that deals with all gif related token transfers
309
- function _transferPayoutAmount(
322
+ function _calculatePayoutAmount(
310
323
  InstanceReader instanceReader,
311
324
  NftId policyNftId,
312
325
  IPolicy.PolicyInfo memory policyInfo,
@@ -336,11 +349,6 @@ contract ClaimService is
336
349
  // TODO transfer processing fees to product wallet
337
350
  // TODO inform product to update fee book keeping
338
351
  }
339
-
340
- poolInfo.tokenHandler.transfer(
341
- poolInfo.wallet,
342
- beneficiary,
343
- netPayoutAmount);
344
352
  }
345
353
  }
346
354
 
@@ -24,6 +24,7 @@ interface IApplicationService is IService {
24
24
  address applicationOwner,
25
25
  RiskId riskId,
26
26
  Amount sumInsuredAmount,
27
+ Amount premiumAmount,
27
28
  Seconds lifetime,
28
29
  NftId bundleNftId,
29
30
  ReferralId referralId,
@@ -31,6 +31,7 @@ interface IClaimService is
31
31
  error ErrorClaimServicePolicyProductMismatch(NftId policyNftId, NftId expectedProduct, NftId actualProduct);
32
32
  error ErrorClaimServicePolicyNotOpen(NftId policyNftId);
33
33
  error ErrorClaimServiceClaimExceedsSumInsured(NftId policyNftId, Amount sumInsured, Amount payoutsIncludingClaimAmount);
34
+ error ErrorClaimsServicePayoutAmountIsZero(NftId policyNftId, PayoutId payoutId);
34
35
 
35
36
  error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint8 openPayouts);
36
37
  error ErrorClaimServiceClaimWithMissingPayouts(NftId policyNftId, ClaimId claimId, Amount claimAmount, Amount paidAmount);
@@ -20,25 +20,31 @@ interface IPolicyService is IService {
20
20
 
21
21
  error ErrorPolicyServicePolicyProductMismatch(NftId applicationNftId, NftId expectedProductNftId, NftId actualProductNftId);
22
22
  error ErrorPolicyServicePolicyStateNotApplied(NftId applicationNftId);
23
- error ErrorPolicyServicePolicyStateNotCollateralizedOrApplied(NftId applicationNftId);
23
+ error ErrorPolicyServicePolicyStateNotCollateralized(NftId applicationNftId);
24
+ error ErrorPolicyServicePolicyAlreadyActivated(NftId policyNftId);
24
25
 
25
- error ErrorPolicyServicePremiumHigherThanExpected(Amount premiumExpectedAmount, Amount premiumToBePaidAmount);
26
+ error ErrorPolicyServicePremiumHigherThanExpected(uint256 premiumExpectedAmount, uint256 premiumToBePaidAmount);
26
27
  error ErrorPolicyServiceBalanceInsufficient(address policyOwner, uint256 premiumAmount, uint256 balance);
27
28
  error ErrorPolicyServiceAllowanceInsufficient(address policyOwner, address tokenHandler, uint256 premiumAmount, uint256 allowance);
28
29
 
29
- error ErrorIPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
30
+ error ErrorPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
30
31
  error ErrorPolicyServicePremiumAlreadyPaid(NftId policyNftId, Amount premiumPaidAmount);
31
- error ErrorIPolicyServicePolicyNotActivated(NftId policyNftId);
32
- error ErrorIPolicyServicePolicyAlreadyClosed(NftId policyNftId);
33
- error ErrorIPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
32
+ error ErrorPolicyServicePolicyNotActivated(NftId policyNftId);
33
+ error ErrorPolicyServicePolicyAlreadyClosed(NftId policyNftId);
34
+ error ErrorPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
34
35
  error ErrorPolicyServicePremiumNotFullyPaid(NftId policyNftId, Amount premiumAmount, Amount premiumPaidAmount);
35
- error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
36
- error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
36
+ error ErrorPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
37
+ error ErrorPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
38
+ error ErrorPolicyServicePolicyExpirationTooLate(NftId policyNftId, Timestamp upperLimit, Timestamp expiredAt);
39
+ error ErrorPolicyServicePolicyExpirationTooEarly(NftId policyNftId, Timestamp lowerLimit, Timestamp expiredAt);
37
40
 
38
41
  error ErrorPolicyServicePremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount recalculatedPremiumAmount);
39
42
  error ErrorPolicyServiceTransferredPremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount transferredPremiumAmount);
40
43
 
41
- /// @dev collateralizes the policy represented by {policyNftId}
44
+ event LogPolicyServicePolicyDeclined(NftId policyNftId);
45
+ event LogPolicyServicePolicyExpirationUpdated(NftId policyNftId, Timestamp expiredAt);
46
+
47
+ /// @dev collateralizes the policy represented by {policyNftId}. locks the sum insured amount in the pool.
42
48
  /// sets the policy state to collateralized
43
49
  /// may set the policy state to activated and set the activation date
44
50
  /// optionally collects premiums and activates the policy.
@@ -57,18 +63,19 @@ interface IPolicyService is IService {
57
63
  /// only the related product may decline an application
58
64
  function decline(NftId policyNftId) external;
59
65
 
60
- /// @dev collects the premium token for the specified policy
66
+ /// @dev collects the premium token for the specified policy (must be in COLLATERALIZED or ACTIVE state)
61
67
  function collectPremium(NftId policyNftId, Timestamp activateAt) external;
62
68
 
63
69
  /// @dev activates the specified policy and sets the activation date in the policy metadata
64
70
  /// to activate a policy it needs to be in underwritten state
65
71
  function activate(NftId policyNftId, Timestamp activateAt) external;
66
72
 
67
- /// @dev expires the specified policy and sets the expiry date in the policy metadata
73
+ /// @dev expires the specified policy and sets the expiry date in the policy metadata. If expiry date is set to 0, then the earliest possible expiry date (current blocktime) is set
68
74
  /// to expire a policy it must be in active state, policies may be expired even when the predefined expiry date is still in the future
69
75
  /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
70
76
  /// this function can only be called by a product. the policy needs to match with the calling product
71
- function expire(NftId policyNftId) external;
77
+ /// @return expiredAt the effective expiry date
78
+ function expire(NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
72
79
 
73
80
  /// @dev closes the specified policy and sets the closed data in the policy metadata
74
81
  /// a policy can only be closed when it has been expired. in addition, it must not have any open claims