@etherisc/gif-next 0.0.2-888aabe-141 → 0.0.2-8985927-403

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