@etherisc/gif-next 0.0.2-888aabe-141 → 0.0.2-897d5be-225

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 (324) 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 +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 +66 -101
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +24 -75
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +182 -74
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +54 -38
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +24 -37
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +71 -0
  30. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  31. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  32. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  33. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  34. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  36. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +54 -54
  38. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
  40. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +81 -123
  42. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +16 -16
  44. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +9 -9
  46. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +74 -196
  48. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  50. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  53. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  55. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  56. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  57. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  63. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  64. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  65. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  66. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +59 -88
  67. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  68. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  69. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  71. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +30 -37
  72. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  73. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  74. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +27 -72
  75. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  76. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  77. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  78. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  79. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  80. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +36 -137
  81. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  82. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  83. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  84. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +383 -51
  85. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +90 -26
  87. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  88. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +205 -1
  89. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  90. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +26 -95
  91. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  92. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +194 -54
  93. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  94. package/artifacts/contracts/pool/Pool.sol/Pool.json +26 -133
  95. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  96. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +262 -90
  97. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +35 -19
  99. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  100. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +21 -32
  101. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  102. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +9 -17
  103. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  104. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +0 -75
  105. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  107. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  108. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +74 -58
  109. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +30 -30
  111. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  112. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  113. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  114. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  115. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  116. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +188 -108
  117. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  118. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  119. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -37
  120. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  121. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  122. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  123. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +254 -174
  124. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +42 -26
  126. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  127. package/artifacts/contracts/product/PricingService.sol/PricingService.json +7 -2
  128. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  129. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  130. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  131. package/artifacts/contracts/product/Product.sol/Product.json +0 -75
  132. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  133. package/artifacts/contracts/product/{ProductService.sol/ProductService.json → RiskService.sol/RiskService.json} +4 -17
  134. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  135. package/artifacts/contracts/product/{ProductServiceManager.sol/ProductServiceManager.json → RiskServiceManager.sol/RiskServiceManager.json} +12 -12
  136. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  137. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  138. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  139. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  140. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  141. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  142. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  143. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +28 -28
  144. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  145. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  146. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  147. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  148. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  149. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  150. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +2 -2
  151. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  152. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
  153. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  154. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  155. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  156. package/artifacts/contracts/shared/Component.sol/Component.json +0 -64
  157. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  158. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +177 -93
  159. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +43 -47
  161. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  162. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  163. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  164. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +92 -0
  166. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  167. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -37
  168. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  169. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  170. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  171. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  173. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  175. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  176. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  177. package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
  178. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  179. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -75
  180. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  181. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  182. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  183. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  184. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  185. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  186. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  187. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  188. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  189. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  190. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  191. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  192. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  193. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  194. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  195. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  196. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  197. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +0 -26
  198. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  199. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  200. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +40 -113
  201. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  202. package/artifacts/contracts/staking/Staking.sol/Staking.json +44 -108
  203. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  204. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  205. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +23 -23
  206. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  207. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  208. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  209. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
  210. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  211. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +12 -12
  212. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  213. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +17 -12
  214. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  215. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +7 -2
  216. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  217. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  218. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  219. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  220. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  221. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  222. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  223. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  224. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  225. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  226. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  228. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  230. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  232. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  234. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  236. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  237. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  238. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  240. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  242. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  243. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  244. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  245. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  246. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  247. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  248. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  249. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  250. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  251. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
  252. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  253. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  254. package/contracts/authorization/Authorization.sol +0 -1
  255. package/contracts/distribution/BasicDistribution.sol +4 -15
  256. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  257. package/contracts/distribution/Distribution.sol +15 -21
  258. package/contracts/distribution/DistributionService.sol +45 -11
  259. package/contracts/distribution/IDistributionComponent.sol +5 -2
  260. package/contracts/distribution/IDistributionService.sol +10 -0
  261. package/contracts/instance/IInstance.sol +7 -30
  262. package/contracts/instance/Instance.sol +8 -33
  263. package/contracts/instance/InstanceAdmin.sol +23 -4
  264. package/contracts/instance/InstanceReader.sol +10 -7
  265. package/contracts/instance/InstanceService.sol +52 -28
  266. package/contracts/instance/InstanceStore.sol +2 -1
  267. package/contracts/instance/base/ObjectLifecycle.sol +2 -3
  268. package/contracts/instance/module/IBundle.sol +1 -1
  269. package/contracts/instance/module/IComponents.sol +1 -6
  270. package/contracts/instance/module/IDistribution.sol +0 -1
  271. package/contracts/instance/module/IPolicy.sol +1 -1
  272. package/contracts/mock/Dip.sol +1 -1
  273. package/contracts/oracle/IOracleComponent.sol +2 -1
  274. package/contracts/oracle/Oracle.sol +16 -6
  275. package/contracts/oracle/OracleService.sol +1 -0
  276. package/contracts/pool/BasicPool.sol +7 -5
  277. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  278. package/contracts/pool/BundleService.sol +168 -16
  279. package/contracts/pool/IBundleService.sol +33 -5
  280. package/contracts/pool/IPoolComponent.sol +6 -2
  281. package/contracts/pool/IPoolService.sol +37 -24
  282. package/contracts/pool/Pool.sol +39 -40
  283. package/contracts/pool/PoolService.sol +165 -60
  284. package/contracts/product/ApplicationService.sol +37 -17
  285. package/contracts/product/BasicProduct.sol +3 -32
  286. package/contracts/product/BasicProductAuthorization.sol +3 -0
  287. package/contracts/product/ClaimService.sol +8 -8
  288. package/contracts/product/IApplicationService.sol +1 -0
  289. package/contracts/product/IClaimService.sol +1 -0
  290. package/contracts/product/IPolicyService.sol +23 -17
  291. package/contracts/product/IProductComponent.sol +1 -3
  292. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  293. package/contracts/product/PolicyService.sol +242 -133
  294. package/contracts/product/PricingService.sol +5 -1
  295. package/contracts/product/Product.sol +39 -37
  296. package/contracts/product/{ProductService.sol → RiskService.sol} +4 -6
  297. package/contracts/product/{ProductServiceManager.sol → RiskServiceManager.sol} +8 -8
  298. package/contracts/registry/RegistryAdmin.sol +10 -1
  299. package/contracts/registry/ReleaseRegistry.sol +0 -2
  300. package/contracts/shared/Component.sol +17 -23
  301. package/contracts/shared/ComponentService.sol +58 -34
  302. package/contracts/shared/IComponent.sol +4 -4
  303. package/contracts/shared/IComponentService.sol +9 -9
  304. package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
  305. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  306. package/contracts/shared/InstanceLinkedComponent.sol +21 -0
  307. package/contracts/shared/NftOwnable.sol +2 -2
  308. package/contracts/shared/PolicyHolder.sol +2 -5
  309. package/contracts/shared/TokenHandler.sol +100 -19
  310. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  311. package/contracts/staking/StakeManagerLib.sol +0 -25
  312. package/contracts/staking/Staking.sol +5 -22
  313. package/contracts/staking/StakingService.sol +8 -12
  314. package/contracts/type/Amount.sol +12 -5
  315. package/contracts/type/Blocknumber.sol +7 -1
  316. package/contracts/type/Referral.sol +1 -0
  317. package/contracts/type/Seconds.sol +13 -1
  318. package/contracts/type/Timestamp.sol +11 -1
  319. package/contracts/type/UFixed.sol +29 -10
  320. package/package.json +1 -1
  321. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  322. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  323. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  324. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
@@ -1,6 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IBundle} from "../instance/module/IBundle.sol";
4
5
  import {IBundleService} from "./IBundleService.sol";
5
6
  import {IComponents} from "../instance/module/IComponents.sol";
6
7
  import {IComponentService} from "../shared/IComponentService.sol";
@@ -14,7 +15,7 @@ import {IStaking} from "../staking/IStaking.sol";
14
15
 
15
16
  import {Amount, AmountLib} from "../type/Amount.sol";
16
17
  import {Fee, FeeLib} from "../type/Fee.sol";
17
- import {NftId, NftIdLib} from "../type/NftId.sol";
18
+ import {NftId} from "../type/NftId.sol";
18
19
  import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
19
20
  import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
20
21
  import {Fee, FeeLib} from "../type/Fee.sol";
@@ -32,9 +33,6 @@ contract PoolService is
32
33
  ComponentVerifyingService,
33
34
  IPoolService
34
35
  {
35
- using NftIdLib for NftId;
36
- using AmountLib for Amount;
37
-
38
36
  IBundleService internal _bundleService;
39
37
  IComponentService internal _componentService;
40
38
  IInstanceService private _instanceService;
@@ -68,24 +66,20 @@ contract PoolService is
68
66
  registerInterface(type(IPoolService).interfaceId);
69
67
  }
70
68
 
71
-
72
- function setMaxCapitalAmount(Amount maxCapitalAmount)
69
+ /// @inheritdoc IPoolService
70
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
73
71
  external
74
72
  virtual
75
73
  {
76
- /*
77
74
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
78
75
  InstanceReader instanceReader = instance.getInstanceReader();
76
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
79
77
 
80
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
81
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
82
- Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
83
-
84
- poolInfo.maxCapitalAmount = maxCapitalAmount;
78
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
79
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
85
80
  instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
86
81
 
87
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
88
- */
82
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
89
83
  }
90
84
 
91
85
  function setBundleOwnerRole(RoleId bundleOwnerRole)
@@ -109,27 +103,7 @@ contract PoolService is
109
103
  emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
110
104
  }
111
105
 
112
-
113
- function setFees(
114
- Fee memory poolFee,
115
- Fee memory stakingFee,
116
- Fee memory performanceFee
117
- )
118
- external
119
- virtual
120
- {
121
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
122
-
123
- IComponents.PoolInfo memory poolInfo = instance.getInstanceReader().getPoolInfo(poolNftId);
124
- poolInfo.poolFee = poolFee;
125
- poolInfo.stakingFee = stakingFee;
126
- poolInfo.performanceFee = performanceFee;
127
-
128
- instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
129
-
130
- // TODO add logging
131
- }
132
-
106
+ /// @inheritdoc IPoolService
133
107
  function createBundle(
134
108
  address bundleOwner, // initial bundle owner
135
109
  Fee memory fee, // fees deducted from premium that go to bundle owner
@@ -139,24 +113,32 @@ contract PoolService is
139
113
  )
140
114
  external
141
115
  virtual
142
- returns(NftId bundleNftId)
116
+ returns(NftId bundleNftId, Amount netStakedAmount)
143
117
  {
144
118
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
145
- InstanceReader instanceReader = instance.getInstanceReader();
146
119
 
147
- (
148
- Amount stakingFeeAmount,
149
- Amount stakingNetAmount
150
- ) = FeeLib.calculateFee(
151
- _getStakingFee(instanceReader, poolNftId),
120
+ {
121
+ InstanceReader instanceReader = instance.getInstanceReader();
122
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
123
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
124
+ if (currentPoolBalance + stakingAmount > poolInfo.maxBalanceAmount) {
125
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, stakingAmount);
126
+ }
127
+ }
128
+
129
+
130
+ Amount stakingFeeAmount;
131
+ (stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
132
+ _getStakingFee(instance.getInstanceReader(), poolNftId),
152
133
  stakingAmount);
153
134
 
135
+
154
136
  bundleNftId = _bundleService.create(
155
137
  instance,
156
138
  poolNftId,
157
139
  bundleOwner,
158
140
  fee,
159
- stakingNetAmount,
141
+ netStakedAmount,
160
142
  lifetime,
161
143
  filter);
162
144
 
@@ -164,12 +146,13 @@ contract PoolService is
164
146
  _componentService.increasePoolBalance(
165
147
  instance.getInstanceStore(),
166
148
  poolNftId,
167
- stakingAmount,
149
+ netStakedAmount,
168
150
  stakingFeeAmount);
169
151
 
152
+ // TODO only collect staking token when pool is not externally managed
170
153
  // pool bookkeeping and collect tokens from bundle owner
171
154
  _collectStakingAmount(
172
- instanceReader,
155
+ instance.getInstanceReader(),
173
156
  poolNftId,
174
157
  bundleOwner,
175
158
  stakingAmount);
@@ -183,8 +166,8 @@ contract PoolService is
183
166
  view
184
167
  returns (Fee memory stakingFee)
185
168
  {
186
- NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
187
- return instanceReader.getPoolInfo(productNftId).stakingFee;
169
+ NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
170
+ return instanceReader.getProductInfo(productNftId).stakingFee;
188
171
  }
189
172
 
190
173
  function closeBundle(NftId bundleNftId)
@@ -193,16 +176,143 @@ contract PoolService is
193
176
  {
194
177
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
195
178
 
196
- // TODO book keeping for pool collateral released outside of retention level
179
+ // TODO get performance fee for pool (#477)
197
180
 
198
181
  // releasing collateral in bundle
199
- _bundleService.close(instance, bundleNftId);
200
-
201
- // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
182
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
202
183
 
184
+ _componentService.decreasePoolBalance(
185
+ instance.getInstanceStore(),
186
+ poolNftId,
187
+ unstakedAmount + feeAmount,
188
+ AmountLib.zero());
189
+
203
190
  emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
191
+
192
+ if ((unstakedAmount + feeAmount).gtz()){
193
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
194
+ poolComponentInfo.tokenHandler.distributeTokens(
195
+ poolComponentInfo.wallet,
196
+ getRegistry().ownerOf(bundleNftId),
197
+ unstakedAmount + feeAmount);
198
+ }
204
199
  }
205
200
 
201
+ /// @inheritdoc IPoolService
202
+ function stake(NftId bundleNftId, Amount amount)
203
+ external
204
+ virtual
205
+ // TODO: restricted() (once #462 is done)
206
+ returns(Amount netAmount)
207
+ {
208
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
209
+ InstanceReader instanceReader = instance.getInstanceReader();
210
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
211
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
212
+
213
+ if (bundleInfo.poolNftId != poolNftId) {
214
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
215
+ }
216
+
217
+ {
218
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
219
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
220
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
221
+ }
222
+ }
223
+
224
+ // calculate fees
225
+ Amount feeAmount;
226
+ (
227
+ feeAmount,
228
+ netAmount
229
+ ) = FeeLib.calculateFee(
230
+ _getStakingFee(instanceReader, poolNftId),
231
+ amount);
232
+
233
+ // do all the bookkeeping
234
+ _componentService.increasePoolBalance(
235
+ instance.getInstanceStore(),
236
+ poolNftId,
237
+ netAmount,
238
+ feeAmount);
239
+
240
+ _bundleService.stake(instance, bundleNftId, netAmount);
241
+
242
+ // collect tokens from bundle owner
243
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
244
+ emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
245
+
246
+ // TODO only collect staking token when pool is not externally managed
247
+ _collectStakingAmount(
248
+ instanceReader,
249
+ poolNftId,
250
+ bundleOwner,
251
+ amount);
252
+ }
253
+
254
+ /// @inheritdoc IPoolService
255
+ function unstake(NftId bundleNftId, Amount amount)
256
+ external
257
+ virtual
258
+ // TODO: restricted() (once #462 is done)
259
+ returns(Amount netAmount)
260
+ {
261
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
262
+ InstanceReader instanceReader = instance.getInstanceReader();
263
+ InstanceStore instanceStore = instance.getInstanceStore();
264
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
265
+
266
+ if (bundleInfo.poolNftId != poolNftId) {
267
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
268
+ }
269
+
270
+ // call bundle service for bookkeeping and additional checks
271
+ Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
272
+
273
+ // Important: from now on work only with unstakedAmount as it is the only reliable amount.
274
+ // if amount was max, this was set to the available amount
275
+
276
+ // TODO: handle performance fees (issue #477)
277
+
278
+ // update pool bookkeeping - performance fees stay in the pool, but as fees
279
+ _componentService.decreasePoolBalance(
280
+ instanceStore,
281
+ poolNftId,
282
+ unstakedAmount,
283
+ AmountLib.zero());
284
+
285
+ IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
286
+ address poolWallet = poolComponentInfo.wallet;
287
+ // transfer amount to bundle owner
288
+ address owner = getRegistry().ownerOf(bundleNftId);
289
+ emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
290
+ poolComponentInfo.tokenHandler.distributeTokens(
291
+ poolWallet,
292
+ owner,
293
+ unstakedAmount);
294
+ return unstakedAmount;
295
+ }
296
+
297
+
298
+ function fundPoolWallet(NftId poolNftId, Amount amount)
299
+ external
300
+ virtual
301
+ restricted()
302
+ {
303
+ // TODO check that poolNftId is externally managed
304
+ // TODO implement
305
+ }
306
+
307
+
308
+ function defundPoolWallet(NftId poolNftId, Amount amount)
309
+ external
310
+ virtual
311
+ restricted()
312
+ {
313
+ // TODO check that poolNftId is externally managed
314
+ // TODO implement
315
+ }
206
316
 
207
317
  function processSale(
208
318
  NftId bundleNftId,
@@ -406,7 +516,6 @@ contract PoolService is
406
516
  }
407
517
 
408
518
 
409
- // TODO create (I)TreasuryService that deals with all gif related token transfers
410
519
  /// @dev transfers the specified amount from the bundle owner to the pool's wallet
411
520
  function _collectStakingAmount(
412
521
  InstanceReader instanceReader,
@@ -419,15 +528,11 @@ contract PoolService is
419
528
 
420
529
  // collecting investor token
421
530
  IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
422
- TokenHandler tokenHandler = componentInfo.tokenHandler;
423
531
  address poolWallet = componentInfo.wallet;
424
-
425
- if(amount.gtz()) {
426
- tokenHandler.transfer(
427
- bundleOwner,
428
- poolWallet,
429
- amount);
430
- }
532
+ componentInfo.tokenHandler.collectTokens(
533
+ bundleOwner,
534
+ poolWallet,
535
+ amount);
431
536
  }
432
537
 
433
538
  function _getDomain() internal pure override returns(ObjectType) {
@@ -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
@@ -194,7 +214,7 @@ contract ApplicationService is
194
214
  virtual override
195
215
  returns (NftId applicationNftId)
196
216
  {
197
-
217
+ // TODO implement
198
218
  }
199
219
 
200
220
 
@@ -210,7 +230,7 @@ contract ApplicationService is
210
230
  external
211
231
  virtual override
212
232
  {
213
-
233
+ // TODO implement
214
234
  }
215
235
 
216
236
  function revoke(NftId applicationNftId)
@@ -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
@@ -50,7 +22,6 @@ abstract contract BasicProduct is
50
22
  _setFees(productFee, processingFee);
51
23
  }
52
24
 
53
-
54
25
  function _initializeBasicProduct(
55
26
  address registry,
56
27
  NftId instanceNftId,
@@ -5,6 +5,7 @@ import {Authorization} from "../authorization/Authorization.sol";
5
5
  import {BasicProduct} from "./BasicProduct.sol";
6
6
  import {PRODUCT} from "../type/ObjectType.sol";
7
7
  import {IAccess} from "../authorization/IAccess.sol";
8
+ import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
8
9
  import {PUBLIC_ROLE} from "../../contracts/type/RoleId.sol";
9
10
  import {RoleId} from "../type/RoleId.sol";
10
11
 
@@ -35,6 +36,8 @@ contract BasicProductAuthorization
35
36
  // authorize public role (open access to any account, only allows to lock target)
36
37
  functions = _authorizeForTarget(getTargetName(), PUBLIC_ROLE());
37
38
  _authorize(functions, BasicProduct.setFees.selector, "setFees");
39
+
40
+ _authorize(functions, IInstanceLinkedComponent.withdrawFees.selector, "withdrawFees");
38
41
  }
39
42
  }
40
43
 
@@ -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,
@@ -303,10 +303,15 @@ contract ClaimService is
303
303
  // TODO callback IPolicyHolder
304
304
 
305
305
  emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount);
306
+
307
+ {
308
+ NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
309
+ IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
310
+ poolInfo.tokenHandler.distributeTokens(poolInfo.wallet, beneficiary, netPayoutAmount);
311
+ }
306
312
  }
307
313
 
308
- // TODO create (I)TreasuryService that deals with all gif related token transfers
309
- function _transferPayoutAmount(
314
+ function _calculatePayoutAmount(
310
315
  InstanceReader instanceReader,
311
316
  NftId policyNftId,
312
317
  IPolicy.PolicyInfo memory policyInfo,
@@ -336,11 +341,6 @@ contract ClaimService is
336
341
  // TODO transfer processing fees to product wallet
337
342
  // TODO inform product to update fee book keeping
338
343
  }
339
-
340
- poolInfo.tokenHandler.transfer(
341
- poolInfo.wallet,
342
- beneficiary,
343
- netPayoutAmount);
344
344
  }
345
345
  }
346
346
 
@@ -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,34 +20,39 @@ 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
26
  error ErrorPolicyServiceBalanceInsufficient(address policyOwner, uint256 premiumAmount, uint256 balance);
27
27
  error ErrorPolicyServiceAllowanceInsufficient(address policyOwner, address tokenHandler, uint256 premiumAmount, uint256 allowance);
28
28
 
29
- error ErrorIPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
29
+ error ErrorPolicyServiceInsufficientAllowance(address customer, address tokenHandlerAddress, uint256 amount);
30
30
  error ErrorPolicyServicePremiumAlreadyPaid(NftId policyNftId, Amount premiumPaidAmount);
31
- error ErrorIPolicyServicePolicyNotActivated(NftId policyNftId);
32
- error ErrorIPolicyServicePolicyAlreadyClosed(NftId policyNftId);
33
- error ErrorIPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
31
+ error ErrorPolicyServicePolicyNotActivated(NftId policyNftId);
32
+ error ErrorPolicyServicePolicyAlreadyClosed(NftId policyNftId);
33
+ error ErrorPolicyServicePolicyNotActive(NftId policyNftId, StateId state);
34
34
  error ErrorPolicyServicePremiumNotFullyPaid(NftId policyNftId, Amount premiumAmount, Amount premiumPaidAmount);
35
- error ErrorIPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
36
- error ErrorIPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
35
+ error ErrorPolicyServiceOpenClaims(NftId policyNftId, uint16 openClaimsCount);
36
+ error ErrorPolicyServicePolicyHasNotExpired(NftId policyNftId, Timestamp expiredAt);
37
+ error ErrorPolicyServicePolicyExpirationTooLate(NftId policyNftId, Timestamp upperLimit, Timestamp expiredAt);
38
+ error ErrorPolicyServicePolicyExpirationTooEarly(NftId policyNftId, Timestamp lowerLimit, Timestamp expiredAt);
37
39
 
38
40
  error ErrorPolicyServicePremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount recalculatedPremiumAmount);
39
41
  error ErrorPolicyServiceTransferredPremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount transferredPremiumAmount);
40
42
 
41
- /// @dev collateralizes the policy represented by {policyNftId}
43
+ event LogPolicyServicePolicyDeclined(NftId policyNftId);
44
+ event LogPolicyServicePolicyExpirationUpdated(NftId policyNftId, Timestamp expiredAt);
45
+
46
+ /// @dev creates the policy from {applicationNftId}.
47
+ /// After successful completion of the function the policy can be referenced using the application NftId.
48
+ /// Locks the sum insured amount in the pool.
42
49
  /// sets the policy state to collateralized
43
- /// may set the policy state to activated and set the activation date
44
50
  /// optionally collects premiums and activates the policy.
45
51
  /// - premium payment is only attempted if requirePremiumPayment is set to true
46
52
  /// - activation is only done if activateAt is a non-zero timestamp
47
- /// an application can only be collateralized in applied state
48
- /// only the related product may collateralize an application
49
- function collateralize(
50
- NftId policyNftId,
53
+ /// only the related product may create a policy from an application
54
+ function createPolicy(
55
+ NftId applicationNftId,
51
56
  bool requirePremiumPayment,
52
57
  Timestamp activateAt
53
58
  ) external;
@@ -57,18 +62,19 @@ interface IPolicyService is IService {
57
62
  /// only the related product may decline an application
58
63
  function decline(NftId policyNftId) external;
59
64
 
60
- /// @dev collects the premium token for the specified policy
65
+ /// @dev collects the premium token for the specified policy (must be in COLLATERALIZED or ACTIVE state)
61
66
  function collectPremium(NftId policyNftId, Timestamp activateAt) external;
62
67
 
63
68
  /// @dev activates the specified policy and sets the activation date in the policy metadata
64
69
  /// to activate a policy it needs to be in underwritten state
65
70
  function activate(NftId policyNftId, Timestamp activateAt) external;
66
71
 
67
- /// @dev expires the specified policy and sets the expiry date in the policy metadata
72
+ /// @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
73
  /// 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
74
  /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
70
75
  /// this function can only be called by a product. the policy needs to match with the calling product
71
- function expire(NftId policyNftId) external;
76
+ /// @return expiredAt the effective expiry date
77
+ function expire(NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
72
78
 
73
79
  /// @dev closes the specified policy and sets the closed data in the policy metadata
74
80
  /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
@@ -36,7 +36,5 @@ interface IProductComponent is
36
36
 
37
37
  /// @dev returns initial pool specific infos for this pool
38
38
  function getInitialProductInfo() external view returns (IComponents.ProductInfo memory info);
39
-
40
- /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
41
- function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
39
+
42
40
  }
@@ -12,7 +12,7 @@ import {Timestamp} from "../type/Timestamp.sol";
12
12
  import {UFixed} from "../type/UFixed.sol";
13
13
  import {Fee} from "../type/Fee.sol";
14
14
 
15
- interface IProductService is IService {
15
+ interface IRiskService is IService {
16
16
 
17
17
  function createRisk(
18
18
  RiskId riskId,