@etherisc/gif-next 0.0.2-eadf4ad-932 → 0.0.2-eae5e95-691

Sign up to get free protection for your applications and to get access to all the features.
Files changed (527) hide show
  1. package/README.md +51 -5
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1293 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +414 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/{instance/module/ISetup.sol/ISetup.json → authorization/IAccess.sol/IAccess.json} +2 -2
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1060 -0
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +295 -0
  14. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +167 -0
  16. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  18. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +253 -0
  20. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  21. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1415 -0
  22. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +470 -0
  24. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +230 -545
  26. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +315 -432
  28. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +120 -109
  30. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +214 -290
  32. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +215 -94
  34. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  35. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  36. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1551 -0
  38. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
  40. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2090 -0
  42. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  44. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1484 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1244 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1605 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2108 -0
  54. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  55. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  56. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +113 -97
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +171 -85
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +120 -207
  62. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1653 -0
  64. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +561 -0
  66. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +850 -366
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +245 -229
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +106 -79
  72. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  73. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1212 -381
  74. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  76. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  78. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  80. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
  82. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  84. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +8 -116
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  89. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  90. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  91. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  92. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  93. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  94. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1052 -0
  95. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  96. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +478 -0
  97. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  98. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  99. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  100. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +783 -0
  101. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  102. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +709 -0
  103. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  104. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +920 -0
  105. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  106. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +966 -0
  107. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  108. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +722 -0
  109. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  110. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1312 -0
  111. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  112. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +470 -0
  113. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  114. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +494 -317
  115. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  116. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +186 -87
  117. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  118. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +256 -31
  119. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  120. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +235 -375
  121. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  122. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +460 -254
  123. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  124. package/artifacts/contracts/pool/Pool.sol/Pool.json +269 -565
  125. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  126. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +572 -569
  127. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  128. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +112 -93
  129. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  130. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +117 -264
  131. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  132. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +99 -76
  133. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  134. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1186 -0
  135. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  136. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +470 -0
  137. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  138. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +329 -284
  139. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  140. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +141 -90
  141. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +54 -1
  143. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  144. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +196 -7
  145. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  146. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +354 -80
  147. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  148. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +154 -86
  149. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  150. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +355 -209
  151. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  152. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +44 -57
  153. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  154. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +418 -397
  155. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  156. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +124 -121
  157. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  158. package/artifacts/contracts/product/PricingService.sol/PricingService.json +233 -330
  159. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +128 -93
  161. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  162. package/artifacts/contracts/product/Product.sol/Product.json +377 -431
  163. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  164. package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
  165. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  166. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
  167. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  168. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  169. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  170. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +391 -45
  171. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  172. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +123 -64
  173. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  174. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +0 -18
  175. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  176. package/artifacts/contracts/registry/Registry.sol/Registry.json +789 -60
  177. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  178. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1886 -0
  179. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  180. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +179 -185
  181. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  182. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +86 -74
  183. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  184. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  185. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  186. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1067 -0
  187. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  188. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +272 -0
  189. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  190. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +314 -138
  191. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  192. package/artifacts/contracts/shared/Component.sol/Component.json +136 -271
  193. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  194. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1335 -198
  195. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  196. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +814 -0
  197. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  198. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +474 -0
  199. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  200. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  201. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  202. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +105 -114
  203. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  204. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1335 -0
  205. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  206. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +718 -0
  207. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  208. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +46 -14
  209. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  210. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +35 -4
  211. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  212. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +23 -1
  213. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  214. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +16 -30
  215. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  216. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +36 -1
  217. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  218. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  219. package/artifacts/contracts/shared/IService.sol/IService.json +49 -1
  220. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  221. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  222. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  223. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +842 -0
  224. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  225. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +538 -0
  226. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  227. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +174 -0
  228. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  229. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  230. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  231. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +26 -55
  232. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  233. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +20 -124
  234. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  235. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +68 -85
  236. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  237. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  238. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  239. package/artifacts/contracts/shared/Service.sol/Service.json +55 -101
  240. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  241. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +362 -7
  242. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  243. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  244. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  245. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1460 -0
  246. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  247. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +573 -53
  248. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  249. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +440 -0
  250. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  251. package/artifacts/contracts/staking/Staking.sol/Staking.json +1901 -0
  252. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  253. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +205 -0
  254. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  255. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +776 -0
  256. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  257. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +587 -0
  258. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  259. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +658 -176
  260. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  261. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +109 -66
  262. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  263. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2283 -0
  264. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  265. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +607 -0
  266. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  267. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  268. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Amount.sol/AmountLib.json +121 -4
  270. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +53 -2
  272. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  274. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  276. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/Fee.sol/FeeLib.json +39 -34
  278. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  279. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  280. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +47 -4
  282. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  283. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  284. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +149 -2
  286. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  288. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  290. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  291. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  292. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  294. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +219 -6
  296. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -2
  298. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  299. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  300. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  301. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  302. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  304. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  305. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  306. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +36 -4
  308. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  310. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  311. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +71 -2
  312. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  314. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  316. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  317. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  318. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  319. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +602 -0
  320. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  321. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  322. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  323. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  324. package/contracts/authorization/AccessAdmin.sol +596 -0
  325. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  326. package/contracts/authorization/Authorization.sol +289 -0
  327. package/contracts/authorization/IAccess.sol +49 -0
  328. package/contracts/authorization/IAccessAdmin.sol +137 -0
  329. package/contracts/authorization/IAuthorization.sol +60 -0
  330. package/contracts/authorization/IServiceAuthorization.sol +40 -0
  331. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  332. package/contracts/authorization/ServiceAuthorization.sol +106 -0
  333. package/contracts/distribution/BasicDistribution.sol +139 -0
  334. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  335. package/contracts/distribution/Distribution.sol +154 -154
  336. package/contracts/distribution/DistributionService.sol +175 -172
  337. package/contracts/distribution/DistributionServiceManager.sol +8 -23
  338. package/contracts/distribution/IDistributionComponent.sol +28 -47
  339. package/contracts/distribution/IDistributionService.sol +24 -10
  340. package/contracts/examples/fire/DamageLevel.sol +59 -0
  341. package/contracts/examples/fire/FirePool.sol +75 -0
  342. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  343. package/contracts/examples/fire/FireProduct.sol +412 -0
  344. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  345. package/contracts/examples/fire/FireUSD.sol +26 -0
  346. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  347. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  348. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  349. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  350. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  351. package/contracts/instance/IInstance.sol +33 -44
  352. package/contracts/instance/IInstanceService.sol +32 -33
  353. package/contracts/instance/Instance.sol +131 -122
  354. package/contracts/instance/InstanceAdmin.sol +277 -0
  355. package/contracts/instance/InstanceAuthorizationV3.sol +194 -0
  356. package/contracts/instance/InstanceReader.sol +194 -67
  357. package/contracts/instance/InstanceService.sol +243 -134
  358. package/contracts/instance/InstanceServiceManager.sol +8 -13
  359. package/contracts/instance/InstanceStore.sol +142 -66
  360. package/contracts/instance/base/BalanceStore.sol +123 -0
  361. package/contracts/instance/base/Cloneable.sol +2 -25
  362. package/contracts/instance/base/ObjectCounter.sol +21 -0
  363. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  364. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +11 -14
  365. package/contracts/instance/module/IAccess.sol +2 -10
  366. package/contracts/instance/module/IBundle.sol +1 -4
  367. package/contracts/instance/module/IComponents.sol +21 -11
  368. package/contracts/instance/module/IDistribution.sol +0 -1
  369. package/contracts/instance/module/IPolicy.sol +31 -25
  370. package/contracts/mock/Dip.sol +26 -0
  371. package/contracts/oracle/BasicOracle.sol +47 -0
  372. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  373. package/contracts/oracle/IOracle.sol +36 -0
  374. package/contracts/oracle/IOracleComponent.sol +33 -0
  375. package/contracts/oracle/IOracleService.sol +66 -0
  376. package/contracts/oracle/Oracle.sol +156 -0
  377. package/contracts/oracle/OracleService.sol +291 -0
  378. package/contracts/oracle/OracleServiceManager.sol +39 -0
  379. package/contracts/pool/BasicPool.sol +154 -0
  380. package/contracts/pool/BasicPoolAuthorization.sol +57 -0
  381. package/contracts/pool/BundleService.sol +278 -201
  382. package/contracts/pool/BundleServiceManager.sol +8 -11
  383. package/contracts/pool/IBundleService.sol +44 -19
  384. package/contracts/pool/IPoolComponent.sol +27 -73
  385. package/contracts/pool/IPoolService.sol +93 -40
  386. package/contracts/pool/Pool.sol +186 -153
  387. package/contracts/pool/PoolService.sol +357 -236
  388. package/contracts/pool/PoolServiceManager.sol +6 -9
  389. package/contracts/product/ApplicationService.sol +148 -84
  390. package/contracts/product/ApplicationServiceManager.sol +6 -6
  391. package/contracts/product/BasicProduct.sol +53 -0
  392. package/contracts/product/BasicProductAuthorization.sol +42 -0
  393. package/contracts/product/ClaimService.sol +293 -145
  394. package/contracts/product/ClaimServiceManager.sol +6 -6
  395. package/contracts/product/IApplicationService.sol +2 -1
  396. package/contracts/product/IClaimService.sol +35 -5
  397. package/contracts/product/IPolicyService.sol +38 -38
  398. package/contracts/product/IPricingService.sol +13 -11
  399. package/contracts/product/IProductComponent.sol +28 -10
  400. package/contracts/product/{IProductService.sol → IRiskService.sol} +2 -9
  401. package/contracts/product/PolicyService.sol +504 -199
  402. package/contracts/product/PolicyServiceManager.sol +6 -9
  403. package/contracts/product/PricingService.sol +103 -82
  404. package/contracts/product/PricingServiceManager.sol +5 -8
  405. package/contracts/product/Product.sol +222 -146
  406. package/contracts/product/RiskService.sol +96 -0
  407. package/contracts/product/RiskServiceManager.sol +39 -0
  408. package/contracts/registry/ChainNft.sol +72 -36
  409. package/contracts/registry/IRegistry.sol +85 -22
  410. package/contracts/registry/IRegistryService.sol +10 -6
  411. package/contracts/registry/ITransferInterceptor.sol +0 -1
  412. package/contracts/registry/Registry.sol +433 -187
  413. package/contracts/registry/RegistryAdmin.sol +448 -0
  414. package/contracts/registry/RegistryService.sol +76 -66
  415. package/contracts/registry/RegistryServiceManager.sol +6 -25
  416. package/contracts/registry/ReleaseLifecycle.sol +30 -0
  417. package/contracts/registry/ReleaseRegistry.sol +501 -0
  418. package/contracts/registry/ServiceAuthorizationV3.sol +194 -0
  419. package/contracts/registry/TokenRegistry.sol +261 -62
  420. package/contracts/shared/Component.sol +153 -148
  421. package/contracts/shared/ComponentService.sol +688 -94
  422. package/contracts/shared/ComponentServiceManager.sol +38 -0
  423. package/contracts/shared/ComponentVerifyingService.sol +126 -0
  424. package/contracts/shared/ContractLib.sol +38 -0
  425. package/contracts/shared/IComponent.sol +25 -41
  426. package/contracts/shared/IComponentService.sol +120 -0
  427. package/contracts/shared/IInstanceLinkedComponent.sol +41 -0
  428. package/contracts/{instance/base → shared}/IKeyValueStore.sol +7 -6
  429. package/contracts/{instance/base → shared}/ILifecycle.sol +5 -4
  430. package/contracts/shared/INftOwnable.sol +3 -1
  431. package/contracts/shared/IPolicyHolder.sol +12 -17
  432. package/contracts/shared/IRegisterable.sol +11 -0
  433. package/contracts/shared/IService.sol +9 -2
  434. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +4 -4
  435. package/contracts/shared/InstanceLinkedComponent.sol +213 -0
  436. package/contracts/{instance/base → shared}/KeyValueStore.sol +36 -74
  437. package/contracts/shared/Lifecycle.sol +88 -0
  438. package/contracts/shared/NftIdSet.sol +65 -0
  439. package/contracts/shared/NftOwnable.sol +27 -22
  440. package/contracts/shared/PolicyHolder.sol +18 -50
  441. package/contracts/shared/Registerable.sol +21 -11
  442. package/contracts/shared/RegistryLinked.sol +3 -2
  443. package/contracts/shared/Service.sol +48 -36
  444. package/contracts/shared/TokenHandler.sol +112 -8
  445. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  446. package/contracts/staking/IStaking.sol +168 -0
  447. package/contracts/staking/IStakingService.sol +103 -48
  448. package/contracts/staking/StakeManagerLib.sol +224 -0
  449. package/contracts/staking/Staking.sol +497 -0
  450. package/contracts/staking/StakingLifecycle.sol +23 -0
  451. package/contracts/staking/StakingManager.sol +52 -0
  452. package/contracts/staking/StakingReader.sol +190 -0
  453. package/contracts/staking/StakingService.sol +273 -49
  454. package/contracts/staking/StakingServiceManager.sol +11 -7
  455. package/contracts/staking/StakingStore.sol +605 -0
  456. package/contracts/staking/TargetManagerLib.sol +211 -0
  457. package/contracts/type/AddressSet.sol +1 -1
  458. package/contracts/type/Amount.sol +44 -3
  459. package/contracts/type/Blocknumber.sol +26 -3
  460. package/contracts/type/ClaimId.sol +6 -1
  461. package/contracts/type/Fee.sol +17 -16
  462. package/contracts/type/NftId.sol +15 -16
  463. package/contracts/type/NftIdSet.sol +1 -1
  464. package/contracts/type/ObjectType.sol +176 -62
  465. package/contracts/type/PayoutId.sol +10 -10
  466. package/contracts/type/Referral.sol +2 -1
  467. package/contracts/type/RequestId.sol +75 -0
  468. package/contracts/type/RiskId.sol +16 -2
  469. package/contracts/type/RoleId.sol +98 -75
  470. package/contracts/type/Seconds.sol +48 -1
  471. package/contracts/type/Selector.sol +102 -0
  472. package/contracts/type/StateId.sol +41 -2
  473. package/contracts/type/String.sol +53 -0
  474. package/contracts/type/Timestamp.sol +17 -3
  475. package/contracts/type/UFixed.sol +38 -9
  476. package/contracts/type/Version.sol +4 -2
  477. package/contracts/{shared → upgradeability}/ProxyManager.sol +76 -39
  478. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  479. package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
  480. package/package.json +9 -5
  481. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  482. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -778
  483. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  484. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1348
  485. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  486. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -124
  487. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  488. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  489. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  490. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -581
  491. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  492. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -194
  493. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  494. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -256
  495. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  496. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  497. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  498. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  499. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  500. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -864
  501. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  502. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -679
  503. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  504. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -238
  505. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  506. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -846
  507. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  508. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  509. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  510. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  511. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  512. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  513. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -598
  514. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  515. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  516. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  517. package/contracts/instance/InstanceAccessManager.sol +0 -543
  518. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -308
  519. package/contracts/instance/base/Lifecycle.sol +0 -121
  520. package/contracts/instance/module/ISetup.sol +0 -33
  521. package/contracts/instance/module/ITreasury.sol +0 -23
  522. package/contracts/product/ProductService.sol +0 -212
  523. package/contracts/product/ProductServiceManager.sol +0 -42
  524. package/contracts/registry/RegistryAccessManager.sol +0 -132
  525. package/contracts/registry/ReleaseManager.sol +0 -382
  526. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
  527. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
@@ -1,339 +1,404 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {Pool} from "./Pool.sol";
5
- import {IRegistry} from "../registry/IRegistry.sol";
6
- import {IInstance} from "../instance/IInstance.sol";
7
4
  import {IBundle} from "../instance/module/IBundle.sol";
8
- import {TokenHandler} from "../instance/module/ITreasury.sol";
5
+ import {IBundleService} from "./IBundleService.sol";
9
6
  import {IComponents} from "../instance/module/IComponents.sol";
7
+ import {IComponentService} from "../shared/IComponentService.sol";
8
+ import {IInstance} from "../instance/IInstance.sol";
9
+ import {IInstanceService} from "../instance/IInstanceService.sol";
10
10
  import {IPolicy} from "../instance/module/IPolicy.sol";
11
-
12
- import {IVersionable} from "../shared/IVersionable.sol";
13
- import {Versionable} from "../shared/Versionable.sol";
14
- import {INftOwnable} from "../shared/INftOwnable.sol";
11
+ import {IProductComponent} from "../product/IProductComponent.sol";
12
+ import {IPoolService} from "./IPoolService.sol";
13
+ import {IRegistry} from "../registry/IRegistry.sol";
14
+ import {IRegistryService} from "../registry/IRegistryService.sol";
15
+ import {IStaking} from "../staking/IStaking.sol";
15
16
 
16
17
  import {Amount, AmountLib} from "../type/Amount.sol";
18
+ import {ClaimId} from "../type/ClaimId.sol";
17
19
  import {Fee, FeeLib} from "../type/Fee.sol";
18
- import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
19
- import {ObjectType, POOL, BUNDLE} from "../type/ObjectType.sol";
20
- import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../type/RoleId.sol";
20
+ import {NftId} from "../type/NftId.sol";
21
+ import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
22
+ import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
21
23
  import {Fee, FeeLib} from "../type/Fee.sol";
22
- import {Version, VersionLib} from "../type/Version.sol";
23
- import {KEEP_STATE, StateId} from "../type/StateId.sol";
24
+ import {KEEP_STATE} from "../type/StateId.sol";
24
25
  import {Seconds} from "../type/Seconds.sol";
25
- import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
26
- import {Version, VersionLib} from "../type/Version.sol";
27
-
28
- import {IService} from "../shared/IService.sol";
29
- import {Service} from "../shared/Service.sol";
30
- import {BundleManager} from "../instance/BundleManager.sol";
31
- import {ComponentService} from "../shared/ComponentService.sol";
32
- import {IBundleService} from "./IBundleService.sol";
33
- import {IPoolService} from "./IPoolService.sol";
34
- import {IRegistryService} from "../registry/IRegistryService.sol";
35
- import {InstanceService} from "../instance/InstanceService.sol";
26
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
27
+ import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
36
28
  import {InstanceReader} from "../instance/InstanceReader.sol";
37
- import {IComponent} from "../shared/IComponent.sol";
38
- import {IPoolComponent} from "./IPoolComponent.sol";
29
+ import {InstanceStore} from "../instance/InstanceStore.sol";
39
30
 
40
31
  string constant POOL_SERVICE_NAME = "PoolService";
41
32
 
42
33
  contract PoolService is
43
- ComponentService,
34
+ ComponentVerifyingService,
44
35
  IPoolService
45
36
  {
46
- using NftIdLib for NftId;
47
- using AmountLib for Amount;
48
-
49
37
  IBundleService internal _bundleService;
38
+ IComponentService internal _componentService;
39
+ IStaking private _staking;
50
40
 
51
41
  function _initialize(
52
42
  address owner,
53
43
  bytes memory data
54
44
  )
55
45
  internal
56
- initializer
57
46
  virtual override
47
+ initializer()
58
48
  {
59
49
  (
60
- address registryAddress,,
61
- //address managerAddress
50
+ address registryAddress,
62
51
  address authority
63
- ) = abi.decode(data, (address, address, address));
52
+ ) = abi.decode(data, (address, address));
64
53
 
65
- initializeService(registryAddress, authority, owner);
66
- _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart()));
67
- registerInterface(type(IPoolService).interfaceId);
68
- }
54
+ _initializeService(registryAddress, authority, owner);
69
55
 
70
- function getDomain() public pure override returns(ObjectType) {
71
- return POOL();
56
+ _bundleService = IBundleService(_getServiceAddress(BUNDLE()));
57
+ _componentService = IComponentService(_getServiceAddress(COMPONENT()));
58
+ _staking = IStaking(getRegistry().getStakingAddress());
59
+
60
+ _registerInterface(type(IPoolService).interfaceId);
72
61
  }
73
62
 
74
- function register(address poolAddress)
63
+
64
+ /// @inheritdoc IPoolService
65
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
75
66
  external
76
- returns(NftId poolNftId)
67
+ virtual
77
68
  {
78
- (
79
- IComponent component,
80
- address owner,
81
- IInstance instance,
82
- NftId instanceNftId
83
- ) = _checkComponentForRegistration(
84
- poolAddress,
85
- POOL(),
86
- POOL_OWNER_ROLE());
87
-
88
- IPoolComponent pool = IPoolComponent(poolAddress);
89
- IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
90
- pool.linkToRegisteredNftId();
91
- poolNftId = registryInfo.nftId;
92
-
93
- // amend component info with pool specific token handler
94
- IComponents.ComponentInfo memory componentInfo = pool.getComponentInfo();
95
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
96
-
97
- // save amended component info with instance
98
- instance.getInstanceStore().createPoolSetup(poolNftId, componentInfo);
99
-
100
- bytes4[][] memory selectors = new bytes4[][](2);
101
- selectors[0] = new bytes4[](1);
102
- selectors[1] = new bytes4[](1);
103
-
104
- selectors[0][0] = IPoolComponent.setFees.selector;
105
- selectors[1][0] = IPoolComponent.verifyApplication.selector;
106
-
107
- RoleId[] memory roles = new RoleId[](2);
108
- roles[0] = POOL_OWNER_ROLE();
109
- roles[1] = POLICY_SERVICE_ROLE();
110
-
111
- getInstanceService().createGifTarget(
112
- instanceNftId,
113
- poolAddress,
114
- pool.getName(),
115
- selectors,
116
- roles);
69
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
70
+ InstanceReader instanceReader = instance.getInstanceReader();
71
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
72
+
73
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
74
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
75
+ instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
76
+
77
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
117
78
  }
118
79
 
119
80
 
120
- function setMaxCapitalAmount(Amount maxCapitalAmount)
81
+ /// @inheritdoc IPoolService
82
+ function createBundle(
83
+ address bundleOwner, // initial bundle owner
84
+ Fee memory fee, // fees deducted from premium that go to bundle owner
85
+ Seconds lifetime, // initial duration for which new policies are covered
86
+ bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
87
+ )
88
+ external
89
+ virtual
90
+ returns(NftId bundleNftId)
91
+ {
92
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
93
+
94
+ // create the empty bundle
95
+ bundleNftId = _bundleService.create(
96
+ instance,
97
+ poolNftId,
98
+ bundleOwner,
99
+ fee,
100
+ AmountLib.zero(),
101
+ lifetime,
102
+ filter);
103
+
104
+ emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
105
+ }
106
+
107
+
108
+ function closeBundle(NftId bundleNftId)
121
109
  external
122
110
  virtual
123
111
  {
124
- /*
125
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
126
- InstanceReader instanceReader = instance.getInstanceReader();
112
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
127
113
 
128
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
129
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
130
- Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
114
+ // TODO get performance fee for pool (#477)
131
115
 
132
- poolInfo.maxCapitalAmount = maxCapitalAmount;
133
- componentInfo.data = abi.encode(poolInfo);
134
- instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
116
+ // releasing collateral in bundle
117
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
135
118
 
136
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
137
- */
119
+ _componentService.decreasePoolBalance(
120
+ instance.getInstanceStore(),
121
+ poolNftId,
122
+ unstakedAmount + feeAmount,
123
+ AmountLib.zero());
124
+
125
+ emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
126
+
127
+ if ((unstakedAmount + feeAmount).gtz()){
128
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
129
+ poolComponentInfo.tokenHandler.distributeTokens(
130
+ poolComponentInfo.wallet,
131
+ getRegistry().ownerOf(bundleNftId),
132
+ unstakedAmount + feeAmount);
133
+ }
138
134
  }
139
135
 
140
- function setBundleOwnerRole(RoleId bundleOwnerRole)
136
+
137
+ /// @inheritdoc IPoolService
138
+ function processFundedClaim(
139
+ NftId policyNftId,
140
+ ClaimId claimId,
141
+ Amount availableAmount
142
+ )
141
143
  external
142
144
  virtual
143
145
  {
144
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
146
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
145
147
  InstanceReader instanceReader = instance.getInstanceReader();
146
-
147
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
148
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
149
-
150
- // bundle owner role may only be set once per pool
151
- if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
152
- revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
148
+ NftId productNftId = _getProductNftId(poolNftId);
149
+
150
+ // check policy matches with calling pool
151
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
152
+ if(policyInfo.productNftId != productNftId) {
153
+ revert ErrorPoolServicePolicyPoolMismatch(
154
+ policyNftId,
155
+ policyInfo.productNftId,
156
+ productNftId);
153
157
  }
154
158
 
155
- poolInfo.bundleOwnerRole = bundleOwnerRole;
156
- componentInfo.data = abi.encode(poolInfo);
157
- instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
159
+ emit LogPoolServiceProcessFundedClaim(policyNftId, claimId, availableAmount);
158
160
 
159
- emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
161
+ // callback to product component if applicable
162
+ if (instanceReader.getProductInfo(productNftId).isProcessingFundedClaims) {
163
+ address productAddress = getRegistry().getObjectAddress(productNftId);
164
+ IProductComponent(productAddress).processFundedClaim(policyNftId, claimId, availableAmount);
165
+ }
160
166
  }
161
167
 
162
168
 
163
- function setFees(
164
- Fee memory poolFee,
165
- Fee memory stakingFee,
166
- Fee memory performanceFee
167
- )
168
- external
169
+ /// @inheritdoc IPoolService
170
+ function stake(NftId bundleNftId, Amount amount)
171
+ external
169
172
  virtual
173
+ // TODO: restricted() (once #462 is done)
174
+ onlyNftOfType(bundleNftId, BUNDLE())
175
+ returns(Amount netAmount)
170
176
  {
171
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
177
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
172
178
  InstanceReader instanceReader = instance.getInstanceReader();
179
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
180
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
173
181
 
174
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
175
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
182
+ if (bundleInfo.poolNftId != poolNftId) {
183
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
184
+ }
185
+
186
+ {
187
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
188
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
189
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
190
+ }
191
+ }
176
192
 
177
- poolInfo.poolFee = poolFee;
178
- poolInfo.stakingFee = stakingFee;
179
- poolInfo.performanceFee = performanceFee;
180
- componentInfo.data = abi.encode(poolInfo);
181
- instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
193
+ // calculate fees
194
+ IRegistry registry = getRegistry();
195
+ Amount feeAmount;
196
+
197
+ {
198
+ NftId productNftId = registry.getObjectInfo(poolNftId).parentNftId;
199
+ Fee memory stakingFee = instanceReader.getProductInfo(productNftId).stakingFee;
200
+ (
201
+ feeAmount,
202
+ netAmount
203
+ ) = FeeLib.calculateFee(
204
+ stakingFee,
205
+ amount);
206
+ }
207
+
208
+ // do all the bookkeeping
209
+ _componentService.increasePoolBalance(
210
+ instance.getInstanceStore(),
211
+ poolNftId,
212
+ netAmount,
213
+ feeAmount);
182
214
 
183
- // TODO add logging
215
+ _bundleService.stake(instance, bundleNftId, netAmount);
216
+
217
+ // collect tokens from bundle owner
218
+ address bundleOwner = registry.ownerOf(bundleNftId);
219
+ emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
220
+
221
+ // TODO only collect staking token when pool is not externally managed
222
+ _collectStakingAmount(
223
+ instanceReader,
224
+ poolNftId,
225
+ bundleOwner,
226
+ amount);
184
227
  }
185
228
 
186
- function createBundle(
187
- address owner, // initial bundle owner
188
- Fee memory fee, // fees deducted from premium that go to bundle owner
189
- Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
190
- Seconds lifetime, // initial duration for which new policies are covered
191
- bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
192
- )
229
+ /// @inheritdoc IPoolService
230
+ function unstake(NftId bundleNftId, Amount amount)
193
231
  external
194
232
  virtual
195
- returns(NftId bundleNftId)
233
+ // TODO: restricted() (once #462 is done)
234
+ returns(Amount netAmount)
196
235
  {
197
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
236
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
198
237
  InstanceReader instanceReader = instance.getInstanceReader();
238
+ InstanceStore instanceStore = instance.getInstanceStore();
239
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
240
+
241
+ if (bundleInfo.poolNftId != poolNftId) {
242
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
243
+ }
199
244
 
200
- // pool fee book keeping
201
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
202
- Amount stakingNetAmount = _processStakingFees(componentInfo, stakingAmount);
245
+ // call bundle service for bookkeeping and additional checks
246
+ Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
203
247
 
204
- bundleNftId = _bundleService.create(
205
- instance,
206
- poolNftId,
207
- owner,
208
- fee,
209
- stakingNetAmount,
210
- lifetime,
211
- filter);
248
+ // Important: from now on work only with unstakedAmount as it is the only reliable amount.
249
+ // if amount was max, this was set to the available amount
212
250
 
213
- // collect tokens from bundle owner
214
- _transferStakingAmount(componentInfo, owner, stakingAmount);
251
+ // TODO: handle performance fees (issue #477)
215
252
 
216
- emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
253
+ // update pool bookkeeping - performance fees stay in the pool, but as fees
254
+ _componentService.decreasePoolBalance(
255
+ instanceStore,
256
+ poolNftId,
257
+ unstakedAmount,
258
+ AmountLib.zero());
259
+
260
+ IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
261
+
262
+ // transfer amount to bundle owner
263
+ address owner = getRegistry().ownerOf(bundleNftId);
264
+ emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
265
+ poolComponentInfo.tokenHandler.distributeTokens(
266
+ poolComponentInfo.wallet,
267
+ owner,
268
+ unstakedAmount);
269
+
270
+ return unstakedAmount;
217
271
  }
218
272
 
219
273
 
220
- function closeBundle(NftId bundleNftId)
274
+ function fundPoolWallet(NftId poolNftId, Amount amount)
221
275
  external
222
276
  virtual
277
+ restricted()
223
278
  {
224
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
225
-
226
- // TODO book keeping for pool collateral released outside of retention level
227
-
228
- // releasing collateral in bundle
229
- _bundleService.close(instance, bundleNftId);
279
+ // TODO check that poolNftId is externally managed
280
+ // TODO implement
281
+ }
230
282
 
231
- // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
232
283
 
233
- emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
284
+ function defundPoolWallet(NftId poolNftId, Amount amount)
285
+ external
286
+ virtual
287
+ restricted()
288
+ {
289
+ // TODO check that poolNftId is externally managed
290
+ // TODO implement
234
291
  }
235
292
 
236
293
  function processSale(
237
294
  NftId bundleNftId,
238
- IPolicy.Premium memory premium,
239
- Amount actualAmountTransferred
295
+ IPolicy.PremiumInfo memory premium
240
296
  )
241
297
  external
242
298
  virtual
243
- restricted
299
+ restricted()
300
+ onlyNftOfType(bundleNftId, BUNDLE())
244
301
  {
245
302
  IRegistry registry = getRegistry();
246
- IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
247
- IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
248
- IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
249
- IInstance instance = IInstance(instanceObjectInfo.objectAddress);
250
-
251
- Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
252
- Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
253
- Amount expectedTransferAmount = AmountLib.toAmount(premium.netPremiumAmount) + poolFeeAmount + bundleFeeAmount;
254
- if (!(actualAmountTransferred == expectedTransferAmount)) {
255
- revert ErrorPoolServiceInvalidTransferAmount(expectedTransferAmount, actualAmountTransferred);
256
- }
257
-
258
- // update pool fee balance
259
- if (poolFeeAmount.gtz()) {
260
- IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolObjectInfo.nftId);
261
- poolComponentInfo.feeAmount = poolComponentInfo.feeAmount.add(poolFeeAmount);
262
- instance.getInstanceStore().updatePoolSetup(poolObjectInfo.nftId, poolComponentInfo, KEEP_STATE());
263
- }
264
-
265
- if (bundleFeeAmount.gtz()) {
266
- _bundleService.updateBundleFees(instance, bundleNftId, bundleFeeAmount);
267
- }
303
+ IRegistry.ObjectInfo memory bundleInfo = registry.getObjectInfo(bundleNftId);
304
+ IRegistry.ObjectInfo memory poolInfo = registry.getObjectInfo(bundleInfo.parentNftId);
305
+ IInstance instance = _getInstanceForComponent(registry, poolInfo);
306
+
307
+ Amount poolFeeAmount = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
308
+ Amount bundleFeeAmount = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
309
+ Amount bundleNetAmount = premium.netPremiumAmount;
310
+
311
+ InstanceStore instanceStore = instance.getInstanceStore();
312
+ _componentService.increasePoolBalance(
313
+ instanceStore,
314
+ poolInfo.nftId,
315
+ bundleNetAmount + bundleFeeAmount,
316
+ poolFeeAmount);
317
+
318
+ _componentService.increaseBundleBalance(
319
+ instanceStore,
320
+ bundleInfo.nftId,
321
+ bundleNetAmount,
322
+ bundleFeeAmount);
268
323
  }
269
324
 
325
+
270
326
  function lockCollateral(
271
327
  IInstance instance,
328
+ address token,
272
329
  NftId productNftId,
273
330
  NftId applicationNftId,
274
- IPolicy.PolicyInfo memory applicationInfo,
275
- Amount premiumAmount // premium amount after product and distribution fees
331
+ NftId bundleNftId,
332
+ Amount sumInsuredAmount // premium amount after product and distribution fees
276
333
  )
277
334
  external
278
335
  virtual
279
- restricted
336
+ restricted()
337
+ returns (
338
+ Amount totalCollateralAmount,
339
+ Amount localCollateralAmount
340
+ )
280
341
  {
281
- InstanceReader instanceReader = instance.getInstanceReader();
282
- NftId poolNftId = instanceReader.getProductSetupInfo(productNftId).poolNftId;
283
- NftId bundleNftId = applicationInfo.bundleNftId;
284
-
285
- // TODO move this check to application creation and don't repeat this here
286
- // ensure that pool for bundle from application matches with pool for product of application
287
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
288
- if(bundleInfo.poolNftId != poolNftId) {
289
- revert ErrorPoolServiceBundlePoolMismatch(bundleInfo.poolNftId, poolNftId);
290
- }
291
-
292
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
293
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
294
-
295
- // TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
296
- Amount collateralAmount = applicationInfo.sumInsuredAmount;
297
-
298
- // TODO add correct net premium calculation (pool fee might be > 0)
299
- Amount premiumAfterPoolFeeAmount = premiumAmount;
300
-
301
- // lock collateral amount from involvedd bundle
342
+ (
343
+ totalCollateralAmount,
344
+ localCollateralAmount
345
+ ) = calculateRequiredCollateral(
346
+ instance.getInstanceReader(),
347
+ productNftId,
348
+ sumInsuredAmount);
349
+
350
+ // lock collateral amount from involved bundle
302
351
  _bundleService.lockCollateral(
303
352
  instance,
304
353
  applicationNftId,
305
354
  bundleNftId,
306
- collateralAmount,
307
- premiumAfterPoolFeeAmount);
308
-
309
- // also verify/confirm application by pool if necessary
310
- if(poolInfo.isVerifyingApplications) {
311
- address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
312
- IPoolComponent(poolAddress).verifyApplication(
313
- applicationNftId,
314
- applicationInfo.applicationData,
315
- bundleNftId,
316
- bundleInfo.filter,
317
- collateralAmount);
318
- }
319
- }
355
+ localCollateralAmount);
320
356
 
357
+ // update value locked with staking service
358
+ _staking.increaseTotalValueLocked(
359
+ instance.getNftId(),
360
+ token,
361
+ totalCollateralAmount);
362
+ }
321
363
 
322
- function reduceCollateral(
364
+ function processPayout(
323
365
  IInstance instance,
366
+ address token,
324
367
  NftId policyNftId,
325
368
  IPolicy.PolicyInfo memory policyInfo,
326
369
  Amount payoutAmount
327
370
  )
328
371
  external
329
372
  virtual
330
- restricted
373
+ restricted()
331
374
  {
375
+ NftId bundleNftId = policyInfo.bundleNftId;
376
+ NftId poolNftId = getRegistry().getObjectInfo(bundleNftId).parentNftId;
377
+ InstanceStore instanceStore = instance.getInstanceStore();
378
+
379
+ _componentService.decreasePoolBalance(
380
+ instanceStore,
381
+ poolNftId,
382
+ payoutAmount,
383
+ AmountLib.zero());
384
+
385
+ _componentService.decreaseBundleBalance(
386
+ instanceStore,
387
+ bundleNftId,
388
+ payoutAmount,
389
+ AmountLib.zero());
390
+
332
391
  _bundleService.releaseCollateral(
333
392
  instance,
334
393
  policyNftId,
335
394
  policyInfo.bundleNftId,
336
395
  payoutAmount);
396
+
397
+ // update value locked with staking service
398
+ _staking.decreaseTotalValueLocked(
399
+ instance.getNftId(),
400
+ token,
401
+ payoutAmount);
337
402
  }
338
403
 
339
404
 
@@ -341,27 +406,83 @@ contract PoolService is
341
406
  /// may only be called by the policy service for unlocked pool components
342
407
  function releaseCollateral(
343
408
  IInstance instance,
409
+ address token,
344
410
  NftId policyNftId,
345
411
  IPolicy.PolicyInfo memory policyInfo
346
412
  )
347
413
  external
348
414
  virtual
349
- restricted
415
+ restricted()
350
416
  {
417
+ Amount remainingCollateralAmount = policyInfo.sumInsuredAmount - policyInfo.claimAmount;
418
+
351
419
  _bundleService.releaseCollateral(
352
420
  instance,
353
421
  policyNftId,
354
422
  policyInfo.bundleNftId,
355
- policyInfo.sumInsuredAmount - policyInfo.claimAmount);
423
+ remainingCollateralAmount);
356
424
 
357
425
  _bundleService.unlinkPolicy(
358
426
  instance,
359
427
  policyNftId);
428
+
429
+ // update value locked with staking service
430
+ _staking.decreaseTotalValueLocked(
431
+ instance.getNftId(),
432
+ token,
433
+ remainingCollateralAmount);
434
+ }
435
+
436
+
437
+ function calculateRequiredCollateral(
438
+ InstanceReader instanceReader,
439
+ NftId productNftId,
440
+ Amount sumInsuredAmount
441
+ )
442
+ public
443
+ view
444
+ returns(
445
+ Amount totalCollateralAmount,
446
+ Amount localCollateralAmount
447
+ )
448
+ {
449
+ NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
450
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
451
+
452
+ (
453
+ totalCollateralAmount,
454
+ localCollateralAmount
455
+ ) = calculateRequiredCollateral(
456
+ poolInfo.collateralizationLevel,
457
+ poolInfo.retentionLevel,
458
+ sumInsuredAmount);
459
+ }
460
+
461
+
462
+ function calculateRequiredCollateral(
463
+ UFixed collateralizationLevel,
464
+ UFixed retentionLevel,
465
+ Amount sumInsuredAmount
466
+ )
467
+ public
468
+ pure
469
+ returns(
470
+ Amount totalCollateralAmount,
471
+ Amount localCollateralAmount
472
+ )
473
+ {
474
+ // collateralization is applied to sum insured
475
+ UFixed totalUFixed = collateralizationLevel * sumInsuredAmount.toUFixed();
476
+ totalCollateralAmount = AmountLib.toAmount(totalUFixed.toInt());
477
+
478
+ // retention level defines how much capital is required locally
479
+ localCollateralAmount = AmountLib.toAmount(
480
+ (retentionLevel * totalUFixed).toInt());
360
481
  }
361
482
 
362
483
 
363
484
  function _processStakingFees(
364
- IComponents.ComponentInfo memory componentInfo,
485
+ Fee memory stakingFee,
365
486
  Amount stakingAmount
366
487
  )
367
488
  internal
@@ -370,7 +491,6 @@ contract PoolService is
370
491
  stakingNetAmount = stakingAmount;
371
492
 
372
493
  // check if any staking fees apply
373
- Fee memory stakingFee = abi.decode(componentInfo.data, (IComponents.PoolInfo)).stakingFee;
374
494
  if (FeeLib.gtz(stakingFee)) {
375
495
  (Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
376
496
  stakingNetAmount = netAmount;
@@ -380,25 +500,26 @@ contract PoolService is
380
500
  }
381
501
 
382
502
 
383
- // TODO create (I)TreasuryService that deals with all gif related token transfers
384
503
  /// @dev transfers the specified amount from the bundle owner to the pool's wallet
385
- function _transferStakingAmount(
386
- IComponents.ComponentInfo memory componentInfo,
504
+ function _collectStakingAmount(
505
+ InstanceReader instanceReader,
506
+ NftId poolNftId,
387
507
  address bundleOwner,
388
- Amount stakingAmount
508
+ Amount amount
389
509
  )
390
510
  internal
391
511
  {
392
- TokenHandler tokenHandler = componentInfo.tokenHandler;
393
- address poolWallet = componentInfo.wallet;
394
512
 
395
- if(stakingAmount.gtz()) {
396
- tokenHandler.transfer(
397
- bundleOwner,
398
- poolWallet,
399
- stakingAmount
400
- );
401
- }
513
+ // collecting investor token
514
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
515
+ address poolWallet = componentInfo.wallet;
516
+ componentInfo.tokenHandler.collectTokens(
517
+ bundleOwner,
518
+ poolWallet,
519
+ amount);
402
520
  }
403
521
 
522
+ function _getDomain() internal pure override returns(ObjectType) {
523
+ return POOL();
524
+ }
404
525
  }