@etherisc/gif-next 0.0.2-ff282a4-523 → 0.0.2-ff795d8-141

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 (582) hide show
  1. package/README.md +130 -10
  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 +1652 -0
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1279 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1403 -0
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +790 -0
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  17. package/artifacts/contracts/{instance/module/ISetup.sol/ISetup.json → authorization/IAccess.sol/IAccess.json} +2 -2
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1333 -0
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +455 -0
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  23. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +397 -0
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +646 -0
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  27. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1225 -0
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  29. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +805 -0
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +154 -600
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +564 -471
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +240 -116
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  37. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +165 -336
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  39. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +373 -113
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1461 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +805 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  47. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2018 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  49. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +805 -0
  50. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  51. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1404 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +805 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1152 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1628 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +805 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2405 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  65. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +805 -0
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  67. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +851 -0
  68. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  69. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +526 -87
  70. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +413 -74
  72. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  73. package/artifacts/contracts/instance/Instance.sol/Instance.json +533 -218
  74. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  75. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +2302 -0
  76. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  77. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +902 -0
  78. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  79. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1843 -719
  80. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +433 -211
  82. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +171 -93
  84. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  85. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1651 -770
  86. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  87. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
  88. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  89. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  90. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  91. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  92. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  93. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  94. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  95. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
  96. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  97. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +192 -0
  98. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  99. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  100. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  101. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  102. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  103. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  104. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  105. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  106. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  107. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  108. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +938 -0
  109. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  110. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +810 -0
  111. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  112. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  113. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  114. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +753 -0
  115. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  116. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +733 -0
  117. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  118. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +854 -0
  119. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  120. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1013 -0
  121. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  122. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +772 -0
  123. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  124. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1231 -0
  125. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  126. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +805 -0
  127. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  128. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +355 -366
  129. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +214 -102
  131. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  132. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +221 -76
  133. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  134. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +214 -423
  135. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  136. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +554 -401
  137. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  138. package/artifacts/contracts/pool/Pool.sol/Pool.json +223 -624
  139. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  140. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +538 -0
  141. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  142. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +694 -710
  143. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +228 -112
  145. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  146. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +219 -242
  147. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +188 -88
  149. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  150. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1140 -0
  151. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  152. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +805 -0
  153. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  154. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +458 -332
  155. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  156. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +222 -114
  157. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +155 -9
  159. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  160. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +327 -16
  161. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  162. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +399 -69
  163. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  164. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +195 -82
  165. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  166. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +367 -231
  167. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  168. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +100 -62
  169. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  170. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +440 -380
  171. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  172. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
  173. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +196 -124
  175. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  176. package/artifacts/contracts/product/PricingService.sol/PricingService.json +247 -324
  177. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  178. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +192 -108
  179. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  180. package/artifacts/contracts/product/Product.sol/Product.json +409 -509
  181. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  182. package/artifacts/contracts/product/RiskService.sol/RiskService.json +688 -0
  183. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  184. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +736 -0
  185. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  186. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  187. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  188. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +462 -56
  189. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  190. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +251 -127
  191. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  192. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  193. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  194. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  195. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  196. package/artifacts/contracts/registry/Registry.sol/Registry.json +905 -121
  197. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  198. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2127 -0
  199. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  200. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1053 -0
  201. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  202. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +303 -245
  203. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  204. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +169 -91
  205. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  206. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +2140 -0
  207. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  208. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  209. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  210. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1393 -0
  211. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  212. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +683 -0
  213. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  214. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +315 -139
  215. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  216. package/artifacts/contracts/shared/Component.sol/Component.json +109 -296
  217. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  218. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1021 -165
  219. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  220. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +816 -0
  221. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  222. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +485 -0
  223. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  224. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +680 -0
  225. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  226. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  227. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  228. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  229. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  230. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  231. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  232. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +116 -141
  233. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  234. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1127 -0
  235. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  236. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +688 -0
  237. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  238. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +46 -14
  239. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  240. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +35 -4
  241. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  242. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +23 -1
  243. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  244. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +16 -30
  245. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  246. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +154 -0
  247. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  248. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  249. package/artifacts/contracts/shared/IService.sol/IService.json +74 -2
  250. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  251. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  252. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  253. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +776 -0
  254. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  255. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +538 -0
  256. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  257. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +174 -0
  258. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  259. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  260. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  261. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +26 -55
  262. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  263. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +20 -124
  264. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  265. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -90
  266. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  267. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  268. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  269. package/artifacts/contracts/shared/Service.sol/Service.json +67 -102
  270. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  271. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +615 -6
  272. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  273. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  274. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  275. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  276. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  277. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1301 -119
  278. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  279. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +685 -63
  280. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  281. package/artifacts/contracts/staking/Staking.sol/Staking.json +1579 -172
  282. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  283. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +469 -0
  284. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  285. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +205 -0
  286. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  287. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +250 -73
  288. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  289. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +560 -0
  290. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  291. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +775 -176
  292. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  293. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +195 -83
  294. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  295. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2297 -0
  296. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  297. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +617 -0
  298. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  299. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  300. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/Amount.sol/AmountLib.json +122 -5
  302. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +53 -2
  304. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  306. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  308. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/Fee.sol/FeeLib.json +119 -58
  310. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  311. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  312. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  313. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  314. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +66 -4
  316. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  317. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  318. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +153 -4
  320. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  322. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  324. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  325. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  326. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +125 -7
  328. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +121 -23
  330. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -2
  332. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  333. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +148 -0
  334. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  335. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  336. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  337. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  338. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  339. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  340. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  341. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +36 -4
  342. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  343. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +126 -33
  344. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  345. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  346. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  347. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +120 -2
  348. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  349. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  350. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  351. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +618 -0
  352. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  353. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +142 -0
  354. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  355. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  356. package/contracts/accounting/AccountingService.sol +261 -0
  357. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  358. package/contracts/accounting/IAccountingService.sol +45 -0
  359. package/contracts/authorization/AccessAdmin.sol +789 -0
  360. package/contracts/authorization/AccessAdminLib.sol +387 -0
  361. package/contracts/authorization/AccessManagerCloneable.sol +158 -0
  362. package/contracts/authorization/Authorization.sol +174 -0
  363. package/contracts/authorization/IAccess.sol +67 -0
  364. package/contracts/authorization/IAccessAdmin.sol +137 -0
  365. package/contracts/authorization/IAuthorization.sol +27 -0
  366. package/contracts/authorization/IServiceAuthorization.sol +78 -0
  367. package/contracts/authorization/ServiceAuthorization.sol +320 -0
  368. package/contracts/distribution/BasicDistribution.sol +141 -0
  369. package/contracts/distribution/BasicDistributionAuthorization.sol +67 -0
  370. package/contracts/distribution/Distribution.sol +135 -175
  371. package/contracts/distribution/DistributionService.sol +306 -213
  372. package/contracts/distribution/DistributionServiceManager.sol +13 -25
  373. package/contracts/distribution/IDistributionComponent.sol +23 -49
  374. package/contracts/distribution/IDistributionService.sol +55 -33
  375. package/contracts/examples/fire/DamageLevel.sol +59 -0
  376. package/contracts/examples/fire/FirePool.sol +86 -0
  377. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  378. package/contracts/examples/fire/FireProduct.sol +433 -0
  379. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  380. package/contracts/examples/fire/FireUSD.sol +26 -0
  381. package/contracts/examples/unpermissioned/SimpleDistribution.sol +81 -0
  382. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  383. package/contracts/examples/unpermissioned/SimpleOracle.sol +133 -0
  384. package/contracts/examples/unpermissioned/SimplePool.sol +102 -0
  385. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  386. package/contracts/examples/unpermissioned/SimpleProduct.sol +373 -0
  387. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  388. package/contracts/instance/BundleSet.sol +130 -0
  389. package/contracts/instance/IInstance.sol +114 -49
  390. package/contracts/instance/IInstanceService.sol +74 -37
  391. package/contracts/instance/Instance.sol +245 -133
  392. package/contracts/instance/InstanceAdmin.sol +380 -0
  393. package/contracts/instance/InstanceAuthorizationV3.sol +263 -0
  394. package/contracts/instance/InstanceReader.sol +437 -100
  395. package/contracts/instance/InstanceService.sol +402 -180
  396. package/contracts/instance/InstanceServiceManager.sol +14 -29
  397. package/contracts/instance/InstanceStore.sol +151 -64
  398. package/contracts/instance/RiskSet.sol +118 -0
  399. package/contracts/instance/base/BalanceStore.sol +123 -0
  400. package/contracts/instance/base/Cloneable.sol +2 -25
  401. package/contracts/instance/base/ObjectCounter.sol +20 -0
  402. package/contracts/instance/base/ObjectLifecycle.sol +113 -0
  403. package/contracts/instance/base/ObjectSet.sol +77 -0
  404. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  405. package/contracts/instance/module/IBundle.sol +6 -8
  406. package/contracts/instance/module/IComponents.sol +40 -19
  407. package/contracts/instance/module/IDistribution.sol +21 -9
  408. package/contracts/instance/module/IPolicy.sol +57 -30
  409. package/contracts/instance/module/IRisk.sol +5 -0
  410. package/contracts/mock/Dip.sol +26 -0
  411. package/contracts/oracle/BasicOracle.sol +45 -0
  412. package/contracts/oracle/BasicOracleAuthorization.sol +53 -0
  413. package/contracts/oracle/IOracle.sol +41 -0
  414. package/contracts/oracle/IOracleComponent.sol +33 -0
  415. package/contracts/oracle/IOracleService.sol +66 -0
  416. package/contracts/oracle/Oracle.sol +154 -0
  417. package/contracts/oracle/OracleService.sol +310 -0
  418. package/contracts/oracle/OracleServiceManager.sol +39 -0
  419. package/contracts/pool/BasicPool.sol +173 -0
  420. package/contracts/pool/BasicPoolAuthorization.sol +82 -0
  421. package/contracts/pool/BundleService.sol +237 -224
  422. package/contracts/pool/BundleServiceManager.sol +13 -25
  423. package/contracts/pool/IBundleService.sol +35 -38
  424. package/contracts/pool/IPoolComponent.sol +23 -75
  425. package/contracts/pool/IPoolService.sol +107 -56
  426. package/contracts/pool/Pool.sol +209 -168
  427. package/contracts/pool/PoolLib.sol +353 -0
  428. package/contracts/pool/PoolService.sol +446 -262
  429. package/contracts/pool/PoolServiceManager.sol +12 -24
  430. package/contracts/product/ApplicationService.sol +177 -85
  431. package/contracts/product/ApplicationServiceManager.sol +12 -9
  432. package/contracts/product/BasicProduct.sol +49 -0
  433. package/contracts/product/BasicProductAuthorization.sol +61 -0
  434. package/contracts/product/ClaimService.sol +380 -184
  435. package/contracts/product/ClaimServiceManager.sol +12 -9
  436. package/contracts/product/IApplicationService.sol +10 -3
  437. package/contracts/product/IClaimService.sol +48 -6
  438. package/contracts/product/IPolicyService.sol +54 -39
  439. package/contracts/product/IPricingService.sol +14 -11
  440. package/contracts/product/IProductComponent.sol +31 -10
  441. package/contracts/product/IRiskService.sol +33 -0
  442. package/contracts/product/PolicyService.sol +498 -234
  443. package/contracts/product/PolicyServiceLib.sol +139 -0
  444. package/contracts/product/PolicyServiceManager.sol +12 -27
  445. package/contracts/product/PricingService.sol +116 -82
  446. package/contracts/product/PricingServiceManager.sol +12 -24
  447. package/contracts/product/Product.sol +236 -148
  448. package/contracts/product/RiskService.sol +154 -0
  449. package/contracts/product/RiskServiceManager.sol +39 -0
  450. package/contracts/registry/ChainNft.sol +72 -39
  451. package/contracts/registry/IRegistry.sol +94 -34
  452. package/contracts/registry/IRegistryService.sol +28 -35
  453. package/contracts/registry/IRelease.sol +29 -0
  454. package/contracts/registry/ITransferInterceptor.sol +1 -2
  455. package/contracts/registry/Registry.sol +444 -219
  456. package/contracts/registry/RegistryAdmin.sol +188 -0
  457. package/contracts/registry/RegistryAuthorization.sol +277 -0
  458. package/contracts/registry/RegistryService.sol +74 -137
  459. package/contracts/registry/RegistryServiceManager.sol +23 -30
  460. package/contracts/registry/ReleaseAdmin.sol +195 -0
  461. package/contracts/registry/ReleaseLifecycle.sol +32 -0
  462. package/contracts/registry/ReleaseRegistry.sol +520 -0
  463. package/contracts/registry/ServiceAuthorizationV3.sol +343 -0
  464. package/contracts/registry/TokenRegistry.sol +262 -64
  465. package/contracts/shared/Component.sol +122 -183
  466. package/contracts/shared/ComponentService.sol +610 -99
  467. package/contracts/shared/ComponentServiceManager.sol +38 -0
  468. package/contracts/shared/ComponentVerifyingService.sol +128 -0
  469. package/contracts/shared/ContractLib.sol +357 -0
  470. package/contracts/shared/IComponent.sol +17 -49
  471. package/contracts/shared/IComponentService.sol +110 -0
  472. package/contracts/shared/IInstanceLinkedComponent.sol +30 -0
  473. package/contracts/{instance/base → shared}/IKeyValueStore.sol +7 -6
  474. package/contracts/{instance/base → shared}/ILifecycle.sol +5 -4
  475. package/contracts/shared/INftOwnable.sol +3 -1
  476. package/contracts/shared/IPolicyHolder.sol +12 -17
  477. package/contracts/shared/IRegisterable.sol +23 -1
  478. package/contracts/shared/IService.sol +11 -6
  479. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +12 -4
  480. package/contracts/shared/InstanceLinkedComponent.sol +194 -0
  481. package/contracts/{instance/base → shared}/KeyValueStore.sol +36 -74
  482. package/contracts/shared/Lifecycle.sol +88 -0
  483. package/contracts/shared/NftIdSet.sol +65 -0
  484. package/contracts/shared/NftOwnable.sol +33 -24
  485. package/contracts/shared/PolicyHolder.sol +18 -50
  486. package/contracts/shared/Registerable.sol +54 -23
  487. package/contracts/shared/RegistryLinked.sol +9 -14
  488. package/contracts/shared/Service.sol +36 -41
  489. package/contracts/shared/TokenHandler.sol +320 -13
  490. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  491. package/contracts/staking/IStaking.sol +170 -6
  492. package/contracts/staking/IStakingService.sol +110 -40
  493. package/contracts/staking/Staking.sol +509 -27
  494. package/contracts/staking/StakingLib.sol +281 -0
  495. package/contracts/staking/StakingLifecycle.sol +23 -0
  496. package/contracts/staking/StakingManager.sol +24 -16
  497. package/contracts/staking/StakingReader.sol +180 -0
  498. package/contracts/staking/StakingService.sol +311 -48
  499. package/contracts/staking/StakingServiceManager.sol +12 -8
  500. package/contracts/staking/StakingStore.sol +606 -0
  501. package/contracts/staking/TargetManagerLib.sol +211 -0
  502. package/contracts/type/AddressSet.sol +1 -1
  503. package/contracts/type/Amount.sol +44 -3
  504. package/contracts/type/Blocknumber.sol +26 -3
  505. package/contracts/type/ClaimId.sol +6 -1
  506. package/contracts/type/Fee.sol +22 -21
  507. package/contracts/type/Key32.sol +2 -2
  508. package/contracts/type/Key32Set.sol +62 -0
  509. package/contracts/type/NftId.sol +21 -16
  510. package/contracts/type/NftIdSet.sol +1 -1
  511. package/contracts/type/ObjectType.sol +204 -63
  512. package/contracts/type/PayoutId.sol +10 -10
  513. package/contracts/type/Referral.sol +2 -1
  514. package/contracts/type/RequestId.sol +75 -0
  515. package/contracts/type/RiskId.sol +39 -7
  516. package/contracts/type/RoleId.sol +122 -74
  517. package/contracts/type/Seconds.sol +48 -1
  518. package/contracts/type/Selector.sol +107 -0
  519. package/contracts/type/StateId.sol +41 -2
  520. package/contracts/type/String.sol +53 -0
  521. package/contracts/type/Timestamp.sol +16 -7
  522. package/contracts/type/UFixed.sol +61 -125
  523. package/contracts/type/Version.sol +58 -7
  524. package/contracts/{shared → upgradeability}/ProxyManager.sol +101 -36
  525. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +8 -4
  526. package/contracts/{shared → upgradeability}/Versionable.sol +6 -3
  527. package/package.json +12 -8
  528. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  529. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -778
  530. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  531. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1348
  532. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  533. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -124
  534. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  535. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  536. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  537. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -581
  538. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  539. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -194
  540. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  541. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -256
  542. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  543. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -237
  544. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  545. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  546. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  547. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  548. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  549. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -864
  550. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  551. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -640
  552. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  553. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -285
  554. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  555. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -620
  556. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  557. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  558. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  559. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  560. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  561. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  562. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -569
  563. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  564. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  565. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  566. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  567. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -10
  568. package/contracts/instance/BundleManager.sol +0 -126
  569. package/contracts/instance/InstanceAccessManager.sol +0 -543
  570. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -308
  571. package/contracts/instance/base/Lifecycle.sol +0 -121
  572. package/contracts/instance/base/ObjectManager.sol +0 -82
  573. package/contracts/instance/module/IAccess.sol +0 -54
  574. package/contracts/instance/module/ISetup.sol +0 -33
  575. package/contracts/instance/module/ITreasury.sol +0 -23
  576. package/contracts/product/IProductService.sol +0 -40
  577. package/contracts/product/ProductService.sol +0 -210
  578. package/contracts/product/ProductServiceManager.sol +0 -54
  579. package/contracts/registry/RegistryAccessManager.sol +0 -207
  580. package/contracts/registry/ReleaseManager.sol +0 -360
  581. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
  582. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
@@ -1,338 +1,540 @@
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";
4
+ import {IAccountingService} from "../accounting/IAccountingService.sol";
7
5
  import {IBundle} from "../instance/module/IBundle.sol";
8
- import {TokenHandler} from "../instance/module/ITreasury.sol";
6
+ import {IBundleService} from "./IBundleService.sol";
9
7
  import {IComponents} from "../instance/module/IComponents.sol";
8
+ import {IComponentService} from "../shared/IComponentService.sol";
9
+ import {IInstance} from "../instance/IInstance.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 {IPolicyHolder} from "../shared/IPolicyHolder.sol";
12
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
13
+ import {IPoolService} from "./IPoolService.sol";
14
+ import {IProductComponent} from "../product/IProductComponent.sol";
15
+ import {IRegistry} from "../registry/IRegistry.sol";
16
+ import {IStaking} from "../staking/IStaking.sol";
15
17
 
16
18
  import {Amount, AmountLib} from "../type/Amount.sol";
17
- 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";
21
- 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 {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";
19
+ import {ClaimId} from "../type/ClaimId.sol";
20
+ import {ContractLib} from "../shared/ContractLib.sol";
36
21
  import {InstanceReader} from "../instance/InstanceReader.sol";
37
- import {IComponent} from "../shared/IComponent.sol";
38
- import {IPoolComponent} from "./IPoolComponent.sol";
22
+ import {InstanceStore} from "../instance/InstanceStore.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";
39
31
 
40
32
  string constant POOL_SERVICE_NAME = "PoolService";
41
33
 
34
+
42
35
  contract PoolService is
43
- ComponentService,
36
+ Service,
44
37
  IPoolService
45
38
  {
46
- using NftIdLib for NftId;
47
- using AmountLib for Amount;
48
-
39
+ IAccountingService private _accountingService;
49
40
  IBundleService internal _bundleService;
41
+ IComponentService internal _componentService;
42
+ IStaking private _staking;
50
43
 
51
44
  function _initialize(
52
45
  address owner,
53
46
  bytes memory data
54
47
  )
55
48
  internal
56
- initializer
57
49
  virtual override
50
+ initializer()
58
51
  {
59
- address registryAddress;
60
- address initialOwner;
61
- (registryAddress, initialOwner) = abi.decode(data, (address, address));
62
- // TODO while PoolService is not deployed in PoolServiceManager constructor
63
- // owner is PoolServiceManager deployer
64
- initializeService(registryAddress, address(0), owner);
52
+ (
53
+ address authority,
54
+ address registry
55
+ ) = abi.decode(data, (address, address));
65
56
 
66
- _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart()));
57
+ __Service_init(authority, registry, owner);
67
58
 
68
- registerInterface(type(IPoolService).interfaceId);
69
- }
59
+ _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
60
+ _bundleService = IBundleService(_getServiceAddress(BUNDLE()));
61
+ _componentService = IComponentService(_getServiceAddress(COMPONENT()));
62
+ _staking = IStaking(getRegistry().getStakingAddress());
70
63
 
71
- function getDomain() public pure override returns(ObjectType) {
72
- return POOL();
64
+ _registerInterface(type(IPoolService).interfaceId);
73
65
  }
74
66
 
75
- function register(address poolAddress)
67
+
68
+ /// @inheritdoc IPoolService
69
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
76
70
  external
77
- returns(NftId poolNftId)
71
+ virtual
72
+ restricted()
78
73
  {
79
- (
80
- IComponent component,
81
- address owner,
82
- IInstance instance,
83
- NftId instanceNftId
84
- ) = _checkComponentForRegistration(
85
- poolAddress,
86
- POOL(),
87
- POOL_OWNER_ROLE());
88
-
89
- IPoolComponent pool = IPoolComponent(poolAddress);
90
- IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
91
- pool.linkToRegisteredNftId();
92
- poolNftId = registryInfo.nftId;
93
-
94
- // amend component info with pool specific token handler
95
- IComponents.ComponentInfo memory componentInfo = pool.getComponentInfo();
96
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
97
-
98
- // save amended component info with instance
99
- instance.getInstanceStore().createPoolSetup(poolNftId, componentInfo);
100
-
101
- bytes4[][] memory selectors = new bytes4[][](2);
102
- selectors[0] = new bytes4[](1);
103
- selectors[1] = new bytes4[](1);
104
-
105
- selectors[0][0] = IPoolComponent.setFees.selector;
106
- selectors[1][0] = IPoolComponent.verifyApplication.selector;
107
-
108
- RoleId[] memory roles = new RoleId[](2);
109
- roles[0] = POOL_OWNER_ROLE();
110
- roles[1] = POLICY_SERVICE_ROLE();
111
-
112
- getInstanceService().createGifTarget(
113
- instanceNftId,
114
- poolAddress,
115
- pool.getName(),
116
- selectors,
117
- roles);
74
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
75
+ InstanceReader instanceReader = instance.getInstanceReader();
76
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
77
+
78
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
79
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
80
+ instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
81
+
82
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
118
83
  }
119
84
 
120
85
 
121
- function setMaxCapitalAmount(Amount maxCapitalAmount)
86
+ function closeBundle(NftId bundleNftId)
122
87
  external
88
+ restricted()
123
89
  virtual
124
90
  {
125
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
126
- InstanceReader instanceReader = instance.getInstanceReader();
91
+ _checkNftType(bundleNftId, BUNDLE());
92
+
93
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
127
94
 
128
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
129
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
130
- Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
95
+ // TODO get performance fee for pool (#477)
131
96
 
132
- poolInfo.maxCapitalAmount = maxCapitalAmount;
133
- componentInfo.data = abi.encode(poolInfo);
134
- instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
97
+ // releasing collateral in bundle
98
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
135
99
 
136
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
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
+ }
137
114
  }
138
115
 
139
- function setBundleOwnerRole(RoleId bundleOwnerRole)
116
+
117
+ /// @inheritdoc IPoolService
118
+ function processFundedClaim(
119
+ NftId policyNftId,
120
+ ClaimId claimId,
121
+ Amount availableAmount
122
+ )
140
123
  external
124
+ restricted()
141
125
  virtual
142
126
  {
143
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
144
- InstanceReader instanceReader = instance.getInstanceReader();
145
-
146
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
147
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
127
+ _checkNftType(policyNftId, POLICY());
148
128
 
149
- // bundle owner role may only be set once per pool
150
- if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
151
- revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
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);
152
140
  }
153
141
 
154
- poolInfo.bundleOwnerRole = bundleOwnerRole;
155
- componentInfo.data = abi.encode(poolInfo);
156
- instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
142
+ emit LogPoolServiceProcessFundedClaim(policyNftId, claimId, availableAmount);
157
143
 
158
- emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
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
+ }
159
149
  }
160
150
 
161
151
 
162
- function setFees(
163
- Fee memory poolFee,
164
- Fee memory stakingFee,
165
- Fee memory performanceFee
166
- )
167
- external
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)
179
+ external
168
180
  virtual
181
+ restricted()
182
+ returns(
183
+ Amount netAmount
184
+ )
169
185
  {
170
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
171
- InstanceReader instanceReader = instance.getInstanceReader();
186
+ (
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
+ }
200
+
201
+ // calculate fees
202
+ Amount feeAmount;
203
+ (
204
+ feeAmount,
205
+ netAmount
206
+ ) = PoolLib.calculateStakingAmounts(
207
+ getRegistry(),
208
+ instanceReader,
209
+ poolNftId,
210
+ amount);
172
211
 
173
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
174
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
212
+ // do all the book keeping
213
+ _accountingService.increasePoolBalance(
214
+ instanceStore,
215
+ poolNftId,
216
+ netAmount,
217
+ feeAmount);
175
218
 
176
- poolInfo.poolFee = poolFee;
177
- poolInfo.stakingFee = stakingFee;
178
- poolInfo.performanceFee = performanceFee;
179
- componentInfo.data = abi.encode(poolInfo);
180
- instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
219
+ _bundleService.stake(instanceReader, instanceStore, bundleNftId, netAmount);
181
220
 
182
- // TODO add logging
221
+ emit LogPoolServiceBundleStaked(instanceNftId, poolNftId, bundleNftId, amount, netAmount);
222
+
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
+ }
183
234
  }
184
235
 
185
236
 
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
- )
237
+ /// @inheritdoc IPoolService
238
+ function unstake(NftId bundleNftId, Amount amount)
193
239
  external
194
240
  virtual
195
- returns(NftId bundleNftId)
241
+ restricted()
242
+ returns(Amount netAmount)
196
243
  {
197
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
198
- InstanceReader instanceReader = instance.getInstanceReader();
244
+ (
245
+ InstanceReader instanceReader,
246
+ InstanceStore instanceStore,
247
+ NftId instanceNftId,
248
+ NftId poolNftId,
249
+ ) = PoolLib.checkAndGetPoolInfo(getRegistry(), msg.sender, bundleNftId);
199
250
 
200
- // pool fee book keeping
201
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
202
- Amount stakingNetAmount = _processStakingFees(componentInfo, stakingAmount);
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());
203
266
 
204
- bundleNftId = _bundleService.create(
205
- instance,
206
- poolNftId,
207
- owner,
208
- fee,
209
- stakingNetAmount,
210
- lifetime,
211
- filter);
212
267
 
213
- // collect tokens from bundle owner
214
- _transferStakingAmount(componentInfo, owner, stakingAmount);
268
+ emit LogPoolServiceBundleUnstaked(instanceNftId, poolNftId, bundleNftId, unstakedAmount, netAmount);
215
269
 
216
- emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
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
+ }
217
281
  }
218
282
 
219
283
 
220
- function closeBundle(NftId bundleNftId)
284
+ function fundPoolWallet(Amount amount)
221
285
  external
222
286
  virtual
287
+ restricted()
223
288
  {
224
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(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
+ }
225
299
 
226
- // TODO book keeping for pool collateral released outside of retention level
300
+ address poolOwner = getRegistry().ownerOf(poolNftId);
301
+ emit LogPoolServiceWalletFunded(poolNftId, poolOwner, amount);
227
302
 
228
- // releasing collateral in bundle
229
- _bundleService.close(instance, bundleNftId);
303
+ PoolLib.pullStakingAmount(
304
+ reader,
305
+ poolNftId,
306
+ poolOwner,
307
+ amount);
308
+ }
230
309
 
231
- // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
232
310
 
233
- 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);
234
335
  }
235
336
 
337
+
236
338
  function processSale(
237
339
  NftId bundleNftId,
238
- IPolicy.Premium memory premium,
239
- Amount actualAmountTransferred
340
+ IPolicy.PremiumInfo memory premium
240
341
  )
241
342
  external
242
343
  virtual
344
+ restricted()
243
345
  {
346
+ _checkNftType(bundleNftId, BUNDLE());
347
+
244
348
  IRegistry registry = getRegistry();
245
- IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
246
- IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
247
- IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
248
- IInstance instance = IInstance(instanceObjectInfo.objectAddress);
249
-
250
- Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
251
- Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
252
- Amount expectedTransferAmount = AmountLib.toAmount(premium.netPremiumAmount) + poolFeeAmount + bundleFeeAmount;
253
- if (!(actualAmountTransferred == expectedTransferAmount)) {
254
- revert ErrorPoolServiceInvalidTransferAmount(expectedTransferAmount, actualAmountTransferred);
255
- }
256
-
257
- // update pool fee balance
258
- if (poolFeeAmount.gtz()) {
259
- IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolObjectInfo.nftId);
260
- poolComponentInfo.feeAmount = poolComponentInfo.feeAmount.add(poolFeeAmount);
261
- instance.getInstanceStore().updatePoolSetup(poolObjectInfo.nftId, poolComponentInfo, KEEP_STATE());
262
- }
349
+ NftId poolNftId = registry.getParentNftId(bundleNftId);
350
+ (, address instanceAddress) = ContractLib.getInfoAndInstance(registry, poolNftId, true);
351
+ IInstance instance = IInstance(instanceAddress);
263
352
 
264
- if (bundleFeeAmount.gtz()) {
265
- _bundleService.updateBundleFees(instance, bundleNftId, bundleFeeAmount);
266
- }
353
+ Amount poolFeeAmount = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
354
+ Amount bundleFeeAmount = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
355
+ Amount bundleNetAmount = premium.netPremiumAmount;
356
+
357
+ InstanceStore instanceStore = instance.getInstanceStore();
358
+ _accountingService.increasePoolBalance(
359
+ instanceStore,
360
+ poolNftId,
361
+ bundleNetAmount + bundleFeeAmount,
362
+ poolFeeAmount);
363
+
364
+ _accountingService.increaseBundleBalanceForPool(
365
+ instanceStore,
366
+ bundleNftId,
367
+ bundleNetAmount,
368
+ bundleFeeAmount);
267
369
  }
268
370
 
371
+
269
372
  function lockCollateral(
270
373
  IInstance instance,
374
+ address token,
271
375
  NftId productNftId,
272
376
  NftId applicationNftId,
273
- IPolicy.PolicyInfo memory applicationInfo,
274
- Amount premiumAmount // premium amount after product and distribution fees
377
+ NftId bundleNftId,
378
+ Amount sumInsuredAmount // premium amount after product and distribution fees
275
379
  )
276
380
  external
277
381
  virtual
278
- // TODO add restricted and granting for policy service
382
+ restricted()
383
+ returns (
384
+ Amount totalCollateralAmount,
385
+ Amount localCollateralAmount
386
+ )
279
387
  {
280
- InstanceReader instanceReader = instance.getInstanceReader();
281
- NftId poolNftId = instanceReader.getProductSetupInfo(productNftId).poolNftId;
282
- NftId bundleNftId = applicationInfo.bundleNftId;
283
-
284
- // TODO move this check to application creation and don't repeat this here
285
- // ensure that pool for bundle from application matches with pool for product of application
286
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
287
- if(bundleInfo.poolNftId != poolNftId) {
288
- revert ErrorPoolServiceBundlePoolMismatch(bundleInfo.poolNftId, poolNftId);
289
- }
290
-
291
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
292
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
293
-
294
- // TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
295
- Amount collateralAmount = applicationInfo.sumInsuredAmount;
388
+ _checkNftType(productNftId, PRODUCT());
389
+ _checkNftType(applicationNftId, POLICY());
390
+ _checkNftType(bundleNftId, BUNDLE());
296
391
 
297
- // TODO add correct net premium calculation (pool fee might be > 0)
298
- Amount premiumAfterPoolFeeAmount = premiumAmount;
299
-
300
- // lock collateral amount from involvedd bundle
392
+ NftId poolNftId;
393
+ bool poolIsVerifyingApplications;
394
+ (
395
+ poolNftId,
396
+ totalCollateralAmount,
397
+ localCollateralAmount,
398
+ poolIsVerifyingApplications
399
+ ) = PoolLib.calculateRequiredCollateral(
400
+ instance.getInstanceReader(),
401
+ productNftId,
402
+ sumInsuredAmount);
403
+
404
+ // lock collateral amount from involved bundle
301
405
  _bundleService.lockCollateral(
302
406
  instance,
303
407
  applicationNftId,
304
408
  bundleNftId,
305
- collateralAmount,
306
- premiumAfterPoolFeeAmount);
409
+ localCollateralAmount);
410
+
411
+ // update value locked with staking service
412
+ _staking.increaseTotalValueLocked(
413
+ instance.getNftId(),
414
+ token,
415
+ totalCollateralAmount);
416
+
417
+ // pool callback when required
418
+ if (poolIsVerifyingApplications) {
419
+ IPoolComponent pool = IPoolComponent(
420
+ getRegistry().getObjectAddress(poolNftId));
307
421
 
308
- // also verify/confirm application by pool if necessary
309
- if(poolInfo.isVerifyingApplications) {
310
- address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
311
- IPoolComponent(poolAddress).verifyApplication(
422
+ pool.verifyApplication(
312
423
  applicationNftId,
313
- applicationInfo.applicationData,
314
- bundleNftId,
315
- bundleInfo.filter,
316
- collateralAmount);
424
+ bundleNftId,
425
+ totalCollateralAmount);
426
+
427
+ // TODO add logging
317
428
  }
318
- }
319
429
 
430
+ // TODO add logging
431
+ }
320
432
 
321
- function reduceCollateral(
322
- IInstance instance,
433
+ function processPayout(
434
+ InstanceReader instanceReader,
435
+ InstanceStore instanceStore,
436
+ NftId productNftId,
323
437
  NftId policyNftId,
324
- IPolicy.PolicyInfo memory policyInfo,
325
- Amount payoutAmount
438
+ NftId bundleNftId,
439
+ PayoutId payoutId,
440
+ Amount payoutAmount,
441
+ address payoutBeneficiary
326
442
  )
327
443
  external
328
444
  virtual
329
- // TODO add restricted and granting for claim service
445
+ restricted()
330
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
+
331
465
  _bundleService.releaseCollateral(
332
- instance,
466
+ instanceStore,
333
467
  policyNftId,
334
- policyInfo.bundleNftId,
468
+ bundleNftId,
335
469
  payoutAmount);
470
+
471
+ // update value locked with staking service
472
+ TokenHandler poolTokenHandler = instanceReader.getTokenHandler(poolNftId);
473
+
474
+ _staking.decreaseTotalValueLocked(
475
+ instanceReader.getInstanceNftId(),
476
+ address(poolTokenHandler.TOKEN()),
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
+ }
336
538
  }
337
539
 
338
540
 
@@ -345,59 +547,41 @@ contract PoolService is
345
547
  )
346
548
  external
347
549
  virtual
348
- // TODO add restricted and granting for policy service
550
+ restricted()
349
551
  {
552
+ _checkNftType(policyNftId, POLICY());
553
+
554
+ Amount remainingCollateralAmount = policyInfo.sumInsuredAmount - policyInfo.claimAmount;
555
+
350
556
  _bundleService.releaseCollateral(
351
- instance,
557
+ instance.getInstanceStore(),
352
558
  policyNftId,
353
559
  policyInfo.bundleNftId,
354
- policyInfo.sumInsuredAmount - policyInfo.claimAmount);
560
+ remainingCollateralAmount);
355
561
 
356
- _bundleService.unlinkPolicy(
357
- instance,
358
- policyNftId);
562
+ // update value locked with staking service
563
+ InstanceReader instanceReader = instance.getInstanceReader();
564
+ _staking.decreaseTotalValueLocked(
565
+ instanceReader.getInstanceNftId(),
566
+ address(instanceReader.getToken(policyInfo.productNftId)),
567
+ remainingCollateralAmount);
359
568
  }
360
569
 
361
570
 
362
- function _processStakingFees(
363
- IComponents.ComponentInfo memory componentInfo,
364
- Amount stakingAmount
365
- )
571
+ function _getAndVerifyActivePool()
366
572
  internal
367
- returns (Amount stakingNetAmount)
573
+ virtual
574
+ view
575
+ returns (
576
+ NftId poolNftId,
577
+ IInstance instance
578
+ )
368
579
  {
369
- stakingNetAmount = stakingAmount;
370
-
371
- // check if any staking fees apply
372
- Fee memory stakingFee = abi.decode(componentInfo.data, (IComponents.PoolInfo)).stakingFee;
373
- if (FeeLib.gtz(stakingFee)) {
374
- (Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
375
- stakingNetAmount = netAmount;
376
-
377
- // TODO update fee balance for pool
378
- }
580
+ return PoolLib.getAndVerifyActivePool(getRegistry(), msg.sender);
379
581
  }
380
582
 
381
583
 
382
- // TODO create (I)TreasuryService that deals with all gif related token transfers
383
- /// @dev transfers the specified amount from the bundle owner to the pool's wallet
384
- function _transferStakingAmount(
385
- IComponents.ComponentInfo memory componentInfo,
386
- address bundleOwner,
387
- Amount stakingAmount
388
- )
389
- internal
390
- {
391
- TokenHandler tokenHandler = componentInfo.tokenHandler;
392
- address poolWallet = componentInfo.wallet;
393
-
394
- if(stakingAmount.gtz()) {
395
- tokenHandler.transfer(
396
- bundleOwner,
397
- poolWallet,
398
- stakingAmount
399
- );
400
- }
584
+ function _getDomain() internal pure override returns(ObjectType) {
585
+ return POOL();
401
586
  }
402
-
403
587
  }