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

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 (527) hide show
  1. package/README.md +51 -5
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1293 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +414 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/{instance/module/ISetup.sol/ISetup.json → authorization/IAccess.sol/IAccess.json} +2 -2
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1060 -0
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +295 -0
  14. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +167 -0
  16. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  18. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +253 -0
  20. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  21. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1415 -0
  22. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +470 -0
  24. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +230 -545
  26. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +315 -432
  28. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +120 -109
  30. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +214 -290
  32. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +215 -94
  34. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  35. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  36. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1551 -0
  38. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
  40. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2090 -0
  42. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  44. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1484 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1244 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1605 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2108 -0
  54. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  55. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  56. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +113 -97
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +171 -85
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +120 -207
  62. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1653 -0
  64. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +561 -0
  66. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +850 -366
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +245 -229
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +106 -79
  72. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  73. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1212 -381
  74. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  75. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  76. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  78. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  80. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  81. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +223 -0
  82. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  83. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  84. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +8 -116
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  89. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  90. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  91. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  92. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  93. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  94. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1052 -0
  95. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  96. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +478 -0
  97. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  98. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  99. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  100. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +783 -0
  101. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  102. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +709 -0
  103. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  104. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +920 -0
  105. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  106. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +966 -0
  107. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  108. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +722 -0
  109. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  110. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1312 -0
  111. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  112. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +470 -0
  113. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  114. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +494 -317
  115. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  116. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +186 -87
  117. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  118. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +256 -31
  119. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  120. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +235 -375
  121. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  122. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +460 -254
  123. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  124. package/artifacts/contracts/pool/Pool.sol/Pool.json +269 -565
  125. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  126. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +572 -569
  127. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  128. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +112 -93
  129. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  130. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +117 -264
  131. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  132. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +99 -76
  133. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  134. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1186 -0
  135. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  136. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +470 -0
  137. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  138. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +329 -284
  139. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  140. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +141 -90
  141. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +54 -1
  143. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  144. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +196 -7
  145. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  146. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +354 -80
  147. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  148. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +154 -86
  149. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  150. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +355 -209
  151. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  152. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +44 -57
  153. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  154. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +418 -397
  155. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  156. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +124 -121
  157. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  158. package/artifacts/contracts/product/PricingService.sol/PricingService.json +233 -330
  159. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +128 -93
  161. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  162. package/artifacts/contracts/product/Product.sol/Product.json +377 -431
  163. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  164. package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
  165. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  166. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
  167. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  168. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  169. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  170. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +391 -45
  171. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  172. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +123 -64
  173. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  174. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +0 -18
  175. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  176. package/artifacts/contracts/registry/Registry.sol/Registry.json +789 -60
  177. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  178. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1886 -0
  179. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  180. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +179 -185
  181. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  182. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +86 -74
  183. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  184. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +205 -0
  185. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  186. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1067 -0
  187. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  188. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +272 -0
  189. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  190. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +314 -138
  191. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  192. package/artifacts/contracts/shared/Component.sol/Component.json +136 -271
  193. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  194. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1335 -198
  195. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  196. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +814 -0
  197. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  198. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +474 -0
  199. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  200. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  201. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  202. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +105 -114
  203. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  204. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1335 -0
  205. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  206. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +718 -0
  207. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  208. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +46 -14
  209. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  210. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +35 -4
  211. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  212. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +23 -1
  213. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  214. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +16 -30
  215. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  216. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +36 -1
  217. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  218. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  219. package/artifacts/contracts/shared/IService.sol/IService.json +49 -1
  220. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  221. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  222. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  223. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +842 -0
  224. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  225. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +538 -0
  226. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  227. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +174 -0
  228. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  229. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  230. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  231. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +26 -55
  232. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  233. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +20 -124
  234. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  235. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +68 -85
  236. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  237. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  238. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  239. package/artifacts/contracts/shared/Service.sol/Service.json +55 -101
  240. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  241. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +362 -7
  242. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  243. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  244. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  245. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1460 -0
  246. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  247. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +573 -53
  248. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  249. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +440 -0
  250. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  251. package/artifacts/contracts/staking/Staking.sol/Staking.json +1901 -0
  252. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  253. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +205 -0
  254. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  255. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +776 -0
  256. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  257. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +587 -0
  258. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  259. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +658 -176
  260. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  261. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +109 -66
  262. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  263. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2283 -0
  264. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  265. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +607 -0
  266. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  267. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  268. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Amount.sol/AmountLib.json +121 -4
  270. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +53 -2
  272. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  274. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  276. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/Fee.sol/FeeLib.json +39 -34
  278. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  279. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  280. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +47 -4
  282. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  283. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  284. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +149 -2
  286. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  288. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  290. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  291. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  292. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  294. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +219 -6
  296. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -2
  298. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  299. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  300. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  301. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  302. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  304. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  305. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  306. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +36 -4
  308. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  310. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  311. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +71 -2
  312. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  314. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  316. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  317. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  318. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  319. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +602 -0
  320. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  321. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  322. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  323. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  324. package/contracts/authorization/AccessAdmin.sol +596 -0
  325. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  326. package/contracts/authorization/Authorization.sol +289 -0
  327. package/contracts/authorization/IAccess.sol +49 -0
  328. package/contracts/authorization/IAccessAdmin.sol +137 -0
  329. package/contracts/authorization/IAuthorization.sol +60 -0
  330. package/contracts/authorization/IServiceAuthorization.sol +40 -0
  331. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  332. package/contracts/authorization/ServiceAuthorization.sol +106 -0
  333. package/contracts/distribution/BasicDistribution.sol +139 -0
  334. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  335. package/contracts/distribution/Distribution.sol +154 -154
  336. package/contracts/distribution/DistributionService.sol +175 -172
  337. package/contracts/distribution/DistributionServiceManager.sol +8 -23
  338. package/contracts/distribution/IDistributionComponent.sol +28 -47
  339. package/contracts/distribution/IDistributionService.sol +24 -10
  340. package/contracts/examples/fire/DamageLevel.sol +59 -0
  341. package/contracts/examples/fire/FirePool.sol +75 -0
  342. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  343. package/contracts/examples/fire/FireProduct.sol +412 -0
  344. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  345. package/contracts/examples/fire/FireUSD.sol +26 -0
  346. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  347. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  348. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  349. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  350. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  351. package/contracts/instance/IInstance.sol +33 -44
  352. package/contracts/instance/IInstanceService.sol +32 -33
  353. package/contracts/instance/Instance.sol +131 -122
  354. package/contracts/instance/InstanceAdmin.sol +277 -0
  355. package/contracts/instance/InstanceAuthorizationV3.sol +194 -0
  356. package/contracts/instance/InstanceReader.sol +194 -67
  357. package/contracts/instance/InstanceService.sol +243 -134
  358. package/contracts/instance/InstanceServiceManager.sol +8 -13
  359. package/contracts/instance/InstanceStore.sol +142 -66
  360. package/contracts/instance/base/BalanceStore.sol +123 -0
  361. package/contracts/instance/base/Cloneable.sol +2 -25
  362. package/contracts/instance/base/ObjectCounter.sol +21 -0
  363. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  364. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +11 -14
  365. package/contracts/instance/module/IAccess.sol +2 -10
  366. package/contracts/instance/module/IBundle.sol +1 -4
  367. package/contracts/instance/module/IComponents.sol +21 -11
  368. package/contracts/instance/module/IDistribution.sol +0 -1
  369. package/contracts/instance/module/IPolicy.sol +31 -25
  370. package/contracts/mock/Dip.sol +26 -0
  371. package/contracts/oracle/BasicOracle.sol +47 -0
  372. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  373. package/contracts/oracle/IOracle.sol +36 -0
  374. package/contracts/oracle/IOracleComponent.sol +33 -0
  375. package/contracts/oracle/IOracleService.sol +66 -0
  376. package/contracts/oracle/Oracle.sol +156 -0
  377. package/contracts/oracle/OracleService.sol +291 -0
  378. package/contracts/oracle/OracleServiceManager.sol +39 -0
  379. package/contracts/pool/BasicPool.sol +154 -0
  380. package/contracts/pool/BasicPoolAuthorization.sol +57 -0
  381. package/contracts/pool/BundleService.sol +278 -201
  382. package/contracts/pool/BundleServiceManager.sol +8 -11
  383. package/contracts/pool/IBundleService.sol +44 -19
  384. package/contracts/pool/IPoolComponent.sol +27 -73
  385. package/contracts/pool/IPoolService.sol +93 -40
  386. package/contracts/pool/Pool.sol +186 -153
  387. package/contracts/pool/PoolService.sol +357 -236
  388. package/contracts/pool/PoolServiceManager.sol +6 -9
  389. package/contracts/product/ApplicationService.sol +148 -84
  390. package/contracts/product/ApplicationServiceManager.sol +6 -6
  391. package/contracts/product/BasicProduct.sol +53 -0
  392. package/contracts/product/BasicProductAuthorization.sol +42 -0
  393. package/contracts/product/ClaimService.sol +293 -145
  394. package/contracts/product/ClaimServiceManager.sol +6 -6
  395. package/contracts/product/IApplicationService.sol +2 -1
  396. package/contracts/product/IClaimService.sol +35 -5
  397. package/contracts/product/IPolicyService.sol +38 -38
  398. package/contracts/product/IPricingService.sol +13 -11
  399. package/contracts/product/IProductComponent.sol +28 -10
  400. package/contracts/product/{IProductService.sol → IRiskService.sol} +2 -9
  401. package/contracts/product/PolicyService.sol +504 -199
  402. package/contracts/product/PolicyServiceManager.sol +6 -9
  403. package/contracts/product/PricingService.sol +103 -82
  404. package/contracts/product/PricingServiceManager.sol +5 -8
  405. package/contracts/product/Product.sol +222 -146
  406. package/contracts/product/RiskService.sol +96 -0
  407. package/contracts/product/RiskServiceManager.sol +39 -0
  408. package/contracts/registry/ChainNft.sol +72 -36
  409. package/contracts/registry/IRegistry.sol +85 -22
  410. package/contracts/registry/IRegistryService.sol +10 -6
  411. package/contracts/registry/ITransferInterceptor.sol +0 -1
  412. package/contracts/registry/Registry.sol +433 -187
  413. package/contracts/registry/RegistryAdmin.sol +448 -0
  414. package/contracts/registry/RegistryService.sol +76 -66
  415. package/contracts/registry/RegistryServiceManager.sol +6 -25
  416. package/contracts/registry/ReleaseLifecycle.sol +30 -0
  417. package/contracts/registry/ReleaseRegistry.sol +501 -0
  418. package/contracts/registry/ServiceAuthorizationV3.sol +194 -0
  419. package/contracts/registry/TokenRegistry.sol +261 -62
  420. package/contracts/shared/Component.sol +153 -148
  421. package/contracts/shared/ComponentService.sol +688 -94
  422. package/contracts/shared/ComponentServiceManager.sol +38 -0
  423. package/contracts/shared/ComponentVerifyingService.sol +126 -0
  424. package/contracts/shared/ContractLib.sol +38 -0
  425. package/contracts/shared/IComponent.sol +25 -41
  426. package/contracts/shared/IComponentService.sol +120 -0
  427. package/contracts/shared/IInstanceLinkedComponent.sol +41 -0
  428. package/contracts/{instance/base → shared}/IKeyValueStore.sol +7 -6
  429. package/contracts/{instance/base → shared}/ILifecycle.sol +5 -4
  430. package/contracts/shared/INftOwnable.sol +3 -1
  431. package/contracts/shared/IPolicyHolder.sol +12 -17
  432. package/contracts/shared/IRegisterable.sol +11 -0
  433. package/contracts/shared/IService.sol +9 -2
  434. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +4 -4
  435. package/contracts/shared/InstanceLinkedComponent.sol +213 -0
  436. package/contracts/{instance/base → shared}/KeyValueStore.sol +36 -74
  437. package/contracts/shared/Lifecycle.sol +88 -0
  438. package/contracts/shared/NftIdSet.sol +65 -0
  439. package/contracts/shared/NftOwnable.sol +27 -22
  440. package/contracts/shared/PolicyHolder.sol +18 -50
  441. package/contracts/shared/Registerable.sol +21 -11
  442. package/contracts/shared/RegistryLinked.sol +3 -2
  443. package/contracts/shared/Service.sol +48 -36
  444. package/contracts/shared/TokenHandler.sol +112 -8
  445. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  446. package/contracts/staking/IStaking.sol +168 -0
  447. package/contracts/staking/IStakingService.sol +103 -48
  448. package/contracts/staking/StakeManagerLib.sol +224 -0
  449. package/contracts/staking/Staking.sol +497 -0
  450. package/contracts/staking/StakingLifecycle.sol +23 -0
  451. package/contracts/staking/StakingManager.sol +52 -0
  452. package/contracts/staking/StakingReader.sol +190 -0
  453. package/contracts/staking/StakingService.sol +273 -49
  454. package/contracts/staking/StakingServiceManager.sol +11 -7
  455. package/contracts/staking/StakingStore.sol +605 -0
  456. package/contracts/staking/TargetManagerLib.sol +211 -0
  457. package/contracts/type/AddressSet.sol +1 -1
  458. package/contracts/type/Amount.sol +44 -3
  459. package/contracts/type/Blocknumber.sol +26 -3
  460. package/contracts/type/ClaimId.sol +6 -1
  461. package/contracts/type/Fee.sol +17 -16
  462. package/contracts/type/NftId.sol +15 -16
  463. package/contracts/type/NftIdSet.sol +1 -1
  464. package/contracts/type/ObjectType.sol +176 -62
  465. package/contracts/type/PayoutId.sol +10 -10
  466. package/contracts/type/Referral.sol +2 -1
  467. package/contracts/type/RequestId.sol +75 -0
  468. package/contracts/type/RiskId.sol +16 -2
  469. package/contracts/type/RoleId.sol +98 -75
  470. package/contracts/type/Seconds.sol +48 -1
  471. package/contracts/type/Selector.sol +102 -0
  472. package/contracts/type/StateId.sol +41 -2
  473. package/contracts/type/String.sol +53 -0
  474. package/contracts/type/Timestamp.sol +17 -3
  475. package/contracts/type/UFixed.sol +38 -9
  476. package/contracts/type/Version.sol +4 -2
  477. package/contracts/{shared → upgradeability}/ProxyManager.sol +76 -39
  478. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  479. package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
  480. package/package.json +9 -5
  481. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  482. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -778
  483. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  484. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1348
  485. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  486. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -124
  487. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  488. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  489. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  490. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -581
  491. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  492. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -194
  493. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  494. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -256
  495. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  496. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  497. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  498. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  499. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  500. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -864
  501. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  502. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -679
  503. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  504. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -238
  505. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  506. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -846
  507. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  508. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  509. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  510. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  511. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  512. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  513. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -598
  514. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  515. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  516. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  517. package/contracts/instance/InstanceAccessManager.sol +0 -543
  518. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -308
  519. package/contracts/instance/base/Lifecycle.sol +0 -121
  520. package/contracts/instance/module/ISetup.sol +0 -33
  521. package/contracts/instance/module/ITreasury.sol +0 -23
  522. package/contracts/product/ProductService.sol +0 -212
  523. package/contracts/product/ProductServiceManager.sol +0 -42
  524. package/contracts/registry/RegistryAccessManager.sol +0 -132
  525. package/contracts/registry/ReleaseManager.sol +0 -382
  526. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
  527. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
@@ -1,58 +1,51 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
3
5
 
4
6
  import {IRegistry} from "../registry/IRegistry.sol";
5
7
  import {Product} from "./Product.sol";
6
8
  import {IComponents} from "../instance/module/IComponents.sol";
7
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
8
9
  import {IInstance} from "../instance/IInstance.sol";
9
10
  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
- import {ISetup} from "../instance/module/ISetup.sol";
14
11
 
15
12
  import {TokenHandler} from "../shared/TokenHandler.sol";
16
13
 
17
14
  import {Amount, AmountLib} from "../type/Amount.sol";
18
- import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
19
15
  import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
20
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
21
- import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
22
- import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../type/StateId.sol";
16
+ import {ObjectType, APPLICATION, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
17
+ import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED, PAID} from "../type/StateId.sol";
23
18
  import {NftId, NftIdLib} from "../type/NftId.sol";
24
- import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
19
+ import {ReferralId} from "../type/Referral.sol";
25
20
  import {StateId} from "../type/StateId.sol";
26
21
  import {VersionPart} from "../type/Version.sol";
27
22
 
28
- import {ComponentService} from "../shared/ComponentService.sol";
23
+ import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
24
+ import {ContractLib} from "../shared/ContractLib.sol";
29
25
  import {IApplicationService} from "./IApplicationService.sol";
30
26
  import {IBundleService} from "../pool/IBundleService.sol";
31
27
  import {IClaimService} from "./IClaimService.sol";
28
+ import {IComponentService} from "../shared/IComponentService.sol";
32
29
  import {IDistributionService} from "../distribution/IDistributionService.sol";
33
30
  import {InstanceReader} from "../instance/InstanceReader.sol";
31
+ import {InstanceStore} from "../instance/InstanceStore.sol";
32
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
34
33
  import {IPolicyService} from "./IPolicyService.sol";
35
34
  import {IPoolService} from "../pool/IPoolService.sol";
36
35
  import {IPricingService} from "./IPricingService.sol";
37
- import {IService} from "../shared/IService.sol";
38
- import {Service} from "../shared/Service.sol";
39
36
 
40
37
  contract PolicyService is
41
- ComponentService,
38
+ ComponentVerifyingService,
42
39
  IPolicyService
43
40
  {
44
- using NftIdLib for NftId;
45
- using TimestampLib for Timestamp;
46
-
47
41
  IApplicationService internal _applicationService;
42
+ IComponentService internal _componentService;
48
43
  IBundleService internal _bundleService;
49
44
  IClaimService internal _claimService;
50
45
  IDistributionService internal _distributionService;
51
46
  IPoolService internal _poolService;
52
47
  IPricingService internal _pricingService;
53
48
 
54
- event LogProductServiceSender(address sender);
55
-
56
49
  function _initialize(
57
50
  address owner,
58
51
  bytes memory data
@@ -62,60 +55,77 @@ contract PolicyService is
62
55
  initializer
63
56
  {
64
57
  (
65
- address registryAddress,,
66
- //address managerAddress
58
+ address registryAddress,
67
59
  address authority
68
- ) = abi.decode(data, (address, address, address));
60
+ ) = abi.decode(data, (address, address));
69
61
 
70
- initializeService(registryAddress, authority, owner);
62
+ _initializeService(registryAddress, authority, owner);
71
63
 
72
64
  VersionPart majorVersion = getVersion().toMajorPart();
73
- _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
65
+ _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
74
66
  _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
67
+ _componentService = IComponentService(getRegistry().getServiceAddress(COMPONENT(), majorVersion));
75
68
  _claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
76
- _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
69
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
77
70
  _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
78
71
  _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
79
72
 
80
- registerInterface(type(IPolicyService).interfaceId);
81
- }
82
-
83
-
84
- function getDomain() public pure override returns(ObjectType) {
85
- return POLICY();
86
- }
87
-
88
-
89
- function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
90
- IRegistry.ObjectInfo memory productInfo;
91
- (, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
92
- product = Product(productInfo.objectAddress);
73
+ _registerInterface(type(IPolicyService).interfaceId);
93
74
  }
94
75
 
95
76
 
96
77
  function decline(
97
- NftId policyNftId
78
+ NftId applicationNftId // = policyNftId
98
79
  )
99
80
  external
100
- override
81
+ virtual
82
+ nonReentrant()
101
83
  {
102
- revert();
84
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
85
+ InstanceReader instanceReader = instance.getInstanceReader();
86
+
87
+ // check policy is in state applied
88
+ if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
89
+ revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
90
+ }
91
+
92
+ // check policy matches with calling product
93
+ IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
94
+ if(applicationInfo.productNftId != productNftId) {
95
+ revert ErrorPolicyServicePolicyProductMismatch(
96
+ applicationNftId,
97
+ applicationInfo.productNftId,
98
+ productNftId);
99
+ }
100
+
101
+
102
+ // store updated policy info
103
+ instance.getInstanceStore().updatePolicyState(
104
+ applicationNftId,
105
+ DECLINED());
106
+
107
+ emit LogPolicyServicePolicyDeclined(applicationNftId);
103
108
  }
104
109
 
105
110
 
106
- /// @dev underwites application which includes the locking of the required collateral from the pool.
107
- function collateralize(
111
+ /// @inheritdoc IPolicyService
112
+ function createPolicy(
108
113
  NftId applicationNftId, // = policyNftId
109
- bool requirePremiumPayment,
110
114
  Timestamp activateAt
111
115
  )
112
116
  external
113
- virtual override
117
+ virtual
118
+ nonReentrant()
114
119
  {
115
120
  // check caller is registered product
116
- (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
121
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
117
122
  InstanceReader instanceReader = instance.getInstanceReader();
118
123
 
124
+ // check policy is in state applied
125
+ if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
126
+ revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
127
+ }
128
+
119
129
  // check policy matches with calling product
120
130
  IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
121
131
  if(applicationInfo.productNftId != productNftId) {
@@ -124,255 +134,550 @@ contract PolicyService is
124
134
  applicationInfo.productNftId,
125
135
  productNftId);
126
136
  }
127
-
128
- // check policy is in state applied
129
- if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
130
- revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
131
- }
132
137
 
133
- StateId newPolicyState = COLLATERALIZED();
138
+ // actual collateralizaion
139
+ _poolService.lockCollateral(
140
+ instance,
141
+ address(instanceReader.getComponentInfo(productNftId).token),
142
+ productNftId,
143
+ applicationNftId,
144
+ applicationInfo.bundleNftId,
145
+ applicationInfo.sumInsuredAmount);
134
146
 
135
147
  // optional activation of policy
136
148
  if(activateAt > zeroTimestamp()) {
137
- newPolicyState = ACTIVE();
138
- applicationInfo.activatedAt = activateAt;
139
- applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
149
+ applicationInfo = _activate(
150
+ applicationNftId,
151
+ applicationInfo,
152
+ activateAt);
140
153
  }
141
154
 
142
- // lock bundle collateral
143
- Amount netPremiumAmount = AmountLib.zero(); // > 0 if immediate premium payment
155
+ // update policy and set state to collateralized
156
+ instance.getInstanceStore().updatePolicy(
157
+ applicationNftId,
158
+ applicationInfo,
159
+ COLLATERALIZED());
144
160
 
145
- // optional collection of premium
146
- if(requirePremiumPayment) {
147
- netPremiumAmount = _processPremiumByTreasury(
148
- instance,
149
- applicationNftId,
150
- applicationInfo.premiumAmount);
161
+ // calculate and store premium
162
+ IPolicy.PremiumInfo memory premium = _pricingService.calculatePremium(
163
+ productNftId,
164
+ applicationInfo.riskId,
165
+ applicationInfo.sumInsuredAmount,
166
+ applicationInfo.lifetime,
167
+ applicationInfo.applicationData,
168
+ applicationInfo.bundleNftId,
169
+ applicationInfo.referralId);
170
+
171
+ instance.getInstanceStore().createPremium(
172
+ applicationNftId,
173
+ premium);
174
+
175
+ // update referral counter
176
+ {
177
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
151
178
 
152
- applicationInfo.premiumPaidAmount = applicationInfo.premiumPaidAmount + applicationInfo.premiumAmount;
179
+ if (! productInfo.distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
180
+ _distributionService.processReferral(
181
+ productInfo.distributionNftId,
182
+ applicationInfo.referralId);
183
+ }
153
184
  }
154
185
 
155
- // store updated policy info
156
- instance.getInstanceStore().updatePolicy(applicationNftId, applicationInfo, newPolicyState);
186
+ // log policy creation before interactions with token and policy holder
187
+ emit LogPolicyServicePolicyCreated(applicationNftId, premium.premiumAmount, activateAt);
157
188
 
158
- // lock collateral and update pool and bundle book keeping
159
- // pool retention level: fraction of sum insured that product will cover from pool funds directly
160
- // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
161
- // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
162
- // might also call pool component (for isVerifyingApplications pools)
163
- _poolService.lockCollateral(
164
- instance,
165
- productNftId,
166
- applicationNftId,
167
- applicationInfo,
168
- netPremiumAmount); // for pool book keeping (fee + additional capital)
189
+ // TODO add calling pool contract if it needs to validate application
169
190
 
170
- // TODO: add logging
191
+ // callback to policy holder if applicable
192
+ _policyHolderPolicyActivated(applicationNftId, activateAt);
171
193
  }
172
194
 
173
195
 
174
- function calculateRequiredCollateral(
175
- UFixed collateralizationLevel,
176
- Amount sumInsuredAmount
177
- )
178
- public
179
- pure
180
- virtual
181
- returns(Amount collateralAmount)
182
- {
183
- UFixed collateralUFixed = collateralizationLevel * sumInsuredAmount.toUFixed();
184
- return AmountLib.toAmount(collateralUFixed.toInt());
185
- }
186
-
196
+ /// @inheritdoc IPolicyService
187
197
  function collectPremium(
188
198
  NftId policyNftId,
189
199
  Timestamp activateAt
190
200
  )
191
201
  external
192
202
  virtual
203
+ nonReentrant()
193
204
  {
194
205
  // check caller is registered product
195
- (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
206
+ (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
196
207
  InstanceReader instanceReader = instance.getInstanceReader();
197
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
208
+ StateId stateId = instanceReader.getPolicyState(policyNftId);
198
209
 
199
- if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
200
- revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
210
+ // check policy is in state collateralized or active
211
+ if (!(stateId == COLLATERALIZED())) {
212
+ revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
201
213
  }
202
214
 
203
- Amount unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
215
+ // check if premium is already collected
216
+ if (instanceReader.getPremiumInfoState(policyNftId) == PAID()) {
217
+ revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId);
218
+ }
204
219
 
205
- Amount netPremiumAmount = _processPremiumByTreasury(
206
- instance,
207
- policyNftId,
208
- unpaidPremiumAmount);
220
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
221
+ IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId);
222
+
223
+ _processPremium(
224
+ instance,
225
+ policyNftId,
226
+ policyInfo,
227
+ premium);
209
228
 
210
- policyInfo.premiumPaidAmount = policyInfo.premiumPaidAmount + unpaidPremiumAmount;
229
+ // optionally activate policy
230
+ if(activateAt.gtz()) {
231
+ policyInfo = _activate(policyNftId, policyInfo, activateAt);
232
+ }
211
233
 
212
- _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
213
234
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
235
+ instance.getInstanceStore().updatePremiumState(policyNftId, PAID());
214
236
 
215
- if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
216
- activate(policyNftId, activateAt);
217
- }
237
+ // log premium collection before interactions with token
238
+ emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
218
239
 
219
- // TODO: add logging
240
+ _transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
220
241
  }
221
242
 
222
- function activate(NftId policyNftId, Timestamp activateAt) public override {
243
+ /// @inheritdoc IPolicyService
244
+ function activate(NftId policyNftId, Timestamp activateAt)
245
+ external
246
+ virtual
247
+ nonReentrant()
248
+ {
223
249
  // check caller is registered product
224
- (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
250
+ (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
225
251
  InstanceReader instanceReader = instance.getInstanceReader();
226
252
 
227
253
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
254
+ policyInfo = _activate(policyNftId, policyInfo, activateAt);
228
255
 
229
- require(
230
- policyInfo.activatedAt.eqz(),
231
- "ERROR:PRS-020:ALREADY_ACTIVATED");
232
-
233
- policyInfo.activatedAt = activateAt;
234
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
256
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
235
257
 
236
- instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
258
+ // log policy activation before interactions with policy holder
259
+ emit LogPolicyServicePolicyActivated(policyNftId, activateAt);
237
260
 
238
- // TODO: add logging
261
+ // callback to policy holder if applicable
262
+ _policyHolderPolicyActivated(policyNftId, activateAt);
239
263
  }
240
264
 
241
265
 
266
+ /// @inheritdoc IPolicyService
242
267
  function expire(
243
- NftId policyNftId
268
+ NftId policyNftId,
269
+ Timestamp expireAt
244
270
  )
245
271
  external
246
- override
247
- // solhint-disable-next-line no-empty-blocks
272
+ virtual
273
+ nonReentrant()
274
+ returns (Timestamp expiredAt)
248
275
  {
276
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
249
277
 
278
+ // check policy matches with calling product
279
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
280
+ if(policyInfo.productNftId != productNftId) {
281
+ revert ErrorPolicyServicePolicyProductMismatch(
282
+ policyNftId,
283
+ policyInfo.productNftId,
284
+ productNftId);
285
+ }
286
+
287
+ return _expire(
288
+ instance,
289
+ policyNftId,
290
+ expireAt
291
+ );
250
292
  }
251
293
 
252
- function close(
253
- NftId policyNftId
294
+ /// @inheritdoc IPolicyService
295
+ function expirePolicy(
296
+ IInstance instance,
297
+ NftId policyNftId,
298
+ Timestamp expireAt
254
299
  )
255
- external
256
- override
300
+ external
301
+ virtual
302
+ nonReentrant()
303
+ returns (Timestamp expiredAt)
304
+ {
305
+ return _expire(
306
+ instance,
307
+ policyNftId,
308
+ expireAt
309
+ );
310
+ }
311
+
312
+ function _expire(
313
+ IInstance instance,
314
+ NftId policyNftId,
315
+ Timestamp expireAt
316
+ )
317
+ internal
318
+ returns (Timestamp expiredAt)
257
319
  {
258
- (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
259
320
  InstanceReader instanceReader = instance.getInstanceReader();
321
+
322
+ // check policy is active
323
+ StateId policyState = instanceReader.getPolicyState(policyNftId);
324
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
325
+ if (!_policyHasBeenActivated(policyState, policyInfo)) {
326
+ revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
327
+ }
260
328
 
261
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
329
+ // set return value to provided timestamp
330
+ expiredAt = expireAt;
262
331
 
263
- if (policyInfo.activatedAt.eqz()) {
264
- revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
332
+ // update expiredAt to current block timestamp if not set
333
+ if (expiredAt.eqz()) {
334
+ expiredAt = TimestampLib.blockTimestamp();
265
335
  }
266
336
 
267
- StateId state = instanceReader.getPolicyState(policyNftId);
268
- if (state != ACTIVE()) {
269
- revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
337
+ // check expiredAt represents a valid expiry time
338
+ if (expiredAt >= policyInfo.expiredAt) {
339
+ revert ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
340
+ }
341
+ if (expiredAt < TimestampLib.blockTimestamp()) {
342
+ revert ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
270
343
  }
271
344
 
272
- if (policyInfo.closedAt.gtz()) {
273
- revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
345
+ // update policyInfo with new expiredAt timestamp
346
+ Timestamp originalExpiredAt = policyInfo.expiredAt;
347
+ policyInfo.expiredAt = expiredAt;
348
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
349
+
350
+ emit LogPolicyServicePolicyExpirationUpdated(policyNftId, originalExpiredAt, expiredAt);
351
+
352
+ // callback to policy holder if applicable
353
+ _policyHolderPolicyExpired(policyNftId, expiredAt);
354
+ }
355
+
356
+
357
+ function close(
358
+ NftId policyNftId
359
+ )
360
+ external
361
+ virtual
362
+ nonReentrant()
363
+ {
364
+ (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
365
+ InstanceReader instanceReader = instance.getInstanceReader();
366
+
367
+ // check that policy has been activated
368
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
369
+ StateId policyState = instanceReader.getPolicyState(policyNftId);
370
+ if (!_policyHasBeenActivated(policyState, policyInfo)) {
371
+ revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
274
372
  }
275
373
 
276
- // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
277
- if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
278
- revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
374
+ // check that policy has not already been closed
375
+ if (policyInfo.closedAt.gtz()) {
376
+ revert ErrorPolicyServicePolicyAlreadyClosed(policyNftId);
279
377
  }
280
378
 
379
+ // check that policy does not have any open claims
281
380
  if (policyInfo.openClaimsCount > 0) {
282
- revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
381
+ revert ErrorPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
283
382
  }
284
383
 
285
- policyInfo.closedAt = TimestampLib.blockTimestamp();
384
+ // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
385
+ // TODO consider to remove requirement for fully paid premiums altogether
386
+ if (! instanceReader.getPremiumInfoState(policyNftId).eq(PAID())) {
387
+ revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
388
+ }
286
389
 
390
+ // release (remaining) collateral that was blocked by policy
287
391
  _poolService.releaseCollateral(
288
392
  instance,
393
+ address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
289
394
  policyNftId,
290
395
  policyInfo);
291
396
 
397
+ // TODO consider to also set expiredAt to current block timestamp if that timestamp is still in the futue
398
+
399
+ // update policy state to closed
400
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
292
401
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
402
+
403
+ emit LogPolicyServicePolicyClosed(policyNftId);
293
404
  }
294
405
 
295
406
 
296
- function _processPremiumByTreasury(
407
+ /// @dev calculates the premium and updates all counters in the other services
408
+ function _processPremium(
297
409
  IInstance instance,
298
- NftId policyNftId,
299
- Amount premiumExpectedAmount
410
+ NftId applicationNftId,
411
+ IPolicy.PolicyInfo memory applicationInfo,
412
+ IPolicy.PremiumInfo memory premium
300
413
  )
301
414
  internal
302
- returns (Amount netPremiumAmount)
415
+ virtual
303
416
  {
304
- // process token transfer(s)
305
- if(premiumExpectedAmount.eqz()) {
306
- return AmountLib.zero();
417
+ NftId productNftId = applicationInfo.productNftId;
418
+ InstanceReader instanceReader = instance.getInstanceReader();
419
+
420
+ // check if premium balance and allowance of policy holder is sufficient
421
+ {
422
+ TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
423
+ address policyHolder = getRegistry().ownerOf(applicationNftId);
424
+
425
+ _checkPremiumBalanceAndAllowance(
426
+ tokenHandler.getToken(),
427
+ address(tokenHandler),
428
+ policyHolder,
429
+ premium.premiumAmount);
307
430
  }
308
431
 
309
- NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
310
- IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
311
- IPolicy.Premium memory premium = _pricingService.calculatePremium(
312
- productNftId,
313
- policyInfo.riskId,
314
- policyInfo.sumInsuredAmount,
315
- policyInfo.lifetime,
316
- policyInfo.applicationData,
317
- policyInfo.bundleNftId,
318
- policyInfo.referralId
319
- );
320
-
321
- if (premium.premiumAmount != premiumExpectedAmount.toInt()) {
322
- revert ErrorPolicyServicePremiumMismatch(
323
- policyNftId,
324
- premiumExpectedAmount,
325
- AmountLib.toAmount(premium.premiumAmount));
432
+ // update the counters
433
+ _processSale(
434
+ instanceReader,
435
+ instance.getInstanceStore(),
436
+ productNftId,
437
+ applicationInfo.bundleNftId,
438
+ applicationInfo.referralId,
439
+ premium);
440
+ }
441
+
442
+ function _activate(
443
+ NftId policyNftId,
444
+ IPolicy.PolicyInfo memory policyInfo,
445
+ Timestamp activateAt
446
+ )
447
+ internal
448
+ virtual
449
+ view
450
+ returns (IPolicy.PolicyInfo memory)
451
+ {
452
+ // fail if policy has already been activated and activateAt is different
453
+ if(! policyInfo.activatedAt.eqz() && activateAt != policyInfo.activatedAt) {
454
+ revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
326
455
  }
327
456
 
328
- address policyOwner = getRegistry().ownerOf(policyNftId);
329
- ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
330
- TokenHandler tokenHandler = productSetupInfo.tokenHandler;
331
- if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
332
- revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
457
+ // ignore if policy has already been activated and activateAt is the same
458
+ if (policyInfo.activatedAt == activateAt) {
459
+ return policyInfo;
333
460
  }
334
461
 
335
- Amount productFeeAmountToTransfer = AmountLib.toAmount(premium.productFeeFixAmount + premium.productFeeVarAmount);
336
- Amount distributionFeeAmountToTransfer = AmountLib.toAmount(premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount);
337
- uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
338
- uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
339
- Amount poolAmountToTransfer = AmountLib.toAmount(premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer);
462
+ policyInfo.activatedAt = activateAt;
463
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
340
464
 
341
- netPremiumAmount = AmountLib.toAmount(premium.netPremiumAmount);
465
+ return policyInfo;
466
+ }
342
467
 
343
- // move product fee to product wallet
344
- {
345
- address productWallet = productSetupInfo.wallet;
346
- tokenHandler.transfer(policyOwner, productWallet, productFeeAmountToTransfer);
468
+ /// @dev update counters by calling the involved services
469
+ function _processSale(
470
+ InstanceReader instanceReader,
471
+ InstanceStore instanceStore,
472
+ NftId productNftId,
473
+ NftId bundleNftId,
474
+ ReferralId referralId,
475
+ IPolicy.PremiumInfo memory premium
476
+ )
477
+ internal
478
+ virtual
479
+ {
480
+ (NftId distributionNftId, , , ) = _getDistributionNftAndWallets(
481
+ instanceReader,
482
+ productNftId);
483
+
484
+ // update product fees, distribution and pool fees
485
+ _componentService.increaseProductFees(
486
+ instanceStore,
487
+ productNftId,
488
+ premium.productFeeVarAmount + premium.productFeeFixAmount);
489
+
490
+ // update distribution fees and distributor commission and pool fees
491
+ if (!distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
492
+ _distributionService.processSale(
493
+ distributionNftId,
494
+ referralId,
495
+ premium);
347
496
  }
348
497
 
349
- // move distribution fee to distribution wallet
350
- {
351
- ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
352
- address distributionWallet = distributionSetupInfo.wallet;
353
- tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
354
- _distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
498
+ // update pool and bundle fees
499
+ _poolService.processSale(
500
+ bundleNftId,
501
+ premium);
502
+ }
503
+
504
+
505
+ /// @dev transfer the premium to the wallets the premium is distributed to
506
+ function _transferFunds(
507
+ InstanceReader instanceReader,
508
+ NftId policyNftId,
509
+ NftId productNftId,
510
+ IPolicy.PremiumInfo memory premium
511
+ )
512
+ internal
513
+ virtual
514
+ {
515
+ TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
516
+ address policyHolder = getRegistry().ownerOf(policyNftId);
517
+
518
+ (
519
+ ,
520
+ address distributionWallet,
521
+ address poolWallet,
522
+ address productWallet
523
+ ) = _getDistributionNftAndWallets(
524
+ instanceReader,
525
+ productNftId);
526
+
527
+ tokenHandler.collectTokensToThreeRecipients(
528
+ policyHolder,
529
+ productWallet,
530
+ premium.productFeeAmount,
531
+ distributionWallet,
532
+ premium.distributionFeeAndCommissionAmount,
533
+ poolWallet,
534
+ premium.poolPremiumAndFeeAmount);
535
+ }
536
+
537
+
538
+ /// @dev checks that policy has been collateralized and has been activated.
539
+ /// does not check if policy has been expired or closed.
540
+ function _policyHasBeenActivated(
541
+ StateId policyState,
542
+ IPolicy.PolicyInfo memory policyInfo
543
+ )
544
+ internal
545
+ view
546
+ returns (bool)
547
+ {
548
+ if (policyState != COLLATERALIZED()) { return false; }
549
+ if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) { return false; }
550
+ return true;
551
+ }
552
+
553
+
554
+ /// @dev checks the balance and allowance of the policy holder
555
+ function _checkPremiumBalanceAndAllowance(
556
+ IERC20Metadata token,
557
+ address tokenHandlerAddress,
558
+ address policyHolder,
559
+ Amount premiumAmount
560
+ )
561
+ internal
562
+ virtual
563
+ view
564
+ {
565
+ uint256 premium = premiumAmount.toInt();
566
+ uint256 balance = token.balanceOf(policyHolder);
567
+ uint256 allowance = token.allowance(policyHolder, tokenHandlerAddress);
568
+
569
+ if (balance < premium) {
570
+ revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premium, balance);
355
571
  }
356
-
357
- // move netpremium, bundleFee and poolFee to pool wallet
358
- {
359
- address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
360
- tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
361
- _poolService.processSale(policyInfo.bundleNftId, premium, poolAmountToTransfer);
572
+
573
+ if (allowance < premium) {
574
+ revert ErrorPolicyServiceAllowanceInsufficient(policyHolder, tokenHandlerAddress, premium, allowance);
362
575
  }
576
+ }
363
577
 
364
- // validate total amount transferred
365
- {
366
- Amount totalTransferred = distributionFeeAmountToTransfer + poolAmountToTransfer + productFeeAmountToTransfer;
367
578
 
368
- if (premium.premiumAmount != totalTransferred.toInt()) {
369
- revert ErrorPolicyServiceTransferredPremiumMismatch(
370
- policyNftId,
371
- AmountLib.toAmount(premium.premiumAmount),
372
- totalTransferred);
373
- }
579
+ function _policyHolderPolicyActivated(
580
+ NftId policyNftId,
581
+ Timestamp activateAt
582
+ )
583
+ internal
584
+ virtual
585
+ {
586
+ // immediately return if policy is not activated
587
+ if (activateAt.eqz()) {
588
+ return;
589
+ }
590
+
591
+ // get policy holder address
592
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
593
+
594
+ // execute callback if policy holder implements IPolicyHolder
595
+ if (address(policyHolder) != address(0)) {
596
+ policyHolder.policyActivated(policyNftId, activateAt);
597
+ }
598
+ }
599
+
600
+
601
+ function _policyHolderPolicyExpired(
602
+ NftId policyNftId,
603
+ Timestamp expiredAt
604
+ )
605
+ internal
606
+ virtual
607
+ {
608
+ // immediately return if policy is not activated
609
+ if (expiredAt.eqz()) {
610
+ return;
374
611
  }
375
612
 
376
- // TODO: add logging
613
+ // get policy holder address
614
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
615
+
616
+ // execute callback if policy holder implements IPolicyHolder
617
+ if (address(policyHolder) != address(0)) {
618
+ policyHolder.policyExpired(policyNftId, expiredAt);
619
+ }
620
+ }
621
+
622
+
623
+ function _getPolicyHolder(NftId policyNftId)
624
+ internal
625
+ view
626
+ returns (IPolicyHolder policyHolder)
627
+ {
628
+ address policyHolderAddress = getRegistry().ownerOf(policyNftId);
629
+ policyHolder = IPolicyHolder(policyHolderAddress);
630
+
631
+ if (!ContractLib.isPolicyHolder(policyHolderAddress)) {
632
+ policyHolder = IPolicyHolder(address(0));
633
+ }
634
+ }
635
+
636
+
637
+ function _getTokenHandler(
638
+ InstanceReader instanceReader,
639
+ NftId productNftId
640
+ )
641
+ internal
642
+ virtual
643
+ view
644
+ returns (
645
+ TokenHandler tokenHandler
646
+ )
647
+ {
648
+ tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
649
+ }
650
+
651
+
652
+ function _getDistributionNftAndWallets(
653
+ InstanceReader instanceReader,
654
+ NftId productNftId
655
+ )
656
+ internal
657
+ virtual
658
+ view returns (
659
+ NftId distributionNftId,
660
+ address distributionWallet,
661
+ address poolWallet,
662
+ address productWallet
663
+ )
664
+ {
665
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
666
+ distributionNftId = productInfo.distributionNftId;
667
+ distributionWallet = instanceReader.getComponentInfo(distributionNftId).wallet;
668
+ poolWallet = instanceReader.getComponentInfo(productInfo.poolNftId).wallet;
669
+ productWallet = instanceReader.getComponentInfo(productNftId).wallet;
670
+ }
671
+
672
+
673
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
674
+ IRegistry.ObjectInfo memory productInfo;
675
+ (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
676
+ product = Product(productInfo.objectAddress);
677
+ }
678
+
679
+
680
+ function _getDomain() internal pure override returns(ObjectType) {
681
+ return POLICY();
377
682
  }
378
683
  }