@etherisc/gif-next 0.0.2-8c1d8cd-727 → 0.0.2-8c6c3ef-628

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 (486) hide show
  1. package/README.md +81 -7
  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 +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +454 -253
  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 +1 -1
  15. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +202 -5
  16. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +227 -26
  18. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  19. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +353 -189
  21. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +105 -18
  23. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  25. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +113 -290
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +212 -38
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +45 -163
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +347 -190
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +127 -65
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  37. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +32 -132
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  39. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +181 -71
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +122 -199
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +212 -38
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +287 -346
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +212 -38
  49. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  50. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +184 -251
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +644 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  55. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +76 -155
  56. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  57. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +239 -203
  58. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +644 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +672 -362
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +644 -0
  64. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  65. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
  66. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  67. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +198 -23
  68. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  69. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +120 -14
  70. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  71. package/artifacts/contracts/instance/Instance.sol/Instance.json +240 -40
  72. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  73. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +705 -322
  74. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  75. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +206 -51
  76. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  77. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +704 -304
  78. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +146 -87
  80. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  81. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +59 -47
  82. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  83. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +676 -570
  84. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  85. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
  86. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  87. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  88. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  89. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  90. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  91. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  92. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  93. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  94. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  95. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  96. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  97. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  98. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  99. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  100. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  101. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  102. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  103. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  104. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +66 -167
  105. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +194 -40
  107. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  109. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +36 -71
  110. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  111. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +27 -3
  112. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  113. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +50 -103
  114. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  115. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +128 -81
  116. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  117. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +91 -41
  118. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  119. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +69 -137
  120. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  121. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +212 -38
  122. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  123. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +165 -337
  124. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +85 -87
  126. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  127. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +62 -142
  128. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  129. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -118
  130. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  131. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +182 -235
  132. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  133. package/artifacts/contracts/pool/Pool.sol/Pool.json +57 -149
  134. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  135. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +472 -0
  136. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  137. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +350 -369
  138. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  139. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +121 -63
  140. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  141. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +167 -67
  142. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  143. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +80 -38
  144. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  145. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +182 -215
  146. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  147. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +212 -38
  148. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  149. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +260 -179
  150. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  151. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +96 -78
  152. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  153. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +103 -10
  154. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  155. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +142 -20
  156. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  157. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +112 -56
  158. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  159. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +48 -3
  160. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  161. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +163 -178
  162. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  163. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +58 -7
  164. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  165. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +233 -194
  166. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  167. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +727 -0
  168. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  169. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +103 -73
  170. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  171. package/artifacts/contracts/product/PricingService.sol/PricingService.json +120 -100
  172. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  173. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +68 -58
  174. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  175. package/artifacts/contracts/product/Product.sol/Product.json +176 -209
  176. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  177. package/artifacts/contracts/product/RiskService.sol/RiskService.json +143 -77
  178. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  179. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +80 -38
  180. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  181. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  182. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  183. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +60 -12
  184. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  185. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +31 -7
  186. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  187. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  188. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  189. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  190. package/artifacts/contracts/registry/Registry.sol/Registry.json +98 -50
  191. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  192. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +561 -429
  193. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  194. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +878 -0
  195. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  196. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +69 -46
  197. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  198. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +56 -34
  199. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  200. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1954 -0
  201. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  202. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  203. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  204. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +334 -64
  205. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  206. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  207. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  208. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +15 -15
  209. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  210. package/artifacts/contracts/shared/Component.sol/Component.json +49 -88
  211. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  212. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +239 -520
  213. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  214. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +77 -75
  215. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  216. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +27 -16
  217. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  218. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +573 -4
  219. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  220. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  221. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  222. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  223. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  224. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  225. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  226. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +36 -57
  227. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  228. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +139 -347
  229. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  230. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +36 -71
  231. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  232. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  233. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  235. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  236. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +120 -1
  237. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  238. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  239. package/artifacts/contracts/shared/IService.sol/IService.json +27 -3
  240. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  241. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -2
  242. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  243. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +49 -102
  244. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  245. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  246. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  247. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  248. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  249. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  250. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  251. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  252. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  253. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -62
  254. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  255. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  256. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  257. package/artifacts/contracts/shared/Service.sol/Service.json +27 -16
  258. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  259. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +327 -73
  260. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  261. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  262. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  263. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
  264. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  265. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +125 -99
  266. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  267. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +134 -10
  268. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  269. package/artifacts/contracts/staking/Staking.sol/Staking.json +225 -209
  270. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  271. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +469 -0
  272. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  273. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  274. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  275. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +83 -59
  276. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  277. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +40 -67
  278. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  279. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +203 -56
  280. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  281. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +73 -39
  282. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  283. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +163 -149
  284. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  285. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +60 -50
  286. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  287. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Amount.sol/AmountLib.json +11 -11
  289. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  292. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  294. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/Fee.sol/FeeLib.json +94 -38
  296. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  297. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  298. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  299. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  300. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  302. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  303. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  304. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  306. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  308. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  310. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  311. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  312. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +69 -7
  314. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +79 -15
  316. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  318. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  319. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  320. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  321. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  322. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  324. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  325. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  326. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +61 -37
  327. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  328. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  329. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  330. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +101 -2
  331. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  332. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  333. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +32 -16
  334. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  335. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
  336. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  337. package/contracts/accounting/AccountingService.sol +261 -0
  338. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  339. package/contracts/accounting/IAccountingService.sol +45 -0
  340. package/contracts/authorization/AccessAdmin.sol +300 -192
  341. package/contracts/authorization/AccessAdminLib.sol +183 -0
  342. package/contracts/authorization/AccessManagerCloneable.sol +146 -4
  343. package/contracts/authorization/Authorization.sol +307 -231
  344. package/contracts/authorization/IAccess.sol +13 -5
  345. package/contracts/authorization/IAccessAdmin.sol +69 -36
  346. package/contracts/authorization/IAuthorization.sol +21 -1
  347. package/contracts/distribution/BasicDistribution.sol +18 -16
  348. package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
  349. package/contracts/distribution/Distribution.sol +36 -77
  350. package/contracts/distribution/DistributionService.sol +134 -91
  351. package/contracts/distribution/DistributionServiceManager.sol +1 -1
  352. package/contracts/distribution/IDistributionComponent.sol +0 -9
  353. package/contracts/distribution/IDistributionService.sol +22 -20
  354. package/contracts/examples/fire/FirePool.sol +24 -13
  355. package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
  356. package/contracts/examples/fire/FireProduct.sol +32 -17
  357. package/contracts/examples/fire/FireProductAuthorization.sol +2 -1
  358. package/contracts/examples/unpermissioned/SimpleDistribution.sol +39 -8
  359. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  360. package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -8
  361. package/contracts/examples/unpermissioned/SimplePool.sol +32 -6
  362. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  363. package/contracts/examples/unpermissioned/SimpleProduct.sol +49 -27
  364. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  365. package/contracts/instance/BundleSet.sol +42 -38
  366. package/contracts/instance/IInstance.sol +57 -17
  367. package/contracts/instance/IInstanceService.sol +27 -11
  368. package/contracts/instance/Instance.sol +102 -30
  369. package/contracts/instance/InstanceAdmin.sol +279 -106
  370. package/contracts/instance/InstanceAuthorizationV3.sol +87 -46
  371. package/contracts/instance/InstanceReader.sol +187 -32
  372. package/contracts/instance/InstanceService.sol +174 -126
  373. package/contracts/instance/InstanceServiceManager.sol +1 -1
  374. package/contracts/instance/InstanceStore.sol +13 -2
  375. package/contracts/instance/RiskSet.sol +118 -0
  376. package/contracts/instance/base/BalanceStore.sol +3 -5
  377. package/contracts/instance/base/ObjectCounter.sol +1 -2
  378. package/contracts/instance/base/ObjectLifecycle.sol +4 -2
  379. package/contracts/instance/base/ObjectSet.sol +31 -33
  380. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  381. package/contracts/instance/module/IBundle.sol +6 -5
  382. package/contracts/instance/module/IComponents.sol +20 -9
  383. package/contracts/instance/module/IDistribution.sol +21 -8
  384. package/contracts/instance/module/IPolicy.sol +28 -7
  385. package/contracts/instance/module/IRisk.sol +5 -0
  386. package/contracts/oracle/BasicOracle.sol +1 -3
  387. package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
  388. package/contracts/oracle/IOracle.sol +9 -4
  389. package/contracts/oracle/Oracle.sol +1 -3
  390. package/contracts/oracle/OracleService.sol +96 -77
  391. package/contracts/oracle/OracleServiceManager.sol +1 -1
  392. package/contracts/pool/BasicPool.sol +23 -4
  393. package/contracts/pool/BasicPoolAuthorization.sol +27 -8
  394. package/contracts/pool/BundleService.sol +55 -152
  395. package/contracts/pool/BundleServiceManager.sol +1 -1
  396. package/contracts/pool/IBundleService.sol +15 -43
  397. package/contracts/pool/IPoolComponent.sol +1 -7
  398. package/contracts/pool/IPoolService.sol +58 -60
  399. package/contracts/pool/Pool.sol +106 -98
  400. package/contracts/pool/PoolLib.sol +309 -0
  401. package/contracts/pool/PoolService.sol +271 -228
  402. package/contracts/pool/PoolServiceManager.sol +1 -1
  403. package/contracts/product/ApplicationService.sol +60 -19
  404. package/contracts/product/ApplicationServiceManager.sol +1 -1
  405. package/contracts/product/BasicProduct.sol +8 -12
  406. package/contracts/product/BasicProductAuthorization.sol +24 -10
  407. package/contracts/product/ClaimService.sol +165 -137
  408. package/contracts/product/ClaimServiceManager.sol +1 -1
  409. package/contracts/product/IApplicationService.sol +8 -2
  410. package/contracts/product/IClaimService.sol +14 -2
  411. package/contracts/product/IPolicyService.sol +26 -11
  412. package/contracts/product/IPricingService.sol +1 -0
  413. package/contracts/product/IProductComponent.sol +4 -1
  414. package/contracts/product/IRiskService.sol +7 -7
  415. package/contracts/product/PolicyService.sol +242 -299
  416. package/contracts/product/PolicyServiceLib.sol +119 -0
  417. package/contracts/product/PolicyServiceManager.sol +1 -1
  418. package/contracts/product/PricingService.sol +30 -21
  419. package/contracts/product/PricingServiceManager.sol +3 -3
  420. package/contracts/product/Product.sol +65 -53
  421. package/contracts/product/RiskService.sol +89 -31
  422. package/contracts/product/RiskServiceManager.sol +1 -1
  423. package/contracts/registry/ChainNft.sol +4 -2
  424. package/contracts/registry/IRegistry.sol +14 -15
  425. package/contracts/registry/IRelease.sol +29 -0
  426. package/contracts/registry/Registry.sol +16 -3
  427. package/contracts/registry/RegistryAdmin.sol +145 -335
  428. package/contracts/registry/RegistryAuthorization.sol +267 -0
  429. package/contracts/registry/RegistryService.sol +3 -3
  430. package/contracts/registry/RegistryServiceManager.sol +1 -1
  431. package/contracts/registry/ReleaseAdmin.sol +253 -0
  432. package/contracts/registry/ReleaseLifecycle.sol +2 -0
  433. package/contracts/registry/ReleaseRegistry.sol +150 -134
  434. package/contracts/registry/ServiceAuthorizationV3.sol +178 -40
  435. package/contracts/registry/TokenRegistry.sol +10 -9
  436. package/contracts/shared/Component.sol +52 -107
  437. package/contracts/shared/ComponentService.sol +336 -420
  438. package/contracts/shared/ComponentServiceManager.sol +1 -1
  439. package/contracts/shared/ComponentVerifyingService.sol +16 -14
  440. package/contracts/shared/ContractLib.sol +312 -3
  441. package/contracts/shared/IComponent.sol +1 -17
  442. package/contracts/shared/IComponentService.sol +27 -37
  443. package/contracts/shared/IInstanceLinkedComponent.sol +0 -11
  444. package/contracts/shared/IRegisterable.sol +15 -4
  445. package/contracts/shared/IService.sol +3 -5
  446. package/contracts/shared/InitializableERC165.sol +9 -1
  447. package/contracts/shared/InstanceLinkedComponent.sol +4 -23
  448. package/contracts/shared/NftOwnable.sol +6 -6
  449. package/contracts/shared/PolicyHolder.sol +1 -1
  450. package/contracts/shared/Registerable.sol +41 -20
  451. package/contracts/shared/RegistryLinked.sol +7 -13
  452. package/contracts/shared/Service.sol +8 -27
  453. package/contracts/shared/TokenHandler.sol +275 -72
  454. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  455. package/contracts/staking/IStaking.sol +23 -12
  456. package/contracts/staking/IStakingService.sol +19 -1
  457. package/contracts/staking/Staking.sol +95 -46
  458. package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +80 -23
  459. package/contracts/staking/StakingReader.sol +6 -16
  460. package/contracts/staking/StakingService.sol +88 -14
  461. package/contracts/staking/StakingServiceManager.sol +5 -4
  462. package/contracts/staking/StakingStore.sol +2 -1
  463. package/contracts/type/Fee.sol +8 -8
  464. package/contracts/type/Key32.sol +2 -2
  465. package/contracts/type/Key32Set.sol +62 -0
  466. package/contracts/type/NftId.sol +6 -0
  467. package/contracts/type/ObjectType.sol +53 -35
  468. package/contracts/type/RiskId.sol +26 -8
  469. package/contracts/type/RoleId.sol +24 -4
  470. package/contracts/type/Selector.sol +5 -0
  471. package/contracts/type/Timestamp.sol +0 -5
  472. package/contracts/type/UFixed.sol +34 -127
  473. package/contracts/type/Version.sol +54 -5
  474. package/contracts/upgradeability/ProxyManager.sol +12 -10
  475. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +7 -1
  476. package/package.json +4 -4
  477. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +0 -4
  478. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +0 -1196
  479. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  480. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  481. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  482. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -440
  483. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  484. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  485. package/contracts/authorization/ReleaseAccessManager.sol +0 -38
  486. package/contracts/instance/module/IAccess.sol +0 -46
@@ -3,45 +3,41 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {IRegistry} from "../registry/IRegistry.sol";
7
- import {Product} from "./Product.sol";
6
+ import {IAccountingService} from "../accounting/IAccountingService.sol";
7
+ import {IComponentService} from "../shared/IComponentService.sol";
8
8
  import {IComponents} from "../instance/module/IComponents.sol";
9
+ import {IDistributionService} from "../distribution/IDistributionService.sol";
10
+ import {InstanceReader} from "../instance/InstanceReader.sol";
11
+ import {InstanceStore} from "../instance/InstanceStore.sol";
9
12
  import {IInstance} from "../instance/IInstance.sol";
10
13
  import {IPolicy} from "../instance/module/IPolicy.sol";
14
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
15
+ import {IPolicyService} from "./IPolicyService.sol";
16
+ import {IPoolService} from "../pool/IPoolService.sol";
17
+ import {IPricingService} from "./IPricingService.sol";
18
+ import {IRegistry} from "../registry/IRegistry.sol";
11
19
 
12
- import {TokenHandler} from "../shared/TokenHandler.sol";
13
-
14
- import {Amount, AmountLib} from "../type/Amount.sol";
15
- import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
16
- import {ObjectType, APPLICATION, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
20
+ import {Amount} from "../type/Amount.sol";
17
21
  import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED, PAID} from "../type/StateId.sol";
22
+ import {ContractLib} from "../shared/ContractLib.sol";
18
23
  import {NftId} from "../type/NftId.sol";
24
+ import {ObjectType, ACCOUNTING, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, PRICE} from "../type/ObjectType.sol";
25
+ import {PolicyServiceLib} from "./PolicyServiceLib.sol";
19
26
  import {ReferralId} from "../type/Referral.sol";
27
+ import {RiskId} from "../type/RiskId.sol";
28
+ import {Service} from "../shared/Service.sol";
20
29
  import {StateId} from "../type/StateId.sol";
30
+ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
31
+ import {TokenHandler} from "../shared/TokenHandler.sol";
21
32
  import {VersionPart} from "../type/Version.sol";
22
33
 
23
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
24
- import {ContractLib} from "../shared/ContractLib.sol";
25
- import {IApplicationService} from "./IApplicationService.sol";
26
- import {IBundleService} from "../pool/IBundleService.sol";
27
- import {IClaimService} from "./IClaimService.sol";
28
- import {IComponentService} from "../shared/IComponentService.sol";
29
- import {IDistributionService} from "../distribution/IDistributionService.sol";
30
- import {InstanceReader} from "../instance/InstanceReader.sol";
31
- import {InstanceStore} from "../instance/InstanceStore.sol";
32
- import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
33
- import {IPolicyService} from "./IPolicyService.sol";
34
- import {IPoolService} from "../pool/IPoolService.sol";
35
- import {IPricingService} from "./IPricingService.sol";
36
34
 
37
35
  contract PolicyService is
38
- ComponentVerifyingService,
36
+ Service,
39
37
  IPolicyService
40
38
  {
41
- IApplicationService internal _applicationService;
39
+ IAccountingService private _accountingService;
42
40
  IComponentService internal _componentService;
43
- IBundleService internal _bundleService;
44
- IClaimService internal _claimService;
45
41
  IDistributionService internal _distributionService;
46
42
  IPoolService internal _poolService;
47
43
  IPricingService internal _pricingService;
@@ -55,17 +51,15 @@ contract PolicyService is
55
51
  initializer
56
52
  {
57
53
  (
58
- address registryAddress,
59
- address authority
54
+ address authority,
55
+ address registry
60
56
  ) = abi.decode(data, (address, address));
61
57
 
62
- _initializeService(registryAddress, authority, owner);
58
+ __Service_init(authority, registry, owner);
63
59
 
64
60
  VersionPart majorVersion = getVersion().toMajorPart();
65
- _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
66
- _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
61
+ _accountingService = IAccountingService(getRegistry().getServiceAddress(ACCOUNTING(), majorVersion));
67
62
  _componentService = IComponentService(getRegistry().getServiceAddress(COMPONENT(), majorVersion));
68
- _claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
69
63
  _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
70
64
  _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
71
65
  _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
@@ -79,28 +73,18 @@ contract PolicyService is
79
73
  )
80
74
  external
81
75
  virtual
76
+ restricted()
82
77
  nonReentrant()
83
78
  {
84
- _checkNftType(applicationNftId, POLICY());
85
-
86
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
87
- InstanceReader instanceReader = instance.getInstanceReader();
79
+ // checks
80
+ (IInstance instance,,) = _getAndVerifyCallerForPolicy(applicationNftId);
88
81
 
89
82
  // check policy is in state applied
90
- if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
83
+ if (instance.getInstanceReader().getPolicyState(applicationNftId) != APPLIED()) {
91
84
  revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
92
85
  }
93
86
 
94
- // check policy matches with calling product
95
- IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
96
- if(applicationInfo.productNftId != productNftId) {
97
- revert ErrorPolicyServicePolicyProductMismatch(
98
- applicationNftId,
99
- applicationInfo.productNftId,
100
- productNftId);
101
- }
102
-
103
-
87
+ // effects
104
88
  // store updated policy info
105
89
  instance.getInstanceStore().updatePolicyState(
106
90
  applicationNftId,
@@ -117,43 +101,36 @@ contract PolicyService is
117
101
  )
118
102
  external
119
103
  virtual
104
+ restricted()
120
105
  nonReentrant()
106
+ returns (Amount premiumAmount)
121
107
  {
122
- _checkNftType(applicationNftId, POLICY());
123
-
124
- // check caller is registered product
125
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
126
- InstanceReader instanceReader = instance.getInstanceReader();
108
+ // checks
109
+ (
110
+ IInstance instance,
111
+ NftId productNftId,
112
+ IPolicy.PolicyInfo memory applicationInfo
113
+ ) = _getAndVerifyCallerForPolicy(applicationNftId);
127
114
 
128
115
  // check policy is in state applied
116
+ InstanceReader instanceReader = instance.getInstanceReader();
129
117
  if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
130
118
  revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
131
119
  }
132
120
 
133
- // check policy matches with calling product
134
- IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
135
- if(applicationInfo.productNftId != productNftId) {
136
- revert ErrorPolicyServicePolicyProductMismatch(
137
- applicationNftId,
138
- applicationInfo.productNftId,
139
- productNftId);
140
- }
141
-
121
+ // effects
142
122
  // actual collateralizaion
143
123
  _poolService.lockCollateral(
144
124
  instance,
145
- address(instanceReader.getComponentInfo(productNftId).token),
125
+ address(instanceReader.getToken(productNftId)),
146
126
  productNftId,
147
127
  applicationNftId,
148
128
  applicationInfo.bundleNftId,
149
129
  applicationInfo.sumInsuredAmount);
150
130
 
151
131
  // optional activation of policy
152
- if(activateAt > zeroTimestamp()) {
153
- applicationInfo = _activate(
154
- applicationNftId,
155
- applicationInfo,
156
- activateAt);
132
+ if(activateAt.gtz()) {
133
+ applicationInfo = PolicyServiceLib.activate(applicationNftId, applicationInfo, activateAt);
157
134
  }
158
135
 
159
136
  // update policy and set state to collateralized
@@ -163,35 +140,42 @@ contract PolicyService is
163
140
  COLLATERALIZED());
164
141
 
165
142
  // calculate and store premium
143
+ RiskId riskId = applicationInfo.riskId;
144
+ NftId bundleNftId = applicationInfo.bundleNftId;
145
+
166
146
  IPolicy.PremiumInfo memory premium = _pricingService.calculatePremium(
167
147
  productNftId,
168
- applicationInfo.riskId,
148
+ riskId,
169
149
  applicationInfo.sumInsuredAmount,
170
150
  applicationInfo.lifetime,
171
151
  applicationInfo.applicationData,
172
- applicationInfo.bundleNftId,
152
+ bundleNftId,
173
153
  applicationInfo.referralId);
174
154
 
155
+ premiumAmount = premium.fullPremiumAmount;
175
156
  instance.getInstanceStore().createPremium(
176
157
  applicationNftId,
177
158
  premium);
178
159
 
179
- // update referral counter
160
+ // update referral counter if product has linked distributino component
180
161
  {
181
162
  IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
182
-
183
- if (! productInfo.distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
163
+ if (productInfo.hasDistribution) {
184
164
  _distributionService.processReferral(
185
165
  productInfo.distributionNftId,
186
166
  applicationInfo.referralId);
187
167
  }
188
168
  }
189
169
 
170
+ // link policy to risk and bundle
171
+ NftId poolNftId = getRegistry().getParentNftId(bundleNftId);
172
+ instance.getRiskSet().linkPolicy(productNftId, riskId, applicationNftId);
173
+ instance.getBundleSet().linkPolicy(poolNftId, bundleNftId, applicationNftId);
174
+
190
175
  // log policy creation before interactions with token and policy holder
191
176
  emit LogPolicyServicePolicyCreated(applicationNftId, premium.premiumAmount, activateAt);
192
177
 
193
- // TODO add calling pool contract if it needs to validate application
194
-
178
+ // interactions
195
179
  // callback to policy holder if applicable
196
180
  _policyHolderPolicyActivated(applicationNftId, activateAt);
197
181
  }
@@ -204,37 +188,54 @@ contract PolicyService is
204
188
  )
205
189
  external
206
190
  virtual
191
+ restricted()
207
192
  nonReentrant()
208
193
  {
209
- _checkNftType(policyNftId, POLICY());
194
+ // checks
195
+ (
196
+ IInstance instance,
197
+ NftId productNftId,
198
+ IPolicy.PolicyInfo memory policyInfo
199
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
210
200
 
211
- // check caller is registered product
212
- (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
201
+ // check policy is in state collateralized
213
202
  InstanceReader instanceReader = instance.getInstanceReader();
214
- StateId stateId = instanceReader.getPolicyState(policyNftId);
215
-
216
- // check policy is in state collateralized or active
217
- if (!(stateId == COLLATERALIZED())) {
203
+ if (instanceReader.getPolicyState(policyNftId) != COLLATERALIZED()) {
218
204
  revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
219
205
  }
220
206
 
221
- // check if premium is already collected
207
+ // check if premium has already been collected
222
208
  if (instanceReader.getPremiumInfoState(policyNftId) == PAID()) {
223
209
  revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId);
224
210
  }
225
211
 
226
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
227
- IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId);
228
-
229
- _processPremium(
230
- instance,
231
- policyNftId,
232
- policyInfo,
212
+ // check funds and allowance of policy holder
213
+ IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId);
214
+ instanceReader.getTokenHandler(
215
+ productNftId).checkBalanceAndAllowance(
216
+ getRegistry().ownerOf(policyNftId),
217
+ premium.premiumAmount,
218
+ false);
219
+
220
+ // )
221
+ // _checkPremiumBalanceAndAllowance(
222
+ // tokenHandler.TOKEN(),
223
+ // address(tokenHandler),
224
+ // getRegistry().ownerOf(policyNftId),
225
+ // premium.premiumAmount);
226
+
227
+ // effects
228
+ _processSale(
229
+ instanceReader,
230
+ instance.getInstanceStore(),
231
+ productNftId,
232
+ policyInfo.bundleNftId,
233
+ policyInfo.referralId,
233
234
  premium);
234
235
 
235
236
  // optionally activate policy
236
237
  if(activateAt.gtz()) {
237
- policyInfo = _activate(policyNftId, policyInfo, activateAt);
238
+ policyInfo = PolicyServiceLib.activate(policyNftId, policyInfo, activateAt);
238
239
  }
239
240
 
240
241
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
@@ -243,33 +244,76 @@ contract PolicyService is
243
244
  // log premium collection before interactions with token
244
245
  emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
245
246
 
246
- _transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
247
+ // interactions
248
+ _transferPremiumAmounts(instanceReader, policyNftId, policyInfo.productNftId, premium);
247
249
  }
248
250
 
251
+
249
252
  /// @inheritdoc IPolicyService
250
253
  function activate(NftId policyNftId, Timestamp activateAt)
251
254
  external
252
255
  virtual
256
+ restricted()
253
257
  nonReentrant()
254
258
  {
255
- _checkNftType(policyNftId, POLICY());
256
-
257
- // check caller is registered product
258
- (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
259
- InstanceReader instanceReader = instance.getInstanceReader();
260
-
261
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
262
- policyInfo = _activate(policyNftId, policyInfo, activateAt);
259
+ // checks
260
+ (
261
+ IInstance instance,,
262
+ IPolicy.PolicyInfo memory policyInfo
263
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
263
264
 
265
+ // effects
266
+ policyInfo = PolicyServiceLib.activate(policyNftId, policyInfo, activateAt);
264
267
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
265
268
 
266
269
  // log policy activation before interactions with policy holder
267
270
  emit LogPolicyServicePolicyActivated(policyNftId, activateAt);
268
271
 
272
+ // interactions
269
273
  // callback to policy holder if applicable
270
274
  _policyHolderPolicyActivated(policyNftId, activateAt);
271
275
  }
272
276
 
277
+ /// @inheritdoc IPolicyService
278
+ function adjustActivation(
279
+ NftId policyNftId,
280
+ Timestamp newActivateAt
281
+ )
282
+ external
283
+ virtual
284
+ restricted()
285
+ nonReentrant()
286
+ {
287
+ // checks
288
+ (
289
+ IInstance instance,,
290
+ IPolicy.PolicyInfo memory policyInfo
291
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
292
+
293
+ if (policyInfo.activatedAt.eqz()) {
294
+ revert ErrorPolicyServicePolicyNotActivated(policyNftId);
295
+ }
296
+
297
+ if (newActivateAt < TimestampLib.blockTimestamp()) {
298
+ revert ErrorPolicyServicePolicyActivationTooEarly(policyNftId, TimestampLib.blockTimestamp(), newActivateAt);
299
+ }
300
+
301
+ if (newActivateAt > policyInfo.expiredAt) {
302
+ revert ErrorPolicyServicePolicyActivationTooLate(policyNftId, policyInfo.expiredAt, newActivateAt);
303
+ }
304
+
305
+ // effects
306
+ policyInfo.activatedAt = newActivateAt;
307
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
308
+
309
+ // log policy activation before interactions with policy holder
310
+ emit LogPolicyServicePolicyActivatedUpdated(policyNftId, newActivateAt);
311
+
312
+ // interactions
313
+ // callback to policy holder if applicable
314
+ _policyHolderPolicyActivated(policyNftId, newActivateAt);
315
+ }
316
+
273
317
 
274
318
  /// @inheritdoc IPolicyService
275
319
  function expire(
@@ -278,29 +322,26 @@ contract PolicyService is
278
322
  )
279
323
  external
280
324
  virtual
325
+ restricted()
281
326
  nonReentrant()
282
327
  returns (Timestamp expiredAt)
283
328
  {
284
- _checkNftType(policyNftId, POLICY());
285
-
286
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
287
-
288
- // check policy matches with calling product
289
- IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
290
- if(policyInfo.productNftId != productNftId) {
291
- revert ErrorPolicyServicePolicyProductMismatch(
292
- policyNftId,
293
- policyInfo.productNftId,
294
- productNftId);
295
- }
329
+ // checks
330
+ (
331
+ IInstance instance,,
332
+ IPolicy.PolicyInfo memory policyInfo
333
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
296
334
 
335
+ // more checks, effects + interactions
297
336
  return _expire(
298
337
  instance,
299
338
  policyNftId,
339
+ policyInfo,
300
340
  expireAt
301
341
  );
302
342
  }
303
343
 
344
+
304
345
  /// @inheritdoc IPolicyService
305
346
  function expirePolicy(
306
347
  IInstance instance,
@@ -309,102 +350,59 @@ contract PolicyService is
309
350
  )
310
351
  external
311
352
  virtual
353
+ restricted()
312
354
  nonReentrant()
313
355
  returns (Timestamp expiredAt)
314
356
  {
357
+ // checks
315
358
  _checkNftType(policyNftId, POLICY());
359
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(
360
+ policyNftId);
316
361
 
362
+ // more checks, effects + interactions
317
363
  return _expire(
318
364
  instance,
319
365
  policyNftId,
366
+ policyInfo,
320
367
  expireAt
321
368
  );
322
369
  }
323
370
 
324
- function _expire(
325
- IInstance instance,
326
- NftId policyNftId,
327
- Timestamp expireAt
328
- )
329
- internal
330
- returns (Timestamp expiredAt)
331
- {
332
- InstanceReader instanceReader = instance.getInstanceReader();
333
-
334
- // check policy is active
335
- StateId policyState = instanceReader.getPolicyState(policyNftId);
336
- IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
337
- if (!_policyHasBeenActivated(policyState, policyInfo)) {
338
- revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
339
- }
340
-
341
- // set return value to provided timestamp
342
- expiredAt = expireAt;
343
-
344
- // update expiredAt to current block timestamp if not set
345
- if (expiredAt.eqz()) {
346
- expiredAt = TimestampLib.blockTimestamp();
347
- }
348
-
349
- // check expiredAt represents a valid expiry time
350
- if (expiredAt >= policyInfo.expiredAt) {
351
- revert ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
352
- }
353
- if (expiredAt < TimestampLib.blockTimestamp()) {
354
- revert ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
355
- }
356
-
357
- // update policyInfo with new expiredAt timestamp
358
- Timestamp originalExpiredAt = policyInfo.expiredAt;
359
- policyInfo.expiredAt = expiredAt;
360
- instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
361
-
362
- emit LogPolicyServicePolicyExpirationUpdated(policyNftId, originalExpiredAt, expiredAt);
363
-
364
- // callback to policy holder if applicable
365
- _policyHolderPolicyExpired(policyNftId, expiredAt);
366
- }
367
-
368
371
 
372
+ /// @inheritdoc IPolicyService
369
373
  function close(
370
374
  NftId policyNftId
371
375
  )
372
376
  external
373
377
  virtual
378
+ restricted()
374
379
  nonReentrant()
375
380
  {
376
- _checkNftType(policyNftId, POLICY());
377
-
378
- (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
381
+ // checks
382
+ (
383
+ IInstance instance,
384
+ NftId productNftId,
385
+ IPolicy.PolicyInfo memory policyInfo
386
+ ) = _getAndVerifyCallerForPolicy(policyNftId);
379
387
  InstanceReader instanceReader = instance.getInstanceReader();
380
388
 
381
- // check that policy has been activated
382
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
383
- StateId policyState = instanceReader.getPolicyState(policyNftId);
384
- if (!_policyHasBeenActivated(policyState, policyInfo)) {
385
- revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
386
- }
387
-
388
- // check that policy has not already been closed
389
- if (policyInfo.closedAt.gtz()) {
390
- revert ErrorPolicyServicePolicyAlreadyClosed(policyNftId);
389
+ // check policy is in a closeable state
390
+ if (!PolicyServiceLib.policyIsCloseable(instanceReader, policyNftId)) {
391
+ revert ErrorPolicyServicePolicyNotCloseable(policyNftId);
391
392
  }
392
393
 
393
- // check that policy does not have any open claims
394
- if (policyInfo.openClaimsCount > 0) {
395
- revert ErrorPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
396
- }
394
+ // check that policy has been activated
395
+ RiskId riskId = policyInfo.riskId;
396
+ NftId bundleNftId = policyInfo.bundleNftId;
397
397
 
398
- // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
399
- // TODO consider to remove requirement for fully paid premiums altogether
400
- if (! instanceReader.getPremiumInfoState(policyNftId).eq(PAID())) {
398
+ if (instanceReader.getPremiumInfoState(policyNftId) != PAID()) {
401
399
  revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
402
400
  }
403
401
 
402
+ // effects
404
403
  // release (remaining) collateral that was blocked by policy
405
404
  _poolService.releaseCollateral(
406
405
  instance,
407
- address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
408
406
  policyNftId,
409
407
  policyInfo);
410
408
 
@@ -414,71 +412,42 @@ contract PolicyService is
414
412
  policyInfo.closedAt = TimestampLib.blockTimestamp();
415
413
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
416
414
 
415
+ // unlink policy from risk and bundle
416
+ NftId poolNftId = getRegistry().getParentNftId(bundleNftId);
417
+ instance.getRiskSet().unlinkPolicy(productNftId, riskId, policyNftId);
418
+ instance.getBundleSet().unlinkPolicy(poolNftId, bundleNftId, policyNftId);
419
+
417
420
  emit LogPolicyServicePolicyClosed(policyNftId);
418
421
  }
419
422
 
420
423
 
421
- /// @dev calculates the premium and updates all counters in the other services
422
- function _processPremium(
424
+ /// @dev shared functionality for expire() and policyExpire().
425
+ function _expire(
423
426
  IInstance instance,
424
- NftId applicationNftId,
425
- IPolicy.PolicyInfo memory applicationInfo,
426
- IPolicy.PremiumInfo memory premium
427
- )
428
- internal
429
- virtual
430
- {
431
- NftId productNftId = applicationInfo.productNftId;
432
- InstanceReader instanceReader = instance.getInstanceReader();
433
-
434
- // check if premium balance and allowance of policy holder is sufficient
435
- {
436
- TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
437
- address policyHolder = getRegistry().ownerOf(applicationNftId);
438
-
439
- _checkPremiumBalanceAndAllowance(
440
- tokenHandler.getToken(),
441
- address(tokenHandler),
442
- policyHolder,
443
- premium.premiumAmount);
444
- }
445
-
446
- // update the counters
447
- _processSale(
448
- instanceReader,
449
- instance.getInstanceStore(),
450
- productNftId,
451
- applicationInfo.bundleNftId,
452
- applicationInfo.referralId,
453
- premium);
454
- }
455
-
456
- function _activate(
457
- NftId policyNftId,
427
+ NftId policyNftId,
458
428
  IPolicy.PolicyInfo memory policyInfo,
459
- Timestamp activateAt
429
+ Timestamp expireAt
460
430
  )
461
431
  internal
462
- virtual
463
- view
464
- returns (IPolicy.PolicyInfo memory)
432
+ returns (Timestamp)
465
433
  {
466
- // fail if policy has already been activated and activateAt is different
467
- if(! policyInfo.activatedAt.eqz() && activateAt != policyInfo.activatedAt) {
468
- revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
469
- }
434
+ policyInfo = PolicyServiceLib.expire(
435
+ instance.getInstanceReader(),
436
+ policyNftId,
437
+ policyInfo,
438
+ expireAt);
470
439
 
471
- // ignore if policy has already been activated and activateAt is the same
472
- if (policyInfo.activatedAt == activateAt) {
473
- return policyInfo;
474
- }
440
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
475
441
 
476
- policyInfo.activatedAt = activateAt;
477
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
442
+ emit LogPolicyServicePolicyExpirationUpdated(policyNftId, policyInfo.expiredAt);
478
443
 
479
- return policyInfo;
444
+ // interactions
445
+ // callback to policy holder if applicable
446
+ _policyHolderPolicyExpired(policyNftId, policyInfo.expiredAt);
447
+ return policyInfo.expiredAt;
480
448
  }
481
449
 
450
+
482
451
  /// @dev update counters by calling the involved services
483
452
  function _processSale(
484
453
  InstanceReader instanceReader,
@@ -491,12 +460,12 @@ contract PolicyService is
491
460
  internal
492
461
  virtual
493
462
  {
494
- (NftId distributionNftId, , , ) = _getDistributionNftAndWallets(
463
+ (NftId distributionNftId,,,) = _getDistributionNftAndWallets(
495
464
  instanceReader,
496
465
  productNftId);
497
466
 
498
467
  // update product fees, distribution and pool fees
499
- _componentService.increaseProductFees(
468
+ _accountingService.increaseProductFees(
500
469
  instanceStore,
501
470
  productNftId,
502
471
  premium.productFeeVarAmount + premium.productFeeFixAmount);
@@ -517,7 +486,7 @@ contract PolicyService is
517
486
 
518
487
 
519
488
  /// @dev transfer the premium to the wallets the premium is distributed to
520
- function _transferFunds(
489
+ function _transferPremiumAmounts(
521
490
  InstanceReader instanceReader,
522
491
  NftId policyNftId,
523
492
  NftId productNftId,
@@ -526,7 +495,6 @@ contract PolicyService is
526
495
  internal
527
496
  virtual
528
497
  {
529
- TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
530
498
  address policyHolder = getRegistry().ownerOf(policyNftId);
531
499
 
532
500
  (
@@ -538,58 +506,20 @@ contract PolicyService is
538
506
  instanceReader,
539
507
  productNftId);
540
508
 
541
- tokenHandler.collectTokensToThreeRecipients(
542
- policyHolder,
543
- productWallet,
544
- premium.productFeeAmount,
545
- distributionWallet,
546
- premium.distributionFeeAndCommissionAmount,
547
- poolWallet,
548
- premium.poolPremiumAndFeeAmount);
549
- }
550
-
551
-
552
- /// @dev checks that policy has been collateralized and has been activated.
553
- /// does not check if policy has been expired or closed.
554
- function _policyHasBeenActivated(
555
- StateId policyState,
556
- IPolicy.PolicyInfo memory policyInfo
557
- )
558
- internal
559
- view
560
- returns (bool)
561
- {
562
- if (policyState != COLLATERALIZED()) { return false; }
563
- if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) { return false; }
564
- return true;
565
- }
566
-
509
+ // step 1: collect premium amount from policy holder
510
+ TokenHandler tokenHandler = instanceReader.getTokenHandler(productNftId);
511
+ tokenHandler.pullToken(policyHolder, premium.premiumAmount);
567
512
 
568
- /// @dev checks the balance and allowance of the policy holder
569
- function _checkPremiumBalanceAndAllowance(
570
- IERC20Metadata token,
571
- address tokenHandlerAddress,
572
- address policyHolder,
573
- Amount premiumAmount
574
- )
575
- internal
576
- virtual
577
- view
578
- {
579
- uint256 premium = premiumAmount.toInt();
580
- uint256 balance = token.balanceOf(policyHolder);
581
- uint256 allowance = token.allowance(policyHolder, tokenHandlerAddress);
582
-
583
- if (balance < premium) {
584
- revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premium, balance);
513
+ // step 2: push distribution fee to distribution wallet
514
+ if (premium.distributionFeeAndCommissionAmount.gtz()) {
515
+ tokenHandler.pushToken(distributionWallet, premium.distributionFeeAndCommissionAmount);
585
516
  }
586
517
 
587
- if (allowance < premium) {
588
- revert ErrorPolicyServiceAllowanceInsufficient(policyHolder, tokenHandlerAddress, premium, allowance);
518
+ // step 3: push pool fee, bundle fee and pool premium to pool wallet
519
+ if (premium.poolPremiumAndFeeAmount.gtz()) {
520
+ tokenHandler.pushToken(poolWallet, premium.poolPremiumAndFeeAmount);
589
521
  }
590
522
  }
591
-
592
-
593
523
  function _policyHolderPolicyActivated(
594
524
  NftId policyNftId,
595
525
  Timestamp activateAt
@@ -648,21 +578,6 @@ contract PolicyService is
648
578
  }
649
579
 
650
580
 
651
- function _getTokenHandler(
652
- InstanceReader instanceReader,
653
- NftId productNftId
654
- )
655
- internal
656
- virtual
657
- view
658
- returns (
659
- TokenHandler tokenHandler
660
- )
661
- {
662
- tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
663
- }
664
-
665
-
666
581
  function _getDistributionNftAndWallets(
667
582
  InstanceReader instanceReader,
668
583
  NftId productNftId
@@ -677,17 +592,45 @@ contract PolicyService is
677
592
  )
678
593
  {
679
594
  IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
680
- distributionNftId = productInfo.distributionNftId;
681
- distributionWallet = instanceReader.getComponentInfo(distributionNftId).wallet;
682
- poolWallet = instanceReader.getComponentInfo(productInfo.poolNftId).wallet;
683
- productWallet = instanceReader.getComponentInfo(productNftId).wallet;
595
+ productWallet = instanceReader.getComponentInfo(productNftId).tokenHandler.getWallet();
596
+ poolWallet = instanceReader.getComponentInfo(productInfo.poolNftId).tokenHandler.getWallet();
597
+
598
+ if (productInfo.hasDistribution) {
599
+ distributionNftId = productInfo.distributionNftId;
600
+ distributionWallet = instanceReader.getComponentInfo(distributionNftId).tokenHandler.getWallet();
601
+ }
684
602
  }
685
603
 
686
604
 
687
- function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
688
- IRegistry.ObjectInfo memory productInfo;
689
- (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
690
- product = Product(productInfo.objectAddress);
605
+ function _getAndVerifyCallerForPolicy(NftId policyNftId)
606
+ internal
607
+ virtual
608
+ view
609
+ returns (
610
+ IInstance instance,
611
+ NftId productNftId,
612
+ IPolicy.PolicyInfo memory policyInfo
613
+ )
614
+ {
615
+ (
616
+ IRegistry.ObjectInfo memory productInfo,
617
+ address instanceAddress
618
+ ) = ContractLib.getAndVerifyComponent(
619
+ getRegistry(),
620
+ msg.sender, // caller contract
621
+ PRODUCT(), // caller must be product
622
+ true); // only active caller
623
+
624
+ productNftId = productInfo.nftId; // calling product nft id
625
+ instance = IInstance(instanceAddress);
626
+ policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
627
+
628
+ if (policyInfo.productNftId != productNftId) {
629
+ revert ErrorPolicyServicePolicyProductMismatch(
630
+ policyNftId,
631
+ productNftId,
632
+ policyInfo.productNftId);
633
+ }
691
634
  }
692
635
 
693
636