@etherisc/gif-next 0.0.2-bc4f70f-636 → 0.0.2-bc7a257-709

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 (590) hide show
  1. package/README.md +128 -9
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1023 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +752 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1494 -0
  10. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  12. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +673 -0
  14. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1403 -0
  16. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +615 -0
  18. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
  20. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  21. package/artifacts/contracts/{shared/IAccessManagerExtended.sol/IAccessManagerExtended.json → authorization/IAccessAdmin.sol/IAccessAdmin.json} +507 -845
  22. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  23. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +382 -0
  24. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +167 -0
  26. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  27. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +253 -0
  28. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  29. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1225 -0
  30. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  31. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +644 -0
  32. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +119 -605
  34. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +510 -263
  36. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +176 -118
  38. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  39. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +133 -279
  40. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  41. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +323 -66
  42. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  44. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1461 -0
  46. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  47. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +644 -0
  48. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  49. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2018 -0
  50. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  51. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +644 -0
  52. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  53. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1404 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +644 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1152 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1628 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +644 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  65. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2405 -0
  66. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  67. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +644 -0
  68. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  69. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +851 -0
  70. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  71. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +265 -88
  72. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  73. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +269 -111
  74. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  75. package/artifacts/contracts/instance/Instance.sol/Instance.json +278 -213
  76. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  77. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1581 -253
  78. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  79. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +716 -0
  80. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  81. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1153 -396
  82. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +275 -274
  84. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  85. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +104 -104
  86. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  87. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +916 -774
  88. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  89. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
  90. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  91. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  92. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  93. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  94. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  95. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  96. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  97. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
  98. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  99. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +192 -0
  100. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  101. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  102. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  103. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  104. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  105. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  106. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  107. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  108. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  109. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  110. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +938 -0
  111. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  112. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +632 -0
  113. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +43 -1
  115. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +130 -136
  117. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  118. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +81 -10
  119. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  120. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +121 -413
  121. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  122. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +193 -177
  123. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +147 -93
  125. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  126. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1231 -0
  127. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  128. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +644 -0
  129. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  130. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +372 -200
  131. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  132. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +166 -104
  133. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  134. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +224 -34
  135. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  136. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +128 -396
  137. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  138. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +472 -307
  139. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  140. package/artifacts/contracts/pool/Pool.sol/Pool.json +125 -684
  141. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  142. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +472 -0
  143. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  144. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +715 -541
  145. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  146. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +189 -103
  147. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  148. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +227 -166
  149. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +125 -99
  151. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  152. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1140 -0
  153. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  154. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +644 -0
  155. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  156. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +454 -220
  157. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  158. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +166 -120
  159. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  160. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +148 -8
  161. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  162. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +320 -15
  163. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  164. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +377 -103
  165. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  166. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +169 -82
  167. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  168. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +270 -268
  169. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  170. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +100 -7
  171. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  172. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +487 -292
  173. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  174. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +727 -0
  175. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  176. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +162 -104
  177. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  178. package/artifacts/contracts/product/PricingService.sol/PricingService.json +252 -308
  179. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  180. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +126 -132
  181. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  182. package/artifacts/contracts/product/Product.sol/Product.json +268 -567
  183. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  184. package/artifacts/contracts/product/RiskService.sol/RiskService.json +688 -0
  185. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  186. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +736 -0
  187. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  188. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  189. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  190. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +367 -63
  191. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  192. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +84 -151
  193. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  194. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  195. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  196. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  197. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  198. package/artifacts/contracts/registry/Registry.sol/Registry.json +599 -126
  199. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  200. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1777 -166
  201. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  202. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +878 -0
  203. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  204. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +132 -278
  205. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  206. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +111 -85
  207. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  208. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1954 -0
  209. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  210. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  211. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  212. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1337 -0
  213. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  214. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +272 -0
  215. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  216. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +15 -15
  217. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  218. package/artifacts/contracts/shared/Component.sol/Component.json +67 -277
  219. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  220. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +529 -532
  221. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  222. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +152 -128
  223. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  224. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +63 -104
  225. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  226. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +661 -0
  227. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  228. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  229. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  230. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  231. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  232. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  233. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +80 -100
  235. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  236. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +509 -249
  237. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  238. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +116 -133
  239. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  240. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +45 -3
  241. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  242. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +34 -3
  243. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  244. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  245. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  246. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  247. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  248. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +148 -0
  249. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  250. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  251. package/artifacts/contracts/shared/IService.sol/IService.json +67 -1
  252. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  253. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  254. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  255. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +106 -366
  256. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  257. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +55 -88
  258. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  259. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -62
  260. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  261. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  262. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  263. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  264. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  265. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  266. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  267. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +122 -97
  268. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  269. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  270. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  271. package/artifacts/contracts/shared/Service.sol/Service.json +63 -104
  272. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  273. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +585 -12
  274. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  275. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  276. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  277. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  278. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  279. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +196 -143
  280. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  281. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +203 -29
  282. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  283. package/artifacts/contracts/staking/Staking.sol/Staking.json +280 -421
  284. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  285. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +469 -0
  286. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  287. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +205 -0
  288. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  289. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +140 -117
  290. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  291. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +41 -73
  292. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  293. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +259 -187
  294. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  295. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +117 -99
  296. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  297. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +273 -165
  298. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  299. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +94 -48
  300. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  301. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  302. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/Amount.sol/AmountLib.json +63 -10
  304. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  306. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  308. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  310. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  311. package/artifacts/contracts/type/Fee.sol/FeeLib.json +98 -37
  312. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  313. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  314. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  315. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  316. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  318. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  319. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  320. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +140 -4
  322. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  324. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  326. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +4 -4
  328. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +125 -7
  330. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +283 -6
  332. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  333. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  334. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  335. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +148 -0
  336. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  337. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  338. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  339. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  340. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  341. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  342. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  343. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  344. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  345. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +126 -33
  346. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  347. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  348. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  349. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +120 -2
  350. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  351. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  352. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  353. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +618 -0
  354. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  355. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +142 -0
  356. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  357. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  358. package/contracts/accounting/AccountingService.sol +261 -0
  359. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  360. package/contracts/accounting/IAccountingService.sol +45 -0
  361. package/contracts/authorization/AccessAdmin.sol +704 -0
  362. package/contracts/authorization/AccessAdminLib.sol +183 -0
  363. package/contracts/authorization/AccessManagerCloneable.sol +158 -0
  364. package/contracts/authorization/Authorization.sol +365 -0
  365. package/contracts/authorization/IAccess.sol +57 -0
  366. package/contracts/authorization/IAccessAdmin.sol +170 -0
  367. package/contracts/authorization/IAuthorization.sol +80 -0
  368. package/contracts/authorization/IServiceAuthorization.sol +40 -0
  369. package/contracts/authorization/ServiceAuthorization.sol +106 -0
  370. package/contracts/distribution/BasicDistribution.sol +141 -0
  371. package/contracts/distribution/BasicDistributionAuthorization.sol +60 -0
  372. package/contracts/distribution/Distribution.sol +122 -139
  373. package/contracts/distribution/DistributionService.sol +221 -130
  374. package/contracts/distribution/DistributionServiceManager.sol +8 -11
  375. package/contracts/distribution/IDistributionComponent.sol +19 -42
  376. package/contracts/distribution/IDistributionService.sol +44 -22
  377. package/contracts/examples/fire/DamageLevel.sol +59 -0
  378. package/contracts/examples/fire/FirePool.sol +86 -0
  379. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  380. package/contracts/examples/fire/FireProduct.sol +433 -0
  381. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  382. package/contracts/examples/fire/FireUSD.sol +26 -0
  383. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  384. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  385. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  386. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  387. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  388. package/contracts/examples/unpermissioned/SimpleProduct.sol +373 -0
  389. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  390. package/contracts/instance/BundleSet.sol +130 -0
  391. package/contracts/instance/IInstance.sol +71 -47
  392. package/contracts/instance/IInstanceService.sol +47 -40
  393. package/contracts/instance/Instance.sol +197 -129
  394. package/contracts/instance/InstanceAdmin.sol +363 -244
  395. package/contracts/instance/InstanceAuthorizationV3.sol +235 -0
  396. package/contracts/instance/InstanceReader.sol +308 -48
  397. package/contracts/instance/InstanceService.sol +272 -175
  398. package/contracts/instance/InstanceServiceManager.sol +8 -13
  399. package/contracts/instance/InstanceStore.sol +35 -18
  400. package/contracts/instance/RiskSet.sol +118 -0
  401. package/contracts/instance/base/BalanceStore.sol +14 -11
  402. package/contracts/instance/base/Cloneable.sol +2 -25
  403. package/contracts/instance/base/ObjectCounter.sol +1 -2
  404. package/contracts/instance/base/ObjectLifecycle.sol +113 -0
  405. package/contracts/instance/base/ObjectSet.sol +77 -0
  406. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  407. package/contracts/instance/module/IBundle.sol +6 -5
  408. package/contracts/instance/module/IComponents.sol +30 -20
  409. package/contracts/instance/module/IDistribution.sol +21 -9
  410. package/contracts/instance/module/IPolicy.sol +50 -29
  411. package/contracts/instance/module/IRisk.sol +5 -0
  412. package/contracts/mock/Dip.sol +1 -1
  413. package/contracts/oracle/BasicOracle.sol +45 -0
  414. package/contracts/oracle/BasicOracleAuthorization.sol +37 -0
  415. package/contracts/oracle/IOracle.sol +25 -4
  416. package/contracts/oracle/IOracleComponent.sol +2 -1
  417. package/contracts/oracle/IOracleService.sol +2 -1
  418. package/contracts/oracle/Oracle.sol +62 -53
  419. package/contracts/oracle/OracleService.sol +118 -85
  420. package/contracts/oracle/OracleServiceManager.sol +8 -11
  421. package/contracts/pool/BasicPool.sol +173 -0
  422. package/contracts/pool/BasicPoolAuthorization.sol +76 -0
  423. package/contracts/pool/BundleService.sol +207 -108
  424. package/contracts/pool/BundleServiceManager.sol +8 -11
  425. package/contracts/pool/IBundleService.sol +31 -22
  426. package/contracts/pool/IPoolComponent.sol +20 -70
  427. package/contracts/pool/IPoolService.sol +90 -75
  428. package/contracts/pool/Pool.sol +207 -163
  429. package/contracts/pool/PoolLib.sol +309 -0
  430. package/contracts/pool/PoolService.sol +396 -262
  431. package/contracts/pool/PoolServiceManager.sol +6 -9
  432. package/contracts/product/ApplicationService.sol +107 -83
  433. package/contracts/product/ApplicationServiceManager.sol +6 -6
  434. package/contracts/product/BasicProduct.sol +49 -0
  435. package/contracts/product/BasicProductAuthorization.sol +56 -0
  436. package/contracts/product/ClaimService.sol +378 -180
  437. package/contracts/product/ClaimServiceManager.sol +6 -6
  438. package/contracts/product/IApplicationService.sol +9 -2
  439. package/contracts/product/IClaimService.sol +44 -8
  440. package/contracts/product/IPolicyService.sol +53 -36
  441. package/contracts/product/IPricingService.sol +11 -10
  442. package/contracts/product/IProductComponent.sol +29 -9
  443. package/contracts/product/{IProductService.sol → IRiskService.sol} +8 -8
  444. package/contracts/product/PolicyService.sol +441 -276
  445. package/contracts/product/PolicyServiceLib.sol +119 -0
  446. package/contracts/product/PolicyServiceManager.sol +6 -9
  447. package/contracts/product/PricingService.sol +72 -64
  448. package/contracts/product/PricingServiceManager.sol +6 -9
  449. package/contracts/product/Product.sol +230 -140
  450. package/contracts/product/RiskService.sol +154 -0
  451. package/contracts/product/RiskServiceManager.sol +39 -0
  452. package/contracts/registry/ChainNft.sol +72 -40
  453. package/contracts/registry/IRegistry.sol +78 -32
  454. package/contracts/registry/IRegistryService.sol +3 -10
  455. package/contracts/registry/IRelease.sol +29 -0
  456. package/contracts/registry/ITransferInterceptor.sol +1 -2
  457. package/contracts/registry/Registry.sol +368 -214
  458. package/contracts/registry/RegistryAdmin.sol +188 -167
  459. package/contracts/registry/RegistryAuthorization.sol +267 -0
  460. package/contracts/registry/RegistryService.sol +46 -71
  461. package/contracts/registry/RegistryServiceManager.sol +5 -10
  462. package/contracts/registry/ReleaseAdmin.sol +253 -0
  463. package/contracts/registry/ReleaseLifecycle.sol +32 -0
  464. package/contracts/registry/ReleaseRegistry.sol +517 -0
  465. package/contracts/registry/ServiceAuthorizationV3.sol +332 -0
  466. package/contracts/registry/TokenRegistry.sol +12 -11
  467. package/contracts/shared/Component.sol +65 -136
  468. package/contracts/shared/ComponentService.sol +428 -385
  469. package/contracts/shared/ComponentServiceManager.sol +10 -7
  470. package/contracts/shared/ComponentVerifyingService.sol +29 -18
  471. package/contracts/shared/ContractLib.sol +347 -0
  472. package/contracts/shared/IComponent.sol +5 -17
  473. package/contracts/shared/IComponentService.sol +49 -41
  474. package/contracts/shared/IInstanceLinkedComponent.sol +10 -26
  475. package/contracts/shared/IKeyValueStore.sol +1 -0
  476. package/contracts/shared/ILifecycle.sol +3 -2
  477. package/contracts/shared/INftOwnable.sol +2 -0
  478. package/contracts/shared/IPolicyHolder.sol +12 -22
  479. package/contracts/shared/IRegisterable.sol +23 -1
  480. package/contracts/shared/IService.sol +10 -5
  481. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +11 -3
  482. package/contracts/shared/InstanceLinkedComponent.sol +95 -45
  483. package/contracts/shared/KeyValueStore.sol +7 -3
  484. package/contracts/shared/Lifecycle.sol +30 -72
  485. package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
  486. package/contracts/shared/NftOwnable.sol +31 -11
  487. package/contracts/shared/PolicyHolder.sol +17 -57
  488. package/contracts/shared/Registerable.sol +52 -21
  489. package/contracts/shared/RegistryLinked.sol +9 -14
  490. package/contracts/shared/Service.sol +28 -40
  491. package/contracts/shared/TokenHandler.sol +310 -26
  492. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  493. package/contracts/staking/IStaking.sol +26 -15
  494. package/contracts/staking/IStakingService.sol +41 -15
  495. package/contracts/staking/Staking.sol +153 -158
  496. package/contracts/staking/StakingLib.sol +281 -0
  497. package/contracts/staking/StakingLifecycle.sol +23 -0
  498. package/contracts/staking/StakingManager.sol +10 -12
  499. package/contracts/staking/StakingReader.sol +26 -33
  500. package/contracts/staking/StakingService.sol +143 -82
  501. package/contracts/staking/StakingServiceManager.sol +8 -8
  502. package/contracts/staking/StakingStore.sol +94 -60
  503. package/contracts/staking/TargetManagerLib.sol +7 -3
  504. package/contracts/type/Amount.sol +27 -5
  505. package/contracts/type/Blocknumber.sol +7 -1
  506. package/contracts/type/ClaimId.sol +6 -1
  507. package/contracts/type/Fee.sol +8 -8
  508. package/contracts/type/Key32.sol +2 -2
  509. package/contracts/type/Key32Set.sol +62 -0
  510. package/contracts/type/NftId.sol +7 -0
  511. package/contracts/type/ObjectType.sol +187 -61
  512. package/contracts/type/PayoutId.sol +10 -10
  513. package/contracts/type/Referral.sol +1 -0
  514. package/contracts/type/RiskId.sol +38 -6
  515. package/contracts/type/RoleId.sol +117 -81
  516. package/contracts/type/Seconds.sol +21 -1
  517. package/contracts/type/Selector.sol +107 -0
  518. package/contracts/type/StateId.sol +15 -1
  519. package/contracts/type/String.sol +53 -0
  520. package/contracts/type/Timestamp.sol +10 -5
  521. package/contracts/type/UFixed.sol +61 -125
  522. package/contracts/type/Version.sol +57 -6
  523. package/contracts/{shared → upgradeability}/ProxyManager.sol +82 -47
  524. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +8 -4
  525. package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
  526. package/package.json +10 -6
  527. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  528. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -778
  529. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  530. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -228
  531. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  532. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -256
  533. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  534. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  535. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  536. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  537. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -679
  538. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  539. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -694
  540. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  541. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1292
  542. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.dbg.json +0 -4
  543. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.json +0 -137
  544. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
  545. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +0 -1193
  546. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
  547. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1715
  548. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
  549. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1728
  550. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
  551. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1806
  552. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
  553. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1824
  554. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  555. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  556. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
  557. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
  558. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1600
  559. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  560. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  561. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  562. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
  563. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +0 -306
  564. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  565. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
  566. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  567. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  568. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  569. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  570. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -444
  571. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  572. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -10
  573. package/contracts/instance/BundleManager.sol +0 -126
  574. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -377
  575. package/contracts/instance/base/ObjectManager.sol +0 -82
  576. package/contracts/instance/module/IAccess.sol +0 -46
  577. package/contracts/product/ProductService.sol +0 -124
  578. package/contracts/product/ProductServiceManager.sol +0 -42
  579. package/contracts/registry/ReleaseManager.sol +0 -600
  580. package/contracts/registry/ServiceAuthorizationsLib.sol +0 -173
  581. package/contracts/shared/AccessManagerCustom.sol +0 -736
  582. package/contracts/shared/AccessManagerExtended.sol +0 -470
  583. package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
  584. package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -137
  585. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
  586. package/contracts/shared/IAccessManagerExtended.sol +0 -74
  587. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -18
  588. package/contracts/shared/InitializableCustom.sol +0 -177
  589. package/contracts/staking/StakeManagerLib.sol +0 -179
  590. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
@@ -1,61 +1,44 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
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";
4
+ import {IAccountingService} from "../accounting/IAccountingService.sol";
7
5
  import {IBundle} from "../instance/module/IBundle.sol";
8
- import {IComponents} from "../instance/module/IComponents.sol";
9
- import {IPolicy} from "../instance/module/IPolicy.sol";
10
-
11
- import {IVersionable} from "../shared/IVersionable.sol";
12
- import {Versionable} from "../shared/Versionable.sol";
13
- import {INftOwnable} from "../shared/INftOwnable.sol";
14
-
15
- import {Amount, AmountLib} from "../type/Amount.sol";
16
- import {Fee, FeeLib} from "../type/Fee.sol";
17
- import {NftId, NftIdLib} from "../type/NftId.sol";
18
- import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY, STAKING} from "../type/ObjectType.sol";
19
- import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../type/RoleId.sol";
20
- import {Fee, FeeLib} from "../type/Fee.sol";
21
- import {Version, VersionLib} from "../type/Version.sol";
22
- import {KEEP_STATE, StateId} from "../type/StateId.sol";
23
- import {Seconds} from "../type/Seconds.sol";
24
- import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
25
- import {TokenHandler} from "../shared/TokenHandler.sol";
26
- import {UFixed} from "../type/UFixed.sol";
27
- import {Version, VersionLib} from "../type/Version.sol";
28
-
29
- import {IService} from "../shared/IService.sol";
30
- import {Service} from "../shared/Service.sol";
31
- import {BundleManager} from "../instance/BundleManager.sol";
32
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
33
6
  import {IBundleService} from "./IBundleService.sol";
7
+ import {IComponents} from "../instance/module/IComponents.sol";
34
8
  import {IComponentService} from "../shared/IComponentService.sol";
35
- import {IInstanceService} from "../instance/IInstanceService.sol";
9
+ import {IInstance} from "../instance/IInstance.sol";
10
+ import {IPolicy} from "../instance/module/IPolicy.sol";
11
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
12
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
36
13
  import {IPoolService} from "./IPoolService.sol";
37
- import {IRegistryService} from "../registry/IRegistryService.sol";
14
+ import {IProductComponent} from "../product/IProductComponent.sol";
15
+ import {IRegistry} from "../registry/IRegistry.sol";
38
16
  import {IStaking} from "../staking/IStaking.sol";
39
- import {InstanceService} from "../instance/InstanceService.sol";
17
+
18
+ import {Amount, AmountLib} from "../type/Amount.sol";
19
+ import {ClaimId} from "../type/ClaimId.sol";
20
+ import {ContractLib} from "../shared/ContractLib.sol";
40
21
  import {InstanceReader} from "../instance/InstanceReader.sol";
41
22
  import {InstanceStore} from "../instance/InstanceStore.sol";
42
- import {IComponent} from "../shared/IComponent.sol";
43
- import {IPoolComponent} from "./IPoolComponent.sol";
23
+ import {KEEP_STATE} from "../type/StateId.sol";
24
+ import {NftId} from "../type/NftId.sol";
25
+ import {ObjectType, ACCOUNTING, POOL, BUNDLE, PRODUCT, POLICY, COMPONENT} from "../type/ObjectType.sol";
26
+ import {PayoutId} from "../type/PayoutId.sol";
27
+ import {PoolLib} from "./PoolLib.sol";
28
+ import {Service} from "../shared/Service.sol";
29
+ import {TokenHandler} from "../shared/TokenHandler.sol";
30
+ import {UFixed} from "../type/UFixed.sol";
44
31
 
45
32
  string constant POOL_SERVICE_NAME = "PoolService";
46
33
 
34
+
47
35
  contract PoolService is
48
- ComponentVerifyingService,
36
+ Service,
49
37
  IPoolService
50
38
  {
51
- using NftIdLib for NftId;
52
- using AmountLib for Amount;
53
-
39
+ IAccountingService private _accountingService;
54
40
  IBundleService internal _bundleService;
55
41
  IComponentService internal _componentService;
56
- IInstanceService private _instanceService;
57
- IRegistryService private _registryService;
58
-
59
42
  IStaking private _staking;
60
43
 
61
44
  function _initialize(
@@ -63,195 +46,324 @@ contract PoolService is
63
46
  bytes memory data
64
47
  )
65
48
  internal
66
- initializer
67
49
  virtual override
50
+ initializer()
68
51
  {
69
52
  (
70
- address registryAddress,,
71
- //address managerAddress
72
- address authority
73
- ) = abi.decode(data, (address, address, address));
53
+ address authority,
54
+ address registry
55
+ ) = abi.decode(data, (address, address));
74
56
 
75
- initializeService(registryAddress, authority, owner);
57
+ __Service_init(authority, registry, owner);
76
58
 
77
- _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
59
+ _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
78
60
  _bundleService = IBundleService(_getServiceAddress(BUNDLE()));
79
- _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
80
61
  _componentService = IComponentService(_getServiceAddress(COMPONENT()));
81
-
82
62
  _staking = IStaking(getRegistry().getStakingAddress());
83
63
 
84
- registerInterface(type(IPoolService).interfaceId);
85
- }
86
-
87
- function getDomain() public pure override returns(ObjectType) {
88
- return POOL();
64
+ _registerInterface(type(IPoolService).interfaceId);
89
65
  }
90
66
 
91
67
 
92
- function setMaxCapitalAmount(Amount maxCapitalAmount)
68
+ /// @inheritdoc IPoolService
69
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
93
70
  external
94
71
  virtual
72
+ restricted()
95
73
  {
96
- /*
97
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
74
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
98
75
  InstanceReader instanceReader = instance.getInstanceReader();
76
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
99
77
 
100
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
101
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
102
- Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
103
-
104
- poolInfo.maxCapitalAmount = maxCapitalAmount;
78
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
79
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
105
80
  instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
106
81
 
107
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
108
- */
82
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
109
83
  }
110
84
 
111
- function setBundleOwnerRole(RoleId bundleOwnerRole)
85
+
86
+ function closeBundle(NftId bundleNftId)
112
87
  external
88
+ restricted()
113
89
  virtual
114
90
  {
115
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
116
- InstanceReader instanceReader = instance.getInstanceReader();
91
+ _checkNftType(bundleNftId, BUNDLE());
117
92
 
118
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
119
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
93
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
120
94
 
121
- // bundle owner role may only be set once per pool
122
- if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
123
- revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
124
- }
95
+ // TODO get performance fee for pool (#477)
125
96
 
126
- poolInfo.bundleOwnerRole = bundleOwnerRole;
127
- instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
97
+ // releasing collateral in bundle
98
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
128
99
 
129
- emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
100
+ _accountingService.decreasePoolBalance(
101
+ instance.getInstanceStore(),
102
+ poolNftId,
103
+ unstakedAmount + feeAmount,
104
+ AmountLib.zero());
105
+
106
+ emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
107
+
108
+ if ((unstakedAmount + feeAmount).gtz()){
109
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
110
+ poolComponentInfo.tokenHandler.pushToken(
111
+ getRegistry().ownerOf(bundleNftId),
112
+ unstakedAmount + feeAmount);
113
+ }
130
114
  }
131
115
 
132
116
 
133
- function setFees(
134
- Fee memory poolFee,
135
- Fee memory stakingFee,
136
- Fee memory performanceFee
137
- )
117
+ /// @inheritdoc IPoolService
118
+ function processFundedClaim(
119
+ NftId policyNftId,
120
+ ClaimId claimId,
121
+ Amount availableAmount
122
+ )
138
123
  external
124
+ restricted()
139
125
  virtual
140
126
  {
141
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
127
+ _checkNftType(policyNftId, POLICY());
142
128
 
143
- IComponents.PoolInfo memory poolInfo = instance.getInstanceReader().getPoolInfo(poolNftId);
144
- poolInfo.poolFee = poolFee;
145
- poolInfo.stakingFee = stakingFee;
146
- poolInfo.performanceFee = performanceFee;
129
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
130
+ InstanceReader instanceReader = instance.getInstanceReader();
131
+ NftId productNftId = getRegistry().getParentNftId(poolNftId);
132
+
133
+ // check policy matches with calling pool
134
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
135
+ if(policyInfo.productNftId != productNftId) {
136
+ revert ErrorPoolServicePolicyPoolMismatch(
137
+ policyNftId,
138
+ policyInfo.productNftId,
139
+ productNftId);
140
+ }
147
141
 
148
- instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
142
+ emit LogPoolServiceProcessFundedClaim(policyNftId, claimId, availableAmount);
149
143
 
150
- // TODO add logging
144
+ // callback to product component if applicable
145
+ if (instanceReader.getProductInfo(productNftId).isProcessingFundedClaims) {
146
+ address productAddress = getRegistry().getObjectAddress(productNftId);
147
+ IProductComponent(productAddress).processFundedClaim(policyNftId, claimId, availableAmount);
148
+ }
151
149
  }
152
150
 
153
- function createBundle(
154
- address bundleOwner, // initial bundle owner
155
- Fee memory fee, // fees deducted from premium that go to bundle owner
156
- Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
157
- Seconds lifetime, // initial duration for which new policies are covered
158
- bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
159
- )
151
+
152
+ // function _checkAndGetPoolInfo(NftId bundleNftId)
153
+ // internal
154
+ // view
155
+ // returns (
156
+ // InstanceReader instanceReader,
157
+ // InstanceStore instanceStore,
158
+ // NftId instanceNftId,
159
+ // NftId poolNftId,
160
+ // IComponents.PoolInfo memory poolInfo
161
+ // )
162
+ // {
163
+ // _checkNftType(bundleNftId, BUNDLE());
164
+
165
+ // (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
166
+ // instanceReader = instance.getInstanceReader();
167
+ // instanceStore = instance.getInstanceStore();
168
+ // instanceNftId = instance.getNftId();
169
+ // poolInfo = instanceReader.getPoolInfo(poolNftId);
170
+
171
+ // if (getRegistry().getParentNftId(bundleNftId) != poolNftId) {
172
+ // revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
173
+ // }
174
+ // }
175
+
176
+
177
+ /// @inheritdoc IPoolService
178
+ function stake(NftId bundleNftId, Amount amount)
160
179
  external
161
180
  virtual
162
- returns(NftId bundleNftId)
181
+ restricted()
182
+ returns(
183
+ Amount netAmount
184
+ )
163
185
  {
164
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
165
- InstanceReader instanceReader = instance.getInstanceReader();
166
-
167
186
  (
168
- Amount stakingFeeAmount,
169
- Amount stakingNetAmount
170
- ) = FeeLib.calculateFee(
171
- _getStakingFee(instanceReader, poolNftId),
172
- stakingAmount);
187
+ InstanceReader instanceReader,
188
+ InstanceStore instanceStore,
189
+ NftId instanceNftId,
190
+ NftId poolNftId,
191
+ IComponents.PoolInfo memory poolInfo
192
+ ) = PoolLib.checkAndGetPoolInfo(getRegistry(), msg.sender, bundleNftId);
193
+
194
+ {
195
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
196
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
197
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
198
+ }
199
+ }
173
200
 
174
- bundleNftId = _bundleService.create(
175
- instance,
201
+ // calculate fees
202
+ Amount feeAmount;
203
+ (
204
+ feeAmount,
205
+ netAmount
206
+ ) = PoolLib.calculateStakingAmounts(
207
+ getRegistry(),
208
+ instanceReader,
176
209
  poolNftId,
177
- bundleOwner,
178
- fee,
179
- stakingNetAmount,
180
- lifetime,
181
- filter);
182
-
183
- // pool book keeping
184
- _componentService.increasePoolBalance(
185
- instance.getInstanceStore(),
186
- poolNftId,
187
- stakingAmount,
188
- stakingFeeAmount);
210
+ amount);
189
211
 
190
- // pool bookkeeping and collect tokens from bundle owner
191
- _collectStakingAmount(
192
- instanceReader,
212
+ // do all the book keeping
213
+ _accountingService.increasePoolBalance(
214
+ instanceStore,
193
215
  poolNftId,
194
- bundleOwner,
195
- stakingAmount);
216
+ netAmount,
217
+ feeAmount);
218
+
219
+ _bundleService.stake(instanceReader, instanceStore, bundleNftId, netAmount);
220
+
221
+ emit LogPoolServiceBundleStaked(instanceNftId, poolNftId, bundleNftId, amount, netAmount);
196
222
 
197
- emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
223
+ // only collect staking amount when pool is not externally managed
224
+ if (!poolInfo.isExternallyManaged) {
225
+
226
+ // collect tokens from bundle owner
227
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
228
+ PoolLib.pullStakingAmount(
229
+ instanceReader,
230
+ poolNftId,
231
+ bundleOwner,
232
+ amount);
233
+ }
198
234
  }
199
235
 
200
- function _getStakingFee(InstanceReader instanceReader, NftId poolNftId)
201
- internal
236
+
237
+ /// @inheritdoc IPoolService
238
+ function unstake(NftId bundleNftId, Amount amount)
239
+ external
202
240
  virtual
203
- view
204
- returns (Fee memory stakingFee)
241
+ restricted()
242
+ returns(Amount netAmount)
205
243
  {
206
- NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
207
- return instanceReader.getPoolInfo(productNftId).stakingFee;
244
+ (
245
+ InstanceReader instanceReader,
246
+ InstanceStore instanceStore,
247
+ NftId instanceNftId,
248
+ NftId poolNftId,
249
+ ) = PoolLib.checkAndGetPoolInfo(getRegistry(), msg.sender, bundleNftId);
250
+
251
+ // call bundle service for bookkeeping and additional checks
252
+ Amount unstakedAmount = _bundleService.unstake(instanceStore, bundleNftId, amount);
253
+
254
+ // Important: from now on work only with unstakedAmount as it is the only reliable amount.
255
+ // if amount was max, this was set to the available amount
256
+
257
+ // TODO: handle performance fees (issue #477)
258
+ netAmount = unstakedAmount;
259
+
260
+ // update pool bookkeeping - performance fees stay in the pool, but as fees
261
+ _accountingService.decreasePoolBalance(
262
+ instanceStore,
263
+ poolNftId,
264
+ unstakedAmount,
265
+ AmountLib.zero());
266
+
267
+
268
+ emit LogPoolServiceBundleUnstaked(instanceNftId, poolNftId, bundleNftId, unstakedAmount, netAmount);
269
+
270
+ // only distribute staking amount when pool is not externally managed
271
+ if (!instanceReader.getPoolInfo(poolNftId).isExternallyManaged) {
272
+
273
+ // transfer amount to bundle owner
274
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
275
+ PoolLib.pushUnstakingAmount(
276
+ instanceReader,
277
+ poolNftId,
278
+ bundleOwner,
279
+ netAmount);
280
+ }
208
281
  }
209
282
 
210
- function closeBundle(NftId bundleNftId)
283
+
284
+ function fundPoolWallet(Amount amount)
211
285
  external
212
286
  virtual
287
+ restricted()
213
288
  {
214
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
289
+ (
290
+ NftId poolNftId,
291
+ IInstance instance
292
+ ) = _getAndVerifyActivePool();
293
+
294
+ // check that pool is externally managed
295
+ InstanceReader reader = instance.getInstanceReader();
296
+ if (!reader.getPoolInfo(poolNftId).isExternallyManaged) {
297
+ revert ErrorPoolServicePoolNotExternallyManaged(poolNftId);
298
+ }
215
299
 
216
- // TODO book keeping for pool collateral released outside of retention level
300
+ address poolOwner = getRegistry().ownerOf(poolNftId);
301
+ emit LogPoolServiceWalletFunded(poolNftId, poolOwner, amount);
217
302
 
218
- // releasing collateral in bundle
219
- _bundleService.close(instance, bundleNftId);
303
+ PoolLib.pullStakingAmount(
304
+ reader,
305
+ poolNftId,
306
+ poolOwner,
307
+ amount);
308
+ }
220
309
 
221
- // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
222
310
 
223
- emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
311
+ function defundPoolWallet(Amount amount)
312
+ external
313
+ virtual
314
+ restricted()
315
+ {
316
+ (
317
+ NftId poolNftId,
318
+ IInstance instance
319
+ ) = _getAndVerifyActivePool();
320
+
321
+ // check that pool is externally managed
322
+ InstanceReader reader = instance.getInstanceReader();
323
+ if (!reader.getPoolInfo(poolNftId).isExternallyManaged) {
324
+ revert ErrorPoolServicePoolNotExternallyManaged(poolNftId);
325
+ }
326
+
327
+ address poolOwner = getRegistry().ownerOf(poolNftId);
328
+ emit LogPoolServiceWalletDefunded(poolNftId, poolOwner, amount);
329
+
330
+ PoolLib.pushUnstakingAmount(
331
+ reader,
332
+ poolNftId,
333
+ poolOwner,
334
+ amount);
224
335
  }
225
336
 
226
337
 
227
338
  function processSale(
228
339
  NftId bundleNftId,
229
- IPolicy.Premium memory premium
340
+ IPolicy.PremiumInfo memory premium
230
341
  )
231
342
  external
232
343
  virtual
233
- restricted
344
+ restricted()
234
345
  {
346
+ _checkNftType(bundleNftId, BUNDLE());
347
+
235
348
  IRegistry registry = getRegistry();
236
- IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
237
- IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
238
- IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
239
- IInstance instance = IInstance(instanceObjectInfo.objectAddress);
349
+ NftId poolNftId = registry.getParentNftId(bundleNftId);
350
+ (, address instanceAddress) = ContractLib.getInfoAndInstance(registry, poolNftId, true);
351
+ IInstance instance = IInstance(instanceAddress);
240
352
 
241
- Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
242
- Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
243
- Amount bundleNetAmount = AmountLib.toAmount(premium.netPremiumAmount);
353
+ Amount poolFeeAmount = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
354
+ Amount bundleFeeAmount = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
355
+ Amount bundleNetAmount = premium.netPremiumAmount;
244
356
 
245
357
  InstanceStore instanceStore = instance.getInstanceStore();
246
- _componentService.increasePoolBalance(
358
+ _accountingService.increasePoolBalance(
247
359
  instanceStore,
248
- poolObjectInfo.nftId,
360
+ poolNftId,
249
361
  bundleNetAmount + bundleFeeAmount,
250
362
  poolFeeAmount);
251
363
 
252
- _componentService.increaseBundleBalance(
364
+ _accountingService.increaseBundleBalanceForPool(
253
365
  instanceStore,
254
- bundleObjectInfo.nftId,
366
+ bundleNftId,
255
367
  bundleNetAmount,
256
368
  bundleFeeAmount);
257
369
  }
@@ -269,14 +381,22 @@ contract PoolService is
269
381
  virtual
270
382
  restricted()
271
383
  returns (
272
- Amount localCollateralAmount,
273
- Amount totalCollateralAmount
384
+ Amount totalCollateralAmount,
385
+ Amount localCollateralAmount
274
386
  )
275
387
  {
388
+ _checkNftType(productNftId, PRODUCT());
389
+ _checkNftType(applicationNftId, POLICY());
390
+ _checkNftType(bundleNftId, BUNDLE());
391
+
392
+ NftId poolNftId;
393
+ bool poolIsVerifyingApplications;
276
394
  (
395
+ poolNftId,
396
+ totalCollateralAmount,
277
397
  localCollateralAmount,
278
- totalCollateralAmount
279
- ) = calculateRequiredCollateral(
398
+ poolIsVerifyingApplications
399
+ ) = PoolLib.calculateRequiredCollateral(
280
400
  instance.getInstanceReader(),
281
401
  productNftId,
282
402
  sumInsuredAmount);
@@ -294,36 +414,127 @@ contract PoolService is
294
414
  token,
295
415
  totalCollateralAmount);
296
416
 
297
- // hierarhical riskpool setup
298
- // TODO loop in with pool component to guarantee availability of external capital
299
- if(totalCollateralAmount > localCollateralAmount) {
417
+ // pool callback when required
418
+ if (poolIsVerifyingApplications) {
419
+ IPoolComponent pool = IPoolComponent(
420
+ getRegistry().getObjectAddress(poolNftId));
300
421
 
422
+ pool.verifyApplication(
423
+ applicationNftId,
424
+ bundleNftId,
425
+ totalCollateralAmount);
426
+
427
+ // TODO add logging
301
428
  }
302
- }
303
429
 
430
+ // TODO add logging
431
+ }
304
432
 
305
- function reduceCollateral(
306
- IInstance instance,
307
- address token,
433
+ function processPayout(
434
+ InstanceReader instanceReader,
435
+ InstanceStore instanceStore,
436
+ NftId productNftId,
308
437
  NftId policyNftId,
309
- IPolicy.PolicyInfo memory policyInfo,
310
- Amount payoutAmount
438
+ NftId bundleNftId,
439
+ PayoutId payoutId,
440
+ Amount payoutAmount,
441
+ address payoutBeneficiary
311
442
  )
312
443
  external
313
444
  virtual
314
- restricted
445
+ restricted()
315
446
  {
447
+ // checks
448
+ _checkNftType(policyNftId, POLICY());
449
+
450
+ // effects
451
+ NftId poolNftId = getRegistry().getParentNftId(bundleNftId);
452
+
453
+ _accountingService.decreasePoolBalance(
454
+ instanceStore,
455
+ poolNftId,
456
+ payoutAmount,
457
+ AmountLib.zero());
458
+
459
+ _accountingService.decreaseBundleBalanceForPool(
460
+ instanceStore,
461
+ bundleNftId,
462
+ payoutAmount,
463
+ AmountLib.zero());
464
+
316
465
  _bundleService.releaseCollateral(
317
- instance,
466
+ instanceStore,
318
467
  policyNftId,
319
- policyInfo.bundleNftId,
468
+ bundleNftId,
320
469
  payoutAmount);
321
470
 
322
471
  // update value locked with staking service
472
+ TokenHandler poolTokenHandler = instanceReader.getTokenHandler(poolNftId);
473
+
323
474
  _staking.decreaseTotalValueLocked(
324
- instance.getNftId(),
325
- token,
475
+ instanceReader.getInstanceNftId(),
476
+ address(poolTokenHandler.TOKEN()),
326
477
  payoutAmount);
478
+
479
+ // interactions
480
+ PoolLib.transferTokenAndNotifyPolicyHolder(
481
+ getRegistry(),
482
+ instanceReader,
483
+ poolTokenHandler,
484
+ productNftId,
485
+ policyNftId,
486
+ payoutId,
487
+ payoutAmount,
488
+ payoutBeneficiary);
489
+ }
490
+
491
+
492
+ /// @inheritdoc IPoolService
493
+ function withdrawBundleFees(
494
+ NftId bundleNftId,
495
+ Amount amount
496
+ )
497
+ public
498
+ virtual
499
+ restricted()
500
+ returns (Amount withdrawnAmount)
501
+ {
502
+ // checks
503
+ _checkNftType(bundleNftId, BUNDLE());
504
+
505
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
506
+ InstanceReader reader = instance.getInstanceReader();
507
+
508
+ // determine withdrawn amount
509
+ withdrawnAmount = amount;
510
+ if (withdrawnAmount.gte(AmountLib.max())) {
511
+ withdrawnAmount = reader.getFeeAmount(bundleNftId);
512
+ } else {
513
+ if (withdrawnAmount > reader.getFeeAmount(bundleNftId)) {
514
+ revert ErrorPoolServiceFeesWithdrawAmountExceedsLimit(withdrawnAmount, reader.getFeeAmount(bundleNftId));
515
+ }
516
+ }
517
+
518
+ // effects
519
+ // decrease fee counters by withdrawnAmount
520
+ {
521
+ InstanceStore store = instance.getInstanceStore();
522
+ // decrease fee amount of the bundle
523
+ _accountingService.decreaseBundleBalanceForPool(store, bundleNftId, AmountLib.zero(), withdrawnAmount);
524
+ // decrease pool balance
525
+ _accountingService.decreasePoolBalance(store, poolNftId, withdrawnAmount, AmountLib.zero());
526
+ }
527
+
528
+ // interactions
529
+ // transfer amount to bundle owner
530
+ {
531
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
532
+ TokenHandler tokenHandler = reader.getTokenHandler(poolNftId);
533
+ address token = address(tokenHandler.TOKEN());
534
+ emit LogPoolServiceFeesWithdrawn(bundleNftId, bundleOwner, token, withdrawnAmount);
535
+
536
+ tokenHandler.pushToken(bundleOwner, withdrawnAmount);
537
+ }
327
538
  }
328
539
 
329
540
 
@@ -331,123 +542,46 @@ contract PoolService is
331
542
  /// may only be called by the policy service for unlocked pool components
332
543
  function releaseCollateral(
333
544
  IInstance instance,
334
- address token,
335
545
  NftId policyNftId,
336
546
  IPolicy.PolicyInfo memory policyInfo
337
547
  )
338
548
  external
339
549
  virtual
340
- restricted
550
+ restricted()
341
551
  {
552
+ _checkNftType(policyNftId, POLICY());
553
+
342
554
  Amount remainingCollateralAmount = policyInfo.sumInsuredAmount - policyInfo.claimAmount;
343
555
 
344
556
  _bundleService.releaseCollateral(
345
- instance,
557
+ instance.getInstanceStore(),
346
558
  policyNftId,
347
559
  policyInfo.bundleNftId,
348
560
  remainingCollateralAmount);
349
561
 
350
- _bundleService.unlinkPolicy(
351
- instance,
352
- policyNftId);
353
-
354
562
  // update value locked with staking service
563
+ InstanceReader instanceReader = instance.getInstanceReader();
355
564
  _staking.decreaseTotalValueLocked(
356
- instance.getNftId(),
357
- token,
565
+ instanceReader.getInstanceNftId(),
566
+ address(instanceReader.getToken(policyInfo.productNftId)),
358
567
  remainingCollateralAmount);
359
568
  }
360
569
 
361
570
 
362
- function calculateRequiredCollateral(
363
- InstanceReader instanceReader,
364
- NftId productNftId,
365
- Amount sumInsuredAmount
366
- )
367
- public
368
- view
369
- returns(
370
- Amount localCollateralAmount,
371
- Amount totalCollateralAmount
372
- )
373
- {
374
- NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
375
- IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
376
-
377
- (
378
- localCollateralAmount,
379
- totalCollateralAmount
380
- ) = calculateRequiredCollateral(
381
- poolInfo.collateralizationLevel,
382
- poolInfo.retentionLevel,
383
- sumInsuredAmount);
384
- }
385
-
386
-
387
- function calculateRequiredCollateral(
388
- UFixed collateralizationLevel,
389
- UFixed retentionLevel,
390
- Amount sumInsuredAmount
391
- )
392
- public
393
- pure
394
- returns(
395
- Amount localCollateralAmount,
396
- Amount totalCollateralAmount
397
- )
398
- {
399
- // TODO define if only applies to local collateral
400
- // TODO add minimalistic implementation
401
-
402
- // assumptions
403
- // - collateralizationLevel == 1.0
404
- // - retentionLevel == 1.0
405
- localCollateralAmount = sumInsuredAmount;
406
- totalCollateralAmount = localCollateralAmount;
407
- }
408
-
409
-
410
- function _processStakingFees(
411
- Fee memory stakingFee,
412
- Amount stakingAmount
413
- )
571
+ function _getAndVerifyActivePool()
414
572
  internal
415
- returns (Amount stakingNetAmount)
573
+ virtual
574
+ view
575
+ returns (
576
+ NftId poolNftId,
577
+ IInstance instance
578
+ )
416
579
  {
417
- stakingNetAmount = stakingAmount;
418
-
419
- // check if any staking fees apply
420
- if (FeeLib.gtz(stakingFee)) {
421
- (Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
422
- stakingNetAmount = netAmount;
423
-
424
- // TODO update fee balance for pool
425
- }
580
+ return PoolLib.getAndVerifyActivePool(getRegistry(), msg.sender);
426
581
  }
427
582
 
428
583
 
429
- // TODO create (I)TreasuryService that deals with all gif related token transfers
430
- /// @dev transfers the specified amount from the bundle owner to the pool's wallet
431
- function _collectStakingAmount(
432
- InstanceReader instanceReader,
433
- NftId poolNftId,
434
- address bundleOwner,
435
- Amount amount
436
- )
437
- internal
438
- {
439
-
440
- // collecting investor token
441
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
442
- TokenHandler tokenHandler = componentInfo.tokenHandler;
443
- address poolWallet = componentInfo.wallet;
444
-
445
- if(amount.gtz()) {
446
- tokenHandler.transfer(
447
- bundleOwner,
448
- poolWallet,
449
- amount);
450
- }
584
+ function _getDomain() internal pure override returns(ObjectType) {
585
+ return POOL();
451
586
  }
452
-
453
587
  }