@etherisc/gif-next 0.0.2-fbe6493-116 → 0.0.2-fc41a4e-906

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