@etherisc/gif-next 0.0.2-e200f36-952 → 0.0.2-e25d641-064

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