@etherisc/gif-next 0.0.2-c778291-689 → 0.0.2-c7ade86-552

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