@etherisc/gif-next 0.0.2-ff1bf36-818 → 0.0.2-ff3a8a0-504

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