@etherisc/gif-next 0.0.2-b3a8633-027 → 0.0.2-b3a9c97-695

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 (332) hide show
  1. package/README.md +16 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +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 +2 -2
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +77 -64
  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 +43 -38
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +237 -74
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +66 -38
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +43 -0
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +71 -0
  30. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  31. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  32. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  33. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  34. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  36. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +44 -44
  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 +80 -122
  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 +72 -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 +51 -51
  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 -0
  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 -35
  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 +54 -99
  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 +438 -51
  85. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  86. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +102 -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 +44 -57
  91. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  92. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +158 -54
  93. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  94. package/artifacts/contracts/pool/Pool.sol/Pool.json +44 -95
  95. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  96. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +281 -90
  97. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +47 -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 +19 -38
  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 +129 -58
  109. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +42 -30
  111. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  112. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  113. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  114. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  115. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  116. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +188 -108
  117. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  118. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  119. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -0
  120. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  121. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  122. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +339 -167
  123. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +66 -26
  125. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  126. package/artifacts/contracts/product/PricingService.sol/PricingService.json +7 -2
  127. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  128. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  129. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  130. package/artifacts/contracts/product/Product.sol/Product.json +19 -38
  131. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  132. package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
  133. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  134. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
  135. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  136. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +16 -40
  137. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  138. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +12 -1
  139. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  140. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  141. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  142. package/artifacts/contracts/registry/Registry.sol/Registry.json +50 -165
  143. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  144. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +114 -239
  145. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  146. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  147. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  149. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  150. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  151. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +35 -16
  152. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  153. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
  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 -38
  158. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  159. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +326 -62
  160. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  161. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +72 -32
  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/IComponentService.sol/IComponentService.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
  166. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  167. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -0
  168. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  169. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  170. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  171. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  172. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  173. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  175. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  176. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  177. package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
  178. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  179. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -38
  180. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  181. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  182. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  183. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  184. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  185. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  186. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  187. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  188. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  189. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  190. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  191. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  192. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  193. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +53 -6
  194. package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.dbg.json +4 -0
  195. package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.json +42 -0
  196. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  197. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  198. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  199. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +12 -2
  200. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  201. package/artifacts/contracts/staking/Staking.sol/Staking.json +60 -74
  202. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  203. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  204. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +31 -19
  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 +12 -12
  211. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  212. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +17 -12
  213. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  214. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +7 -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/Amount.sol/AmountLib.json +37 -8
  218. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  219. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  220. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  221. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  222. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  223. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  224. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  225. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  226. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  227. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  228. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  230. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  231. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  232. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  233. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  234. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  236. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  238. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  240. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  242. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  244. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  245. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  246. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  248. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  249. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  250. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
  251. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  252. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  253. package/contracts/authorization/AccessAdmin.sol +1 -0
  254. package/contracts/distribution/BasicDistribution.sol +4 -15
  255. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  256. package/contracts/distribution/Distribution.sol +22 -10
  257. package/contracts/distribution/DistributionService.sol +46 -11
  258. package/contracts/distribution/IDistributionComponent.sol +8 -4
  259. package/contracts/distribution/IDistributionService.sol +10 -0
  260. package/contracts/instance/InstanceAuthorizationV3.sol +2 -0
  261. package/contracts/instance/InstanceReader.sol +10 -7
  262. package/contracts/instance/InstanceService.sol +51 -27
  263. package/contracts/instance/InstanceStore.sol +2 -1
  264. package/contracts/instance/base/ObjectLifecycle.sol +2 -3
  265. package/contracts/instance/module/IBundle.sol +1 -1
  266. package/contracts/instance/module/IComponents.sol +1 -7
  267. package/contracts/instance/module/IDistribution.sol +0 -1
  268. package/contracts/instance/module/IPolicy.sol +1 -1
  269. package/contracts/mock/Dip.sol +1 -1
  270. package/contracts/oracle/IOracleComponent.sol +2 -1
  271. package/contracts/oracle/Oracle.sol +15 -6
  272. package/contracts/pool/BasicPool.sol +7 -5
  273. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  274. package/contracts/pool/BundleService.sol +169 -16
  275. package/contracts/pool/IBundleService.sol +32 -5
  276. package/contracts/pool/IPoolComponent.sol +6 -0
  277. package/contracts/pool/IPoolService.sol +14 -17
  278. package/contracts/pool/Pool.sol +32 -15
  279. package/contracts/pool/PoolService.sol +146 -58
  280. package/contracts/product/ApplicationService.sol +37 -17
  281. package/contracts/product/BasicProduct.sol +3 -33
  282. package/contracts/product/BasicProductAuthorization.sol +3 -0
  283. package/contracts/product/ClaimService.sol +9 -8
  284. package/contracts/product/IApplicationService.sol +1 -0
  285. package/contracts/product/IClaimService.sol +1 -0
  286. package/contracts/product/IPolicyService.sol +23 -17
  287. package/contracts/product/IProductComponent.sol +1 -0
  288. package/contracts/product/PolicyService.sol +251 -131
  289. package/contracts/product/PricingService.sol +5 -1
  290. package/contracts/product/Product.sol +27 -6
  291. package/contracts/registry/ChainNft.sol +27 -28
  292. package/contracts/registry/IRegistry.sol +3 -2
  293. package/contracts/registry/Registry.sol +69 -60
  294. package/contracts/registry/RegistryAdmin.sol +49 -131
  295. package/contracts/registry/ReleaseRegistry.sol +24 -72
  296. package/contracts/shared/Component.sol +21 -21
  297. package/contracts/shared/ComponentService.sol +73 -14
  298. package/contracts/shared/IComponent.sol +4 -3
  299. package/contracts/shared/IComponentService.sol +15 -9
  300. package/contracts/shared/IInstanceLinkedComponent.sol +9 -3
  301. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  302. package/contracts/shared/InstanceLinkedComponent.sol +21 -0
  303. package/contracts/shared/NftOwnable.sol +2 -2
  304. package/contracts/shared/PolicyHolder.sol +2 -5
  305. package/contracts/shared/TokenHandler.sol +4 -0
  306. package/contracts/shared/TokenTransferLib.sol +60 -0
  307. package/contracts/staking/Staking.sol +9 -3
  308. package/contracts/staking/StakingService.sol +8 -12
  309. package/contracts/type/Amount.sol +12 -5
  310. package/contracts/type/Blocknumber.sol +7 -1
  311. package/contracts/type/Referral.sol +1 -0
  312. package/contracts/type/Seconds.sol +13 -1
  313. package/contracts/type/Timestamp.sol +11 -1
  314. package/contracts/type/UFixed.sol +29 -10
  315. package/package.json +1 -1
  316. package/artifacts/contracts/registry/GlobalRegistry.sol/GlobalRegistry.dbg.json +0 -4
  317. package/artifacts/contracts/registry/GlobalRegistry.sol/GlobalRegistry.json +0 -1503
  318. package/artifacts/contracts/registry/GlobalRegistryAdmin.sol/GlobalRegistryAdmin.dbg.json +0 -4
  319. package/artifacts/contracts/registry/GlobalRegistryAdmin.sol/GlobalRegistryAdmin.json +0 -1881
  320. package/artifacts/contracts/registry/IGlobalRegistry.sol/IGlobalRegistry.dbg.json +0 -4
  321. package/artifacts/contracts/registry/IGlobalRegistry.sol/IGlobalRegistry.json +0 -974
  322. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  323. package/artifacts/contracts/shared/MainnetId.sol/MainnetContract.dbg.json +0 -4
  324. package/artifacts/contracts/shared/MainnetId.sol/MainnetContract.json +0 -34
  325. package/artifacts/contracts/shared/MainnetId.sol/MainnetId.dbg.json +0 -4
  326. package/artifacts/contracts/shared/MainnetId.sol/MainnetId.json +0 -24
  327. package/artifacts/contracts/shared/MainnetId.sol/SidenetContract.dbg.json +0 -4
  328. package/artifacts/contracts/shared/MainnetId.sol/SidenetContract.json +0 -34
  329. package/contracts/registry/GlobalRegistry.sol +0 -95
  330. package/contracts/registry/GlobalRegistryAdmin.sol +0 -38
  331. package/contracts/registry/IGlobalRegistry.sol +0 -17
  332. package/contracts/shared/MainnetId.sol +0 -29
@@ -17,29 +17,26 @@ 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);
24
24
  event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
25
25
 
26
+ event LogPoolServiceBundleStaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount, Amount netAmount);
27
+ event LogPoolServiceBundleUnstaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount);
28
+
26
29
  error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
27
30
  error ErrorPoolServiceInvalidTransferAmount(Amount expectedAmount, Amount actualAmount);
28
-
31
+ error ErrorPoolServiceBundlePoolMismatch(NftId bundleNftId, NftId poolNftId);
32
+ error ErrorPoolServiceMaxBalanceAmountExceeded(NftId poolNftId, Amount maxBalanceAmount, Amount currentBalanceAmount, Amount transferAmount);
33
+
29
34
  /// @dev defines the required role for bundle owners for the calling pool
30
35
  /// default implementation returns PUBLIC ROLE
31
36
  function setBundleOwnerRole(RoleId bundleOwnerRole) external;
32
37
 
33
- /// @dev sets the max capital amount for the calling pool
34
- function setMaxCapitalAmount(Amount maxCapitalAmount) external;
35
-
36
- /// @dev set pool sepecific fees
37
- function setFees(
38
- Fee memory poolFee,
39
- Fee memory stakingFee,
40
- Fee memory performanceFee
41
- ) external;
42
-
38
+ /// @dev sets the max balance amount for the calling pool
39
+ function setMaxBalanceAmount(Amount maxBalanceAmount) external;
43
40
 
44
41
  /// @dev locks required collateral to cover the specified application (and turn it into a policy)
45
42
  /// - retention level == 1: the full collateral amount will be locked by the specified bundle
@@ -85,7 +82,8 @@ interface IPoolService is IService {
85
82
 
86
83
  /// @dev create a new bundle for the provided parameters
87
84
  /// staking fees will be deducted by the pool service from the staking amount
88
- /// may only be called by registered and unlocked pool components
85
+ /// may only be called by registered and unlocked pool components.
86
+ /// The pool balance is equal to the pool fees plus the capital of all bundles.
89
87
  function createBundle(
90
88
  address owner, // initial bundle owner
91
89
  Fee memory fee, // fees deducted from premium that go to bundle owner
@@ -94,7 +92,7 @@ interface IPoolService is IService {
94
92
  bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
95
93
  )
96
94
  external
97
- returns(NftId bundleNftId); // the nft id of the newly created bundle
95
+ returns(NftId bundleNftId, Amount netStakedAmount); // the nft id of the newly created bundle
98
96
 
99
97
 
100
98
  /// @dev closes the specified bundle
@@ -111,13 +109,12 @@ interface IPoolService is IService {
111
109
  /// @dev increase stakes for bundle
112
110
  /// staking fees will be deducted by the pool service from the staking amount
113
111
  /// may only be called by registered and unlocked pool components
114
- // function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
115
-
112
+ function stake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
116
113
 
117
114
  /// @dev decrease stakes for bundle
118
115
  /// performance fees will be deducted by the pool service from the staking amount
119
116
  /// may only be called by registered and unlocked pool components
120
- // function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
117
+ function unstake(NftId bundleNftId, Amount amount) external returns(Amount netAmount);
121
118
 
122
119
 
123
120
  /// @dev calulate required collateral for the provided parameters
@@ -14,6 +14,7 @@ import {Fee, FeeLib} from "../type/Fee.sol";
14
14
  import {NftId, NftIdLib} from "../type/NftId.sol";
15
15
  import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
16
16
  import {Seconds} from "../type/Seconds.sol";
17
+ import {Timestamp} from "../type/Timestamp.sol";
17
18
  import {TokenHandler} from "../shared/TokenHandler.sol";
18
19
  import {UFixed, UFixedLib} from "../type/UFixed.sol";
19
20
 
@@ -91,6 +92,18 @@ abstract contract Pool is
91
92
  onlyOwner()
92
93
  {
93
94
  _getPoolStorage()._componentService.registerPool();
95
+ _approveTokenHandler(type(uint256).max);
96
+ }
97
+
98
+ /// @inheritdoc IPoolComponent
99
+ function withdrawBundleFees(NftId bundleNftId, Amount amount)
100
+ external
101
+ virtual
102
+ restricted()
103
+ onlyBundleOwner(bundleNftId)
104
+ returns (Amount withdrawnAmount)
105
+ {
106
+ return _withdrawBundleFees(bundleNftId, amount);
94
107
  }
95
108
 
96
109
 
@@ -101,17 +114,13 @@ abstract contract Pool is
101
114
  returns (IComponents.PoolInfo memory poolInfo)
102
115
  {
103
116
  return IComponents.PoolInfo(
104
- NftIdLib.zero(), // will be set when GIF registers the related product
105
117
  PUBLIC_ROLE(), // bundleOwnerRole
106
118
  AmountLib.max(), // maxCapitalAmount,
107
119
  isNftInterceptor(), // isInterceptingBundleTransfers
108
120
  false, // isExternallyManaged,
109
121
  false, // isVerifyingApplications,
110
122
  UFixedLib.toUFixed(1), // collateralizationLevel,
111
- UFixedLib.toUFixed(1), // retentionLevel,
112
- FeeLib.zero(), // initialPoolFee,
113
- FeeLib.zero(), // initialStakingFee,
114
- FeeLib.zero() // initialPerformanceFee,
123
+ UFixedLib.toUFixed(1) // retentionLevel,
115
124
  );
116
125
  }
117
126
 
@@ -160,8 +169,9 @@ abstract contract Pool is
160
169
  )
161
170
  internal
162
171
  virtual
172
+ returns(Amount netAmount)
163
173
  {
164
- // TODO add implementation
174
+ _getPoolStorage()._poolService.stake(bundleNftId, amount);
165
175
  }
166
176
 
167
177
 
@@ -173,8 +183,9 @@ abstract contract Pool is
173
183
  )
174
184
  internal
175
185
  virtual
186
+ returns(Amount netAmount)
176
187
  {
177
- // TODO add implementation
188
+ return _getPoolStorage()._poolService.unstake(bundleNftId, amount);
178
189
  }
179
190
 
180
191
 
@@ -186,8 +197,9 @@ abstract contract Pool is
186
197
  )
187
198
  internal
188
199
  virtual
200
+ returns (Timestamp extendedExpiredAt)
189
201
  {
190
- // TODO add implementation
202
+ return _getPoolStorage()._bundleService.extend(bundleNftId, lifetimeExtension);
191
203
  }
192
204
 
193
205
 
@@ -217,7 +229,7 @@ abstract contract Pool is
217
229
  /// To close a bundle all all linked policies MUST be in closed state as well.
218
230
  /// Closing a bundle finalizes the bundle bookkeeping including overall profit calculation.
219
231
  /// Once a bundle is closed this action cannot be reversed.
220
- function _close(NftId bundleNftId)
232
+ function _closeBundle(NftId bundleNftId)
221
233
  internal
222
234
  virtual
223
235
  {
@@ -239,13 +251,13 @@ abstract contract Pool is
239
251
  }
240
252
 
241
253
 
242
- /// @dev Sets the maximum overall capital amound held by this pool.
254
+ /// @dev Sets the maximum balance amound held by this pool.
243
255
  /// Function may only be called by pool owner.
244
- function _setMaxCapitalAmount(Amount maxCapitalAmount)
256
+ function _setMaxBalanceAmount(Amount maxBalanceAmount)
245
257
  internal
246
258
  virtual
247
259
  {
248
- _getPoolStorage()._poolService.setMaxCapitalAmount(maxCapitalAmount);
260
+ _getPoolStorage()._poolService.setMaxBalanceAmount(maxBalanceAmount);
249
261
  }
250
262
 
251
263
  /// @dev Sets the required role to create/own bundles.
@@ -284,9 +296,9 @@ abstract contract Pool is
284
296
  bytes memory filter
285
297
  )
286
298
  internal
287
- returns(NftId bundleNftId)
299
+ returns(NftId bundleNftId, Amount netStakedAmount)
288
300
  {
289
- bundleNftId = _getPoolStorage()._poolService.createBundle(
301
+ (bundleNftId, netStakedAmount) = _getPoolStorage()._poolService.createBundle(
290
302
  bundleOwner,
291
303
  fee,
292
304
  amount,
@@ -296,12 +308,17 @@ abstract contract Pool is
296
308
  // TODO add logging
297
309
  }
298
310
 
299
-
300
311
  // TODO remove function once this is no longer used to produce contract locations on the fly ...
301
312
  function getContractLocation(bytes memory name) external pure returns (bytes32 hash) {
302
313
  return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
303
314
  }
304
315
 
316
+ function _withdrawBundleFees(NftId bundleNftId, Amount amount)
317
+ internal
318
+ returns (Amount withdrawnAmount)
319
+ {
320
+ return _getPoolStorage()._bundleService.withdrawBundleFees(bundleNftId, amount);
321
+ }
305
322
 
306
323
  function _getPoolStorage() private pure returns (PoolStorage storage $) {
307
324
  assembly {
@@ -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,14 @@ 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
24
  import {TokenHandler} from "../shared/TokenHandler.sol";
25
+ import {TokenTransferLib} from "../shared/TokenTransferLib.sol";
24
26
  import {UFixed} from "../type/UFixed.sol";
25
27
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
26
28
  import {InstanceReader} from "../instance/InstanceReader.sol";
@@ -32,9 +34,6 @@ contract PoolService is
32
34
  ComponentVerifyingService,
33
35
  IPoolService
34
36
  {
35
- using NftIdLib for NftId;
36
- using AmountLib for Amount;
37
-
38
37
  IBundleService internal _bundleService;
39
38
  IComponentService internal _componentService;
40
39
  IInstanceService private _instanceService;
@@ -68,24 +67,20 @@ contract PoolService is
68
67
  registerInterface(type(IPoolService).interfaceId);
69
68
  }
70
69
 
71
-
72
- function setMaxCapitalAmount(Amount maxCapitalAmount)
70
+ /// @inheritdoc IPoolService
71
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
73
72
  external
74
73
  virtual
75
74
  {
76
- /*
77
75
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
78
76
  InstanceReader instanceReader = instance.getInstanceReader();
77
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
79
78
 
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;
79
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
80
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
85
81
  instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
86
82
 
87
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
88
- */
83
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
89
84
  }
90
85
 
91
86
  function setBundleOwnerRole(RoleId bundleOwnerRole)
@@ -109,27 +104,7 @@ contract PoolService is
109
104
  emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
110
105
  }
111
106
 
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
-
107
+ /// @inheritdoc IPoolService
133
108
  function createBundle(
134
109
  address bundleOwner, // initial bundle owner
135
110
  Fee memory fee, // fees deducted from premium that go to bundle owner
@@ -139,24 +114,32 @@ contract PoolService is
139
114
  )
140
115
  external
141
116
  virtual
142
- returns(NftId bundleNftId)
117
+ returns(NftId bundleNftId, Amount netStakedAmount)
143
118
  {
144
119
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
145
- InstanceReader instanceReader = instance.getInstanceReader();
146
120
 
147
- (
148
- Amount stakingFeeAmount,
149
- Amount stakingNetAmount
150
- ) = FeeLib.calculateFee(
151
- _getStakingFee(instanceReader, poolNftId),
121
+ {
122
+ InstanceReader instanceReader = instance.getInstanceReader();
123
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
124
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
125
+ if (currentPoolBalance + stakingAmount > poolInfo.maxBalanceAmount) {
126
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, stakingAmount);
127
+ }
128
+ }
129
+
130
+
131
+ Amount stakingFeeAmount;
132
+ (stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
133
+ _getStakingFee(instance.getInstanceReader(), poolNftId),
152
134
  stakingAmount);
153
135
 
136
+
154
137
  bundleNftId = _bundleService.create(
155
138
  instance,
156
139
  poolNftId,
157
140
  bundleOwner,
158
141
  fee,
159
- stakingNetAmount,
142
+ netStakedAmount,
160
143
  lifetime,
161
144
  filter);
162
145
 
@@ -164,12 +147,12 @@ contract PoolService is
164
147
  _componentService.increasePoolBalance(
165
148
  instance.getInstanceStore(),
166
149
  poolNftId,
167
- stakingAmount,
150
+ netStakedAmount,
168
151
  stakingFeeAmount);
169
152
 
170
153
  // pool bookkeeping and collect tokens from bundle owner
171
154
  _collectStakingAmount(
172
- instanceReader,
155
+ instance.getInstanceReader(),
173
156
  poolNftId,
174
157
  bundleOwner,
175
158
  stakingAmount);
@@ -183,8 +166,8 @@ contract PoolService is
183
166
  view
184
167
  returns (Fee memory stakingFee)
185
168
  {
186
- NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
187
- return instanceReader.getPoolInfo(productNftId).stakingFee;
169
+ NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
170
+ return instanceReader.getProductInfo(productNftId).stakingFee;
188
171
  }
189
172
 
190
173
  function closeBundle(NftId bundleNftId)
@@ -193,16 +176,123 @@ contract PoolService is
193
176
  {
194
177
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
195
178
 
196
- // TODO book keeping for pool collateral released outside of retention level
179
+ // TODO get performance fee for pool (#477)
197
180
 
198
181
  // releasing collateral in bundle
199
- _bundleService.close(instance, bundleNftId);
200
-
201
- // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
182
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
202
183
 
184
+ _componentService.decreasePoolBalance(
185
+ instance.getInstanceStore(),
186
+ poolNftId,
187
+ unstakedAmount + feeAmount,
188
+ AmountLib.zero());
189
+
203
190
  emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
191
+
192
+ if ((unstakedAmount + feeAmount).gtz()){
193
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
194
+ TokenTransferLib.distributeTokens(
195
+ poolComponentInfo.wallet,
196
+ getRegistry().ownerOf(bundleNftId),
197
+ unstakedAmount + feeAmount,
198
+ poolComponentInfo.tokenHandler);
199
+ }
204
200
  }
205
201
 
202
+ /// @inheritdoc IPoolService
203
+ function stake(NftId bundleNftId, Amount amount)
204
+ external
205
+ virtual
206
+ // TODO: restricted() (once #462 is done)
207
+ returns(Amount netAmount)
208
+ {
209
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
210
+ InstanceReader instanceReader = instance.getInstanceReader();
211
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
212
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
213
+
214
+ if (bundleInfo.poolNftId != poolNftId) {
215
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
216
+ }
217
+
218
+ {
219
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
220
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
221
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
222
+ }
223
+ }
224
+
225
+ // calculate fees
226
+ Amount feeAmount;
227
+ (
228
+ feeAmount,
229
+ netAmount
230
+ ) = FeeLib.calculateFee(
231
+ _getStakingFee(instanceReader, poolNftId),
232
+ amount);
233
+
234
+ // do all the bookkeeping
235
+ _componentService.increasePoolBalance(
236
+ instance.getInstanceStore(),
237
+ poolNftId,
238
+ netAmount,
239
+ feeAmount);
240
+
241
+ _bundleService.stake(instance, bundleNftId, netAmount);
242
+
243
+ // collect tokens from bundle owner
244
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
245
+ emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
246
+ _collectStakingAmount(
247
+ instanceReader,
248
+ poolNftId,
249
+ bundleOwner,
250
+ amount);
251
+ }
252
+
253
+ /// @inheritdoc IPoolService
254
+ function unstake(NftId bundleNftId, Amount amount)
255
+ external
256
+ virtual
257
+ // TODO: restricted() (once #462 is done)
258
+ returns(Amount netAmount)
259
+ {
260
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
261
+ InstanceReader instanceReader = instance.getInstanceReader();
262
+ InstanceStore instanceStore = instance.getInstanceStore();
263
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
264
+
265
+ if (bundleInfo.poolNftId != poolNftId) {
266
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
267
+ }
268
+
269
+ // call bundle service for bookkeeping and additional checks
270
+ Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
271
+
272
+ // Important: from now on work only with unstakedAmount as it is the only reliable amount.
273
+ // if amount was max, this was set to the available amount
274
+
275
+ // TODO: handle performance fees (issue #477)
276
+
277
+ // update pool bookkeeping - performance fees stay in the pool, but as fees
278
+ _componentService.decreasePoolBalance(
279
+ instanceStore,
280
+ poolNftId,
281
+ unstakedAmount,
282
+ AmountLib.zero());
283
+
284
+ IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
285
+ address poolWallet = poolComponentInfo.wallet;
286
+ // transfer amount to bundle owner
287
+ address owner = getRegistry().ownerOf(bundleNftId);
288
+ emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
289
+ TokenTransferLib.distributeTokens(
290
+ poolWallet,
291
+ owner,
292
+ unstakedAmount,
293
+ poolComponentInfo.tokenHandler);
294
+ return unstakedAmount;
295
+ }
206
296
 
207
297
  function processSale(
208
298
  NftId bundleNftId,
@@ -406,7 +496,6 @@ contract PoolService is
406
496
  }
407
497
 
408
498
 
409
- // TODO create (I)TreasuryService that deals with all gif related token transfers
410
499
  /// @dev transfers the specified amount from the bundle owner to the pool's wallet
411
500
  function _collectStakingAmount(
412
501
  InstanceReader instanceReader,
@@ -422,12 +511,11 @@ contract PoolService is
422
511
  TokenHandler tokenHandler = componentInfo.tokenHandler;
423
512
  address poolWallet = componentInfo.wallet;
424
513
 
425
- if(amount.gtz()) {
426
- tokenHandler.transfer(
427
- bundleOwner,
428
- poolWallet,
429
- amount);
430
- }
514
+ TokenTransferLib.collectTokens(
515
+ bundleOwner,
516
+ poolWallet,
517
+ amount,
518
+ tokenHandler);
431
519
  }
432
520
 
433
521
  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,