@etherisc/gif-next 0.0.2-78e428e-483 → 0.0.2-79292f9-089

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 (310) hide show
  1. package/README.md +4 -1
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +21 -21
  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 +10 -5
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +38 -97
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +0 -75
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +76 -131
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +64 -76
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +0 -37
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +0 -31
  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 +71 -71
  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 +7 -7
  42. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +24 -24
  44. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +40 -40
  46. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +24 -24
  48. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  50. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  53. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  55. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  61. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  62. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  63. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +26 -85
  64. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  65. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  66. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  67. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  68. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +0 -37
  69. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  71. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +0 -75
  72. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  73. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +26 -26
  74. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +39 -39
  76. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  77. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +7 -82
  78. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  79. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +2 -2
  80. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  81. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +54 -109
  82. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +60 -72
  84. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  85. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +0 -31
  86. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  87. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +5 -42
  88. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  89. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +43 -38
  90. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  91. package/artifacts/contracts/pool/Pool.sol/Pool.json +5 -80
  92. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +87 -162
  94. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +45 -85
  96. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  97. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +27 -38
  98. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +37 -45
  100. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  101. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +0 -75
  102. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  103. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
  104. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  105. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +74 -58
  106. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +59 -59
  108. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  109. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  110. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  111. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  112. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  113. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +124 -129
  114. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  115. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  116. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -37
  117. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  118. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  119. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  120. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +190 -227
  121. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +55 -55
  123. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  124. package/artifacts/contracts/product/PricingService.sol/PricingService.json +52 -52
  125. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +52 -52
  127. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  128. package/artifacts/contracts/product/Product.sol/Product.json +0 -75
  129. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  130. package/artifacts/contracts/product/RiskService.sol/RiskService.json +695 -0
  131. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  132. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +702 -0
  133. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  134. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  135. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  136. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +220 -20
  137. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  138. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  139. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  140. package/artifacts/contracts/registry/Registry.sol/Registry.json +418 -81
  141. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  142. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +229 -114
  143. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  144. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +12 -12
  145. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  146. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +32 -32
  147. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  148. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +4 -4
  149. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  150. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +29 -55
  151. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  152. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +8 -8
  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 +72 -88
  159. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +65 -73
  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/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  166. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +0 -37
  167. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  168. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  169. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  170. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  171. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  173. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  174. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  175. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  176. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  177. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +0 -75
  178. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  179. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  180. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  181. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  182. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  183. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  184. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  185. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  186. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  187. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  188. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  189. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  190. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  191. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  192. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  193. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  194. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  195. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +0 -26
  196. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  197. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  198. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +30 -113
  199. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  200. package/artifacts/contracts/staking/Staking.sol/Staking.json +44 -108
  201. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  202. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  203. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  204. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +51 -51
  205. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  206. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  207. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  208. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
  209. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  210. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +36 -36
  211. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  212. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2 -2
  213. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  214. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  215. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  216. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  217. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  218. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  219. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  220. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  221. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  222. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  223. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  224. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  226. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  228. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  230. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  231. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  232. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  234. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  236. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  238. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  240. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/Version.sol/VersionLib.json +3 -3
  242. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +15 -2
  244. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  245. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  246. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +19 -19
  247. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  248. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  249. package/contracts/authorization/AccessAdmin.sol +0 -1
  250. package/contracts/authorization/Authorization.sol +6 -4
  251. package/contracts/authorization/IAccessAdmin.sol +0 -1
  252. package/contracts/authorization/ServiceAuthorization.sol +4 -3
  253. package/contracts/distribution/DistributionService.sol +4 -19
  254. package/contracts/distribution/IDistributionService.sol +1 -3
  255. package/contracts/instance/IInstance.sol +7 -30
  256. package/contracts/instance/Instance.sol +8 -33
  257. package/contracts/instance/InstanceAdmin.sol +23 -4
  258. package/contracts/instance/InstanceReader.sol +2 -7
  259. package/contracts/instance/InstanceService.sol +54 -31
  260. package/contracts/instance/base/ObjectLifecycle.sol +2 -3
  261. package/contracts/instance/module/IComponents.sol +1 -2
  262. package/contracts/instance/module/IPolicy.sol +1 -1
  263. package/contracts/oracle/Oracle.sol +1 -0
  264. package/contracts/oracle/OracleService.sol +2 -1
  265. package/contracts/pool/BasicPool.sol +2 -2
  266. package/contracts/pool/BasicPoolAuthorization.sol +1 -1
  267. package/contracts/pool/BundleService.sol +8 -23
  268. package/contracts/pool/IBundleService.sol +2 -3
  269. package/contracts/pool/IPoolService.sol +31 -17
  270. package/contracts/pool/Pool.sol +12 -12
  271. package/contracts/pool/PoolService.sol +62 -75
  272. package/contracts/product/ApplicationService.sol +38 -18
  273. package/contracts/product/BasicProduct.sol +1 -0
  274. package/contracts/product/ClaimService.sol +9 -10
  275. package/contracts/product/IApplicationService.sol +1 -0
  276. package/contracts/product/IClaimService.sol +1 -0
  277. package/contracts/product/IPolicyService.sol +17 -17
  278. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  279. package/contracts/product/PolicyService.sol +193 -138
  280. package/contracts/product/PricingService.sol +6 -2
  281. package/contracts/product/Product.sol +22 -22
  282. package/contracts/product/{ProductService.sol → RiskService.sol} +5 -7
  283. package/contracts/product/{ProductServiceManager.sol → RiskServiceManager.sol} +8 -8
  284. package/contracts/registry/ChainNft.sol +65 -32
  285. package/contracts/registry/IRegistry.sol +48 -14
  286. package/contracts/registry/Registry.sol +324 -195
  287. package/contracts/registry/RegistryAdmin.sol +150 -51
  288. package/contracts/registry/RegistryService.sol +1 -2
  289. package/contracts/registry/ReleaseLifecycle.sol +3 -1
  290. package/contracts/registry/ReleaseRegistry.sol +125 -72
  291. package/contracts/registry/ServiceAuthorizationV3.sol +1 -1
  292. package/contracts/shared/Component.sol +11 -23
  293. package/contracts/shared/ComponentService.sol +14 -24
  294. package/contracts/shared/IComponent.sol +4 -4
  295. package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
  296. package/contracts/shared/TokenHandler.sol +100 -19
  297. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  298. package/contracts/staking/StakeManagerLib.sol +0 -25
  299. package/contracts/staking/Staking.sol +6 -25
  300. package/contracts/staking/StakingService.sol +9 -13
  301. package/contracts/type/StateId.sol +4 -0
  302. package/contracts/type/Version.sol +5 -2
  303. package/contracts/upgradeability/ProxyManager.sol +14 -14
  304. package/contracts/upgradeability/Versionable.sol +2 -2
  305. package/package.json +1 -1
  306. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  307. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  308. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  309. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  310. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
@@ -17,7 +17,7 @@ import {UFixed} from "../type/UFixed.sol";
17
17
 
18
18
  interface IPoolService is IService {
19
19
 
20
- event LogPoolServiceMaxCapitalAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
20
+ event LogPoolServiceMaxBalanceAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
21
21
  event LogPoolServiceBundleOwnerRoleSet(NftId poolNftId, RoleId bundleOwnerRole);
22
22
 
23
23
  event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
@@ -29,16 +29,14 @@ interface IPoolService is IService {
29
29
  error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
30
30
  error ErrorPoolServiceInvalidTransferAmount(Amount expectedAmount, Amount actualAmount);
31
31
  error ErrorPoolServiceBundlePoolMismatch(NftId bundleNftId, NftId poolNftId);
32
- error ErrorPoolServiceMaxCapitalAmountExceeded(NftId poolNftId, Amount maxCapitalAmount, Amount capitalAmount, Amount amountToBeAdded);
33
- error ErrorPoolServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
34
- error ErrorPoolServiceAmountIsZero();
35
-
32
+ error ErrorPoolServiceMaxBalanceAmountExceeded(NftId poolNftId, Amount maxBalanceAmount, Amount currentBalanceAmount, Amount transferAmount);
33
+
36
34
  /// @dev defines the required role for bundle owners for the calling pool
37
35
  /// default implementation returns PUBLIC ROLE
38
36
  function setBundleOwnerRole(RoleId bundleOwnerRole) external;
39
37
 
40
- /// @dev sets the max capital amount for the calling pool
41
- function setMaxCapitalAmount(Amount maxCapitalAmount) external;
38
+ /// @dev sets the max balance amount for the calling pool
39
+ function setMaxBalanceAmount(Amount maxBalanceAmount) external;
42
40
 
43
41
  /// @dev locks required collateral to cover the specified application (and turn it into a policy)
44
42
  /// - retention level == 1: the full collateral amount will be locked by the specified bundle
@@ -97,6 +95,18 @@ interface IPoolService is IService {
97
95
  returns(NftId bundleNftId, Amount netStakedAmount); // the nft id of the newly created bundle
98
96
 
99
97
 
98
+ /// @dev increase stakes for bundle
99
+ /// staking fees will be deducted by the pool service from the staking amount
100
+ /// may only be called by registered and unlocked pool components
101
+ function stake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
102
+
103
+
104
+ /// @dev decrease stakes for bundle
105
+ /// performance fees will be deducted by the pool service from the staking amount
106
+ /// may only be called by registered and unlocked pool components
107
+ function unstake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
108
+
109
+
100
110
  /// @dev closes the specified bundle
101
111
  /// only open bundles (active or locked) may be closed
102
112
  /// to close a bundle it may not have any non-closed polices attached to it
@@ -105,18 +115,22 @@ interface IPoolService is IService {
105
115
  function closeBundle(NftId bundleNftId) external;
106
116
 
107
117
 
108
- /// @dev processes the sale of a bundle and track the pool fee and bundle fee amounts
109
- function processSale(NftId bundleNftId, IPolicy.Premium memory premium) external;
118
+ /// @dev Fund the specified pool wallet with the provided amount.
119
+ /// This function will collect the amount from the sender address and transfers it to the pool wallet.
120
+ /// The function will not update balance amounts managed by the framework.
121
+ /// Only available for externally managed pools.
122
+ function fundPoolWallet(NftId poolNftId, Amount amount) external;
110
123
 
111
- /// @dev increase stakes for bundle
112
- /// staking fees will be deducted by the pool service from the staking amount
113
- /// may only be called by registered and unlocked pool components
114
- function stake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
115
124
 
116
- /// @dev decrease stakes for bundle
117
- /// performance fees will be deducted by the pool service from the staking amount
118
- /// may only be called by registered and unlocked pool components
119
- function unstake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
125
+ /// @dev Defund the specified pool wallet with the provided amount.
126
+ /// This function will transfer the amount from the pool wallet to the sender address.
127
+ /// The function will not update balance amounts managed by the framework.
128
+ /// Only available for externally managed pools.
129
+ function defundPoolWallet(NftId poolNftId, Amount amount) external;
130
+
131
+
132
+ /// @dev processes the sale of a bundle and track the pool fee and bundle fee amounts
133
+ function processSale(NftId bundleNftId, IPolicy.Premium memory premium) external;
120
134
 
121
135
 
122
136
  /// @dev calulate required collateral for the provided parameters
@@ -113,15 +113,15 @@ abstract contract Pool is
113
113
  view
114
114
  returns (IComponents.PoolInfo memory poolInfo)
115
115
  {
116
- return IComponents.PoolInfo(
117
- PUBLIC_ROLE(), // bundleOwnerRole
118
- AmountLib.max(), // maxCapitalAmount,
119
- isNftInterceptor(), // isInterceptingBundleTransfers
120
- false, // isExternallyManaged,
121
- false, // isVerifyingApplications,
122
- UFixedLib.toUFixed(1), // collateralizationLevel,
123
- UFixedLib.toUFixed(1) // retentionLevel,
124
- );
116
+ return IComponents.PoolInfo({
117
+ maxBalanceAmount: AmountLib.max(),
118
+ bundleOwnerRole: PUBLIC_ROLE(),
119
+ isInterceptingBundleTransfers: isNftInterceptor(),
120
+ isExternallyManaged: false,
121
+ isVerifyingApplications: false,
122
+ collateralizationLevel: UFixedLib.toUFixed(1),
123
+ retentionLevel: UFixedLib.toUFixed(1)
124
+ });
125
125
  }
126
126
 
127
127
  // Internals
@@ -251,13 +251,13 @@ abstract contract Pool is
251
251
  }
252
252
 
253
253
 
254
- /// @dev Sets the maximum overall capital amound held by this pool.
254
+ /// @dev Sets the maximum balance amound held by this pool.
255
255
  /// Function may only be called by pool owner.
256
- function _setMaxCapitalAmount(Amount maxCapitalAmount)
256
+ function _setMaxBalanceAmount(Amount maxBalanceAmount)
257
257
  internal
258
258
  virtual
259
259
  {
260
- _getPoolStorage()._poolService.setMaxCapitalAmount(maxCapitalAmount);
260
+ _getPoolStorage()._poolService.setMaxBalanceAmount(maxBalanceAmount);
261
261
  }
262
262
 
263
263
  /// @dev Sets the required role to create/own bundles.
@@ -1,8 +1,6 @@
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
4
  import {IBundle} from "../instance/module/IBundle.sol";
7
5
  import {IBundleService} from "./IBundleService.sol";
8
6
  import {IComponents} from "../instance/module/IComponents.sol";
@@ -47,8 +45,8 @@ contract PoolService is
47
45
  bytes memory data
48
46
  )
49
47
  internal
50
- initializer
51
48
  virtual override
49
+ onlyInitializing()
52
50
  {
53
51
  (
54
52
  address registryAddress,,
@@ -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)
@@ -122,13 +116,22 @@ contract PoolService is
122
116
  returns(NftId bundleNftId, Amount netStakedAmount)
123
117
  {
124
118
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
125
-
119
+
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
+
126
130
  Amount stakingFeeAmount;
127
131
  (stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
128
132
  _getStakingFee(instance.getInstanceReader(), poolNftId),
129
133
  stakingAmount);
130
134
 
131
- // TODO: (staking amount + existing pool balance) must be be > maxCapitalAmount
132
135
 
133
136
  bundleNftId = _bundleService.create(
134
137
  instance,
@@ -146,6 +149,7 @@ contract PoolService is
146
149
  netStakedAmount,
147
150
  stakingFeeAmount);
148
151
 
152
+ // TODO only collect staking token when pool is not externally managed
149
153
  // pool bookkeeping and collect tokens from bundle owner
150
154
  _collectStakingAmount(
151
155
  instance.getInstanceReader(),
@@ -187,24 +191,10 @@ contract PoolService is
187
191
 
188
192
  if ((unstakedAmount + feeAmount).gtz()){
189
193
  IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
190
- TokenHandler tokenHandler = poolComponentInfo.tokenHandler;
191
- IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
192
-
193
- // TODO: centralize token handling (issue #471)
194
-
195
- // check allowance
196
- uint256 tokenAllowance = token.allowance(poolComponentInfo.wallet, address(tokenHandler));
197
- if (tokenAllowance < (unstakedAmount.toInt() + feeAmount.toInt())) {
198
- revert ErrorPoolServiceWalletAllowanceTooSmall(
199
- poolComponentInfo.wallet,
200
- address(tokenHandler),
201
- tokenAllowance,
202
- unstakedAmount.toInt() + feeAmount.toInt());
203
- }
204
-
205
- // transfer amount to bundle owner
206
- address bundleOwner = getRegistry().ownerOf(bundleNftId);
207
- tokenHandler.transfer(poolComponentInfo.wallet, bundleOwner, unstakedAmount + feeAmount);
194
+ poolComponentInfo.tokenHandler.distributeTokens(
195
+ poolComponentInfo.wallet,
196
+ getRegistry().ownerOf(bundleNftId),
197
+ unstakedAmount + feeAmount);
208
198
  }
209
199
  }
210
200
 
@@ -224,15 +214,18 @@ contract PoolService is
224
214
  revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
225
215
  }
226
216
 
227
- Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
228
- if (amount + currentPoolBalance > poolInfo.maxCapitalAmount) {
229
- revert ErrorPoolServiceMaxCapitalAmountExceeded(poolNftId, poolInfo.maxCapitalAmount, currentPoolBalance, amount);
217
+ {
218
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
219
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
220
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
221
+ }
230
222
  }
231
223
 
232
224
  // calculate fees
225
+ Amount feeAmount;
233
226
  (
234
- Amount feeAmount,
235
- Amount netAmount
227
+ feeAmount,
228
+ netAmount
236
229
  ) = FeeLib.calculateFee(
237
230
  _getStakingFee(instanceReader, poolNftId),
238
231
  amount);
@@ -248,13 +241,14 @@ contract PoolService is
248
241
 
249
242
  // collect tokens from bundle owner
250
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
251
247
  _collectStakingAmount(
252
248
  instanceReader,
253
249
  poolNftId,
254
250
  bundleOwner,
255
251
  amount);
256
-
257
- emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
258
252
  }
259
253
 
260
254
  /// @inheritdoc IPoolService
@@ -273,10 +267,6 @@ contract PoolService is
273
267
  revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
274
268
  }
275
269
 
276
- if (amount.eqz()) {
277
- revert ErrorPoolServiceAmountIsZero();
278
- }
279
-
280
270
  // call bundle service for bookkeeping and additional checks
281
271
  Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
282
272
 
@@ -294,26 +284,36 @@ contract PoolService is
294
284
 
295
285
  IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
296
286
  address poolWallet = poolComponentInfo.wallet;
297
-
298
- // check allowance
299
- {
300
- IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
301
- uint256 tokenAllowance = token.allowance(poolWallet, address(poolComponentInfo.tokenHandler));
302
- if (tokenAllowance < unstakedAmount.toInt()) {
303
- revert ErrorPoolServiceWalletAllowanceTooSmall(poolWallet, address(poolComponentInfo.tokenHandler), tokenAllowance, amount.toInt());
304
- }
305
- }
306
-
307
287
  // transfer amount to bundle owner
308
288
  address owner = getRegistry().ownerOf(bundleNftId);
309
- // TODO: centralize token handling (issue #471)
310
- poolComponentInfo.tokenHandler.transfer(poolWallet, owner, unstakedAmount);
311
-
312
289
  emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
313
-
290
+ poolComponentInfo.tokenHandler.distributeTokens(
291
+ poolWallet,
292
+ owner,
293
+ unstakedAmount);
314
294
  return unstakedAmount;
315
295
  }
316
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
+ }
316
+
317
317
  function processSale(
318
318
  NftId bundleNftId,
319
319
  IPolicy.Premium memory premium
@@ -516,7 +516,6 @@ contract PoolService is
516
516
  }
517
517
 
518
518
 
519
- // TODO create (I)TreasuryService that deals with all gif related token transfers
520
519
  /// @dev transfers the specified amount from the bundle owner to the pool's wallet
521
520
  function _collectStakingAmount(
522
521
  InstanceReader instanceReader,
@@ -529,23 +528,11 @@ contract PoolService is
529
528
 
530
529
  // collecting investor token
531
530
  IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
532
- TokenHandler tokenHandler = componentInfo.tokenHandler;
533
531
  address poolWallet = componentInfo.wallet;
534
-
535
- if(amount.gtz()) {
536
- uint256 allowance = IERC20Metadata(componentInfo.token).allowance(bundleOwner, address(tokenHandler));
537
- if (allowance < amount.toInt()) {
538
- revert ErrorPoolServiceWalletAllowanceTooSmall(bundleOwner, address(tokenHandler), allowance, amount.toInt());
539
- }
540
-
541
- // TODO: centralize token handling (issue #471)
542
- tokenHandler.transfer(
543
- bundleOwner,
544
- poolWallet,
545
- amount);
546
- } else {
547
- revert ErrorPoolServiceAmountIsZero();
548
- }
532
+ componentInfo.tokenHandler.collectTokens(
533
+ bundleOwner,
534
+ poolWallet,
535
+ amount);
549
536
  }
550
537
 
551
538
  function _getDomain() internal pure override returns(ObjectType) {
@@ -38,7 +38,7 @@ contract ApplicationService is
38
38
  )
39
39
  internal
40
40
  virtual override
41
- initializer()
41
+ onlyInitializing()
42
42
  {
43
43
  (
44
44
  address registryAddress,,
@@ -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)
@@ -21,6 +21,7 @@ abstract contract BasicProduct is
21
21
  {
22
22
  _setFees(productFee, processingFee);
23
23
  }
24
+
24
25
  function _initializeBasicProduct(
25
26
  address registry,
26
27
  NftId instanceNftId,
@@ -32,7 +32,7 @@ contract ClaimService is
32
32
  )
33
33
  internal
34
34
  virtual override
35
- initializer()
35
+ onlyInitializing()
36
36
  {
37
37
  (
38
38
  address registryAddress,,
@@ -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,12 +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
- // TODO: centralize token handling (issue #471)
341
- poolInfo.tokenHandler.transfer(
342
- poolInfo.wallet,
343
- beneficiary,
344
- netPayoutAmount);
345
344
  }
346
345
  }
347
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,22 +20,22 @@ 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);
37
- error ErrorIPolicyServicePolicyExpirationTooLate(NftId policyNftId, Timestamp upperLimit, Timestamp expiredAt);
38
- error ErrorIPolicyServicePolicyExpirationTooEarly(NftId policyNftId, Timestamp lowerLimit, 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);
39
39
 
40
40
  error ErrorPolicyServicePremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount recalculatedPremiumAmount);
41
41
  error ErrorPolicyServiceTransferredPremiumMismatch(NftId policyNftId, Amount expectedPremiumAmount, Amount transferredPremiumAmount);
@@ -43,16 +43,16 @@ interface IPolicyService is IService {
43
43
  event LogPolicyServicePolicyDeclined(NftId policyNftId);
44
44
  event LogPolicyServicePolicyExpirationUpdated(NftId policyNftId, Timestamp expiredAt);
45
45
 
46
- /// @dev collateralizes the policy represented by {policyNftId}
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.
47
49
  /// sets the policy state to collateralized
48
- /// may set the policy state to activated and set the activation date
49
50
  /// optionally collects premiums and activates the policy.
50
51
  /// - premium payment is only attempted if requirePremiumPayment is set to true
51
52
  /// - activation is only done if activateAt is a non-zero timestamp
52
- /// an application can only be collateralized in applied state
53
- /// only the related product may collateralize an application
54
- function collateralize(
55
- NftId policyNftId,
53
+ /// only the related product may create a policy from an application
54
+ function createPolicy(
55
+ NftId applicationNftId,
56
56
  bool requirePremiumPayment,
57
57
  Timestamp activateAt
58
58
  ) external;
@@ -62,7 +62,7 @@ interface IPolicyService is IService {
62
62
  /// only the related product may decline an application
63
63
  function decline(NftId policyNftId) external;
64
64
 
65
- /// @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)
66
66
  function collectPremium(NftId policyNftId, Timestamp activateAt) external;
67
67
 
68
68
  /// @dev activates the specified policy and sets the activation date in the policy metadata
@@ -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,