@etherisc/gif-next 0.0.2-d87995e-298 → 0.0.2-d8ddca8-422

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