@etherisc/gif-next 0.0.2-8bdd2eb-413 → 0.0.2-8c1d8cd-727

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