@etherisc/gif-next 0.0.2-a3c2eef-755 → 0.0.2-a4051e9-983

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